From 4f78b37c61b1d94ea43ae76d5589ab39b4c71f9b Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Thu, 2 Apr 2020 18:34:03 +0200 Subject: [PATCH 001/168] Down- and upstream padding a la RFC7830 & RFC8467 --- daemon/worker.c | 1 + doc/example.conf.in | 12 + doc/unbound.conf.5.in | 20 + libunbound/libworker.c | 1 + services/authzone.c | 2 + services/outside_network.c | 17 +- services/outside_network.h | 2 + testcode/fake_event.c | 1 + util/config_file.c | 12 + util/config_file.h | 11 + util/configlexer.c | 4408 ++++++------- util/configlexer.lex | 4 + util/configparser.c | 11727 +++++++++++++++-------------------- util/configparser.h | 935 +-- util/configparser.y | 40 + util/data/msgencode.c | 46 +- util/data/msgparse.c | 2 + util/data/msgparse.h | 2 + util/edns.c | 10 + validator/autotrust.c | 1 + 20 files changed, 7866 insertions(+), 9388 deletions(-) diff --git a/daemon/worker.c b/daemon/worker.c index 201e77336..9f8db159f 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1286,6 +1286,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error, edns.udp_size = EDNS_ADVERTISED_SIZE; edns.bits &= EDNS_DO; edns.opt_list = NULL; + edns.padding_block_size = 0; verbose(VERB_ALGO, "query with bad edns version."); log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); error_encode(c->buffer, EDNS_RCODE_BADVERS&0xf, &qinfo, diff --git a/doc/example.conf.in b/doc/example.conf.in index 091948e2d..7374a564a 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -746,6 +746,12 @@ server: # cipher setting for TLSv1.3 # tls-ciphersuites: "TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_8_SHA256:TLS_AES_128_CCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256" + # Pad responses to padded queries received over TLS + # pad-responses: yes + + # Padded responses will be padded to the closest multiple of this size. + # pad-responses-block-size: 468 + # Add the secret file for TLS Session Ticket. # Secret file must be 80 bytes of random data. # First key use to encrypt and decrypt TLS session tickets. @@ -764,6 +770,12 @@ server: # Add system certs to the cert bundle, from the Windows Cert Store # tls-win-cert: no + # Pad queries over TLS upstreams + # pad-queries: no + + # Padded queries will be padded to the closest multiple of this size. + # pad-queries-block-size: 128 + # Also serve tls on these port numbers (eg. 443, ...), by listing # tls-additional-port: portno for each of the port numbers. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index cd219c79a..01fd0bd7f 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -546,6 +546,26 @@ and that is the default. Set the list of ciphersuites to allow when serving TLS. This is for newer TLS 1.3 connections. Use "" for defaults, and that is the default. .TP +.B pad\-responses: \fI +If enabled, TLS serviced queries that contained an EDNS Padding option will +cause responses padded to the closest multiple of the size specified in +\fBpad\-responses\-block\-size\fR. +Default is yes. +.TP +.B pad\-responses\-block\-size: \fI +The block size with which to pad responses serviced over TLS. Only responses +to padded queries will be padded. +Default is 468. +.TP +.B pad\-queries: \fI +If enabled, all queries sent over TLS upstreams will be padded to the closest +multiple of the size specified in \fBpad\-queries\-block\-size\fR. +Default is no. +.TP +.B pad\-queries\-block\-size: \fI +The block size with which to pad queries sent over TLS upstreams. +Default is 128. +.TP .B use\-systemd: \fI Enable or disable systemd socket activation. Default is no. diff --git a/libunbound/libworker.c b/libunbound/libworker.c index 24233f1d0..be32c3ae8 100644 --- a/libunbound/libworker.c +++ b/libunbound/libworker.c @@ -574,6 +574,7 @@ setup_qinfo_edns(struct libworker* w, struct ctx_query* q, edns->edns_version = 0; edns->bits = EDNS_DO; edns->opt_list = NULL; + edns->padding_block_size = 0; if(sldns_buffer_capacity(w->back->udp_buff) < 65535) edns->udp_size = (uint16_t)sldns_buffer_capacity( w->back->udp_buff); diff --git a/services/authzone.c b/services/authzone.c index 70fe27a5e..be02610e8 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -5091,6 +5091,7 @@ xfr_transfer_lookup_host(struct auth_xfer* xfr, struct module_env* env) edns.edns_version = 0; edns.bits = EDNS_DO; edns.opt_list = NULL; + edns.padding_block_size = 0; if(sldns_buffer_capacity(buf) < 65535) edns.udp_size = (uint16_t)sldns_buffer_capacity(buf); else edns.udp_size = 65535; @@ -6278,6 +6279,7 @@ xfr_probe_lookup_host(struct auth_xfer* xfr, struct module_env* env) edns.edns_version = 0; edns.bits = EDNS_DO; edns.opt_list = NULL; + edns.padding_block_size = 0; if(sldns_buffer_capacity(buf) < 65535) edns.udp_size = (uint16_t)sldns_buffer_capacity(buf); else edns.udp_size = 65535; diff --git a/services/outside_network.c b/services/outside_network.c index 978e98b0e..ec380c86d 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -1415,7 +1415,8 @@ static struct serviced_query* serviced_create(struct outside_network* outnet, sldns_buffer* buff, int dnssec, int want_dnssec, int nocaps, int tcp_upstream, int ssl_upstream, char* tls_auth_name, struct sockaddr_storage* addr, socklen_t addrlen, - uint8_t* zone, size_t zonelen, int qtype, struct edns_option* opt_list) + uint8_t* zone, size_t zonelen, int qtype, struct edns_option* opt_list, + size_t pad_queries_block_size) { struct serviced_query* sq = (struct serviced_query*)malloc(sizeof(*sq)); #ifdef UNBOUND_DEBUG @@ -1473,6 +1474,7 @@ serviced_create(struct outside_network* outnet, sldns_buffer* buff, int dnssec, sq->status = serviced_initial; sq->retry = 0; sq->to_be_deleted = 0; + sq->padding_block_size = pad_queries_block_size; #ifdef UNBOUND_DEBUG ins = #else @@ -1591,6 +1593,7 @@ serviced_encode(struct serviced_query* sq, sldns_buffer* buff, int with_edns) if(with_edns) { /* add edns section */ struct edns_data edns; + struct edns_option padding_option; edns.edns_present = 1; edns.ext_rcode = 0; edns.edns_version = EDNS_ADVERTISED_VERSION; @@ -1613,6 +1616,14 @@ serviced_encode(struct serviced_query* sq, sldns_buffer* buff, int with_edns) edns.bits = EDNS_DO; if(sq->dnssec & BIT_CD) LDNS_CD_SET(sldns_buffer_begin(buff)); + if (sq->ssl_upstream && sq->padding_block_size) { + padding_option.opt_code = LDNS_EDNS_PADDING; + padding_option.opt_len = 0; + padding_option.opt_data = NULL; + padding_option.next = edns.opt_list; + edns.opt_list = &padding_option; + edns.padding_block_size = sq->padding_block_size; + } attach_edns_record(buff, &edns); } } @@ -2125,7 +2136,9 @@ outnet_serviced_query(struct outside_network* outnet, sq = serviced_create(outnet, buff, dnssec, want_dnssec, nocaps, tcp_upstream, ssl_upstream, tls_auth_name, addr, addrlen, zone, zonelen, (int)qinfo->qtype, - qstate->edns_opts_back_out); + qstate->edns_opts_back_out, + ( ssl_upstream && env->cfg->pad_queries + ? env->cfg->pad_queries_block_size : 0)); if(!sq) { free(cb); return NULL; diff --git a/services/outside_network.h b/services/outside_network.h index 3fc5dde45..eeb77bb92 100644 --- a/services/outside_network.h +++ b/services/outside_network.h @@ -390,6 +390,8 @@ struct serviced_query { struct service_callback* cblist; /** the UDP or TCP query that is pending, see status which */ void* pending; + /** block size with which to pad encrypted queries (default: 128) */ + size_t padding_block_size; }; /** diff --git a/testcode/fake_event.c b/testcode/fake_event.c index c69fb9bfd..209257921 100644 --- a/testcode/fake_event.c +++ b/testcode/fake_event.c @@ -1222,6 +1222,7 @@ struct serviced_query* outnet_serviced_query(struct outside_network* outnet, edns.opt_list = qstate->edns_opts_back_out; if(dnssec) edns.bits = EDNS_DO; + edns.padding_block_size = 0; attach_edns_record(pend->buffer, &edns); } memcpy(&pend->addr, addr, addrlen); diff --git a/util/config_file.c b/util/config_file.c index 767d76b29..bd9fd278d 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -322,6 +322,10 @@ config_create(void) cfg->dnscrypt_shared_secret_cache_slabs = 4; cfg->dnscrypt_nonce_cache_size = 4*1024*1024; cfg->dnscrypt_nonce_cache_slabs = 4; + cfg->pad_responses = 1; + cfg->pad_responses_block_size = 468; /* from RFC8467 */ + cfg->pad_queries = 0; + cfg->pad_queries_block_size = 128; /* from RFC8467 */ #ifdef USE_IPSECMOD cfg->ipsecmod_enabled = 1; cfg->ipsecmod_ignore_bogus = 0; @@ -693,6 +697,10 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_NUMBER_OR_ZERO("fast-server-permil:", fast_server_permil) else S_YNO("qname-minimisation:", qname_minimisation) else S_YNO("qname-minimisation-strict:", qname_minimisation_strict) + else S_YNO("pad-responses:", pad_responses) + else S_SIZET_NONZERO("pad-responses-block-size:", pad_responses_block_size) + else S_YNO("pad-queries:", pad_queries) + else S_SIZET_NONZERO("pad-queries-block-size:", pad_queries_block_size) #ifdef USE_IPSECMOD else S_YNO("ipsecmod-enabled:", ipsecmod_enabled) else S_YNO("ipsecmod-ignore-bogus:", ipsecmod_ignore_bogus) @@ -1120,6 +1128,10 @@ config_get_option(struct config_file* cfg, const char* opt, else O_LS3(opt, "access-control-tag-action", acl_tag_actions) else O_LS3(opt, "access-control-tag-data", acl_tag_datas) else O_LS2(opt, "access-control-view", acl_view) + else O_YNO(opt, "pad-responses", pad_responses) + else O_DEC(opt, "pad-responses-block-size", pad_responses_block_size) + else O_YNO(opt, "pad-queries", pad_queries) + else O_DEC(opt, "pad-queries-block-size", pad_queries_block_size) #ifdef USE_IPSECMOD else O_YNO(opt, "ipsecmod-enabled", ipsecmod_enabled) else O_YNO(opt, "ipsecmod-ignore-bogus", ipsecmod_ignore_bogus) diff --git a/util/config_file.h b/util/config_file.h index 49c9610ce..454b88734 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -569,6 +569,17 @@ struct config_file { size_t dnscrypt_nonce_cache_size; /** number of slabs for dnscrypt nonces cache */ size_t dnscrypt_nonce_cache_slabs; + + /** EDNS padding according to FC7830 and RFC8467 */ + /** true to enable padding of responses (default: on) */ + int pad_responses; + /** block size with which to pad encrypted responses (default: 468) */ + size_t pad_responses_block_size; + /** true to enable padding of queries (default: off) */ + int pad_queries; + /** block size with which to pad encrypted queries (default: 128) */ + size_t pad_queries_block_size; + /** IPsec module */ #ifdef USE_IPSECMOD /** false to bypass the IPsec module */ diff --git a/util/configlexer.c b/util/configlexer.c index 194569a64..6e185a1ad 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -1,7 +1,7 @@ #include "config.h" #include "util/configyyrename.h" -#line 2 "" +#line 3 "" #define YY_INT_ALIGNED short int @@ -354,8 +354,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 310 -#define YY_END_OF_BUFFER 311 +#define YY_NUM_RULES 314 +#define YY_END_OF_BUFFER 315 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,343 +363,349 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[3049] = +static const flex_int16_t yy_accept[3094] = { 0, - 1, 1, 292, 292, 296, 296, 300, 300, 304, 304, - 1, 1, 311, 308, 1, 290, 290, 309, 2, 309, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 292, 293, 293, 294, 309, 296, 297, 297, - 298, 309, 303, 300, 301, 301, 302, 309, 304, 305, - 305, 306, 309, 307, 291, 2, 295, 309, 307, 308, - 0, 1, 2, 2, 2, 2, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 1, 1, 296, 296, 300, 300, 304, 304, 308, 308, + 1, 1, 315, 312, 1, 294, 294, 313, 2, 313, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 296, 297, 297, 298, 313, 300, 301, 301, + 302, 313, 307, 304, 305, 305, 306, 313, 308, 309, + 309, 310, 313, 311, 295, 2, 299, 313, 311, 312, + 0, 1, 2, 2, 2, 2, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 292, 0, 296, 0, 303, 0, 300, 304, 0, 307, - 0, 2, 2, 307, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 296, 0, 300, 0, 307, 0, 304, 308, 0, + 311, 0, 2, 2, 311, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 307, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 311, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 114, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 122, 308, 308, 308, - 308, 308, 308, 308, 307, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 114, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 122, + 312, 312, 312, 312, 312, 312, 312, 311, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 98, 308, 308, 308, 308, 308, 308, 8, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 115, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 127, 308, 307, 308, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 98, 312, 312, 312, 312, 312, 312, + 312, 312, 8, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 115, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 285, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 312, 127, 312, 311, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 289, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 307, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 56, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 224, 308, 14, 15, 308, 19, - 18, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 311, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 56, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 224, 312, 14, 15, 312, 19, 18, 312, 312, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 121, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 208, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 3, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 121, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 208, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 3, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 307, 308, 308, - 308, 308, 308, 308, 308, 280, 308, 308, 279, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 299, 308, 308, 308, 308, 308, - 308, 308, 55, 308, 308, 308, 308, 308, 308, 308, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 311, 312, 312, 312, + 312, 312, 312, 312, 284, 312, 312, 283, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 303, 312, 312, 312, 312, 312, 312, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 59, - 308, 254, 308, 308, 308, 308, 308, 308, 308, 308, - 286, 287, 308, 308, 308, 308, 308, 60, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 118, 308, 308, 308, 308, 308, 308, - 308, 308, 197, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 21, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 312, 55, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 59, 312, + 254, 312, 312, 312, 312, 312, 312, 312, 312, 290, + 291, 312, 312, 312, 312, 312, 312, 312, 60, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 118, 312, 312, 312, 312, 312, + 312, 312, 312, 197, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 21, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 308, 146, 308, 308, 299, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 96, 308, 308, 308, 308, - 308, 308, 308, 262, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 169, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 145, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 146, 312, 312, 303, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 96, 312, 312, 312, + 312, 312, 312, 312, 262, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 169, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 145, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 95, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 32, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 33, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 57, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 120, 308, 308, 308, 308, 308, 113, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 95, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 32, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 33, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 57, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 120, 312, 312, 312, - 308, 308, 308, 308, 58, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 227, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 170, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 46, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 312, 312, 113, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 58, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 227, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 170, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 46, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 308, 308, 308, 308, 308, 308, 308, 245, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 50, 308, 51, 308, 308, - 308, 308, 308, 99, 308, 100, 308, 308, 308, 308, - 97, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 7, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 217, 308, 308, - 308, 308, 148, 308, 308, 308, 308, 308, 308, 308, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 245, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 50, 312, 51, 312, 312, 312, 312, 312, 99, 312, + 100, 312, 312, 312, 312, 97, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 7, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 308, 308, 308, 308, 308, 308, 308, 308, 228, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 47, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 189, 308, - 188, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 16, 17, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 312, 312, 217, 312, 312, 312, 312, 148, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 228, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 47, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 189, 312, 188, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 308, 61, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 196, 308, 308, 308, 308, 308, 308, - 102, 308, 101, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 180, 308, 308, 308, 308, 308, 308, - 308, 308, 128, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 80, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 312, 312, 312, 312, 16, 17, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 61, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 196, 312, 312, 312, 312, 312, 312, 102, 312, 101, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 180, 312, 312, 312, 312, 312, 312, 312, 312, 128, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 80, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 84, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 54, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 183, 184, 308, 308, - 308, 256, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 6, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 260, 308, 308, 308, 308, - 308, 308, 281, 308, 308, 308, 308, 308, 308, 308, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 84, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 54, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 183, 184, 312, 312, 312, 256, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 6, 312, 312, 312, 312, 312, 312, 275, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 42, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 44, 308, 308, 308, - 308, 308, 308, 308, 308, 176, 308, 308, 308, 123, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 201, 308, 177, 308, 308, 308, 214, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 45, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 125, 107, 308, 108, - 308, 308, 308, 106, 308, 308, 308, 308, 308, 308, + 312, 312, 312, 312, 312, 260, 312, 312, 312, 312, + 312, 312, 285, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 42, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 44, 312, 312, 312, + 312, 312, 312, 312, 312, 176, 312, 312, 312, 123, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 201, 312, 177, 312, 312, 312, 214, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 45, 312, 312, 312, - 308, 308, 143, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 244, 308, 308, 308, 308, 308, - 308, 308, 308, 178, 308, 308, 308, 308, 308, 181, - 308, 187, 308, 308, 308, 308, 308, 213, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 94, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 119, 308, 308, 308, 308, 308, 308, 52, 308, 308, - 308, 26, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 20, 308, 308, 308, 308, 308, 308, 27, 36, + 312, 312, 312, 312, 312, 312, 125, 107, 312, 108, + 312, 312, 312, 106, 312, 312, 312, 312, 312, 312, + 312, 312, 143, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 244, 312, 312, 312, 312, 312, + 312, 312, 312, 178, 312, 312, 312, 312, 312, 181, + 312, 187, 312, 312, 312, 312, 312, 213, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 94, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 119, 312, 312, 312, 312, 312, 312, 52, - 308, 153, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 69, 71, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 264, 308, 308, 308, - 225, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 109, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 142, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 275, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 312, 312, 312, 26, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 20, 312, 312, 312, 312, 312, 312, + 27, 36, 312, 153, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 69, 71, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 264, 312, + 312, 312, 225, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 109, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 142, 312, 312, 312, 312, 312, - 308, 308, 308, 308, 308, 308, 308, 147, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 207, 308, 308, 308, 308, 308, 308, 308, 308, - 284, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 164, 308, 308, 308, 308, 308, 308, 308, - 308, 103, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 159, 308, 171, 308, 308, 308, 308, 308, 131, - 308, 308, 308, 308, 308, 90, 308, 308, 308, 308, - 199, 308, 308, 308, 308, 308, 308, 215, 308, 308, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 279, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 147, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 273, 312, 312, 312, 207, 312, 312, 312, + 312, 312, 312, 312, 312, 288, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 164, 312, 312, + 312, 312, 312, 312, 312, 312, 103, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 159, 312, 171, 312, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 236, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 124, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 163, 308, 308, 308, 308, 308, - 72, 73, 308, 308, 308, 308, 308, 53, 308, 308, - 308, 308, 308, 79, 172, 308, 190, 308, 218, 308, - 308, 182, 257, 308, 308, 308, 308, 308, 65, 308, - 174, 308, 308, 308, 308, 308, 9, 308, 308, 308, - 93, 308, 308, 308, 308, 249, 308, 308, 308, 198, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 312, 312, 312, 312, 131, 312, 312, 312, 312, 312, + 90, 312, 312, 312, 312, 199, 312, 312, 312, 312, + 312, 312, 215, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 236, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 124, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 163, + 312, 312, 312, 312, 312, 72, 73, 312, 312, 312, + 312, 312, 53, 312, 312, 312, 312, 312, 79, 172, + 312, 190, 312, 218, 312, 312, 182, 257, 312, 312, + 312, 312, 312, 65, 312, 174, 312, 312, 312, 312, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 162, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 149, 308, 263, 308, 308, 308, 308, 235, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 209, - 308, 308, 308, 308, 255, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 278, + 312, 9, 312, 312, 312, 312, 312, 93, 312, 312, + 312, 312, 249, 312, 312, 312, 198, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 162, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 149, 312, 263, + 312, 312, 312, 312, 235, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 209, 312, 312, 312, - 308, 173, 308, 308, 308, 308, 308, 308, 308, 64, - 66, 308, 308, 308, 308, 308, 308, 308, 92, 308, - 308, 308, 308, 247, 308, 308, 308, 259, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 203, - 34, 28, 30, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 35, 308, 29, 31, 308, 308, 308, 308, - 308, 308, 308, 308, 89, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 205, 202, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 312, 255, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 282, 312, 173, 312, + 312, 312, 312, 312, 312, 312, 64, 66, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 92, 312, 312, + 312, 312, 247, 312, 312, 312, 259, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 203, 34, + 28, 30, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 35, 312, 29, 31, 312, 312, 312, 312, 312, + 312, 312, 312, 89, 312, 312, 312, 312, 312, 312, - 308, 63, 308, 308, 126, 308, 110, 308, 308, 308, - 308, 308, 308, 308, 308, 144, 13, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 273, 308, 276, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 12, - 308, 308, 22, 308, 308, 308, 253, 308, 308, 308, - 261, 308, 308, 308, 67, 308, 211, 308, 308, 308, - 308, 204, 308, 308, 62, 308, 308, 308, 308, 23, - 308, 43, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 158, 157, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 206, 200, 308, 216, 308, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 205, 202, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 63, 312, 312, 126, 312, 110, 312, 312, 312, 312, + 312, 312, 312, 312, 144, 13, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 277, 312, 280, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 12, 312, + 312, 22, 312, 312, 312, 312, 312, 253, 312, 312, + 312, 261, 312, 312, 312, 67, 312, 211, 312, 312, + 312, 312, 204, 312, 312, 62, 312, 312, 312, 312, - 308, 265, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 74, - 308, 308, 308, 248, 308, 308, 308, 308, 186, 308, - 308, 308, 308, 210, 308, 308, 308, 308, 308, 308, - 308, 308, 282, 283, 155, 308, 308, 68, 308, 308, - 308, 308, 165, 308, 308, 104, 105, 308, 308, 308, - 308, 150, 308, 152, 308, 191, 308, 308, 308, 308, - 156, 308, 308, 219, 308, 308, 308, 308, 308, 308, - 308, 133, 308, 308, 308, 308, 308, 308, 308, 308, + 23, 312, 43, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 158, 157, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 206, 200, 312, 216, + 312, 312, 265, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 74, 312, 312, 312, 248, 312, 312, 312, 312, 186, + 312, 312, 312, 312, 210, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 286, 287, 155, 312, 312, + 68, 312, 312, 312, 312, 165, 312, 312, 104, 105, - 308, 308, 308, 226, 308, 308, 308, 308, 308, 308, - 308, 24, 308, 258, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 192, 308, 308, 246, 308, - 277, 308, 185, 308, 308, 308, 308, 48, 308, 308, - 308, 308, 4, 308, 308, 308, 117, 132, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 222, 37, 38, 308, - 308, 308, 308, 308, 308, 308, 266, 308, 308, 308, - 308, 308, 308, 234, 308, 308, 308, 308, 308, 308, - 308, 195, 308, 308, 308, 308, 308, 308, 308, 308, + 312, 312, 312, 312, 150, 312, 152, 312, 191, 312, + 312, 312, 312, 156, 312, 312, 219, 312, 312, 312, + 312, 312, 312, 312, 133, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 226, 312, 312, 312, + 312, 312, 312, 312, 24, 312, 258, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 192, 312, + 312, 246, 312, 281, 312, 185, 312, 312, 312, 312, + 48, 312, 312, 312, 312, 312, 312, 4, 312, 312, + 312, 117, 132, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 308, 77, 308, 49, 252, 308, 223, 308, 308, 308, - 308, 11, 308, 308, 308, 308, 308, 116, 308, 308, - 308, 308, 193, 81, 308, 40, 308, 308, 308, 308, - 308, 308, 308, 308, 161, 308, 308, 308, 308, 308, - 135, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 233, 308, 308, 308, 308, 129, 308, 308, 111, 112, - 308, 308, 308, 83, 87, 82, 308, 75, 308, 308, - 308, 308, 308, 10, 308, 308, 308, 250, 308, 308, - 308, 308, 289, 39, 308, 308, 308, 308, 308, 160, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 312, 222, 37, 38, 312, 312, 312, 312, 312, 312, + 312, 266, 312, 312, 312, 312, 312, 312, 234, 312, + 312, 312, 312, 312, 312, 312, 195, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 77, 312, 49, 252, + 312, 223, 312, 312, 312, 312, 11, 312, 312, 312, + 312, 312, 312, 312, 116, 312, 312, 312, 312, 193, + 81, 312, 40, 312, 312, 312, 312, 312, 312, 312, + 312, 161, 312, 312, 312, 312, 312, 135, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 233, 312, 312, + 312, 312, 129, 312, 312, 111, 112, 312, 312, 312, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 88, 86, 308, 76, 274, 308, 308, 308, - 308, 308, 308, 308, 179, 308, 308, 308, 308, 308, - 194, 308, 308, 308, 308, 308, 308, 308, 308, 151, - 70, 308, 308, 308, 308, 308, 267, 308, 308, 308, - 308, 308, 308, 308, 230, 308, 308, 229, 130, 308, - 85, 136, 137, 140, 141, 138, 139, 78, 308, 251, - 308, 308, 308, 308, 154, 308, 308, 308, 308, 308, - 221, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 167, 166, + 83, 87, 82, 312, 75, 312, 312, 312, 312, 312, + 10, 312, 312, 312, 312, 312, 250, 312, 312, 312, + 312, 293, 39, 312, 312, 312, 312, 312, 160, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 88, 86, 312, 76, 278, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 179, 312, 312, 312, 312, + 312, 194, 312, 312, 312, 312, 312, 312, 312, 312, + 151, 70, 312, 312, 312, 312, 312, 267, 312, 312, + 312, 312, 312, 312, 312, 230, 312, 312, 229, 130, - 41, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 91, 308, 220, 308, 243, - 271, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 5, 308, 308, 212, 308, 308, 272, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 231, - 25, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 232, 308, 308, 308, 134, 308, 308, - 308, 308, 308, 308, 308, 308, 168, 308, 175, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 268, 308, + 312, 85, 136, 137, 140, 141, 138, 139, 78, 276, + 312, 312, 251, 312, 312, 312, 312, 154, 312, 312, + 312, 312, 312, 221, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 167, 166, 41, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 274, 312, 312, 312, 312, + 91, 312, 220, 312, 243, 271, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 5, 312, + 312, 212, 312, 312, 272, 312, 312, 312, 312, 312, + + 312, 312, 312, 312, 231, 25, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 232, 312, + 312, 312, 134, 312, 312, 312, 312, 312, 312, 312, + 312, 168, 312, 175, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 268, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 292, 312, 312, 239, 312, 312, 312, 312, 312, + 269, 312, 312, 312, 312, 312, 312, 270, 312, 312, + 312, 237, 312, 240, 241, 312, 312, 312, 312, 312, + 238, 242, 0 - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 288, 308, 308, 239, - 308, 308, 308, 308, 308, 269, 308, 308, 308, 308, - 308, 308, 270, 308, 308, 308, 237, 308, 240, 241, - 308, 308, 308, 308, 308, 238, 242, 0 } ; static const YY_CHAR yy_ec[256] = @@ -742,689 +748,699 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[3063] = +static const flex_int16_t yy_base[3108] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 2327, 1999, 81, 5940, 5940, 5940, 96, 52, + 90, 112, 1946, 1584, 81, 6029, 6029, 6029, 96, 52, 106, 63, 107, 111, 70, 128, 130, 133, 57, 88, - 76, 135, 141, 117, 148, 145, 160, 164, 185, 177, - 189, 152, 1735, 5940, 5940, 5940, 107, 1527, 5940, 5940, - 5940, 165, 1302, 1259, 5940, 5940, 5940, 211, 1131, 5940, - 5940, 5940, 180, 948, 5940, 217, 5940, 221, 168, 767, - 225, 231, 0, 237, 0, 0, 226, 231, 85, 180, - 114, 238, 239, 156, 234, 206, 240, 232, 200, 132, - 253, 244, 245, 248, 256, 257, 264, 271, 249, 277, + 76, 135, 141, 117, 163, 134, 151, 165, 174, 179, + 190, 145, 1331, 6029, 6029, 6029, 107, 1281, 6029, 6029, + 6029, 165, 1175, 1158, 6029, 6029, 6029, 212, 1094, 6029, + 6029, 6029, 216, 816, 6029, 220, 6029, 224, 157, 782, + 228, 234, 0, 240, 0, 0, 201, 225, 85, 182, + 176, 232, 234, 114, 236, 209, 241, 224, 238, 244, + 252, 248, 249, 256, 254, 258, 257, 259, 266, 271, - 279, 262, 282, 285, 270, 272, 291, 293, 290, 299, - 301, 284, 302, 305, 310, 312, 311, 315, 313, 319, - 322, 318, 324, 327, 326, 193, 221, 334, 329, 340, - 342, 325, 348, 349, 350, 353, 354, 357, 363, 359, - 723, 379, 595, 381, 503, 388, 450, 365, 392, 278, - 396, 400, 0, 377, 392, 401, 367, 394, 396, 402, - 261, 398, 399, 403, 405, 406, 418, 407, 416, 422, - 426, 430, 427, 434, 424, 437, 439, 440, 429, 451, - 453, 454, 446, 455, 456, 458, 461, 462, 477, 464, - 465, 463, 486, 472, 488, 490, 487, 498, 499, 475, + 279, 251, 278, 281, 282, 285, 289, 287, 292, 295, + 296, 297, 307, 300, 308, 310, 314, 313, 315, 320, + 322, 321, 161, 324, 331, 325, 159, 327, 329, 337, + 332, 342, 346, 352, 351, 354, 358, 357, 359, 360, + 356, 729, 381, 686, 383, 599, 390, 452, 286, 394, + 189, 398, 402, 0, 379, 394, 403, 387, 396, 398, + 364, 400, 401, 404, 409, 407, 415, 416, 418, 421, + 422, 431, 430, 432, 434, 429, 437, 439, 445, 438, + 455, 447, 454, 456, 460, 461, 462, 463, 464, 481, + 466, 472, 467, 490, 488, 497, 500, 486, 502, 504, - 506, 504, 511, 516, 512, 489, 514, 501, 517, 491, - 518, 515, 522, 524, 525, 529, 530, 537, 534, 535, - 538, 532, 547, 543, 552, 544, 551, 555, 548, 558, - 566, 569, 549, 576, 559, 572, 573, 578, 581, 585, - 582, 580, 583, 590, 587, 589, 591, 593, 592, 600, - 610, 607, 608, 620, 609, 605, 616, 617, 618, 596, - 628, 627, 623, 632, 638, 629, 636, 639, 641, 643, - 642, 644, 646, 656, 649, 659, 652, 666, 661, 667, - 664, 676, 651, 662, 672, 673, 674, 678, 677, 679, - 684, 687, 688, 690, 691, 685, 698, 696, 700, 713, + 474, 511, 507, 514, 515, 510, 522, 518, 519, 520, + 521, 523, 524, 526, 528, 529, 534, 477, 530, 542, + 543, 535, 547, 537, 552, 544, 560, 555, 556, 564, + 557, 558, 573, 574, 569, 577, 570, 465, 578, 581, + 589, 590, 585, 572, 586, 593, 592, 594, 596, 598, + 597, 606, 614, 610, 612, 619, 609, 618, 621, 622, + 623, 601, 633, 625, 635, 629, 641, 634, 642, 644, + 640, 646, 647, 649, 648, 660, 651, 664, 666, 669, + 655, 670, 662, 678, 673, 674, 675, 677, 679, 681, + 682, 683, 685, 688, 694, 689, 698, 691, 705, 708, - 701, 702, 704, 714, 715, 716, 724, 737, 727, 738, - 728, 734, 742, 743, 707, 750, 746, 744, 753, 754, - 756, 757, 761, 768, 769, 5940, 760, 773, 771, 774, - 782, 783, 784, 789, 785, 763, 796, 800, 797, 803, - 825, 791, 801, 804, 814, 795, 5940, 815, 807, 849, - 817, 827, 839, 831, 835, 823, 830, 850, 843, 853, - 840, 854, 855, 873, 857, 858, 870, 860, 871, 872, - 885, 881, 883, 884, 886, 894, 889, 891, 892, 901, - 893, 895, 902, 905, 904, 908, 916, 909, 915, 917, - 921, 922, 925, 927, 929, 923, 926, 933, 950, 931, + 697, 719, 712, 702, 710, 722, 713, 717, 714, 732, + 746, 741, 733, 742, 747, 749, 751, 724, 754, 755, + 748, 761, 762, 752, 767, 768, 775, 776, 6029, 770, + 773, 786, 784, 791, 792, 785, 798, 772, 793, 806, + 804, 805, 809, 831, 807, 808, 811, 813, 821, 6029, + 820, 824, 855, 825, 833, 849, 845, 815, 837, 844, + 853, 841, 872, 861, 863, 864, 881, 865, 873, 876, + 877, 879, 880, 897, 889, 882, 886, 894, 905, 900, + 901, 904, 913, 903, 906, 912, 907, 914, 915, 920, + 926, 918, 929, 930, 931, 933, 932, 936, 935, 938, - 945, 953, 943, 954, 941, 955, 958, 963, 960, 964, - 966, 974, 969, 970, 972, 975, 976, 978, 982, 983, - 984, 986, 988, 992, 989, 999, 990, 997, 1004, 1006, - 5940, 1007, 1009, 1011, 1012, 1013, 1010, 5940, 1014, 1015, - 1017, 1026, 1016, 1029, 1036, 1024, 1037, 1039, 1040, 1043, - 1050, 1027, 1046, 1057, 1052, 1055, 1056, 1053, 1059, 1062, - 1061, 1064, 1065, 1068, 1070, 1088, 5940, 1071, 1077, 1080, - 1079, 1085, 1082, 1090, 1097, 1100, 1093, 1106, 1116, 1103, - 1117, 1111, 1113, 1072, 1118, 1122, 1124, 1125, 1126, 1127, - 1128, 1130, 1129, 1132, 1140, 1136, 5940, 1144, 1145, 1154, + 948, 956, 943, 953, 951, 958, 960, 962, 966, 963, + 969, 970, 971, 972, 980, 977, 978, 979, 983, 985, + 986, 989, 991, 992, 994, 996, 998, 997, 1003, 1007, + 1005, 1013, 846, 6029, 1015, 1008, 1017, 1018, 1019, 1023, + 1021, 1020, 6029, 1024, 1030, 1022, 1037, 1034, 1039, 1046, + 1035, 1045, 1052, 1047, 1048, 1060, 1038, 1059, 1070, 1057, + 1067, 1065, 1068, 1069, 1074, 1066, 1075, 1076, 1077, 1078, + 1097, 6029, 1082, 1084, 1086, 1085, 1093, 1106, 1115, 1107, + 1095, 1112, 1118, 1114, 1121, 1126, 1125, 1130, 1131, 1133, + 1134, 1136, 1140, 1138, 1141, 1139, 1142, 1145, 1143, 1144, - 1147, 1152, 1156, 1157, 1158, 1160, 1161, 1163, 1162, 1166, - 1169, 1183, 1170, 1185, 1172, 1186, 1180, 1181, 1187, 1188, - 1190, 1195, 1203, 1200, 1205, 1208, 1216, 1215, 1218, 1225, - 1201, 1220, 1193, 1212, 1221, 1224, 1228, 1226, 1232, 1230, - 1241, 1236, 1237, 1238, 1239, 1248, 1245, 1244, 1253, 1246, - 1262, 1252, 1257, 1266, 1267, 1254, 1260, 5940, 1280, 1269, - 1276, 1277, 1282, 1283, 1284, 1285, 1288, 813, 1291, 1290, - 1292, 1294, 1296, 1297, 1298, 1299, 1307, 1315, 1311, 1310, - 1323, 1322, 1324, 1300, 1326, 1333, 1330, 1334, 1336, 1332, - 1344, 1341, 1342, 1331, 1352, 1345, 1347, 1348, 1349, 1357, + 1149, 6029, 1156, 1163, 1170, 1157, 1166, 1168, 1171, 1173, + 1083, 1172, 1177, 1178, 1174, 1184, 1192, 1179, 1195, 1193, + 1194, 1196, 1198, 1199, 1200, 1202, 1201, 1215, 1206, 1208, + 1223, 1226, 1225, 1228, 1235, 1212, 1231, 1232, 1230, 1236, + 1238, 1240, 1216, 1242, 1243, 1252, 1250, 1248, 1251, 1253, + 1263, 1255, 1258, 1259, 1264, 1268, 1265, 1270, 1274, 1275, + 1276, 1277, 6029, 1284, 1285, 1288, 1289, 1295, 1296, 1297, + 1287, 1298, 1301, 1304, 1305, 1306, 1312, 1309, 1313, 1307, + 1319, 1321, 1320, 1324, 1322, 1337, 1336, 1338, 1327, 1340, + 1341, 1329, 1350, 1342, 1355, 1353, 1352, 1364, 1359, 1360, - 1359, 1360, 1367, 1362, 1365, 1377, 1372, 1368, 1379, 1375, - 1380, 1383, 1384, 1385, 1386, 1387, 1395, 1388, 1390, 1391, - 1396, 1397, 1398, 1400, 1404, 1414, 1409, 1410, 1413, 1416, - 1420, 1418, 1421, 1425, 1426, 1427, 1428, 1429, 1434, 1431, - 1440, 1433, 1448, 1439, 1441, 1449, 1452, 1456, 1457, 1458, - 1465, 1454, 1466, 1467, 1468, 1469, 1471, 1474, 1477, 1481, - 1475, 1484, 1486, 1488, 1487, 1491, 1494, 1497, 1498, 5940, - 1492, 1505, 1500, 1506, 1504, 1509, 1512, 1519, 1514, 1517, - 1515, 1518, 1521, 1544, 5940, 1523, 5940, 5940, 1525, 5940, - 5940, 1526, 1531, 1529, 1528, 1539, 1546, 1548, 1536, 1551, + 1351, 1367, 1362, 1365, 1375, 1366, 1368, 1376, 1379, 1384, + 1377, 1385, 1393, 1394, 1388, 1396, 1391, 1399, 1400, 1402, + 1403, 1404, 1405, 1412, 1407, 1408, 1409, 1414, 1415, 1416, + 1419, 1422, 1432, 1427, 1428, 1430, 1434, 1438, 1436, 1439, + 1443, 1444, 1445, 1446, 1447, 1452, 1450, 1457, 1451, 1466, + 1458, 1459, 1467, 1470, 1476, 1472, 1482, 1483, 1473, 1485, + 1475, 1486, 1489, 1490, 1494, 1493, 1497, 1495, 1503, 1504, + 1506, 1505, 1508, 1513, 1511, 1515, 6029, 1516, 1523, 1518, + 1521, 1527, 1528, 1529, 1536, 1532, 1534, 1531, 1533, 1537, + 1559, 6029, 1545, 6029, 6029, 1544, 6029, 6029, 1542, 1546, - 1550, 1558, 1571, 1555, 1561, 1562, 1567, 1574, 1569, 1579, - 1584, 1576, 1587, 1593, 1594, 1595, 1602, 1603, 1596, 1599, - 1606, 1604, 1607, 1609, 1611, 1613, 1615, 1619, 1614, 1621, - 1616, 1631, 1622, 1635, 1642, 5940, 1639, 1643, 1646, 1645, - 1653, 1648, 1649, 1652, 1657, 1659, 1654, 1661, 1663, 1623, - 1664, 1666, 1667, 1669, 1678, 1670, 5940, 1671, 1673, 1681, - 1675, 1685, 1687, 1690, 1674, 1691, 1693, 1702, 1694, 1697, - 1698, 1705, 1557, 1707, 5940, 1709, 1716, 1703, 1708, 1719, - 1721, 1722, 1723, 1726, 1720, 1725, 1727, 1732, 1728, 1736, - 1734, 1737, 1733, 1739, 1738, 1751, 1754, 1756, 1757, 1758, + 1550, 1563, 1554, 1569, 1562, 1556, 1572, 1565, 1582, 1587, + 1543, 1575, 1577, 1583, 1590, 1598, 1600, 1601, 1603, 1609, + 1611, 1612, 1614, 1621, 1622, 1580, 1604, 1613, 1625, 1627, + 1626, 1628, 1632, 1630, 1635, 1631, 1638, 1633, 1643, 1648, + 1640, 1657, 6029, 1654, 1658, 1666, 1662, 1669, 1661, 1665, + 1668, 1642, 1673, 1670, 1674, 1675, 1677, 1679, 1682, 1681, + 1686, 1687, 1683, 1694, 1689, 6029, 1690, 1693, 1701, 1695, + 1707, 1709, 1703, 1705, 1711, 1712, 1719, 1715, 1721, 1722, + 1723, 1724, 1726, 6029, 1731, 1728, 1734, 1735, 1738, 1742, + 1743, 1739, 1744, 1745, 1746, 1747, 1749, 1752, 1756, 1757, - 1760, 1761, 1762, 1763, 1764, 1766, 1774, 1770, 1778, 1771, - 1779, 1781, 1788, 1776, 1787, 1789, 1790, 1796, 1804, 1800, - 1801, 1793, 1808, 1805, 1810, 1812, 1813, 1815, 1816, 1817, - 1822, 1820, 1824, 1827, 1826, 5940, 1828, 1829, 5940, 1833, - 1834, 1856, 1835, 1837, 1839, 1847, 1838, 1858, 1849, 1857, - 1868, 1860, 1876, 1866, 1878, 1869, 1881, 1879, 1883, 1885, - 1887, 1889, 1892, 1901, 1906, 1851, 1902, 1910, 1890, 1905, - 1893, 1925, 1907, 1909, 1913, 1916, 1917, 1915, 1840, 1921, - 1922, 1923, 1930, 1932, 5940, 1940, 1943, 1937, 1947, 1954, - 1950, 1938, 5940, 1949, 1952, 1953, 1965, 1962, 1963, 1967, + 1753, 1758, 1760, 1770, 1768, 1773, 1780, 1772, 1775, 1781, + 1783, 1785, 1786, 1787, 1789, 1794, 1790, 1799, 1795, 1802, + 1803, 1807, 1798, 1800, 1813, 1810, 1821, 1825, 1823, 1814, + 1816, 1830, 1827, 1834, 1828, 1835, 1837, 1838, 1839, 1841, + 1844, 1845, 1849, 1848, 6029, 1850, 1855, 6029, 1851, 1852, + 1875, 1856, 1858, 1861, 1860, 1863, 1864, 1870, 1879, 1872, + 1881, 1898, 1887, 1890, 1889, 1900, 1899, 1902, 1903, 1908, + 1909, 1910, 1918, 1919, 1883, 1925, 1927, 1914, 1922, 1924, + 1943, 1926, 1928, 1931, 1934, 1939, 1930, 1947, 1950, 1937, + 1948, 1953, 1954, 6029, 1965, 1968, 1960, 1961, 1972, 1970, - 1964, 1966, 1968, 1973, 1970, 1974, 1975, 1976, 1992, 5940, - 1978, 5940, 1977, 1987, 1989, 1990, 1995, 1996, 1997, 1998, - 5940, 5940, 2000, 2001, 2014, 2012, 2009, 5940, 2016, 2024, - 2025, 2017, 2019, 2021, 2027, 2030, 2031, 2034, 2035, 2042, - 2037, 2039, 2040, 5940, 2047, 2038, 2048, 2051, 2049, 2057, - 2058, 2060, 5940, 2061, 2064, 2068, 2075, 2071, 2073, 2066, - 2076, 2077, 2081, 2083, 2085, 2086, 2087, 2094, 2096, 2092, - 2093, 2101, 2109, 5940, 2095, 2091, 2110, 2107, 2115, 2108, - 2116, 2118, 2119, 2120, 2121, 2124, 2126, 2127, 2134, 2135, - 2130, 2139, 2141, 2131, 2133, 2137, 2152, 2143, 2151, 2153, + 1973, 6029, 1976, 1977, 1978, 1987, 1980, 1982, 1983, 1984, + 1991, 1990, 1995, 1993, 1997, 2003, 1996, 2014, 6029, 1999, + 6029, 1998, 2000, 2011, 2017, 2016, 2018, 2019, 2021, 6029, + 6029, 2022, 2023, 2028, 2041, 2036, 2025, 2037, 6029, 2038, + 2048, 2051, 2043, 2039, 2044, 2049, 2056, 2057, 2065, 2058, + 2066, 2061, 2063, 2070, 6029, 2071, 2062, 2075, 2077, 2073, + 2081, 2085, 2079, 6029, 2087, 2088, 2092, 2100, 2096, 2097, + 2099, 2102, 2107, 2101, 2103, 2109, 2110, 2111, 2118, 2120, + 2116, 2123, 2125, 2132, 6029, 2115, 2127, 2137, 2134, 2136, + 2140, 2141, 2138, 2142, 2143, 2144, 2148, 2151, 2152, 2159, - 2154, 5940, 2155, 2157, 124, 2159, 2162, 2158, 2163, 2166, - 2165, 2167, 2182, 2184, 2180, 2169, 2181, 2183, 2188, 2189, - 2190, 2191, 2192, 2193, 2195, 5940, 2201, 2198, 2203, 2196, - 2207, 2204, 2215, 5940, 2216, 2218, 2226, 2228, 2219, 2206, - 2222, 2227, 2230, 2232, 2236, 2238, 2240, 2242, 5940, 2247, - 2244, 2248, 2250, 2252, 2254, 2256, 2259, 2260, 2262, 2264, - 2263, 2266, 2267, 2268, 2269, 2271, 2277, 2280, 2272, 2282, - 2284, 5940, 2291, 2286, 2288, 2294, 2298, 2297, 2305, 2301, - 2307, 2306, 2310, 2322, 2312, 2308, 2324, 2315, 2323, 2329, - 2332, 2334, 2337, 2343, 2333, 2346, 2348, 2336, 2340, 2350, + 2160, 2157, 2162, 2165, 2158, 2161, 2168, 2173, 2170, 2174, + 2176, 2178, 6029, 2179, 2182, 124, 2185, 2186, 2184, 2187, + 2191, 2190, 2193, 2208, 2210, 2206, 2205, 2209, 2212, 2215, + 2216, 2217, 2218, 2220, 2219, 2222, 6029, 2224, 2225, 2228, + 2230, 2236, 2231, 2233, 6029, 2243, 2235, 2254, 2248, 2250, + 2194, 2256, 2258, 2257, 2260, 2259, 2262, 2261, 2263, 6029, + 2269, 2274, 2280, 2270, 2281, 2273, 2283, 2284, 2287, 2288, + 2289, 2291, 2293, 2296, 2294, 2295, 2297, 2298, 2303, 2305, + 2309, 2310, 6029, 2317, 2312, 2314, 2320, 2323, 2321, 2336, + 2324, 2327, 2331, 2337, 2345, 2334, 2339, 2352, 2355, 2357, - 2349, 2352, 2360, 2355, 2367, 2368, 2365, 2371, 2363, 2384, - 2389, 2380, 5940, 2378, 2388, 2376, 2390, 2398, 2393, 2395, - 2396, 2402, 2401, 2404, 2405, 2412, 2407, 2409, 2413, 2416, - 2414, 2422, 2418, 2424, 2425, 2433, 2426, 2435, 2364, 5940, - 2437, 2438, 2429, 2442, 2445, 2439, 2447, 2452, 2450, 2454, - 2456, 2458, 2460, 2461, 2462, 2463, 2465, 2467, 2466, 5940, - 2470, 2471, 2476, 2478, 2479, 2485, 2488, 2491, 2489, 2495, - 2496, 2497, 2498, 5940, 2505, 2506, 2503, 2507, 2509, 2510, - 2512, 2515, 2516, 5940, 2517, 2519, 2526, 2527, 2522, 5940, - 2530, 2525, 2531, 2532, 2533, 2534, 2540, 2535, 2538, 2543, + 2342, 2365, 2361, 2367, 2369, 2360, 2373, 2375, 2363, 2371, + 2376, 2377, 2379, 2382, 2386, 2393, 2394, 2390, 2398, 2391, + 2401, 2399, 2414, 2419, 2392, 6029, 2408, 2410, 2418, 2420, + 2427, 2422, 2423, 2424, 2430, 2431, 2432, 2433, 2440, 2441, + 2435, 2445, 2448, 2446, 2449, 2437, 2452, 2456, 2463, 2454, + 2465, 2466, 6029, 2467, 2471, 2472, 2473, 2475, 2478, 2480, + 2483, 2481, 2485, 2487, 2489, 2490, 2492, 2493, 2494, 2496, + 2500, 2497, 6029, 2501, 2503, 2507, 2509, 2511, 2516, 2517, + 2523, 2520, 2526, 2527, 2528, 2529, 6029, 2536, 2537, 2534, + 2538, 2540, 2541, 2543, 2546, 2547, 6029, 2548, 2550, 2557, - 2548, 2550, 2546, 2554, 5940, 2556, 2566, 2558, 2562, 2564, - 2567, 2568, 2570, 2574, 2578, 2573, 5940, 2590, 2589, 2586, - 2600, 2577, 2591, 2592, 2598, 2595, 2601, 2602, 5940, 2604, - 2605, 2607, 2608, 2611, 2612, 2614, 2626, 2616, 2619, 2621, - 2624, 2627, 2629, 2631, 2634, 2632, 2640, 2643, 2644, 2646, - 2647, 2649, 2650, 2657, 2660, 2662, 2664, 5940, 2667, 2668, - 2669, 2656, 2659, 2671, 2675, 2676, 2679, 2680, 2684, 2681, - 2683, 2691, 2693, 2694, 2696, 2698, 2700, 2701, 2703, 2704, - 2705, 2706, 2713, 2711, 2709, 2718, 2715, 2720, 2727, 2722, - 2728, 2729, 2730, 2731, 2732, 2736, 2737, 2739, 2740, 2744, + 2558, 2553, 6029, 2561, 2556, 2562, 2563, 2564, 2565, 2571, + 2566, 2569, 2574, 2579, 2581, 2577, 2585, 6029, 2587, 2597, + 2589, 2593, 2595, 2598, 2599, 2601, 2605, 2609, 2604, 6029, + 2621, 2620, 2617, 2631, 2608, 2622, 2623, 2629, 2626, 2632, + 2633, 6029, 2635, 2636, 2638, 2639, 2642, 2643, 2645, 2657, + 2647, 2650, 2652, 2655, 2658, 2660, 2662, 2665, 2663, 2671, + 2674, 2675, 2677, 2678, 2680, 2681, 2688, 2691, 2693, 2695, + 6029, 2698, 2699, 2700, 2687, 2690, 2702, 2706, 2707, 2710, + 2711, 2715, 2712, 2714, 2722, 2724, 2725, 2727, 2729, 2731, + 2732, 2734, 2735, 2736, 2737, 2744, 2742, 2740, 2749, 2746, - 2755, 2756, 2746, 2757, 2758, 2759, 2760, 5940, 2763, 2765, - 2764, 2769, 2774, 2771, 2781, 2777, 2778, 2782, 2786, 2789, - 2783, 2788, 2794, 2801, 2797, 5940, 2798, 5940, 2799, 2800, - 2807, 2810, 2802, 5940, 2812, 5940, 2815, 2824, 2809, 2813, - 5940, 2827, 2817, 2819, 2831, 2821, 2826, 2833, 2834, 2835, - 2840, 2838, 2842, 2843, 2844, 2846, 2848, 2850, 2854, 2859, - 2861, 2851, 2862, 2853, 2867, 2870, 2864, 2872, 5940, 2880, - 2873, 2876, 2881, 2882, 2884, 2885, 2887, 2888, 2893, 2889, - 2894, 2895, 2902, 2905, 2903, 2906, 2917, 5940, 2907, 2919, - 2912, 2914, 5940, 2922, 2916, 2923, 2928, 2925, 2930, 2932, + 2751, 2758, 2753, 2759, 2760, 2761, 2762, 2763, 2767, 2768, + 2770, 2764, 2771, 2774, 2788, 2792, 2789, 2777, 2785, 2793, + 2795, 2797, 6029, 2796, 2800, 2804, 2805, 2807, 2809, 2817, + 2810, 2813, 2818, 2827, 2828, 2819, 2812, 2820, 2835, 2834, + 6029, 2836, 6029, 2822, 2837, 2844, 2847, 2838, 6029, 2849, + 6029, 2850, 2852, 2846, 2855, 6029, 2856, 2857, 2860, 2863, + 2861, 2865, 2866, 2867, 2868, 2873, 2870, 2875, 2878, 2879, + 2881, 2883, 2884, 2887, 2892, 2893, 2894, 2898, 2896, 2900, + 2904, 2905, 2907, 6029, 2910, 2913, 2906, 2915, 2916, 2917, + 2921, 2923, 2919, 2925, 2927, 2932, 2926, 2938, 2943, 2947, - 2933, 2934, 2937, 2938, 2950, 2951, 2941, 2952, 5940, 2954, - 2957, 2942, 2961, 2965, 2969, 2943, 2972, 2966, 2970, 2976, - 2977, 2978, 2979, 2980, 2987, 2988, 2985, 2992, 2984, 2991, - 2994, 2998, 3000, 3001, 3002, 3005, 3006, 3004, 3010, 3014, - 3009, 3011, 3012, 3013, 5940, 3025, 3015, 3027, 3036, 3028, - 3030, 3017, 3033, 3038, 3039, 3042, 3046, 3040, 5940, 3045, - 5940, 3048, 3050, 3062, 3064, 3057, 3052, 3068, 3067, 3059, - 3074, 3075, 3076, 3077, 3078, 3079, 3082, 3083, 3089, 3090, - 3086, 3087, 3091, 3097, 3099, 3100, 3102, 5940, 5940, 3103, - 3105, 3108, 3106, 3110, 3112, 3120, 3118, 3111, 3124, 3125, + 2929, 2950, 6029, 2951, 2953, 2954, 2955, 6029, 2957, 2956, + 2958, 2963, 2960, 2966, 2967, 2968, 2969, 2975, 2972, 2983, + 2985, 2976, 2988, 6029, 2990, 2993, 2977, 2994, 3006, 3003, + 2995, 3004, 3015, 3011, 3010, 3012, 3013, 3014, 3017, 3024, + 3025, 3021, 3028, 3027, 3031, 3038, 3035, 3029, 3033, 3039, + 3041, 3042, 3045, 3048, 3049, 3044, 3046, 3051, 3052, 6029, + 3063, 3054, 3067, 3068, 3060, 3070, 3058, 3071, 3076, 3077, + 3079, 3078, 3080, 6029, 3083, 6029, 3081, 3088, 3094, 3100, + 3095, 3097, 3101, 3109, 3105, 3102, 3111, 3112, 3110, 3114, + 3113, 3119, 3123, 3124, 3126, 3128, 3125, 3131, 3134, 3136, - 3132, 5940, 3133, 3134, 3136, 3137, 3144, 3139, 3141, 3152, - 3148, 3156, 3154, 5940, 3151, 3155, 3165, 3161, 3163, 3168, - 5940, 3167, 5940, 3164, 3170, 3173, 3176, 3177, 3178, 3179, - 3180, 3187, 3188, 3198, 3184, 3195, 3196, 3199, 3200, 3207, - 3202, 3203, 3204, 5940, 3206, 3209, 3212, 3220, 3221, 3223, - 3227, 3210, 5940, 3217, 3231, 3234, 3235, 3237, 3239, 3240, - 3241, 3243, 3245, 3242, 3244, 3252, 3250, 3249, 3259, 3269, - 3260, 3271, 5940, 3272, 3266, 3279, 3281, 3274, 3276, 3282, - 3283, 3284, 3287, 3289, 3288, 3290, 3292, 3294, 3291, 3301, - 3295, 3308, 3297, 3311, 3317, 3318, 3298, 3314, 3321, 3322, + 3137, 3147, 3143, 3139, 6029, 6029, 3140, 3142, 3154, 3156, + 3149, 3157, 3163, 3159, 3161, 3166, 3167, 3175, 6029, 3170, + 3173, 3176, 3177, 3186, 3181, 3190, 3197, 3195, 3202, 3201, + 6029, 3183, 3192, 3210, 3205, 3208, 3215, 6029, 3212, 6029, + 3194, 3214, 3216, 3219, 3221, 3222, 3223, 3225, 3227, 3236, + 3238, 3229, 3231, 3240, 3241, 3243, 3250, 3245, 3246, 3247, + 6029, 3253, 3249, 3255, 3261, 3263, 3270, 3264, 3254, 6029, + 3257, 3279, 3271, 3274, 3276, 3281, 3282, 3284, 3285, 3287, + 3283, 3288, 3298, 3289, 3293, 3294, 3304, 3306, 3313, 6029, + 3305, 3307, 3320, 3318, 3315, 3319, 3322, 3323, 3324, 3326, - 3325, 3324, 3328, 3331, 3335, 3332, 3344, 3345, 3336, 3339, - 3348, 3349, 3356, 3351, 5940, 3361, 3341, 3364, 3362, 3363, - 3368, 3369, 3371, 3372, 3373, 3374, 3381, 3376, 5940, 3383, - 3378, 3388, 3389, 3380, 3403, 3398, 3379, 3401, 3405, 3402, - 3408, 3406, 3410, 3411, 3414, 3415, 5940, 5940, 3417, 3418, - 3420, 5940, 3421, 3419, 3431, 3424, 3427, 3434, 3251, 3433, - 3436, 3437, 3439, 3441, 5940, 3445, 3452, 3444, 3447, 3459, - 3461, 3467, 3451, 3460, 3458, 3463, 3468, 3470, 3471, 3472, - 3474, 3483, 3476, 3479, 3481, 5940, 3484, 3486, 3487, 3491, - 3488, 3495, 5940, 3493, 3499, 3500, 3502, 3514, 3505, 3515, + 3329, 3328, 3330, 3336, 3334, 3332, 3331, 3335, 3345, 3351, + 3352, 3342, 3360, 3338, 3358, 3362, 3361, 3363, 3366, 3368, + 3371, 3373, 3364, 3375, 3385, 3376, 3379, 3388, 3389, 3396, + 3391, 6029, 3398, 3383, 3405, 3395, 3403, 3408, 3409, 3417, + 3402, 3404, 3412, 3419, 3418, 6029, 3428, 3423, 3429, 3425, + 3426, 3439, 3434, 3430, 3435, 3445, 3440, 3446, 3442, 3448, + 3451, 3454, 3449, 6029, 6029, 3458, 3455, 3459, 6029, 3463, + 3460, 3467, 3465, 3471, 3473, 3475, 3474, 3476, 3477, 3479, + 3484, 6029, 3485, 3493, 3486, 3489, 3497, 3499, 6029, 3494, + 3504, 3508, 3509, 3503, 3495, 3510, 3511, 3516, 3517, 3518, - 3517, 3497, 3519, 3520, 3522, 3521, 3523, 3530, 3525, 3529, - 3536, 3537, 3528, 5940, 3542, 3544, 3545, 3547, 3549, 3558, - 3556, 3559, 3554, 3561, 3562, 3569, 5940, 3564, 3567, 3570, - 3568, 3578, 3573, 3581, 3577, 5940, 3579, 3583, 3585, 5940, - 3584, 3596, 3599, 3601, 3586, 3594, 3603, 3605, 3607, 3608, - 5940, 3611, 5940, 3612, 3592, 3618, 5940, 3614, 3620, 3622, - 3624, 3621, 3628, 3629, 3636, 3625, 3631, 3637, 3638, 3639, - 3641, 3648, 3644, 3647, 3649, 3650, 5940, 3651, 3653, 3659, - 3660, 3665, 3654, 3658, 3670, 3669, 5940, 5940, 3673, 5940, - 3677, 3676, 3678, 5940, 3681, 3683, 3690, 3685, 3686, 3689, + 3520, 3528, 3525, 3524, 3526, 6029, 3527, 3531, 3532, 3534, + 3536, 3541, 6029, 3538, 3548, 3543, 3542, 3559, 3550, 3560, + 3562, 3563, 3564, 3566, 3565, 3567, 3568, 3575, 3574, 3572, + 3580, 3581, 3586, 6029, 3583, 3591, 3573, 3595, 3597, 3604, + 3605, 3606, 3601, 3608, 3609, 3616, 6029, 3611, 3614, 3612, + 3615, 3625, 3617, 3626, 3622, 6029, 3629, 3628, 3630, 6029, + 3633, 3631, 3638, 3643, 3644, 3651, 3646, 3648, 3649, 3650, + 6029, 3656, 6029, 3654, 3658, 3662, 6029, 3660, 3665, 3666, + 3668, 3669, 3674, 3675, 3682, 3673, 3676, 3683, 3684, 3686, + 3687, 3694, 3689, 3691, 3695, 3696, 6029, 3697, 3699, 3702, - 3699, 3693, 5940, 3688, 3700, 3703, 3705, 3706, 3707, 3709, - 3710, 3708, 3711, 3712, 5940, 3713, 3716, 3724, 3717, 3725, - 3729, 3736, 3730, 5940, 3737, 3738, 3739, 3743, 3744, 5940, - 3746, 5940, 3747, 3749, 3752, 3754, 3753, 5940, 3759, 3760, - 3763, 3766, 3768, 3767, 3770, 3771, 3777, 3778, 3785, 3781, - 3780, 3782, 5940, 3783, 3787, 3789, 3796, 3784, 3791, 3800, - 3803, 3804, 3805, 3810, 3807, 3814, 3816, 3818, 3820, 3812, - 5940, 3822, 3824, 3823, 3838, 3833, 3828, 5940, 3829, 3843, - 3845, 5940, 3836, 3835, 3847, 3852, 3839, 3846, 3853, 3854, - 3858, 5940, 3859, 3860, 3861, 3862, 3865, 3866, 5940, 5940, + 3704, 3706, 3708, 3712, 3714, 3716, 6029, 6029, 3722, 6029, + 3723, 3718, 3724, 6029, 3727, 3725, 3736, 2332, 3731, 3735, + 3744, 3738, 6029, 3741, 3745, 3749, 3747, 3751, 3752, 3754, + 3755, 3753, 3758, 3757, 6029, 3760, 3759, 3762, 3768, 3769, + 3774, 3770, 3778, 6029, 3782, 3781, 3784, 3785, 3788, 6029, + 3791, 6029, 3792, 3794, 3793, 3797, 3796, 6029, 3804, 3807, + 3809, 3801, 3811, 3812, 3813, 3817, 3819, 3820, 3829, 3825, + 3826, 3824, 3834, 3835, 6029, 3831, 3832, 3842, 3844, 3838, + 3847, 3854, 3851, 3855, 3852, 3859, 3849, 3862, 3864, 3866, + 3869, 3870, 6029, 3871, 3876, 3872, 3885, 3873, 3877, 6029, - 3874, 5940, 3876, 3863, 3877, 3878, 3879, 3885, 3884, 3888, - 3890, 3887, 3891, 3898, 3899, 3908, 3911, 3915, 3910, 3914, - 3900, 5940, 5940, 3917, 3918, 3921, 3924, 3925, 3927, 3928, - 3935, 3931, 3937, 3941, 3942, 3949, 5940, 3948, 3934, 3951, - 5940, 3932, 3945, 3953, 3956, 3958, 3959, 3962, 3960, 3961, - 3964, 3968, 3965, 3970, 3974, 3972, 3975, 3973, 3983, 3981, - 3982, 3990, 5940, 3991, 3984, 3993, 3995, 3996, 3997, 4001, - 4002, 4004, 5940, 4006, 4008, 4010, 4011, 4005, 4015, 4026, - 4030, 4032, 4023, 4033, 4034, 4036, 4040, 4037, 5940, 4044, - 4041, 4043, 4047, 4051, 4053, 4054, 4056, 4057, 4065, 4062, + 3886, 3887, 3890, 6029, 3881, 3891, 3896, 3900, 3897, 3901, + 3902, 3903, 3906, 6029, 3904, 3908, 3907, 3909, 3923, 3913, + 6029, 6029, 3924, 6029, 3925, 3910, 3926, 3929, 3912, 3935, + 3939, 3936, 3949, 3932, 3942, 3950, 3940, 3958, 3960, 3962, + 3961, 3959, 3963, 6029, 6029, 3966, 3969, 3968, 3972, 3973, + 3975, 3976, 3985, 3981, 3988, 3991, 3992, 3999, 6029, 3978, + 3980, 3998, 6029, 3996, 4001, 4003, 4004, 4005, 4007, 4008, + 4009, 4011, 4012, 4014, 4018, 4015, 4023, 4017, 4020, 4027, + 4031, 4035, 4033, 4038, 6029, 4039, 4040, 4041, 4042, 4044, + 4045, 4049, 4050, 4052, 6029, 4054, 4056, 4058, 4053, 4057, - 4066, 4068, 4070, 4058, 4074, 4076, 4060, 5940, 4080, 4082, - 4078, 4087, 4084, 4088, 4089, 4095, 4099, 4091, 4093, 4100, - 4104, 5940, 4101, 4105, 4107, 4109, 4115, 4106, 4112, 4116, - 5940, 4118, 4120, 4123, 4124, 4126, 4129, 4132, 4133, 4136, - 4135, 4139, 5940, 4141, 4143, 4146, 4149, 4150, 4152, 4155, - 4154, 5940, 4156, 4162, 4164, 4171, 4166, 4175, 4172, 4176, - 4168, 4170, 4182, 4186, 4188, 4189, 4190, 4178, 4200, 4202, - 4201, 5940, 4184, 5940, 4203, 4206, 4214, 4209, 4191, 5940, - 4215, 4216, 4220, 4221, 4217, 5940, 4222, 4223, 4225, 4229, - 5940, 4224, 4228, 4230, 4235, 4238, 4242, 5940, 4245, 4246, + 4063, 4074, 4078, 4080, 4067, 4072, 4083, 4081, 4087, 4089, + 6029, 4091, 4088, 4092, 4095, 4098, 4100, 4101, 4103, 4104, + 4106, 4109, 4110, 4114, 4117, 4111, 4118, 4119, 4121, 6029, + 4123, 4130, 4126, 4132, 4134, 4135, 4136, 4137, 4143, 4144, + 4146, 4147, 6029, 4150, 4148, 4155, 6029, 4151, 4156, 4157, + 4158, 4160, 4164, 4166, 4169, 6029, 4174, 4168, 4170, 4175, + 4176, 4178, 4180, 4185, 4182, 4190, 4195, 6029, 4187, 4197, + 4200, 4193, 4201, 4203, 4204, 4207, 6029, 4211, 4212, 4208, + 4225, 4210, 4226, 4222, 4229, 4221, 4228, 4232, 4230, 4236, + 4238, 4240, 4237, 4248, 4250, 4252, 6029, 4243, 6029, 4253, - 4248, 4257, 4258, 4255, 4256, 4259, 4261, 4262, 4263, 4264, - 4272, 4267, 4269, 5940, 4271, 4277, 4279, 4283, 4284, 4285, - 4286, 4292, 4287, 5940, 4289, 4295, 4296, 4297, 4298, 4299, - 4301, 4309, 4304, 4307, 5940, 4308, 4312, 4320, 4009, 4321, - 5940, 5940, 4313, 4328, 4330, 4318, 4331, 5940, 4322, 4340, - 4335, 4337, 4339, 5940, 5940, 4342, 5940, 4338, 5940, 4343, - 4345, 5940, 5940, 4346, 4349, 4350, 4353, 4360, 5940, 4363, - 5940, 4370, 4365, 4352, 4354, 4367, 5940, 4369, 4371, 4374, - 5940, 4377, 4384, 4379, 4380, 5940, 4382, 4385, 4387, 5940, - 4389, 4392, 4393, 4394, 4399, 4396, 4400, 4403, 4406, 4407, + 4254, 4264, 4259, 4257, 6029, 4265, 4266, 4270, 4261, 4271, + 6029, 4272, 4267, 4273, 4274, 6029, 4275, 4285, 4287, 4289, + 4292, 4293, 6029, 4296, 4297, 4298, 4305, 4308, 4310, 4304, + 4311, 4313, 4306, 4314, 4315, 4323, 4321, 4319, 6029, 4322, + 4327, 4329, 4331, 4332, 4334, 4338, 4340, 4337, 6029, 4343, + 4344, 4345, 4346, 4347, 4349, 4352, 4359, 4355, 4356, 6029, + 4362, 4358, 4372, 4367, 4368, 6029, 6029, 4371, 4376, 4379, + 4373, 4380, 6029, 4383, 4390, 4386, 4389, 4391, 6029, 6029, + 4393, 6029, 4394, 6029, 4395, 4397, 6029, 6029, 4396, 4402, + 4403, 4405, 4407, 6029, 4415, 6029, 4417, 4418, 4404, 4416, - 4409, 4410, 4411, 4422, 4424, 4426, 4428, 4429, 4413, 4432, - 4433, 4435, 4438, 4439, 4440, 4442, 4444, 4445, 4447, 4449, - 4452, 4453, 4454, 4455, 4456, 4457, 4459, 4466, 4469, 4471, - 4470, 4472, 4474, 4473, 4475, 4477, 4481, 4483, 4484, 5940, - 4482, 4485, 4488, 4415, 4491, 4501, 4503, 4494, 4510, 4512, - 5940, 4514, 5940, 4516, 4502, 4518, 4504, 5940, 4519, 4522, - 4521, 4524, 4525, 4526, 4528, 4527, 4531, 4532, 4535, 5940, - 4538, 4533, 4542, 4553, 5940, 4545, 4557, 4541, 4548, 4558, - 4560, 4561, 4562, 4567, 4563, 4569, 4571, 4578, 4573, 4574, - 4576, 4581, 4564, 4577, 4585, 4592, 4588, 4596, 4600, 5940, + 4421, 6029, 4422, 4424, 4423, 4425, 4430, 6029, 4431, 4439, + 4432, 4434, 6029, 4443, 4436, 4444, 6029, 4445, 4448, 4451, + 4452, 4454, 4453, 4457, 4460, 4461, 4464, 4466, 4465, 4467, + 4469, 4478, 4480, 4482, 4483, 4473, 4484, 4486, 4492, 4488, + 4490, 4494, 4496, 4498, 4499, 4504, 4506, 4508, 4501, 4509, + 4510, 4507, 4515, 4511, 4517, 4524, 4521, 4525, 4526, 4528, + 4529, 4533, 4534, 4536, 4539, 4540, 6029, 4532, 4538, 4542, + 4549, 4543, 4556, 4558, 4567, 4569, 4570, 6029, 4572, 6029, + 4574, 4544, 4548, 4564, 6029, 4576, 4577, 4578, 4579, 4580, + 4581, 4582, 4585, 4586, 4588, 4590, 6029, 4593, 4587, 4594, - 4593, 5940, 4601, 4602, 4603, 4604, 4606, 4605, 4607, 5940, - 5940, 4608, 4613, 4618, 4614, 4609, 4620, 4630, 5940, 4622, - 4631, 4633, 4623, 5940, 4638, 4639, 4641, 5940, 4642, 4643, - 4644, 4646, 4647, 4650, 4651, 4653, 4655, 4657, 4661, 5940, - 5940, 5940, 5940, 4663, 4665, 4668, 4670, 4672, 4673, 4675, - 4677, 4674, 5940, 4679, 5940, 5940, 4681, 4688, 4680, 4690, - 4691, 4692, 4696, 4698, 5940, 4697, 4702, 4703, 4700, 4710, - 4714, 4716, 4717, 4701, 4718, 4726, 4724, 4727, 4725, 4730, - 4732, 4734, 5940, 5940, 4737, 4739, 4741, 4748, 4746, 4749, - 4758, 4753, 4755, 4756, 4759, 4761, 4743, 4768, 4772, 4770, + 4598, 6029, 4602, 4608, 4610, 4612, 4613, 4614, 4615, 4616, + 4619, 4617, 4622, 4624, 4631, 4626, 4627, 4618, 4638, 4632, + 4639, 4640, 4646, 4650, 4651, 4655, 6029, 4641, 6029, 4647, + 4657, 4658, 4661, 4662, 4663, 4665, 6029, 6029, 4666, 4668, + 4673, 4664, 4669, 4675, 4677, 4678, 4685, 6029, 4680, 4690, + 4692, 4696, 6029, 4682, 4697, 4699, 6029, 4700, 4701, 4703, + 4705, 4706, 4714, 4711, 4715, 4718, 4708, 4722, 6029, 6029, + 6029, 6029, 4726, 4719, 4729, 4723, 4730, 4731, 4733, 4738, + 4732, 6029, 4745, 6029, 6029, 4746, 4748, 4735, 4750, 4752, + 4739, 4754, 4756, 6029, 4757, 4761, 4762, 4759, 4769, 4771, - 4767, 5940, 4771, 4777, 5940, 4773, 5940, 4778, 4781, 4745, - 4782, 4784, 4787, 4788, 4790, 5940, 5940, 4791, 4792, 4794, - 4798, 4800, 4802, 4801, 4804, 4805, 5940, 4806, 5940, 4807, - 4814, 4809, 4815, 4823, 4826, 4828, 4830, 4825, 4831, 5940, - 4832, 4834, 5940, 4835, 4837, 4838, 5940, 4842, 4845, 4849, - 5940, 4855, 4846, 4852, 5940, 4859, 5940, 4856, 4860, 4861, - 4868, 5940, 4863, 4869, 5940, 4872, 4875, 4877, 4866, 5940, - 4864, 5940, 4878, 4885, 4886, 4889, 4881, 4891, 4892, 4893, - 4894, 4901, 4900, 4902, 5940, 5940, 4910, 4897, 4903, 4907, - 4912, 4919, 4914, 4917, 4916, 5940, 5940, 4924, 5940, 4922, + 4773, 4776, 4765, 4775, 4784, 4777, 4785, 4779, 4787, 4789, + 4791, 6029, 6029, 4795, 4797, 4798, 4805, 4802, 4806, 4809, + 4810, 4812, 4813, 4800, 4816, 4818, 4825, 4826, 4823, 4821, + 6029, 4827, 4831, 6029, 4829, 6029, 4830, 4837, 4836, 4838, + 4840, 4843, 4844, 4846, 6029, 6029, 4847, 4848, 4850, 4857, + 4853, 4858, 4859, 4861, 4862, 6029, 4863, 6029, 4864, 4871, + 4877, 4865, 4879, 4886, 4888, 4892, 4885, 4889, 6029, 4887, + 4870, 6029, 4901, 4897, 4898, 4899, 4903, 6029, 4904, 4907, + 4909, 6029, 4911, 4912, 4914, 6029, 4921, 6029, 4915, 4917, + 4924, 4929, 6029, 4925, 4926, 6029, 4931, 4933, 4934, 4938, - 4925, 5940, 4926, 4931, 4932, 4933, 4935, 4936, 4940, 4942, - 4943, 4944, 4945, 4946, 4952, 4964, 4948, 4962, 4968, 4970, - 4972, 4974, 4966, 4976, 4977, 4978, 4979, 4980, 4983, 5940, - 4985, 4986, 4987, 5940, 4991, 4992, 4994, 4996, 5940, 5007, - 5002, 5008, 5009, 5940, 4995, 5015, 5012, 5010, 5020, 5027, - 5023, 5022, 5940, 5940, 5940, 5024, 5033, 5940, 5038, 5025, - 5028, 5030, 5940, 5034, 5040, 5940, 5940, 5041, 5042, 5044, - 5055, 5940, 5045, 5940, 5046, 5940, 5054, 5056, 5062, 5060, - 5940, 5065, 5071, 5940, 5074, 5077, 5079, 5080, 5068, 5081, - 5082, 5940, 5090, 5086, 5092, 5094, 5083, 5085, 5098, 5095, + 6029, 4939, 6029, 4940, 4942, 4943, 4947, 4948, 4950, 4952, + 4953, 4954, 4961, 4959, 4962, 6029, 6029, 4970, 4956, 4967, + 4972, 4974, 4981, 4973, 4978, 4977, 6029, 6029, 4983, 6029, + 4985, 4986, 6029, 4984, 4991, 4990, 4995, 4996, 4997, 4999, + 5002, 5004, 5012, 5005, 5003, 5016, 5026, 5010, 5028, 5030, + 5032, 5034, 5036, 5038, 5006, 5021, 5039, 5040, 5042, 5043, + 6029, 5045, 5047, 5046, 6029, 5052, 5048, 5057, 5053, 6029, + 5060, 5061, 5066, 5067, 6029, 5068, 5072, 5069, 5074, 5077, + 5078, 5079, 5088, 5080, 5081, 6029, 6029, 6029, 5092, 5085, + 6029, 5099, 5091, 5095, 5100, 6029, 5101, 5102, 6029, 6029, - 5102, 5099, 5105, 5940, 5107, 5109, 5110, 5116, 5108, 5118, - 5112, 5940, 5120, 5940, 5121, 5122, 5125, 5128, 5123, 5126, - 5050, 5131, 5130, 5141, 5138, 5940, 5143, 5147, 5940, 5144, - 5940, 5149, 5940, 5150, 5151, 5152, 5153, 5940, 5155, 5159, - 5160, 5161, 5940, 5162, 5164, 5170, 5940, 5940, 5171, 5181, - 5172, 5173, 5185, 5187, 5174, 5189, 5182, 5190, 5176, 5198, - 5197, 5200, 5201, 5203, 5204, 5205, 5940, 5940, 5940, 5210, - 5209, 5217, 5214, 5215, 5225, 5220, 5940, 5223, 5226, 5224, - 5233, 5230, 5235, 5940, 5232, 5236, 5237, 5239, 5241, 5242, - 5246, 5940, 5250, 5257, 5253, 5245, 5260, 5264, 5267, 5269, + 5103, 5104, 5106, 5115, 6029, 5107, 6029, 5108, 6029, 5111, + 5112, 5121, 5123, 6029, 5125, 5133, 6029, 5136, 5139, 5141, + 5142, 5124, 5127, 5143, 6029, 5153, 5145, 5149, 5156, 5152, + 5157, 5158, 5159, 5166, 5161, 5165, 6029, 5167, 5168, 5169, + 5175, 5162, 5172, 5179, 6029, 5183, 6029, 5180, 5184, 5185, + 5191, 5188, 5190, 5194, 5196, 5192, 5206, 5195, 6029, 5208, + 5211, 6029, 5198, 6029, 5213, 6029, 5215, 5216, 5217, 5220, + 6029, 5222, 5203, 5226, 5230, 5227, 5228, 6029, 5236, 5229, + 5239, 6029, 6029, 5234, 5246, 5244, 5241, 5252, 5256, 5242, + 5258, 5248, 5260, 5245, 5267, 5253, 5264, 5266, 5271, 5275, - 5270, 5940, 5272, 5940, 5940, 5273, 5940, 5274, 5276, 5277, - 5278, 5940, 5281, 5283, 5282, 5284, 5286, 5940, 5294, 5287, - 5289, 5290, 5940, 5940, 5301, 5940, 5304, 5305, 5306, 5315, - 5311, 5313, 5317, 5314, 5940, 5312, 5318, 5322, 5324, 5325, - 5940, 5326, 5328, 5329, 5330, 5333, 5337, 5339, 5340, 5341, - 5940, 5343, 5335, 5358, 5354, 5940, 5342, 5360, 5940, 5940, - 5345, 5364, 5365, 5940, 5940, 5940, 5367, 5940, 5371, 5377, - 5381, 5385, 5368, 5940, 5387, 5376, 5384, 5940, 5380, 5388, - 5390, 5392, 5940, 5940, 5389, 5396, 5393, 5401, 5402, 5940, - 5404, 5406, 5411, 5419, 5421, 5409, 5423, 5425, 5432, 5405, + 5273, 6029, 6029, 6029, 5268, 5279, 5287, 5283, 5285, 5290, + 5289, 6029, 5291, 5292, 5293, 5300, 5298, 5302, 6029, 5305, + 5295, 5303, 5306, 5309, 5304, 5311, 6029, 5322, 5325, 5326, + 5318, 5329, 5336, 5338, 5340, 5341, 6029, 5343, 6029, 6029, + 5314, 6029, 5327, 5330, 5344, 5347, 6029, 5351, 5345, 5353, + 5354, 5355, 5356, 5358, 6029, 5367, 5359, 5362, 5364, 6029, + 6029, 5374, 6029, 5377, 5378, 5370, 5386, 5382, 5385, 5388, + 5390, 6029, 5389, 5391, 5392, 5396, 5398, 6029, 5399, 5400, + 5401, 5402, 5405, 5410, 5412, 5403, 5413, 6029, 5415, 5414, + 5431, 5427, 6029, 5416, 5428, 6029, 6029, 5438, 5440, 5442, - 5413, 5427, 5429, 5430, 5436, 5433, 5440, 5449, 5445, 5447, - 5454, 5455, 5940, 5940, 5457, 5940, 5940, 5459, 5462, 5464, - 5466, 5468, 5470, 5472, 5940, 5407, 5474, 5475, 5476, 5477, - 5940, 5479, 5481, 5478, 5482, 5487, 5485, 5489, 5491, 5940, - 5940, 5483, 5500, 5492, 5505, 5494, 5940, 5507, 5502, 5508, - 5509, 5511, 5513, 5516, 5940, 5515, 5517, 5940, 5940, 5519, - 5940, 5940, 5940, 5940, 5940, 5940, 5940, 5940, 5520, 5940, - 5524, 5528, 5536, 5539, 5940, 5525, 5533, 5444, 5529, 5540, - 5940, 5541, 5544, 5545, 5551, 5543, 5546, 5552, 5556, 5559, - 5557, 5560, 5561, 5562, 5566, 5563, 5567, 5569, 5940, 5940, + 6029, 6029, 6029, 5444, 6029, 5448, 5452, 5456, 5460, 5451, + 6029, 5459, 5461, 5463, 5417, 5465, 6029, 5466, 5467, 5468, + 5472, 6029, 6029, 5469, 5474, 5476, 5475, 5477, 6029, 5478, + 5482, 5488, 5498, 5500, 5490, 5501, 5495, 5509, 5516, 5493, + 5502, 5511, 5514, 5515, 5512, 5522, 5529, 5524, 5526, 5528, + 5533, 6029, 6029, 5535, 6029, 6029, 5537, 5540, 5542, 5544, + 5546, 5548, 5550, 5552, 5553, 6029, 5554, 5556, 5557, 5433, + 5558, 6029, 5561, 5560, 5562, 5568, 5564, 5569, 5567, 5572, + 6029, 6029, 5565, 5360, 5573, 5574, 5584, 6029, 5585, 5592, + 5587, 5589, 5590, 5593, 5591, 6029, 5597, 5595, 6029, 6029, - 5940, 5568, 5570, 5580, 5572, 5589, 5591, 5594, 5596, 5583, - 5586, 5597, 5598, 5599, 5601, 5605, 5613, 5608, 5609, 5610, - 5611, 5617, 5612, 5614, 5619, 5940, 5623, 5940, 5624, 5940, - 5940, 5629, 5634, 5632, 5625, 5636, 5643, 5639, 5641, 5645, - 5646, 5648, 5650, 5940, 5652, 5655, 5940, 5656, 5657, 5940, - 5658, 5660, 5662, 5659, 5663, 5666, 5669, 5677, 5668, 5940, - 5940, 5671, 5679, 5680, 5684, 5687, 5694, 5689, 5693, 5695, - 5696, 5686, 5708, 5940, 5704, 5706, 5710, 5940, 5712, 5707, - 5713, 5714, 5715, 5723, 5718, 5719, 5940, 5721, 5940, 5725, - 5727, 5730, 5728, 5729, 5731, 5740, 5738, 5742, 5940, 5745, + 5598, 6029, 6029, 6029, 6029, 6029, 6029, 6029, 6029, 6029, + 5600, 5612, 6029, 5606, 5617, 5621, 5623, 6029, 5608, 5618, + 5610, 5624, 5625, 6029, 5626, 5629, 5628, 5483, 5630, 5634, + 5637, 5632, 5636, 5641, 5638, 5643, 5646, 5647, 5648, 5653, + 5642, 5656, 6029, 6029, 6029, 5660, 5664, 5666, 5667, 5671, + 5672, 5678, 5680, 5668, 5675, 5682, 5681, 5683, 5689, 5690, + 5697, 5692, 5696, 5693, 5699, 6029, 5701, 5694, 5702, 5704, + 6029, 5707, 6029, 5710, 6029, 6029, 5712, 5715, 5717, 5713, + 5724, 5726, 5723, 5727, 5729, 5730, 5734, 5739, 6029, 5731, + 5736, 6029, 5741, 5742, 6029, 5743, 5744, 5745, 5747, 5753, - 5749, 5746, 5751, 5753, 5756, 5757, 5758, 5760, 5762, 5766, - 5770, 5772, 5773, 5763, 5776, 5774, 5940, 5784, 5775, 5940, - 5785, 5786, 5778, 5787, 5788, 5940, 5796, 5792, 5798, 5799, - 5802, 5803, 5940, 5805, 5808, 5809, 5940, 5813, 5940, 5940, - 5814, 5812, 5815, 5821, 5823, 5940, 5940, 5940, 5848, 5855, - 5862, 5869, 5876, 88, 5883, 5890, 5897, 5904, 5911, 5918, - 5925, 5932 + 5750, 5754, 5757, 5768, 6029, 6029, 5751, 5758, 5761, 5773, + 5765, 5781, 5777, 5774, 5782, 5783, 5784, 5791, 6029, 5790, + 5792, 5794, 6029, 5795, 5786, 5800, 5796, 5798, 5808, 5801, + 5806, 6029, 5809, 6029, 5812, 5804, 5818, 5814, 5821, 5822, + 5824, 5826, 5828, 6029, 5827, 5829, 5832, 5836, 5838, 5842, + 5843, 5844, 5846, 5849, 5855, 5859, 5860, 5861, 5852, 5864, + 5856, 6029, 5866, 5862, 6029, 5872, 5873, 5870, 5874, 5879, + 6029, 5883, 5876, 5884, 5885, 5888, 5890, 6029, 5892, 5899, + 5894, 6029, 5900, 6029, 6029, 5902, 5896, 5904, 5909, 5911, + 6029, 6029, 6029, 5937, 5944, 5951, 5958, 5965, 88, 5972, + + 5979, 5986, 5993, 6000, 6007, 6014, 6021 } ; -static const flex_int16_t yy_def[3063] = +static const flex_int16_t yy_def[3108] = { 0, - 3048, 1, 3049, 3049, 3050, 3050, 3051, 3051, 3052, 3052, - 3053, 3053, 3048, 3054, 3048, 3048, 3048, 3048, 3055, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3056, 3048, 3048, 3048, 3056, 3057, 3048, 3048, - 3048, 3057, 3058, 3048, 3048, 3048, 3048, 3058, 3059, 3048, - 3048, 3048, 3059, 3060, 3048, 3061, 3048, 3060, 3060, 3054, - 3054, 3048, 3062, 3055, 3062, 3055, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3093, 1, 3094, 3094, 3095, 3095, 3096, 3096, 3097, 3097, + 3098, 3098, 3093, 3099, 3093, 3093, 3093, 3093, 3100, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3101, 3093, 3093, 3093, 3101, 3102, 3093, 3093, + 3093, 3102, 3103, 3093, 3093, 3093, 3093, 3103, 3104, 3093, + 3093, 3093, 3104, 3105, 3093, 3106, 3093, 3105, 3105, 3099, + 3099, 3093, 3107, 3100, 3107, 3100, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3056, 3056, 3057, 3057, 3058, 3058, 3048, 3059, 3059, 3060, - 3060, 3061, 3061, 3060, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3101, 3101, 3102, 3102, 3103, 3103, 3093, 3104, 3104, + 3105, 3105, 3106, 3106, 3105, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3060, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3105, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3060, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3105, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3060, 3054, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3099, 3093, 3099, 3105, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3060, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3048, 3048, 3054, 3048, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3105, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3093, 3099, 3093, 3093, 3099, 3093, 3093, 3099, 3099, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3060, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3048, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3105, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3093, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3048, 3048, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, + 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, + 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, - 3054, 3048, 3054, 3054, 3060, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3093, 3099, 3099, 3105, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3048, 3054, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3093, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3093, 3099, + 3093, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3048, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3093, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3093, 3099, 3093, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3048, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3099, 3099, 3099, 3099, 3093, 3093, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3093, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3048, 3054, 3054, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3093, 3093, 3099, 3099, 3099, 3093, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3048, 3054, 3048, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3048, 3054, 3048, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, + 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, + 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3093, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3093, 3099, 3093, 3099, 3099, 3099, 3093, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3048, + 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3093, 3099, 3093, + 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3093, + 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3093, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3048, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, + 3093, 3093, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3093, 3093, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, + 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3048, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3093, 3099, 3099, 3099, 3093, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3093, 3099, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3048, 3048, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3048, 3048, 3054, 3048, 3054, 3048, 3054, - 3054, 3048, 3048, 3054, 3054, 3054, 3054, 3054, 3048, 3054, - 3048, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, + 3093, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, + 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, + 3099, 3099, 3099, 3099, 3099, 3093, 3093, 3099, 3099, 3099, + 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3093, 3093, + 3099, 3093, 3099, 3093, 3099, 3099, 3093, 3093, 3099, 3099, + 3099, 3099, 3099, 3093, 3099, 3093, 3099, 3099, 3099, 3099, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3048, 3054, 3048, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, + 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, + 3099, 3099, 3093, 3099, 3099, 3099, 3093, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3093, + 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3048, 3048, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3048, 3048, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3093, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3093, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, + 3099, 3099, 3093, 3099, 3099, 3099, 3093, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3093, + 3093, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3093, 3099, 3093, 3093, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, - 3054, 3048, 3054, 3054, 3048, 3054, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3048, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3048, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3054, 3048, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3048, 3054, 3048, 3054, 3054, 3054, - 3054, 3048, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3048, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3048, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3048, 3048, 3054, 3048, 3054, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3093, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3093, 3099, 3099, 3093, 3099, 3093, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3093, 3093, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3093, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, + 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, + 3099, 3093, 3099, 3099, 3099, 3093, 3099, 3093, 3099, 3099, + 3099, 3099, 3093, 3099, 3099, 3093, 3099, 3099, 3099, 3099, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3048, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3048, 3048, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3048, 3048, 3054, 3054, 3054, - 3054, 3048, 3054, 3048, 3054, 3048, 3054, 3054, 3054, 3054, - 3048, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3093, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3093, 3093, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3093, 3099, 3093, + 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3093, 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3093, + 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3093, 3093, 3093, 3099, 3099, + 3093, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3093, 3093, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3048, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3048, 3054, - 3048, 3054, 3048, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3048, 3048, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3048, 3048, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3099, 3099, 3099, 3099, 3093, 3099, 3093, 3099, 3093, 3099, + 3099, 3099, 3099, 3093, 3099, 3099, 3093, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3093, 3099, 3093, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, + 3099, 3093, 3099, 3093, 3099, 3093, 3099, 3099, 3099, 3099, + 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, + 3099, 3093, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, - 3054, 3048, 3054, 3048, 3048, 3054, 3048, 3054, 3054, 3054, - 3054, 3048, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3048, 3048, 3054, 3048, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3048, 3048, - 3054, 3054, 3054, 3048, 3048, 3048, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3048, 3048, 3054, 3054, 3054, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, + 3099, 3093, 3093, 3093, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3093, 3093, + 3099, 3093, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3093, + 3093, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, + 3099, 3099, 3093, 3099, 3099, 3093, 3093, 3099, 3099, 3099, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3048, 3054, 3048, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3048, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3048, 3048, 3054, - 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3054, 3048, - 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, 3054, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3048, + 3093, 3093, 3093, 3099, 3093, 3099, 3099, 3099, 3099, 3099, + 3093, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, + 3099, 3093, 3093, 3099, 3099, 3099, 3099, 3099, 3093, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3093, 3093, 3099, 3093, 3093, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, + 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3093, 3093, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3093, 3093, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3048, 3054, 3048, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3048, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3048, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3048, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, + 3099, 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093, + 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3093, 3099, 3099, + 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3093, 3093, 3093, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, + 3093, 3099, 3093, 3099, 3093, 3093, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, + 3099, 3093, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, - 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, - 3054, 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3048, - 3054, 3054, 3054, 3054, 3054, 3048, 3054, 3054, 3054, 3054, - 3054, 3054, 3048, 3054, 3054, 3054, 3048, 3054, 3048, 3048, - 3054, 3054, 3054, 3054, 3054, 3048, 3048, 0, 3048, 3048, - 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, - 3048, 3048 + 3099, 3099, 3099, 3099, 3093, 3093, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, + 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3093, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, + 3099, 3093, 3099, 3099, 3093, 3099, 3099, 3099, 3099, 3099, + 3093, 3099, 3099, 3099, 3099, 3099, 3099, 3093, 3099, 3099, + 3099, 3093, 3099, 3093, 3093, 3099, 3099, 3099, 3099, 3099, + 3093, 3093, 0, 3093, 3093, 3093, 3093, 3093, 3093, 3093, + + 3093, 3093, 3093, 3093, 3093, 3093, 3093 } ; -static const flex_int16_t yy_nxt[5981] = +static const flex_int16_t yy_nxt[6070] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 26, @@ -1437,655 +1453,665 @@ static const flex_int16_t yy_nxt[5981] = 61, 62, 72, 71, 63, 102, 73, 92, 70, 71, 63, 15, 16, 17, 65, 66, 67, 75, 71, 75, - 75, 71, 75, 68, 104, 157, 103, 93, 75, 76, - 141, 141, 69, 15, 16, 17, 65, 66, 67, 71, + 75, 71, 75, 68, 104, 158, 103, 93, 75, 76, + 142, 142, 69, 15, 16, 17, 65, 66, 67, 71, 71, 83, 77, 78, 71, 68, 79, 71, 84, 87, - 71, 80, 85, 88, 69, 86, 89, 151, 90, 91, - 81, 71, 94, 71, 96, 71, 71, 159, 71, 105, + 71, 80, 85, 88, 69, 86, 89, 152, 90, 91, + 81, 71, 94, 71, 96, 164, 71, 71, 71, 105, 98, 112, 97, 99, 71, 109, 95, 106, 71, 110, - 100, 71, 101, 107, 172, 71, 113, 108, 143, 71, - 114, 143, 118, 71, 119, 111, 115, 71, 120, 116, - 140, 151, 124, 148, 148, 125, 117, 163, 121, 122, - 71, 123, 126, 71, 133, 154, 127, 128, 71, 129, + 100, 119, 101, 107, 71, 120, 226, 108, 144, 121, + 152, 144, 71, 141, 71, 111, 71, 113, 71, 122, + 123, 114, 124, 125, 155, 115, 126, 71, 130, 71, + 131, 116, 71, 127, 117, 71, 134, 128, 129, 132, - 224, 130, 71, 137, 134, 158, 71, 138, 135, 136, - 131, 139, 145, 71, 145, 145, 132, 145, 75, 71, - 75, 75, 150, 75, 150, 150, 70, 150, 70, 70, - 153, 70, 72, 165, 71, 171, 73, 70, 75, 71, - 75, 75, 155, 75, 71, 71, 225, 71, 156, 75, - 76, 71, 71, 71, 160, 161, 164, 71, 71, 166, - 173, 71, 71, 169, 170, 167, 71, 168, 162, 71, - 71, 175, 177, 178, 71, 71, 184, 71, 176, 174, - 179, 182, 253, 71, 71, 71, 189, 180, 181, 183, - 71, 151, 71, 185, 191, 71, 186, 71, 71, 199, + 220, 118, 152, 71, 138, 133, 135, 159, 139, 160, + 136, 137, 140, 146, 71, 146, 146, 156, 146, 149, + 149, 75, 71, 75, 75, 151, 75, 151, 151, 70, + 151, 70, 70, 154, 70, 72, 166, 71, 71, 73, + 70, 75, 157, 75, 75, 71, 75, 71, 161, 71, + 162, 71, 75, 76, 71, 170, 171, 71, 165, 174, + 167, 71, 71, 163, 71, 71, 168, 71, 169, 71, + 71, 71, 71, 172, 183, 176, 173, 184, 175, 71, + 178, 179, 177, 192, 71, 181, 190, 186, 180, 182, + 187, 71, 71, 185, 71, 71, 193, 195, 71, 150, - 192, 194, 197, 71, 71, 195, 71, 198, 200, 187, - 188, 190, 71, 201, 71, 71, 202, 205, 71, 203, - 193, 196, 207, 71, 71, 71, 71, 204, 71, 212, - 209, 71, 71, 206, 210, 71, 214, 71, 71, 71, - 71, 208, 71, 220, 211, 215, 213, 71, 226, 229, - 217, 216, 223, 71, 221, 71, 219, 218, 222, 233, - 230, 71, 71, 71, 235, 227, 71, 71, 228, 231, - 71, 239, 71, 236, 232, 238, 71, 234, 149, 240, - 71, 242, 141, 141, 143, 237, 243, 143, 241, 145, - 151, 145, 145, 244, 145, 148, 148, 150, 248, 150, + 71, 196, 71, 188, 189, 71, 201, 202, 71, 71, + 71, 191, 200, 71, 198, 204, 194, 197, 203, 199, + 71, 71, 205, 71, 207, 209, 71, 71, 71, 214, + 206, 208, 211, 71, 71, 71, 212, 71, 71, 216, + 71, 210, 71, 228, 71, 71, 213, 222, 217, 219, + 71, 225, 227, 215, 218, 71, 221, 231, 223, 71, + 229, 233, 224, 230, 71, 71, 237, 71, 232, 71, + 71, 71, 71, 71, 234, 238, 241, 71, 244, 240, + 235, 236, 242, 245, 142, 142, 144, 239, 254, 144, + 243, 146, 152, 146, 146, 246, 146, 149, 149, 151, - 150, 75, 150, 75, 75, 71, 75, 71, 246, 71, - 245, 71, 71, 153, 71, 71, 71, 250, 71, 71, - 71, 256, 249, 247, 251, 259, 252, 255, 258, 71, - 254, 71, 260, 264, 262, 71, 263, 71, 257, 71, - 71, 265, 71, 71, 268, 261, 266, 71, 273, 269, - 71, 147, 71, 71, 270, 275, 274, 276, 279, 71, - 271, 272, 278, 267, 71, 277, 71, 71, 71, 71, - 281, 71, 282, 283, 71, 71, 71, 71, 71, 288, - 289, 285, 295, 284, 286, 71, 299, 280, 71, 287, - 71, 290, 297, 298, 291, 300, 292, 302, 296, 71, + 71, 151, 151, 75, 151, 75, 75, 71, 75, 71, + 248, 71, 247, 71, 71, 154, 71, 71, 250, 252, + 71, 255, 71, 261, 251, 249, 253, 258, 71, 71, + 262, 71, 257, 256, 71, 71, 265, 260, 266, 264, + 259, 267, 71, 71, 71, 71, 268, 71, 275, 270, + 71, 71, 71, 148, 271, 277, 263, 278, 71, 272, + 71, 276, 281, 269, 283, 273, 274, 71, 71, 71, + 279, 280, 284, 71, 71, 71, 71, 71, 71, 71, + 71, 290, 291, 285, 297, 71, 287, 71, 286, 288, + 71, 282, 348, 289, 71, 292, 299, 300, 293, 71, - 71, 71, 71, 71, 71, 304, 305, 301, 293, 307, - 294, 71, 71, 308, 71, 313, 146, 71, 310, 71, - 303, 306, 309, 311, 71, 71, 317, 71, 71, 71, - 71, 71, 312, 314, 315, 71, 316, 71, 71, 318, - 320, 319, 71, 71, 325, 71, 321, 71, 71, 326, - 71, 71, 327, 322, 331, 329, 71, 71, 323, 334, - 71, 71, 71, 324, 71, 71, 328, 330, 71, 336, - 337, 71, 71, 340, 332, 333, 341, 335, 339, 71, - 338, 342, 71, 343, 344, 71, 71, 346, 348, 71, - 347, 71, 350, 71, 71, 71, 71, 351, 71, 345, + 294, 71, 301, 71, 302, 298, 326, 304, 309, 306, + 71, 307, 295, 71, 296, 71, 303, 71, 310, 305, + 71, 312, 313, 71, 71, 311, 308, 71, 71, 315, + 314, 71, 71, 71, 71, 71, 71, 71, 317, 71, + 319, 71, 71, 71, 316, 321, 323, 71, 71, 328, + 71, 324, 322, 318, 329, 71, 71, 71, 320, 334, + 71, 330, 325, 327, 332, 71, 331, 337, 71, 71, + 71, 71, 333, 71, 339, 335, 336, 71, 342, 340, + 343, 344, 71, 71, 346, 71, 71, 71, 338, 341, + 71, 71, 349, 350, 71, 347, 351, 353, 71, 71, - 71, 354, 71, 151, 71, 71, 71, 361, 144, 71, - 357, 359, 349, 71, 352, 355, 353, 362, 71, 356, - 71, 71, 71, 71, 358, 363, 364, 365, 360, 71, - 71, 71, 367, 71, 371, 372, 71, 366, 374, 370, - 71, 71, 71, 373, 369, 71, 375, 368, 376, 71, - 378, 71, 71, 379, 71, 71, 71, 71, 382, 71, - 377, 383, 71, 385, 71, 71, 387, 388, 384, 71, - 380, 381, 71, 389, 71, 71, 386, 71, 390, 71, - 71, 392, 393, 394, 395, 71, 71, 71, 399, 71, - 71, 71, 71, 396, 400, 391, 402, 71, 71, 398, + 354, 345, 71, 71, 357, 71, 152, 71, 356, 71, + 71, 71, 147, 364, 71, 360, 362, 355, 358, 71, + 352, 365, 71, 71, 359, 71, 368, 71, 366, 361, + 367, 71, 71, 363, 71, 71, 71, 369, 71, 374, + 375, 376, 71, 378, 373, 370, 71, 71, 71, 372, + 377, 379, 371, 71, 71, 71, 381, 71, 382, 71, + 71, 71, 71, 385, 71, 380, 386, 388, 71, 383, + 387, 390, 393, 71, 384, 71, 392, 71, 389, 71, + 396, 391, 71, 71, 395, 397, 71, 71, 71, 394, + 71, 71, 71, 402, 71, 71, 71, 403, 71, 145, - 71, 71, 405, 71, 71, 410, 397, 407, 401, 71, - 409, 71, 411, 71, 71, 71, 403, 71, 404, 438, - 71, 406, 421, 419, 408, 412, 71, 71, 71, 71, - 422, 425, 423, 420, 430, 413, 142, 71, 414, 431, - 71, 71, 426, 415, 416, 417, 418, 71, 424, 427, - 71, 71, 428, 429, 432, 71, 71, 71, 433, 71, - 440, 434, 435, 71, 436, 437, 71, 71, 439, 71, - 71, 442, 441, 71, 71, 447, 71, 465, 453, 443, - 71, 71, 71, 448, 71, 449, 71, 71, 444, 446, - 445, 452, 454, 451, 450, 71, 71, 71, 71, 457, + 405, 71, 71, 401, 71, 399, 398, 71, 408, 400, + 71, 71, 413, 404, 410, 71, 412, 406, 71, 407, + 409, 71, 415, 71, 414, 71, 71, 71, 424, 428, + 71, 411, 71, 423, 422, 71, 443, 71, 425, 430, + 426, 416, 143, 429, 417, 71, 71, 431, 432, 418, + 419, 420, 421, 433, 71, 71, 427, 435, 434, 71, + 71, 71, 71, 436, 71, 71, 437, 71, 71, 445, + 438, 441, 444, 442, 71, 71, 446, 439, 440, 447, + 71, 71, 452, 71, 449, 71, 71, 448, 71, 71, + 453, 457, 454, 458, 469, 71, 451, 71, 71, 71, - 455, 458, 71, 466, 71, 460, 456, 464, 71, 71, - 71, 459, 467, 71, 71, 468, 71, 71, 461, 469, - 71, 462, 483, 463, 479, 470, 71, 71, 71, 471, - 71, 484, 481, 732, 486, 480, 71, 472, 71, 473, - 71, 474, 482, 71, 71, 494, 496, 485, 151, 495, - 498, 497, 71, 71, 475, 500, 71, 476, 501, 477, - 504, 478, 71, 71, 487, 488, 71, 71, 71, 499, - 71, 71, 502, 71, 489, 503, 490, 491, 492, 505, - 508, 493, 507, 71, 71, 71, 71, 506, 513, 514, - 509, 511, 516, 510, 71, 517, 71, 71, 71, 71, + 450, 455, 459, 456, 71, 71, 71, 470, 462, 460, + 463, 71, 464, 471, 465, 461, 472, 71, 71, 71, + 71, 71, 71, 473, 71, 474, 71, 466, 152, 152, + 467, 475, 468, 71, 71, 476, 489, 71, 71, 486, + 484, 487, 485, 477, 71, 478, 71, 479, 488, 504, + 71, 491, 490, 499, 71, 500, 501, 71, 71, 71, + 480, 502, 71, 481, 503, 482, 71, 483, 71, 505, + 492, 493, 506, 508, 71, 507, 71, 71, 71, 509, + 494, 586, 495, 496, 497, 71, 71, 498, 513, 71, + 71, 512, 71, 71, 71, 71, 511, 519, 514, 71, - 515, 521, 71, 512, 71, 71, 71, 71, 71, 519, - 524, 525, 526, 520, 71, 71, 518, 71, 71, 531, - 523, 71, 71, 536, 528, 533, 527, 522, 71, 71, - 71, 529, 530, 534, 71, 71, 71, 532, 71, 71, - 71, 546, 71, 547, 71, 538, 71, 537, 535, 542, - 539, 545, 541, 540, 71, 548, 71, 549, 71, 553, - 543, 151, 544, 71, 551, 550, 71, 71, 71, 556, - 552, 71, 554, 71, 555, 558, 71, 71, 559, 71, - 561, 562, 71, 71, 557, 71, 563, 71, 71, 71, - 560, 71, 568, 566, 567, 71, 71, 71, 564, 71, + 510, 515, 71, 522, 521, 518, 516, 71, 520, 517, + 71, 524, 526, 71, 71, 523, 71, 71, 71, 71, + 71, 525, 529, 530, 531, 71, 71, 71, 71, 536, + 528, 71, 538, 71, 535, 533, 532, 539, 527, 71, + 541, 534, 71, 71, 71, 71, 71, 537, 71, 71, + 542, 71, 540, 551, 547, 552, 71, 543, 550, 544, + 546, 71, 545, 554, 71, 548, 71, 549, 557, 71, + 553, 71, 556, 71, 558, 71, 71, 555, 559, 71, + 561, 563, 71, 71, 71, 71, 566, 567, 564, 562, + 71, 71, 71, 71, 568, 560, 71, 565, 71, 71, - 569, 71, 71, 71, 574, 71, 565, 570, 578, 575, - 71, 573, 71, 577, 576, 572, 571, 71, 580, 71, - 71, 582, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 579, 584, 592, 585, 587, 594, 71, 593, 71, - 71, 581, 71, 583, 591, 588, 586, 589, 590, 71, - 71, 596, 71, 71, 595, 599, 71, 602, 597, 71, - 603, 598, 604, 71, 605, 71, 71, 600, 71, 71, - 71, 601, 71, 608, 71, 71, 611, 71, 71, 607, - 612, 71, 614, 71, 71, 71, 644, 610, 606, 613, - 71, 609, 71, 71, 615, 71, 617, 628, 71, 631, + 573, 571, 71, 572, 71, 71, 569, 71, 574, 71, + 71, 71, 579, 570, 575, 580, 71, 582, 71, 578, + 71, 71, 581, 577, 576, 583, 71, 585, 71, 587, + 71, 71, 71, 71, 71, 71, 71, 71, 589, 584, + 590, 592, 588, 71, 599, 594, 601, 71, 71, 598, + 71, 71, 71, 591, 593, 595, 600, 596, 71, 71, + 71, 71, 603, 597, 602, 71, 604, 609, 606, 605, + 71, 610, 71, 71, 607, 611, 608, 612, 71, 71, + 71, 71, 71, 71, 614, 615, 618, 71, 71, 71, + 71, 71, 619, 621, 620, 71, 71, 71, 71, 71, - 616, 71, 618, 71, 626, 627, 71, 619, 632, 620, - 71, 629, 633, 71, 630, 621, 71, 622, 635, 71, - 623, 624, 636, 638, 71, 634, 71, 625, 637, 71, - 71, 71, 640, 641, 639, 71, 646, 71, 71, 71, - 71, 71, 71, 71, 149, 71, 643, 642, 652, 71, - 648, 653, 647, 71, 649, 656, 645, 71, 151, 650, - 71, 659, 658, 651, 654, 71, 657, 71, 655, 71, - 71, 71, 660, 71, 71, 71, 71, 668, 666, 71, - 661, 670, 71, 71, 663, 71, 664, 669, 662, 667, - 671, 665, 673, 71, 71, 672, 71, 674, 71, 71, + 616, 613, 617, 635, 624, 622, 71, 150, 71, 623, + 71, 625, 634, 642, 672, 633, 626, 636, 627, 71, + 71, 645, 637, 638, 628, 71, 629, 71, 71, 630, + 631, 71, 646, 639, 71, 641, 632, 640, 71, 71, + 644, 643, 648, 71, 71, 651, 71, 71, 653, 71, + 647, 71, 71, 71, 71, 71, 71, 71, 71, 148, + 659, 649, 71, 650, 654, 655, 656, 660, 663, 71, + 71, 652, 662, 657, 658, 661, 152, 666, 664, 71, + 665, 71, 667, 71, 71, 71, 71, 71, 147, 673, + 71, 71, 71, 675, 668, 676, 677, 71, 670, 678, - 71, 71, 675, 71, 679, 678, 71, 676, 71, 677, - 684, 695, 680, 71, 71, 685, 71, 687, 71, 681, - 688, 71, 682, 689, 683, 71, 686, 690, 71, 71, - 691, 71, 692, 71, 71, 693, 694, 71, 71, 71, - 698, 71, 697, 71, 696, 71, 699, 702, 703, 71, - 71, 71, 71, 704, 71, 708, 706, 71, 71, 71, - 147, 71, 700, 709, 701, 71, 71, 71, 705, 711, - 71, 710, 707, 71, 712, 71, 715, 714, 713, 71, - 71, 720, 71, 716, 718, 719, 717, 722, 721, 71, - 71, 723, 724, 71, 725, 71, 71, 71, 71, 728, + 669, 671, 680, 674, 679, 71, 71, 71, 71, 71, + 682, 71, 71, 71, 71, 71, 686, 685, 681, 71, + 694, 71, 691, 683, 687, 71, 684, 692, 71, 71, + 690, 688, 693, 696, 689, 695, 71, 697, 71, 71, + 698, 71, 699, 71, 71, 71, 700, 701, 71, 71, + 702, 71, 707, 71, 705, 71, 71, 704, 706, 710, + 709, 71, 703, 71, 71, 71, 71, 711, 71, 713, + 715, 71, 71, 716, 708, 718, 71, 71, 71, 712, + 719, 71, 722, 71, 720, 717, 714, 71, 71, 71, + 71, 729, 725, 726, 145, 721, 723, 71, 71, 724, - 727, 71, 729, 71, 71, 71, 736, 71, 734, 71, - 71, 71, 71, 71, 730, 146, 726, 733, 737, 731, - 71, 740, 742, 71, 71, 735, 744, 739, 71, 738, - 743, 749, 741, 745, 746, 71, 71, 71, 747, 71, - 751, 753, 748, 71, 71, 71, 71, 71, 752, 71, - 755, 756, 754, 750, 71, 71, 757, 71, 71, 762, - 71, 71, 71, 760, 761, 71, 765, 758, 759, 764, - 71, 767, 71, 71, 771, 71, 769, 763, 71, 768, - 71, 71, 766, 773, 774, 71, 776, 772, 71, 775, - 71, 770, 71, 71, 778, 780, 71, 71, 71, 71, + 71, 71, 71, 727, 731, 728, 732, 730, 71, 71, + 71, 71, 735, 734, 71, 736, 737, 71, 71, 71, + 71, 739, 71, 741, 743, 71, 71, 749, 733, 738, + 740, 744, 71, 71, 71, 71, 746, 71, 751, 742, + 71, 747, 71, 750, 143, 745, 748, 752, 753, 71, + 71, 71, 754, 71, 71, 71, 755, 760, 756, 758, + 761, 759, 762, 71, 71, 71, 71, 757, 71, 763, + 764, 765, 71, 71, 771, 71, 766, 71, 71, 71, + 71, 71, 776, 769, 770, 767, 768, 773, 71, 71, + 71, 780, 71, 774, 772, 778, 777, 71, 71, 775, - 71, 71, 786, 71, 71, 787, 777, 779, 71, 71, - 71, 71, 788, 71, 781, 782, 783, 71, 784, 789, - 785, 795, 71, 71, 790, 793, 71, 71, 791, 71, - 792, 71, 794, 71, 71, 797, 796, 800, 71, 71, - 71, 71, 71, 808, 71, 798, 71, 71, 799, 801, - 802, 809, 71, 71, 71, 807, 803, 804, 805, 806, - 812, 71, 71, 810, 811, 71, 813, 71, 814, 71, - 71, 71, 817, 815, 818, 816, 820, 819, 71, 71, - 71, 71, 71, 821, 71, 822, 823, 151, 71, 824, - 71, 826, 828, 829, 71, 825, 827, 71, 830, 71, + 783, 71, 781, 782, 71, 784, 71, 71, 785, 71, + 779, 787, 71, 71, 789, 71, 71, 71, 71, 795, + 71, 71, 71, 788, 796, 71, 786, 71, 71, 71, + 797, 790, 71, 791, 792, 71, 793, 798, 794, 804, + 71, 71, 799, 71, 802, 71, 800, 71, 801, 71, + 803, 71, 71, 806, 805, 809, 71, 71, 71, 71, + 71, 817, 807, 71, 71, 71, 808, 810, 811, 818, + 71, 71, 71, 816, 812, 813, 814, 815, 821, 71, + 71, 820, 819, 71, 822, 71, 71, 823, 71, 71, + 826, 824, 828, 825, 827, 71, 71, 833, 71, 71, - 71, 71, 831, 836, 71, 71, 832, 71, 837, 839, - 71, 71, 842, 71, 833, 834, 838, 71, 71, 71, - 840, 835, 71, 844, 841, 71, 848, 71, 71, 845, - 71, 71, 71, 843, 71, 849, 71, 850, 71, 71, - 144, 71, 71, 847, 71, 865, 851, 846, 862, 71, - 863, 860, 71, 866, 853, 861, 852, 71, 864, 71, - 867, 71, 854, 71, 71, 872, 855, 869, 71, 856, - 71, 71, 868, 880, 71, 71, 857, 858, 870, 859, - 71, 885, 71, 871, 71, 873, 874, 71, 875, 71, - 884, 876, 71, 882, 949, 881, 877, 71, 887, 886, + 829, 830, 71, 71, 831, 832, 71, 152, 71, 838, + 71, 835, 837, 834, 839, 836, 71, 71, 71, 71, + 845, 71, 840, 848, 71, 841, 71, 846, 71, 71, + 851, 71, 842, 843, 71, 847, 71, 849, 853, 844, + 71, 71, 71, 857, 71, 71, 71, 71, 850, 71, + 71, 852, 854, 858, 859, 71, 71, 71, 71, 71, + 856, 889, 860, 71, 871, 872, 855, 71, 875, 71, + 862, 861, 71, 869, 870, 71, 71, 863, 71, 873, + 874, 864, 71, 876, 865, 71, 877, 878, 71, 881, + 71, 866, 867, 71, 868, 71, 71, 71, 880, 879, - 71, 889, 878, 879, 888, 883, 71, 71, 71, 71, - 891, 890, 71, 892, 893, 71, 71, 71, 894, 71, - 71, 895, 71, 897, 71, 901, 71, 71, 71, 71, - 900, 896, 71, 904, 71, 71, 71, 898, 908, 899, - 909, 902, 903, 926, 71, 905, 906, 910, 71, 911, - 914, 907, 71, 915, 912, 71, 71, 913, 71, 71, - 917, 71, 71, 916, 918, 71, 71, 71, 919, 921, - 71, 922, 71, 920, 71, 923, 71, 71, 928, 71, - 71, 925, 71, 71, 71, 931, 71, 71, 71, 929, - 930, 71, 924, 933, 71, 934, 927, 936, 71, 935, + 71, 882, 883, 71, 884, 904, 893, 885, 891, 890, + 894, 71, 886, 71, 71, 896, 71, 71, 887, 888, + 895, 892, 71, 898, 71, 71, 71, 71, 900, 899, + 906, 897, 901, 902, 71, 71, 905, 903, 71, 71, + 71, 71, 910, 71, 71, 71, 71, 909, 71, 913, + 917, 71, 919, 71, 930, 71, 71, 912, 907, 908, + 911, 71, 914, 915, 920, 923, 918, 71, 916, 921, + 71, 71, 922, 924, 71, 71, 926, 927, 71, 71, + 925, 71, 71, 71, 928, 931, 71, 71, 71, 929, + 71, 932, 71, 934, 71, 71, 71, 935, 939, 71, - 71, 937, 932, 71, 71, 938, 71, 71, 945, 943, - 71, 71, 940, 941, 944, 71, 71, 939, 71, 942, - 71, 71, 71, 950, 952, 946, 955, 948, 953, 71, - 947, 951, 71, 71, 71, 71, 71, 954, 71, 71, - 71, 71, 961, 966, 963, 71, 71, 71, 142, 71, - 71, 71, 71, 956, 957, 958, 967, 971, 959, 960, - 965, 962, 968, 964, 71, 969, 970, 71, 974, 71, - 71, 71, 973, 71, 71, 71, 71, 71, 972, 71, - 976, 983, 978, 71, 71, 985, 987, 71, 988, 71, - 975, 71, 71, 977, 71, 979, 981, 984, 980, 982, + 71, 942, 71, 71, 941, 933, 71, 71, 71, 940, + 936, 937, 944, 938, 71, 945, 71, 947, 71, 946, + 71, 943, 71, 948, 71, 71, 954, 949, 71, 956, + 950, 955, 71, 952, 71, 71, 71, 71, 953, 71, + 964, 71, 961, 951, 71, 959, 963, 71, 71, 957, + 962, 71, 71, 966, 958, 71, 71, 71, 71, 71, + 71, 960, 71, 977, 974, 71, 71, 972, 965, 71, + 71, 71, 967, 71, 970, 968, 969, 971, 979, 978, + 975, 71, 973, 71, 976, 71, 71, 981, 71, 982, + 980, 984, 985, 71, 71, 983, 71, 987, 71, 71, - 71, 71, 71, 71, 986, 989, 71, 993, 990, 71, - 995, 996, 991, 71, 71, 1000, 997, 71, 71, 999, - 992, 71, 1002, 71, 994, 71, 71, 1005, 151, 71, - 71, 1004, 998, 71, 1007, 71, 1008, 71, 1001, 71, - 71, 71, 71, 1003, 1006, 1011, 71, 71, 71, 1023, - 71, 71, 71, 71, 1024, 1009, 1014, 1010, 1012, 1026, - 71, 1068, 71, 1049, 71, 1013, 1015, 1025, 1016, 71, - 71, 71, 1017, 71, 1018, 1028, 1027, 1029, 1019, 71, - 1020, 71, 71, 1033, 1030, 1021, 1031, 1032, 1034, 71, - 1022, 71, 71, 1035, 71, 1036, 71, 1038, 71, 1039, + 71, 994, 71, 71, 989, 986, 996, 71, 71, 998, + 999, 71, 71, 71, 988, 71, 71, 995, 990, 992, + 71, 991, 993, 71, 1000, 1002, 71, 71, 997, 71, + 1001, 1004, 1007, 1003, 71, 1006, 71, 1011, 71, 1008, + 71, 71, 1010, 71, 1005, 1009, 1013, 71, 71, 1016, + 152, 71, 71, 1015, 71, 1019, 1018, 71, 71, 1014, + 1012, 71, 71, 71, 71, 71, 1017, 1022, 71, 71, + 1034, 71, 1037, 71, 71, 1035, 71, 71, 1021, 1020, + 1023, 1039, 1025, 71, 1026, 71, 1027, 1024, 71, 1036, + 1042, 1028, 71, 1029, 71, 1060, 71, 1030, 1040, 1031, - 71, 1042, 71, 71, 1041, 71, 71, 1037, 1047, 1040, - 1050, 1046, 1043, 1048, 71, 71, 1045, 1051, 71, 71, - 71, 1044, 71, 71, 1054, 1052, 71, 1063, 71, 71, - 71, 1066, 1062, 1067, 71, 71, 71, 1053, 71, 1055, - 1064, 1065, 1072, 71, 1056, 71, 1057, 1074, 1069, 1073, - 71, 71, 1058, 71, 1070, 1071, 71, 1059, 1060, 1075, - 71, 1078, 71, 71, 1061, 71, 71, 71, 1079, 1076, - 1080, 1081, 1084, 1077, 1082, 71, 71, 71, 71, 71, - 71, 71, 1083, 71, 1085, 1087, 71, 71, 71, 71, - 71, 71, 1092, 1089, 1094, 1086, 1093, 1088, 1091, 1096, + 71, 1038, 71, 71, 1032, 1044, 1041, 1047, 1043, 1033, + 1045, 71, 71, 71, 1046, 71, 71, 1049, 1050, 1048, + 1053, 71, 71, 71, 1052, 1058, 1059, 71, 1051, 1057, + 1054, 71, 71, 1061, 1062, 71, 1056, 71, 71, 71, + 71, 71, 1055, 71, 71, 3093, 1074, 71, 1078, 1063, + 71, 1073, 71, 1077, 1064, 1065, 71, 1066, 1075, 1076, + 71, 71, 1067, 71, 1068, 1083, 71, 71, 1079, 1081, + 1069, 1084, 1085, 71, 71, 1070, 1071, 1080, 71, 1089, + 1082, 71, 1072, 71, 1086, 71, 71, 1088, 1090, 71, + 71, 71, 1087, 71, 1095, 71, 71, 71, 1092, 1093, - 71, 1090, 71, 71, 1098, 71, 1095, 1097, 71, 71, - 71, 71, 71, 71, 71, 1104, 1105, 1101, 1106, 1109, - 1099, 1100, 71, 1107, 1103, 71, 1102, 71, 1108, 71, - 71, 1112, 71, 1116, 71, 1110, 1113, 71, 71, 1114, - 71, 1122, 1115, 71, 71, 1111, 1117, 71, 71, 1124, - 71, 71, 71, 71, 1118, 71, 1120, 1126, 1119, 1121, - 71, 71, 71, 1128, 71, 1125, 1130, 1127, 1123, 1131, - 71, 71, 1129, 71, 71, 1133, 1134, 71, 1132, 71, - 1136, 71, 1139, 1140, 71, 1135, 71, 1138, 71, 71, - 71, 1144, 1143, 1137, 71, 1141, 71, 1142, 71, 71, + 71, 1098, 1096, 71, 71, 1091, 71, 1094, 71, 71, + 71, 71, 71, 71, 1097, 1103, 71, 1099, 1100, 1104, + 1102, 1107, 1105, 1101, 71, 1109, 1106, 71, 1108, 71, + 71, 71, 71, 1110, 71, 71, 71, 1115, 71, 1116, + 1117, 71, 1119, 1111, 1112, 1118, 1114, 1113, 1120, 71, + 71, 71, 71, 1122, 71, 1125, 71, 71, 1121, 1129, + 1126, 71, 71, 1123, 71, 1127, 1130, 1124, 1128, 71, + 71, 71, 1135, 1137, 71, 71, 71, 1131, 71, 71, + 1132, 1139, 1133, 71, 71, 1134, 71, 1141, 71, 1138, + 71, 1136, 71, 1143, 71, 1144, 1142, 1140, 71, 1146, - 71, 1150, 1148, 1151, 71, 71, 71, 71, 71, 71, - 1152, 1153, 1145, 1149, 71, 1146, 1155, 1158, 1147, 1154, - 71, 71, 71, 71, 1157, 1159, 1156, 1160, 71, 71, - 1161, 71, 71, 71, 71, 1164, 1165, 71, 1162, 71, - 71, 1170, 1171, 71, 71, 1166, 71, 71, 71, 1163, - 71, 1168, 71, 1174, 71, 1167, 71, 1173, 1172, 1169, - 1176, 1178, 1177, 1175, 71, 71, 71, 71, 71, 1184, - 71, 71, 71, 1180, 1179, 71, 71, 1190, 71, 71, - 71, 1188, 71, 1187, 1195, 1181, 1185, 1183, 1189, 1192, - 1186, 1193, 1182, 71, 71, 71, 71, 71, 1194, 1196, + 71, 71, 1145, 1147, 1148, 71, 1149, 1152, 1153, 71, + 71, 1151, 71, 71, 71, 71, 71, 1150, 1156, 1154, + 71, 1157, 71, 71, 71, 1163, 1161, 1164, 71, 71, + 1155, 71, 1158, 71, 1165, 1159, 71, 1162, 71, 1168, + 71, 1166, 1160, 1167, 1171, 71, 1169, 71, 1173, 71, + 71, 71, 1172, 71, 71, 71, 71, 71, 1177, 1178, + 1170, 71, 1174, 1175, 71, 71, 1183, 1184, 1179, 1176, + 71, 71, 71, 71, 71, 71, 1181, 1187, 71, 1180, + 1186, 71, 1191, 71, 1182, 1185, 71, 71, 1189, 71, + 1188, 71, 71, 1190, 1197, 71, 1193, 71, 71, 71, - 1191, 71, 71, 71, 71, 71, 71, 1199, 71, 71, - 1197, 71, 1202, 1205, 71, 1198, 71, 71, 1200, 71, - 71, 1203, 1220, 1201, 1208, 1206, 1209, 1204, 71, 71, - 1215, 71, 71, 1211, 1207, 71, 1216, 1210, 1217, 71, - 71, 71, 1212, 71, 1213, 71, 1219, 1214, 1218, 71, - 1224, 71, 1223, 71, 1221, 71, 1226, 71, 1222, 1229, - 71, 71, 1230, 71, 1227, 71, 1231, 71, 1225, 71, - 1233, 1234, 71, 71, 1228, 71, 71, 71, 1235, 71, - 71, 71, 71, 1232, 71, 71, 1241, 1236, 1237, 1239, - 71, 1240, 1242, 71, 1238, 71, 1246, 71, 1251, 71, + 71, 1192, 1203, 71, 71, 1201, 71, 71, 1194, 1200, + 1233, 1196, 1198, 1202, 1199, 1205, 1195, 1206, 71, 71, + 1208, 71, 71, 71, 1207, 71, 1204, 1209, 71, 71, + 71, 71, 71, 71, 1212, 71, 1218, 71, 71, 1210, + 1215, 71, 1211, 71, 71, 1213, 71, 1216, 71, 71, + 1214, 1224, 1219, 1229, 1217, 1222, 71, 1228, 1221, 1220, + 1225, 71, 1226, 71, 1223, 1227, 1230, 71, 1231, 71, + 71, 71, 71, 71, 71, 71, 71, 1232, 1237, 1236, + 1239, 1242, 71, 71, 3093, 1240, 71, 71, 1234, 1235, + 1247, 1238, 1243, 71, 71, 1241, 71, 71, 1244, 1246, - 1243, 71, 1245, 1244, 71, 1248, 1250, 71, 1247, 1253, - 71, 71, 1257, 1252, 71, 1249, 1255, 1258, 71, 71, - 71, 71, 1256, 71, 1262, 71, 3048, 1254, 71, 1272, - 1270, 1271, 1261, 1259, 1260, 71, 71, 71, 1269, 1275, - 1263, 1273, 71, 1264, 1265, 71, 71, 71, 1266, 71, - 71, 1274, 1276, 71, 1267, 1277, 71, 1278, 1268, 71, - 1280, 71, 71, 71, 1281, 71, 1282, 1279, 71, 1283, - 1287, 1284, 1285, 71, 1290, 1291, 71, 71, 71, 1329, - 71, 71, 1286, 1292, 71, 1294, 1289, 1288, 1293, 71, - 1295, 71, 1296, 71, 1297, 1303, 1298, 71, 1299, 1300, + 71, 71, 71, 1245, 71, 1248, 71, 71, 71, 71, + 71, 71, 1249, 1254, 1252, 1250, 71, 1259, 71, 1253, + 1251, 1255, 71, 71, 1264, 71, 1256, 71, 1258, 1257, + 71, 1260, 1263, 71, 71, 1266, 71, 71, 1261, 1265, + 71, 1268, 1262, 1270, 71, 71, 1269, 71, 1271, 71, + 71, 1275, 71, 1267, 1273, 71, 1272, 1274, 71, 1284, + 1282, 1283, 1992, 1276, 1287, 71, 1277, 1278, 71, 1285, + 71, 1279, 1288, 71, 71, 1286, 71, 1280, 71, 1289, + 71, 1281, 71, 1291, 71, 1290, 71, 1293, 71, 71, + 71, 1294, 71, 1295, 1292, 71, 1296, 1300, 1298, 71, - 1301, 71, 71, 71, 1302, 1307, 71, 1305, 71, 71, - 1308, 71, 1306, 1310, 71, 71, 1304, 71, 71, 1316, - 71, 1317, 71, 1311, 1312, 71, 71, 71, 1309, 71, - 1318, 71, 1315, 1313, 1320, 71, 1314, 71, 71, 71, - 1319, 1321, 71, 1325, 1322, 1326, 71, 1328, 71, 1323, - 71, 71, 71, 1330, 1327, 71, 1331, 1334, 71, 1336, - 71, 1332, 1324, 71, 1333, 71, 1337, 71, 1338, 71, - 1341, 71, 1335, 71, 71, 71, 71, 1343, 71, 71, - 71, 1345, 1347, 71, 71, 3048, 1349, 1346, 1339, 71, - 1340, 71, 71, 1342, 1351, 1344, 1352, 1348, 71, 1350, + 1303, 1304, 1297, 71, 71, 71, 71, 71, 1305, 1301, + 1299, 71, 71, 1307, 71, 1306, 1317, 1302, 1308, 1312, + 1309, 71, 1310, 71, 1311, 1318, 1313, 71, 1314, 1315, + 1316, 71, 71, 71, 1322, 71, 71, 71, 1319, 1323, + 71, 1325, 1321, 71, 71, 71, 71, 1331, 71, 1320, + 71, 1326, 1327, 71, 71, 1332, 1333, 1324, 71, 71, + 1330, 71, 71, 1328, 1329, 71, 1335, 71, 1338, 71, + 3093, 1337, 1334, 1336, 1340, 1341, 71, 1343, 71, 71, + 71, 1344, 1342, 1345, 71, 71, 71, 1349, 71, 1346, + 1339, 71, 1351, 71, 71, 1348, 71, 1352, 71, 1353, - 1353, 71, 71, 1354, 71, 1356, 1355, 1357, 71, 71, - 71, 71, 1362, 1363, 1365, 1359, 71, 1360, 71, 71, - 71, 1364, 71, 71, 1361, 71, 1358, 1369, 71, 71, - 71, 1366, 71, 1373, 1374, 71, 1368, 1376, 71, 71, - 71, 1375, 1367, 71, 71, 71, 71, 71, 71, 1370, - 1371, 71, 1377, 71, 1383, 1372, 71, 1380, 1378, 71, - 1381, 71, 1388, 71, 1379, 1382, 1387, 71, 1384, 71, - 3048, 71, 1390, 1392, 1386, 71, 1385, 71, 1393, 71, - 71, 71, 1389, 71, 1395, 1396, 71, 71, 1391, 1394, - 71, 71, 1401, 1403, 1397, 1402, 1398, 1405, 1399, 71, + 71, 1356, 71, 71, 1347, 71, 71, 71, 1358, 71, + 71, 1350, 1360, 71, 71, 1362, 71, 1364, 1361, 1354, + 71, 1355, 71, 1357, 71, 1366, 1359, 1367, 1363, 71, + 71, 1365, 1368, 71, 1369, 1370, 71, 1371, 1372, 71, + 71, 71, 71, 1377, 1378, 1380, 1374, 71, 1375, 71, + 71, 71, 1379, 71, 71, 1376, 71, 1373, 1384, 71, + 71, 71, 1381, 71, 1388, 1389, 71, 1383, 1391, 71, + 71, 71, 1390, 1382, 71, 71, 71, 71, 71, 71, + 1385, 1386, 71, 1392, 71, 1398, 1387, 71, 1395, 1393, + 71, 1396, 71, 1403, 71, 1394, 1397, 1402, 71, 1399, - 1404, 1400, 71, 71, 71, 71, 1406, 1408, 71, 1410, - 1407, 71, 1409, 71, 71, 71, 1413, 71, 71, 1415, - 71, 71, 1420, 1412, 71, 71, 1414, 71, 1421, 71, - 1411, 1417, 71, 1424, 71, 1416, 1418, 71, 1419, 71, - 71, 1425, 71, 1422, 71, 71, 1423, 71, 1427, 1431, - 1433, 1426, 1428, 71, 1432, 1429, 71, 71, 1436, 71, - 71, 1430, 71, 71, 1441, 1435, 1438, 1442, 1440, 71, - 71, 1434, 71, 71, 1437, 71, 1443, 71, 1444, 1445, - 71, 71, 71, 1439, 71, 1446, 1449, 1448, 71, 71, - 1452, 1447, 71, 71, 71, 1451, 71, 71, 1458, 1450, + 71, 3093, 71, 1405, 1407, 1401, 71, 1400, 71, 1408, + 71, 71, 71, 1404, 71, 1410, 1411, 71, 71, 1406, + 1409, 71, 71, 1416, 1418, 1412, 1417, 1413, 1420, 1414, + 71, 1419, 1415, 71, 71, 71, 71, 1421, 1423, 71, + 1425, 1422, 71, 1424, 71, 71, 71, 1428, 71, 71, + 1430, 71, 71, 1435, 1427, 71, 71, 1429, 71, 1436, + 71, 1426, 1432, 71, 1439, 71, 1431, 1433, 71, 1434, + 71, 71, 1440, 71, 1437, 71, 71, 1438, 71, 1442, + 1446, 1448, 1441, 1443, 71, 1447, 1444, 71, 71, 1451, + 71, 71, 1445, 71, 71, 1456, 1450, 1453, 1457, 1455, - 1460, 1454, 1455, 1459, 71, 1461, 71, 71, 1456, 71, - 1463, 71, 1453, 71, 71, 1457, 71, 71, 71, 71, - 1471, 1467, 71, 1466, 71, 1474, 71, 1462, 71, 1472, - 1464, 71, 1465, 71, 1477, 71, 1468, 1470, 1469, 1476, - 71, 71, 71, 71, 71, 71, 3048, 1475, 1473, 71, - 71, 1485, 71, 71, 1478, 1486, 1488, 71, 1482, 71, - 1479, 1480, 1481, 1491, 1484, 1487, 1483, 1489, 71, 71, - 71, 71, 71, 71, 1490, 1495, 71, 71, 71, 1496, - 1493, 1498, 71, 1492, 71, 1494, 1502, 71, 1504, 1503, - 71, 71, 1497, 1499, 71, 71, 71, 1500, 1501, 71, + 71, 71, 1449, 71, 71, 1452, 71, 1458, 71, 1459, + 1460, 71, 71, 71, 1454, 71, 1461, 1464, 1463, 71, + 71, 1467, 1462, 71, 71, 71, 1466, 71, 71, 1473, + 1465, 1475, 1469, 1470, 1474, 71, 1476, 71, 71, 1471, + 71, 1478, 71, 1468, 71, 71, 1472, 71, 71, 71, + 71, 1486, 1482, 71, 1481, 71, 1489, 71, 1477, 71, + 1487, 1479, 71, 1480, 71, 1492, 71, 1483, 1485, 1484, + 1491, 71, 71, 71, 71, 71, 71, 71, 1490, 1488, + 71, 71, 1500, 71, 71, 1493, 1501, 71, 3093, 1497, + 71, 1494, 1495, 1496, 1508, 1499, 1502, 1498, 71, 1504, - 1507, 71, 71, 1508, 1506, 1505, 1509, 71, 1513, 1514, - 71, 71, 71, 71, 71, 71, 1510, 1519, 1517, 1511, - 71, 1518, 71, 71, 1521, 71, 71, 1512, 71, 1515, - 71, 1522, 71, 1516, 71, 1520, 1523, 71, 1524, 71, - 71, 1528, 1525, 1526, 71, 1529, 71, 71, 71, 1530, - 1527, 71, 1533, 71, 1535, 71, 71, 71, 1539, 71, - 1531, 71, 1534, 71, 71, 1532, 71, 71, 1542, 1536, - 1537, 1544, 71, 1540, 71, 71, 1547, 71, 1545, 1541, - 71, 1538, 1543, 71, 1546, 71, 71, 1550, 1548, 71, - 1552, 1549, 1553, 71, 71, 71, 1551, 71, 71, 1560, + 1505, 71, 71, 1503, 1506, 71, 71, 1507, 71, 71, + 71, 1509, 1512, 71, 1515, 1510, 1513, 71, 71, 1519, + 71, 1511, 71, 71, 1521, 71, 71, 1520, 1516, 1514, + 71, 71, 71, 71, 1518, 71, 1524, 1517, 1522, 1523, + 71, 71, 1530, 1528, 1525, 1526, 1531, 71, 71, 71, + 71, 71, 1527, 1529, 1536, 1534, 1533, 71, 1535, 71, + 71, 1538, 71, 71, 1540, 71, 1539, 1532, 71, 71, + 71, 1537, 1543, 71, 71, 1541, 71, 1546, 71, 71, + 71, 71, 1545, 71, 1542, 1550, 71, 1552, 71, 1547, + 1544, 71, 71, 1556, 71, 1551, 71, 71, 1549, 1548, - 71, 71, 71, 1555, 1554, 1561, 71, 71, 71, 1558, - 1569, 1564, 1565, 1556, 1557, 71, 71, 1567, 71, 71, - 71, 1562, 1559, 1568, 1571, 71, 1563, 71, 1566, 71, - 71, 1573, 71, 1575, 1572, 71, 71, 1578, 71, 1570, - 1576, 71, 1579, 71, 1574, 71, 71, 71, 1584, 1583, - 71, 71, 1580, 1577, 71, 71, 71, 1600, 1590, 1591, - 1582, 1581, 1585, 71, 71, 71, 1587, 71, 1592, 1588, - 71, 1586, 1598, 1602, 71, 1595, 1594, 1597, 71, 71, - 1596, 1589, 71, 71, 1593, 71, 1601, 1599, 1603, 71, - 71, 71, 71, 71, 1609, 1610, 1608, 71, 71, 1612, + 71, 1553, 1559, 1554, 1561, 71, 71, 71, 1557, 71, + 1562, 71, 1564, 71, 1558, 1560, 1555, 71, 71, 71, + 71, 1567, 1570, 71, 1566, 1569, 71, 1563, 71, 71, + 71, 1565, 71, 1572, 71, 1577, 71, 1568, 71, 71, + 71, 1578, 71, 1575, 1571, 71, 3093, 1573, 1574, 1581, + 1582, 71, 1579, 1584, 1586, 1576, 71, 1588, 1580, 1583, + 71, 1585, 1587, 71, 71, 1590, 71, 71, 71, 71, + 71, 71, 1595, 71, 1592, 1593, 71, 1596, 1589, 71, + 71, 71, 71, 1601, 1600, 71, 1591, 1597, 71, 71, + 71, 3093, 1607, 1594, 1608, 1599, 71, 1598, 71, 1604, - 71, 71, 1604, 1611, 71, 71, 1615, 71, 1605, 1614, - 1606, 71, 1607, 71, 71, 71, 1616, 71, 71, 71, - 1613, 1624, 71, 71, 71, 71, 71, 71, 71, 1622, - 71, 1617, 1620, 1621, 1618, 1619, 1623, 1629, 71, 1627, - 71, 71, 1625, 71, 1626, 1631, 71, 1628, 1630, 71, - 1632, 71, 71, 71, 1635, 71, 1633, 1634, 71, 71, - 1637, 71, 1639, 71, 1636, 71, 1646, 1638, 1640, 1642, - 71, 1641, 71, 1643, 1647, 71, 1648, 71, 1644, 1652, - 71, 71, 1649, 1650, 1651, 1653, 1645, 71, 71, 71, - 71, 71, 71, 1655, 1656, 71, 71, 1664, 1665, 71, + 1602, 71, 1605, 71, 1609, 1603, 71, 71, 71, 1617, + 1614, 1612, 1611, 1615, 1606, 1613, 71, 71, 1618, 71, + 1610, 1616, 1619, 71, 71, 71, 71, 71, 71, 1620, + 71, 1626, 1627, 1625, 71, 1629, 1621, 71, 71, 1628, + 71, 71, 71, 1622, 71, 1623, 71, 1624, 71, 1631, + 1632, 71, 71, 1633, 71, 71, 1641, 71, 71, 71, + 1634, 71, 71, 1630, 71, 71, 1635, 71, 1637, 1638, + 1639, 71, 1636, 71, 1640, 1646, 71, 1642, 1644, 1643, + 71, 71, 1649, 71, 71, 1648, 1645, 1647, 1650, 71, + 71, 71, 71, 71, 71, 1652, 71, 1651, 1654, 1656, - 71, 1659, 71, 71, 71, 1661, 1654, 1658, 1662, 1657, - 71, 1663, 71, 71, 1660, 71, 71, 1667, 71, 71, - 1666, 71, 1674, 71, 71, 71, 1669, 1671, 1668, 1670, - 1677, 71, 1676, 71, 1678, 1675, 1673, 71, 71, 1685, - 1680, 1672, 1682, 1681, 1686, 71, 71, 71, 1679, 71, - 71, 1691, 71, 1693, 71, 1690, 1684, 71, 1683, 1694, - 1687, 71, 1688, 1696, 71, 71, 1695, 71, 71, 71, - 1692, 1689, 1700, 1697, 71, 1704, 71, 71, 71, 1702, - 71, 71, 1699, 71, 1698, 1703, 71, 1701, 1705, 71, - 71, 71, 71, 71, 1708, 1716, 1706, 71, 1709, 1714, + 1657, 71, 1653, 1658, 1663, 1655, 1664, 71, 71, 1659, + 71, 1660, 1665, 71, 71, 71, 1661, 1668, 71, 1662, + 1666, 1669, 71, 71, 71, 71, 71, 71, 1667, 1672, + 1673, 1670, 71, 1681, 1671, 1676, 71, 71, 71, 71, + 1682, 71, 1674, 1675, 71, 1678, 1680, 71, 1679, 71, + 71, 1677, 71, 71, 1688, 71, 71, 1684, 1683, 1689, + 71, 1690, 71, 1686, 1691, 1685, 1687, 71, 1694, 71, + 71, 1696, 71, 1693, 71, 1697, 71, 1698, 1692, 71, + 71, 1700, 1705, 71, 1701, 1695, 71, 1706, 71, 71, + 71, 1699, 1702, 1711, 71, 1710, 71, 1707, 1704, 71, - 71, 71, 1707, 1710, 1711, 1717, 1712, 1713, 71, 71, - 1718, 71, 71, 71, 1723, 71, 71, 71, 1727, 71, - 71, 1715, 71, 71, 3048, 71, 1722, 1720, 1719, 1729, - 71, 1721, 1725, 71, 71, 1726, 71, 1724, 1730, 1731, - 71, 1732, 1728, 1736, 71, 1735, 1734, 71, 71, 1733, - 71, 1740, 71, 71, 71, 71, 71, 71, 71, 1747, - 1738, 1742, 71, 71, 71, 71, 1737, 1741, 1743, 1739, - 1744, 1841, 71, 71, 1745, 1748, 1752, 1746, 1750, 71, - 1749, 1751, 71, 1753, 71, 71, 1756, 71, 1755, 71, - 1754, 1759, 71, 1757, 71, 71, 71, 71, 1760, 1758, + 1703, 1708, 1713, 71, 1714, 71, 3093, 71, 71, 1716, + 71, 1709, 1712, 1715, 71, 71, 1718, 1720, 71, 1719, + 1717, 71, 1724, 71, 1722, 71, 1726, 71, 71, 71, + 1723, 1721, 71, 1725, 71, 71, 71, 1728, 71, 1734, + 71, 1729, 71, 1736, 71, 1737, 1727, 1730, 1731, 71, + 1732, 71, 1733, 71, 71, 1738, 71, 1743, 71, 71, + 71, 1735, 71, 71, 1739, 1747, 71, 71, 71, 1742, + 71, 1740, 1749, 1741, 71, 1745, 71, 71, 1746, 1750, + 1744, 1751, 1748, 71, 71, 1755, 1753, 71, 1752, 71, + 1754, 1756, 71, 1760, 71, 71, 71, 71, 71, 1758, - 71, 71, 71, 71, 71, 71, 1765, 71, 71, 1769, - 71, 71, 1766, 3048, 71, 1775, 1761, 1767, 1763, 1762, - 1764, 71, 1768, 1770, 71, 1778, 1773, 71, 1772, 1777, - 71, 71, 1779, 1774, 71, 71, 1771, 71, 71, 1776, - 1783, 71, 1786, 1787, 71, 71, 1780, 1788, 71, 71, - 1781, 1784, 71, 1785, 71, 1782, 1790, 71, 71, 1791, - 1794, 71, 71, 1796, 71, 1789, 1795, 1797, 1798, 71, - 1792, 1800, 1799, 1793, 71, 71, 71, 71, 1805, 1802, - 1803, 71, 71, 1804, 71, 71, 71, 71, 1812, 71, - 1814, 71, 71, 71, 71, 1815, 71, 1806, 1807, 1808, + 71, 71, 71, 1757, 1762, 1767, 71, 71, 1759, 1761, + 1763, 71, 1764, 1770, 1768, 1765, 1771, 71, 71, 71, + 71, 1766, 1772, 1774, 1769, 1773, 71, 1776, 71, 1775, + 1777, 71, 71, 71, 1779, 71, 71, 71, 1780, 71, + 1778, 71, 71, 71, 71, 71, 1785, 71, 71, 71, + 1789, 71, 1786, 1790, 1797, 71, 1781, 1783, 71, 1782, + 1784, 1787, 1788, 1793, 71, 71, 1791, 1798, 1792, 1795, + 1794, 71, 1799, 71, 71, 71, 71, 71, 1803, 71, + 1796, 71, 1806, 1807, 71, 1808, 71, 1810, 71, 71, + 1800, 1801, 71, 1804, 1802, 1805, 71, 1809, 71, 1811, - 1801, 71, 71, 1817, 1809, 1816, 1810, 1811, 1819, 1813, - 1820, 71, 1822, 1818, 71, 71, 71, 1824, 71, 71, - 1821, 71, 1826, 71, 71, 1829, 1830, 71, 71, 1832, - 71, 71, 71, 71, 71, 1823, 1838, 71, 1837, 1827, - 71, 1825, 1834, 1835, 71, 1828, 71, 71, 1831, 71, - 71, 1844, 71, 1836, 71, 1842, 1833, 71, 71, 1848, - 71, 1839, 1840, 1847, 71, 71, 1851, 1850, 1852, 1854, - 1846, 71, 71, 71, 71, 1843, 71, 1849, 1845, 1853, - 71, 71, 1855, 71, 71, 71, 1859, 71, 1862, 71, - 1863, 1856, 71, 1858, 71, 1857, 71, 71, 1866, 71, + 1814, 71, 71, 1816, 71, 1818, 1815, 1817, 71, 71, + 1812, 71, 1820, 1813, 1819, 71, 71, 71, 71, 1822, + 1823, 71, 71, 1824, 1825, 71, 1832, 1826, 1827, 1828, + 71, 71, 71, 1821, 1829, 1834, 71, 1830, 71, 71, + 1835, 71, 71, 71, 1837, 1831, 1840, 71, 71, 1838, + 1836, 1833, 71, 71, 1839, 71, 1841, 1844, 71, 71, + 1846, 71, 71, 1842, 71, 1849, 1850, 71, 71, 1843, + 1852, 71, 71, 71, 1857, 1847, 71, 1858, 71, 1845, + 71, 1854, 1851, 1848, 71, 1855, 71, 71, 71, 71, + 71, 1864, 71, 1853, 1856, 1861, 1862, 71, 71, 71, - 71, 71, 1860, 1871, 71, 1870, 71, 1865, 71, 1864, - 71, 1861, 71, 71, 1867, 71, 1875, 1868, 71, 1876, - 1872, 1869, 1879, 1873, 1877, 1874, 1878, 71, 71, 1882, - 71, 1883, 71, 71, 71, 71, 71, 1889, 71, 1880, - 1886, 71, 71, 71, 1881, 1894, 1884, 1891, 1892, 71, - 71, 1893, 1885, 1890, 1887, 71, 1888, 71, 71, 1899, - 71, 1900, 71, 1903, 1895, 1901, 1904, 71, 1896, 71, - 1902, 71, 71, 1897, 71, 71, 1908, 71, 1898, 1906, - 71, 71, 71, 71, 1910, 1913, 71, 1907, 1915, 1909, - 71, 71, 71, 1905, 71, 1911, 71, 71, 71, 71, + 1868, 1860, 71, 1867, 1871, 1859, 71, 71, 71, 1870, + 71, 1874, 71, 1866, 1872, 1863, 71, 71, 1865, 1869, + 1875, 71, 71, 71, 71, 1877, 1873, 1876, 1878, 71, + 71, 71, 1881, 71, 1884, 1885, 1880, 71, 71, 71, + 71, 71, 1879, 1888, 71, 71, 1893, 71, 1882, 71, + 1892, 71, 1887, 3093, 71, 71, 71, 1883, 1886, 1889, + 1890, 71, 1898, 71, 1899, 1897, 1891, 1901, 1894, 1895, + 1896, 1900, 71, 71, 1904, 71, 71, 71, 71, 71, + 71, 71, 1911, 1908, 1902, 71, 71, 71, 71, 1903, + 1913, 1906, 1914, 71, 71, 1915, 71, 1905, 1907, 71, - 1920, 1925, 1916, 1919, 1917, 71, 1912, 71, 1914, 71, - 1921, 1922, 71, 1923, 71, 1918, 71, 1932, 71, 1924, - 71, 71, 1926, 1927, 71, 71, 1928, 71, 1931, 1930, - 1929, 71, 1933, 71, 71, 71, 1937, 71, 71, 1934, - 1936, 71, 71, 1938, 71, 1935, 1939, 1940, 1941, 71, - 71, 71, 71, 1943, 71, 1948, 1946, 71, 1942, 1947, - 71, 71, 71, 71, 71, 1953, 71, 71, 1944, 1950, - 1945, 71, 71, 71, 1957, 1949, 1954, 1952, 71, 1959, - 1951, 1956, 71, 71, 1955, 1963, 71, 1958, 1961, 71, - 71, 71, 1960, 1964, 71, 1962, 71, 1969, 71, 71, + 1909, 1910, 1912, 1916, 71, 1917, 1920, 1921, 71, 1922, + 71, 1923, 1925, 1926, 71, 1918, 1924, 71, 71, 71, + 1919, 71, 71, 1930, 71, 71, 1928, 71, 71, 71, + 71, 1932, 1935, 1937, 1929, 71, 1931, 1933, 71, 71, + 1927, 71, 71, 71, 71, 1943, 71, 1938, 1941, 1942, + 1944, 71, 1936, 1934, 1939, 1945, 71, 71, 1947, 71, + 1940, 71, 71, 71, 71, 1948, 1949, 71, 1950, 71, + 1953, 71, 1951, 71, 1952, 71, 1955, 1946, 71, 71, + 1959, 71, 71, 1954, 1958, 1956, 71, 71, 71, 71, + 1957, 1960, 1961, 1962, 1963, 71, 71, 71, 1965, 71, - 1971, 71, 71, 71, 1972, 1965, 71, 1966, 1975, 1967, - 1968, 1973, 71, 71, 1974, 1970, 71, 1977, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 1978, 3048, 71, - 71, 1985, 1980, 1976, 1981, 1982, 1989, 71, 71, 1984, - 1979, 1988, 71, 71, 1986, 1992, 1987, 1983, 1990, 71, - 71, 71, 71, 1996, 1993, 1995, 71, 71, 1991, 71, - 71, 1998, 71, 1994, 1999, 71, 71, 71, 2000, 2004, - 1997, 2002, 71, 71, 2006, 2008, 71, 2003, 2001, 71, - 71, 71, 2011, 71, 71, 2005, 2010, 2007, 2012, 2013, - 71, 71, 2016, 71, 71, 71, 71, 71, 71, 2017, + 71, 1970, 71, 1968, 71, 1969, 1964, 71, 71, 71, + 71, 1975, 71, 1972, 1966, 71, 1967, 71, 1979, 71, + 1971, 71, 1976, 1974, 1978, 71, 1973, 71, 1980, 71, + 1977, 71, 1983, 1981, 1985, 71, 71, 71, 71, 1986, + 71, 3093, 1984, 1991, 71, 1993, 1982, 1987, 71, 71, + 1994, 71, 1990, 1988, 71, 1989, 1995, 71, 71, 1996, + 71, 1997, 71, 1999, 71, 71, 71, 71, 71, 2000, + 71, 71, 71, 71, 2011, 71, 2007, 2002, 1998, 2003, + 2004, 71, 71, 71, 2010, 2001, 2006, 71, 2015, 2008, + 2014, 71, 2005, 2009, 71, 71, 2018, 71, 71, 2012, - 71, 2022, 71, 2019, 71, 2009, 2018, 2026, 2014, 71, - 2023, 2015, 2024, 71, 2021, 2020, 71, 71, 71, 2028, - 71, 2027, 2031, 71, 2025, 71, 2029, 71, 2033, 71, - 2034, 71, 2032, 71, 2030, 71, 71, 71, 2036, 2040, - 2035, 71, 71, 2037, 2038, 2042, 71, 2039, 71, 71, - 2043, 71, 71, 2045, 2046, 2044, 71, 2041, 71, 71, - 71, 2047, 2049, 2048, 2052, 71, 71, 71, 2050, 2051, - 2053, 71, 71, 71, 71, 71, 71, 2054, 71, 71, - 2061, 2056, 2055, 2062, 2058, 2059, 2057, 71, 2063, 71, - 71, 71, 71, 2064, 2060, 2066, 2072, 71, 71, 2067, + 2017, 71, 2013, 2020, 71, 71, 71, 71, 2021, 71, + 71, 2016, 2026, 2022, 71, 2019, 2024, 71, 2025, 2028, + 71, 2030, 71, 2023, 71, 71, 71, 2033, 2027, 2032, + 71, 2034, 71, 71, 2029, 2035, 2038, 71, 71, 71, + 2031, 2042, 71, 2039, 71, 71, 2043, 71, 71, 2041, + 2036, 71, 2040, 2037, 2047, 71, 2044, 71, 2048, 2046, + 71, 2051, 71, 2045, 71, 71, 2049, 71, 71, 2052, + 2053, 2056, 71, 2054, 2057, 71, 2058, 71, 2059, 71, + 2050, 2055, 71, 71, 71, 71, 71, 2061, 2060, 71, + 71, 2065, 2067, 2063, 71, 2069, 2064, 2068, 71, 71, - 71, 71, 2074, 71, 71, 2068, 2065, 2071, 2076, 2069, - 2073, 71, 71, 71, 3048, 2079, 2077, 2070, 2081, 2075, - 2080, 71, 2082, 71, 71, 2078, 2083, 71, 71, 2086, - 71, 71, 2087, 2085, 71, 2084, 2091, 71, 71, 2092, - 71, 71, 2095, 2090, 71, 71, 2088, 71, 71, 2096, - 71, 2097, 2093, 2098, 71, 71, 2100, 2089, 71, 2094, - 2099, 71, 71, 2105, 71, 2101, 71, 2102, 2103, 71, - 2104, 71, 71, 71, 71, 71, 2108, 71, 71, 2112, - 2114, 71, 2115, 71, 2107, 71, 71, 71, 71, 2106, - 2109, 2110, 2117, 2111, 71, 71, 71, 71, 2116, 2113, + 71, 2062, 2070, 71, 71, 2072, 2066, 2074, 2073, 71, + 71, 2071, 2077, 71, 71, 71, 71, 71, 2076, 71, + 71, 71, 71, 71, 2075, 71, 71, 2086, 2078, 2083, + 2081, 2080, 2079, 2084, 2082, 2088, 71, 71, 71, 71, + 2085, 2087, 71, 2089, 2091, 71, 2092, 3093, 71, 71, + 2095, 2097, 71, 71, 2093, 71, 2090, 2096, 2098, 2101, + 2094, 2099, 71, 71, 2100, 2104, 2103, 2106, 2102, 2107, + 2105, 71, 71, 71, 71, 71, 71, 2108, 2111, 71, + 2109, 71, 71, 2112, 2116, 71, 71, 2117, 71, 71, + 2115, 71, 2120, 71, 71, 2126, 2110, 2113, 71, 2121, - 2119, 2121, 2124, 71, 71, 2120, 71, 2122, 71, 71, - 71, 2118, 2125, 2123, 71, 71, 2126, 71, 71, 71, - 2135, 71, 71, 71, 71, 2127, 2136, 2132, 71, 2130, - 2290, 2128, 2138, 2129, 2134, 2131, 71, 2137, 2133, 71, - 2140, 2139, 2141, 71, 2142, 71, 71, 71, 2145, 71, - 71, 2143, 2148, 71, 71, 2149, 71, 71, 2146, 2144, - 71, 2147, 2150, 2154, 71, 2155, 71, 71, 2157, 71, - 71, 71, 2153, 71, 2151, 71, 2152, 2159, 71, 71, - 2162, 71, 2163, 71, 2161, 2164, 2156, 71, 2158, 71, - 2160, 71, 2167, 71, 2169, 71, 2165, 71, 2168, 2171, + 2118, 71, 2122, 2123, 71, 71, 2125, 2119, 2114, 71, + 2124, 71, 71, 2127, 71, 2128, 71, 71, 71, 2130, + 71, 71, 71, 2133, 71, 71, 2139, 71, 71, 2137, + 71, 71, 2132, 71, 2129, 2140, 71, 2135, 2134, 2131, + 71, 2142, 2136, 2141, 71, 2144, 71, 2138, 71, 2146, + 2149, 71, 71, 71, 71, 71, 2143, 71, 71, 2145, + 2150, 2147, 71, 71, 2148, 71, 71, 71, 2160, 71, + 71, 71, 2151, 2152, 2161, 2157, 71, 2155, 2153, 2162, + 71, 2154, 2159, 2156, 2163, 71, 2158, 71, 2165, 2164, + 2166, 71, 2167, 71, 71, 2168, 71, 2170, 2169, 2173, - 71, 71, 71, 2166, 71, 2174, 71, 2173, 71, 2175, - 2170, 2177, 71, 71, 71, 2172, 2181, 71, 71, 71, - 71, 2179, 71, 2178, 2176, 71, 2185, 2186, 71, 71, - 2190, 71, 2180, 71, 2182, 2184, 71, 71, 2187, 71, - 2188, 2183, 71, 2192, 2189, 71, 71, 2197, 71, 71, - 2199, 2193, 71, 2191, 71, 2200, 71, 2194, 2198, 71, - 2195, 2204, 71, 71, 2205, 71, 2203, 71, 71, 71, - 2201, 2196, 2202, 2209, 2211, 71, 2207, 71, 2214, 71, - 2212, 71, 2216, 71, 71, 71, 2208, 2206, 71, 71, - 2217, 71, 2213, 2210, 2218, 71, 2220, 71, 2221, 71, + 71, 71, 71, 2171, 71, 71, 2172, 2174, 71, 2175, + 2179, 71, 2180, 71, 71, 2182, 71, 71, 2184, 71, + 2178, 2176, 71, 71, 71, 2177, 2187, 71, 2186, 2188, + 71, 71, 71, 2181, 71, 2183, 71, 2185, 2189, 71, + 2190, 2193, 2194, 71, 2196, 71, 2191, 71, 71, 71, + 71, 2200, 2199, 2192, 2198, 2202, 71, 71, 2195, 71, + 71, 71, 2205, 71, 71, 2197, 2201, 2208, 71, 71, + 71, 71, 2213, 71, 2204, 2212, 2203, 71, 2206, 71, + 2207, 71, 71, 71, 2209, 2211, 2217, 71, 71, 71, + 2219, 71, 2210, 71, 2215, 71, 2214, 2216, 71, 2224, - 2215, 71, 71, 71, 71, 2226, 2219, 2227, 2222, 2228, - 2223, 2224, 2225, 71, 71, 71, 71, 2230, 2229, 71, - 2232, 2233, 71, 2234, 2236, 2231, 2237, 71, 71, 71, - 71, 2235, 2240, 71, 71, 71, 71, 71, 71, 2242, - 2247, 71, 71, 71, 2238, 2239, 2248, 2243, 71, 2241, - 2251, 71, 2244, 2245, 2246, 71, 2252, 2253, 71, 71, - 2250, 71, 2254, 2249, 2256, 2257, 2255, 2258, 71, 71, - 71, 71, 71, 2260, 71, 71, 71, 71, 2264, 2265, - 71, 3048, 71, 2259, 71, 71, 2261, 2267, 2268, 2262, - 71, 2270, 71, 2269, 2266, 2263, 71, 71, 71, 71, + 71, 2218, 2220, 71, 2225, 2226, 71, 2221, 71, 2222, + 71, 2227, 2230, 71, 71, 2231, 71, 71, 2232, 2223, + 71, 71, 2236, 71, 71, 71, 2228, 2234, 2229, 2238, + 2239, 2233, 2241, 2243, 71, 71, 2240, 2235, 71, 71, + 2244, 71, 71, 71, 2242, 71, 2237, 2245, 2248, 71, + 71, 71, 2249, 71, 2247, 2254, 71, 2255, 2250, 2246, + 2251, 71, 2252, 71, 2253, 71, 71, 71, 2259, 2256, + 71, 2260, 71, 2261, 71, 2258, 2257, 71, 71, 71, + 71, 2262, 2267, 71, 71, 71, 71, 71, 71, 2268, + 2263, 2274, 2264, 2269, 2265, 2266, 2271, 2270, 71, 2273, - 71, 2271, 71, 2274, 2275, 71, 2272, 2277, 71, 71, - 71, 71, 71, 2276, 71, 2281, 2284, 71, 2273, 2283, - 71, 71, 71, 2285, 2280, 71, 71, 2289, 2278, 2279, - 2288, 71, 2282, 71, 71, 71, 2291, 2287, 2286, 2297, - 2292, 71, 2293, 71, 71, 2296, 2294, 2298, 71, 2300, - 71, 71, 71, 71, 2302, 71, 71, 2295, 71, 71, - 2299, 2301, 71, 71, 2306, 71, 71, 71, 2308, 2303, - 2304, 2309, 2310, 71, 2305, 2311, 71, 2312, 71, 2313, - 71, 2314, 71, 71, 71, 2316, 2319, 71, 2307, 2315, - 71, 2321, 71, 71, 2324, 71, 2318, 71, 71, 2320, + 71, 2272, 71, 2275, 2278, 71, 71, 2279, 2280, 71, + 71, 71, 2283, 2281, 2277, 2284, 2282, 71, 71, 71, + 2276, 71, 2285, 71, 71, 2287, 71, 71, 71, 2291, + 2292, 2286, 71, 2289, 71, 71, 71, 2294, 2288, 2295, + 71, 2297, 71, 2296, 71, 71, 2290, 71, 2293, 2298, + 71, 71, 2302, 71, 2299, 2301, 71, 71, 71, 71, + 71, 2304, 71, 2303, 2308, 71, 2311, 2300, 71, 71, + 2310, 71, 71, 2307, 2312, 71, 2315, 2305, 2306, 2316, + 71, 71, 2309, 2318, 71, 71, 71, 2313, 2317, 71, + 2320, 2314, 71, 71, 2323, 2321, 71, 2325, 2319, 71, - 71, 2317, 71, 2327, 2328, 71, 71, 71, 2323, 71, - 2322, 2329, 71, 71, 2332, 2333, 71, 2325, 2326, 71, - 71, 2331, 71, 71, 71, 2330, 71, 2337, 71, 2339, - 2334, 2379, 2336, 2335, 2340, 71, 2341, 71, 2342, 71, - 2343, 71, 71, 2338, 2345, 71, 71, 2347, 71, 2348, - 2346, 71, 71, 71, 2344, 71, 2353, 71, 71, 2355, - 71, 2356, 71, 2349, 2350, 71, 71, 71, 71, 71, - 71, 2352, 71, 2351, 2359, 2362, 2357, 2354, 2358, 71, - 2360, 2365, 71, 71, 71, 71, 71, 71, 71, 2361, - 71, 2372, 2363, 2366, 71, 71, 71, 71, 71, 2364, + 2324, 2327, 71, 71, 71, 2329, 71, 71, 71, 71, + 71, 2326, 2322, 2328, 2333, 71, 71, 71, 71, 2337, + 71, 2335, 2331, 2336, 2339, 2330, 2332, 2338, 71, 71, + 71, 71, 2340, 2341, 71, 71, 71, 71, 71, 2343, + 2345, 2334, 2348, 71, 71, 71, 2350, 71, 2346, 71, + 2347, 2342, 71, 2349, 2344, 2353, 71, 71, 71, 2356, + 2357, 71, 2352, 2351, 71, 71, 71, 71, 2354, 2358, + 71, 2361, 2362, 71, 71, 2355, 2360, 71, 71, 71, + 71, 2369, 71, 2359, 2366, 2368, 71, 2363, 2364, 2365, + 2370, 71, 2371, 71, 2372, 71, 71, 71, 2367, 71, - 2369, 71, 2371, 2373, 71, 2368, 2383, 71, 3048, 2367, - 2370, 2374, 2375, 2376, 71, 71, 71, 71, 2380, 2381, - 2377, 2382, 2384, 71, 2378, 71, 2385, 71, 2386, 71, - 2387, 71, 71, 2388, 71, 71, 2390, 71, 71, 71, - 71, 71, 2389, 2397, 71, 71, 71, 2395, 71, 2401, - 2402, 71, 2391, 2392, 71, 71, 2393, 2394, 71, 2396, - 2398, 71, 2399, 2400, 2404, 2405, 71, 2406, 2403, 2407, - 71, 71, 2408, 71, 71, 71, 71, 71, 2410, 2409, - 71, 2416, 71, 2417, 71, 2418, 71, 71, 2411, 71, - 71, 71, 2412, 2413, 71, 2415, 2414, 2423, 71, 2422, + 2376, 71, 2375, 71, 2374, 71, 2377, 71, 2373, 71, + 2382, 71, 71, 2378, 71, 2379, 2384, 71, 2385, 71, + 71, 71, 71, 71, 71, 2381, 2387, 2380, 71, 2388, + 71, 2383, 2386, 2391, 71, 2389, 2394, 71, 71, 71, + 2390, 71, 71, 2395, 2392, 71, 71, 71, 2401, 71, + 2393, 71, 71, 71, 2398, 71, 71, 71, 2402, 2397, + 2400, 71, 71, 2405, 2396, 2408, 2399, 2403, 2404, 71, + 2409, 71, 2418, 2406, 2410, 2417, 2411, 71, 2407, 2412, + 71, 2413, 71, 71, 2414, 71, 2415, 71, 2416, 71, + 71, 71, 71, 71, 71, 71, 2419, 2426, 71, 71, - 2427, 71, 2420, 2425, 2419, 71, 71, 2426, 2421, 71, - 2424, 2428, 2429, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 2431, 2435, 2430, 71, 71, 2433, 2439, - 2440, 71, 2443, 71, 2432, 71, 71, 2434, 2436, 2437, - 2442, 2438, 2441, 71, 71, 2447, 71, 2444, 2446, 2448, - 2445, 71, 71, 2451, 71, 71, 71, 71, 2455, 71, - 71, 2454, 2457, 71, 71, 2453, 71, 2452, 71, 2458, - 71, 2449, 2450, 2462, 71, 2459, 71, 2463, 71, 2456, - 2465, 71, 2461, 71, 2460, 71, 71, 71, 71, 2470, - 71, 2472, 71, 71, 71, 2468, 2466, 2469, 2467, 2473, + 71, 71, 2424, 71, 2430, 2431, 71, 71, 2421, 2420, + 2434, 71, 2423, 2422, 2425, 71, 2433, 2428, 2427, 2429, + 2436, 71, 2432, 71, 2435, 71, 71, 71, 71, 71, + 71, 71, 71, 2439, 2445, 71, 2446, 71, 2447, 71, + 71, 2437, 2440, 2438, 71, 71, 2441, 2442, 2443, 2444, + 2450, 71, 71, 71, 71, 2449, 2451, 2448, 2454, 71, + 71, 2455, 2456, 71, 71, 2452, 2457, 2458, 71, 2460, + 71, 71, 2453, 2459, 71, 71, 71, 71, 71, 71, + 2464, 71, 71, 2462, 2468, 2469, 71, 2472, 71, 2461, + 71, 71, 2470, 71, 2463, 71, 2465, 2466, 71, 2467, - 2464, 71, 2471, 71, 71, 71, 2474, 2475, 2476, 71, - 71, 71, 2477, 71, 71, 71, 71, 3048, 2479, 2480, - 2482, 2483, 2485, 71, 2478, 2481, 2486, 71, 2484, 71, - 71, 71, 2489, 2491, 3048, 2488, 2487, 71, 71, 71, - 71, 2493, 2492, 71, 2496, 71, 2497, 71, 2495, 2490, - 71, 2499, 71, 2494, 71, 2501, 71, 2500, 71, 71, - 2502, 71, 71, 2498, 2503, 2505, 71, 2504, 71, 71, - 2506, 71, 71, 2507, 71, 2512, 2521, 2511, 2508, 2513, - 71, 71, 2510, 71, 71, 71, 71, 2509, 2514, 2516, - 71, 71, 2515, 2517, 71, 71, 2519, 71, 2518, 2520, + 2471, 2473, 2475, 71, 2478, 71, 2474, 2477, 2476, 71, + 71, 2482, 71, 71, 71, 2480, 71, 2486, 71, 71, + 2485, 71, 2479, 2484, 71, 2483, 2488, 71, 71, 2489, + 2481, 71, 71, 2492, 2493, 71, 71, 2490, 2487, 71, + 2494, 2496, 71, 71, 71, 71, 71, 2491, 71, 2497, + 2501, 71, 71, 2499, 2495, 2500, 2498, 2503, 71, 71, + 2502, 71, 2506, 71, 2504, 71, 2505, 71, 2507, 71, + 71, 2509, 71, 2508, 71, 71, 2510, 2511, 71, 2513, + 2514, 2516, 71, 2517, 71, 2512, 71, 2515, 71, 71, + 71, 2522, 71, 2518, 2519, 2523, 2520, 71, 71, 2524, - 71, 71, 2525, 71, 71, 71, 2523, 71, 2522, 2524, - 2530, 71, 2526, 71, 71, 71, 2534, 71, 71, 71, - 71, 2539, 71, 2527, 2532, 2528, 2529, 71, 71, 2533, - 2541, 2538, 2531, 2542, 2536, 2543, 71, 2535, 71, 71, - 2537, 71, 2544, 71, 71, 71, 2545, 71, 71, 2546, - 71, 71, 2549, 2540, 2547, 71, 2552, 2553, 71, 71, - 2548, 2554, 71, 2556, 2550, 71, 2551, 2555, 71, 71, - 2557, 2558, 71, 71, 71, 2562, 71, 71, 2560, 71, - 2563, 71, 71, 2565, 2566, 71, 2561, 2567, 71, 2559, - 71, 71, 2569, 2568, 71, 2570, 2564, 2572, 71, 71, + 71, 2527, 71, 2528, 71, 2526, 2521, 2525, 71, 2530, + 71, 71, 2532, 71, 2531, 71, 2536, 2533, 71, 71, + 2534, 2529, 71, 71, 2535, 71, 71, 2537, 2540, 71, + 2538, 71, 2543, 2544, 71, 2539, 71, 2541, 71, 71, + 71, 2545, 71, 71, 71, 2547, 2546, 2548, 2550, 71, + 71, 71, 2542, 71, 2549, 2551, 71, 71, 2556, 71, + 71, 71, 2554, 71, 2553, 2555, 71, 2552, 2557, 2561, + 71, 71, 71, 2565, 71, 71, 71, 71, 71, 2558, + 2563, 2559, 2560, 71, 71, 2562, 2572, 2564, 2569, 2570, + 71, 2567, 71, 2573, 2566, 2574, 2579, 2568, 71, 71, - 2573, 2574, 71, 2576, 71, 71, 71, 71, 2580, 2575, - 71, 2571, 2581, 71, 71, 71, 71, 2583, 2577, 2582, - 71, 2579, 2584, 71, 2578, 71, 2589, 71, 2592, 71, - 71, 2588, 71, 2585, 2591, 71, 2586, 71, 71, 71, - 2587, 2595, 2593, 2594, 71, 71, 71, 2597, 71, 71, - 3048, 2600, 2590, 71, 2604, 71, 71, 71, 71, 71, - 2606, 71, 2598, 2599, 2596, 71, 2601, 2603, 2607, 2602, - 2605, 2611, 2608, 2610, 2614, 71, 2612, 71, 2609, 71, - 2613, 71, 2615, 71, 2616, 71, 2617, 71, 2618, 71, - 71, 71, 71, 71, 2620, 2619, 71, 2626, 71, 71, + 71, 71, 71, 2571, 2575, 71, 2576, 2577, 2580, 2578, + 71, 71, 71, 2581, 71, 2582, 71, 71, 2585, 2586, + 71, 2587, 71, 2588, 71, 71, 2583, 71, 71, 2589, + 71, 2584, 2590, 2591, 71, 2593, 2595, 71, 71, 71, + 2598, 2596, 71, 2599, 71, 2600, 71, 71, 2592, 2594, + 2601, 71, 71, 71, 2605, 71, 71, 2606, 2597, 2607, + 71, 71, 2609, 71, 2602, 71, 71, 71, 2613, 71, + 2603, 2614, 71, 2604, 71, 71, 2608, 2616, 2610, 2615, + 71, 2612, 2617, 71, 2611, 71, 71, 71, 2622, 2625, + 71, 71, 2618, 2621, 71, 2624, 71, 71, 71, 71, - 71, 2623, 2627, 2629, 71, 71, 2631, 71, 71, 71, - 2621, 3048, 2630, 2624, 2632, 71, 2625, 2622, 2628, 2633, - 71, 71, 71, 71, 2634, 71, 2637, 2638, 71, 2639, - 2635, 2636, 2640, 71, 2642, 71, 71, 71, 71, 2643, - 71, 71, 2646, 71, 2645, 2647, 71, 71, 2641, 2644, - 2648, 71, 2649, 71, 71, 71, 2652, 71, 71, 71, - 3048, 2651, 2657, 71, 2655, 2653, 2650, 71, 71, 71, - 2658, 2699, 2660, 71, 2661, 71, 2662, 2656, 71, 2654, - 2659, 71, 2663, 2664, 71, 2665, 2667, 71, 2666, 2668, - 71, 2669, 71, 71, 71, 71, 71, 2674, 71, 71, + 2619, 2626, 2628, 71, 71, 2620, 2627, 2630, 71, 71, + 71, 2623, 71, 2633, 2637, 71, 71, 71, 71, 71, + 2631, 2632, 2629, 71, 2653, 71, 2636, 2634, 2639, 71, + 2635, 2638, 2641, 2644, 71, 2642, 2640, 2643, 2645, 71, + 2647, 71, 2646, 71, 2648, 71, 2649, 71, 2650, 71, + 2651, 71, 71, 71, 2654, 71, 71, 2659, 71, 71, + 71, 71, 2656, 2660, 2662, 71, 71, 2652, 2663, 2664, + 71, 2665, 2666, 71, 71, 2657, 2658, 2661, 2655, 71, + 71, 71, 71, 2667, 2671, 71, 2672, 71, 2668, 2669, + 71, 71, 71, 71, 71, 2677, 2673, 2682, 71, 2670, - 2673, 2671, 2670, 71, 2675, 71, 2677, 71, 71, 2682, - 2676, 71, 71, 2672, 2678, 71, 2680, 2684, 71, 2679, - 71, 71, 71, 71, 2685, 71, 2681, 2686, 2687, 71, - 2688, 71, 2692, 71, 71, 71, 71, 2683, 71, 71, - 2689, 71, 2695, 71, 71, 2691, 2690, 2693, 2694, 2700, - 2696, 71, 2697, 2702, 71, 2704, 71, 71, 2698, 2705, - 71, 2707, 71, 71, 71, 71, 71, 2712, 71, 2701, - 2703, 2711, 71, 71, 71, 71, 2716, 71, 2706, 2708, - 2709, 2710, 2718, 71, 71, 71, 71, 71, 2720, 71, - 2721, 2717, 2713, 2715, 71, 71, 2714, 2723, 71, 2724, + 2678, 71, 2675, 2680, 71, 71, 2679, 2676, 71, 2674, + 2681, 2683, 71, 71, 71, 71, 71, 71, 2684, 71, + 71, 71, 2692, 2687, 71, 71, 2690, 2688, 71, 2695, + 2696, 2686, 2693, 2685, 71, 2697, 71, 71, 71, 2691, + 71, 2689, 2694, 2699, 3093, 2698, 71, 2700, 2702, 71, + 2701, 2703, 71, 2704, 71, 71, 71, 2706, 71, 2707, + 2709, 2708, 71, 2710, 2705, 71, 71, 2711, 2712, 71, + 71, 71, 71, 2717, 71, 71, 2715, 2719, 71, 71, + 71, 71, 71, 2713, 2720, 71, 2721, 2722, 71, 2723, + 2716, 2714, 71, 71, 2724, 2727, 71, 71, 71, 2718, - 71, 2726, 71, 71, 2719, 2731, 2728, 2725, 2722, 2730, - 71, 71, 2729, 71, 71, 2735, 71, 71, 71, 2737, - 2736, 2727, 71, 71, 2740, 2733, 2741, 71, 71, 2732, - 71, 2742, 2743, 71, 2734, 2738, 71, 71, 71, 71, - 2748, 2745, 2739, 71, 2746, 71, 71, 2751, 71, 71, - 71, 2744, 71, 2756, 71, 71, 2747, 2752, 71, 71, - 2749, 2750, 2759, 71, 3048, 2755, 71, 2753, 2758, 2760, - 71, 2761, 2762, 71, 2757, 2754, 2764, 71, 2763, 2765, - 71, 2766, 71, 71, 2768, 71, 71, 71, 2767, 71, - 71, 71, 2773, 2774, 71, 71, 71, 71, 2778, 71, + 2725, 71, 2730, 71, 71, 71, 2728, 71, 71, 71, + 2729, 71, 2726, 2731, 2735, 2734, 71, 2732, 2737, 71, + 2739, 71, 2733, 2740, 71, 2742, 71, 2738, 71, 71, + 71, 2736, 2741, 71, 2747, 71, 2748, 2750, 2746, 71, + 71, 71, 71, 71, 2743, 2744, 2745, 71, 2749, 71, + 2753, 2755, 71, 2757, 71, 71, 2754, 71, 71, 71, + 2752, 71, 2758, 2751, 2760, 71, 71, 2756, 2761, 71, + 2763, 71, 2765, 71, 2768, 2762, 2759, 71, 2767, 71, + 71, 71, 2766, 2772, 71, 2769, 71, 2774, 71, 2770, + 2764, 2773, 71, 2775, 2777, 2778, 71, 2780, 71, 2771, - 71, 2779, 71, 71, 3048, 2769, 2777, 71, 2782, 2770, - 2775, 2771, 2772, 2783, 71, 2776, 2784, 71, 71, 71, - 2780, 2781, 2787, 2785, 71, 71, 71, 71, 71, 2790, - 71, 71, 2791, 2786, 2789, 71, 2788, 71, 71, 71, - 2794, 71, 71, 71, 2796, 2792, 71, 2797, 71, 2795, - 71, 2793, 71, 71, 71, 71, 71, 2813, 71, 2806, - 2798, 2807, 2799, 2800, 2801, 2809, 2802, 71, 2808, 2803, - 2804, 71, 2810, 71, 2805, 2811, 2814, 71, 71, 2816, - 71, 71, 2815, 2817, 71, 2824, 2812, 2818, 2819, 71, - 71, 2820, 2821, 71, 71, 2822, 2823, 71, 71, 2825, + 71, 2779, 71, 71, 71, 71, 71, 2785, 71, 2782, + 2783, 71, 2776, 71, 2788, 71, 71, 71, 71, 71, + 2781, 2793, 71, 3093, 71, 2784, 2790, 71, 2786, 2787, + 2789, 71, 2792, 2795, 2796, 71, 2794, 2797, 71, 71, + 71, 2791, 71, 71, 2798, 2799, 2806, 2800, 2801, 71, + 2802, 71, 2803, 71, 71, 2805, 71, 71, 71, 2804, + 71, 2810, 2807, 2811, 71, 2808, 71, 71, 71, 71, + 2817, 71, 71, 71, 2818, 71, 2926, 71, 2816, 2809, + 71, 2814, 2821, 71, 2812, 2813, 2822, 71, 2815, 2823, + 71, 71, 2819, 2826, 2820, 71, 2824, 2825, 71, 71, - 71, 71, 71, 71, 2831, 71, 71, 2826, 2830, 71, - 2834, 2827, 2848, 2828, 71, 71, 2833, 71, 71, 71, - 71, 2829, 71, 2835, 71, 2839, 71, 2832, 2838, 2869, - 2836, 2840, 71, 2841, 71, 2837, 71, 2842, 71, 2846, - 71, 2843, 71, 71, 2847, 71, 71, 2844, 2852, 71, - 2845, 2849, 2855, 71, 2853, 2850, 2856, 71, 71, 2858, - 71, 2904, 71, 2851, 2857, 2854, 2859, 71, 71, 2861, - 71, 2862, 71, 2860, 2863, 71, 2864, 71, 2865, 71, - 2866, 71, 2867, 71, 2868, 71, 2870, 71, 71, 71, - 71, 71, 71, 2875, 71, 71, 71, 2871, 71, 2879, + 2829, 71, 71, 71, 71, 71, 2828, 2827, 2830, 71, + 2833, 71, 71, 71, 71, 71, 71, 2835, 71, 3093, + 2836, 2834, 2831, 71, 2832, 71, 71, 71, 71, 71, + 71, 2845, 2837, 2846, 2838, 2839, 2840, 2844, 2848, 2841, + 71, 71, 2842, 2843, 71, 2849, 71, 2847, 2867, 2850, + 2852, 71, 2853, 71, 2851, 71, 2855, 71, 2915, 2854, + 2856, 71, 2857, 2858, 71, 71, 2859, 2860, 2863, 71, + 2861, 2862, 71, 71, 71, 2866, 71, 2864, 71, 71, + 71, 71, 71, 2865, 2872, 71, 2871, 71, 71, 71, + 71, 71, 2868, 2875, 2874, 71, 71, 2876, 2954, 2869, - 71, 2872, 71, 2881, 71, 71, 2876, 71, 2877, 2888, - 2873, 2874, 2878, 71, 2882, 71, 2883, 2880, 71, 2885, - 71, 71, 71, 2887, 71, 2886, 71, 2890, 71, 71, - 71, 2884, 71, 71, 2894, 2889, 2897, 71, 71, 2895, - 2899, 71, 71, 2891, 2892, 2893, 71, 2896, 2900, 71, - 2898, 2901, 71, 71, 71, 2903, 71, 71, 71, 71, - 2912, 2902, 2905, 2909, 71, 71, 2910, 2906, 2908, 71, - 71, 2911, 71, 71, 71, 71, 71, 2907, 2913, 71, - 71, 71, 71, 71, 2919, 71, 2916, 2923, 2914, 2918, - 2915, 2920, 2926, 71, 2927, 2924, 71, 2921, 2917, 71, + 2870, 71, 2880, 71, 2879, 2877, 71, 2873, 71, 2878, + 2881, 71, 2882, 71, 71, 71, 2887, 2885, 2883, 2884, + 2886, 2888, 71, 2889, 71, 71, 3093, 71, 71, 71, + 2891, 2890, 2893, 2894, 2896, 71, 2897, 71, 2899, 71, + 2900, 71, 71, 2898, 2895, 2892, 71, 2902, 71, 2903, + 71, 2901, 2904, 71, 2905, 71, 2906, 71, 2907, 71, + 2908, 71, 2909, 71, 2910, 71, 71, 71, 2913, 71, + 71, 71, 2918, 71, 71, 71, 2912, 71, 71, 2914, + 71, 71, 71, 2922, 2924, 71, 71, 71, 2928, 2921, + 2919, 2916, 2911, 2917, 2920, 2923, 2925, 71, 71, 2931, - 2922, 2928, 71, 2925, 71, 2929, 2930, 71, 2931, 71, - 71, 71, 71, 2934, 71, 2932, 2935, 2936, 71, 2933, - 2939, 71, 71, 71, 71, 71, 71, 71, 2942, 2944, - 71, 2947, 71, 2938, 2941, 2940, 71, 71, 71, 2937, - 2945, 2950, 71, 2954, 2943, 71, 2946, 71, 2951, 71, - 2955, 2948, 71, 2952, 71, 2949, 71, 2953, 71, 71, - 2960, 71, 2961, 71, 2959, 71, 2956, 2957, 71, 71, - 71, 71, 71, 71, 2965, 71, 71, 2958, 2967, 71, - 2974, 71, 71, 2964, 71, 2969, 2962, 2972, 2963, 2970, - 71, 2966, 71, 71, 2968, 2973, 2978, 71, 2971, 71, + 71, 2930, 71, 71, 71, 71, 71, 2933, 71, 3093, + 71, 71, 2927, 71, 2932, 2929, 2937, 2938, 2940, 71, + 2936, 71, 2934, 71, 2935, 71, 2939, 2948, 2941, 2943, + 71, 71, 2942, 2944, 71, 2945, 71, 71, 71, 71, + 2947, 71, 71, 71, 2946, 71, 2953, 71, 2956, 71, + 71, 71, 2950, 2952, 71, 71, 71, 2949, 2955, 71, + 71, 71, 2951, 2957, 2958, 2966, 71, 2959, 2963, 71, + 2960, 2962, 2964, 71, 2968, 2967, 2961, 71, 2971, 71, + 71, 71, 2965, 2973, 71, 71, 2974, 2969, 71, 2972, + 2975, 71, 2976, 71, 71, 71, 71, 2970, 2979, 2980, - 71, 2980, 71, 2981, 2975, 2979, 71, 71, 71, 71, - 2976, 2982, 2977, 2983, 2984, 2986, 2987, 71, 2985, 71, - 71, 71, 2989, 71, 2988, 71, 71, 71, 71, 2990, - 2995, 71, 71, 2992, 71, 2998, 71, 2999, 71, 2991, - 71, 71, 71, 71, 71, 2997, 2993, 2994, 3002, 3000, - 2996, 71, 3001, 71, 3006, 71, 3007, 3005, 71, 71, - 3003, 3004, 71, 3010, 71, 3012, 71, 3013, 3008, 71, - 71, 71, 3017, 71, 3014, 71, 71, 3015, 3011, 71, - 3018, 3019, 3020, 71, 3009, 71, 71, 71, 71, 71, - 3016, 71, 3021, 3022, 3024, 3023, 3026, 71, 71, 71, + 2977, 2981, 71, 71, 2984, 71, 71, 71, 2978, 71, + 71, 2987, 71, 2989, 71, 71, 2992, 71, 2983, 2985, + 71, 2986, 2990, 71, 2995, 71, 71, 2982, 71, 2996, + 71, 2999, 2988, 3000, 2991, 2993, 71, 71, 2997, 71, + 71, 2994, 71, 71, 71, 2998, 3005, 71, 3004, 71, + 3001, 3006, 71, 3002, 71, 71, 71, 71, 71, 3010, + 71, 3003, 3012, 71, 71, 3007, 71, 71, 3009, 3008, + 71, 71, 3017, 3014, 71, 3018, 3011, 3013, 71, 3015, + 3019, 71, 3016, 3024, 3020, 3023, 71, 71, 3025, 3021, + 71, 3026, 3027, 3022, 71, 71, 71, 71, 3031, 71, - 71, 71, 3032, 3028, 3029, 71, 3025, 3027, 3033, 71, - 3030, 71, 71, 3036, 3037, 71, 71, 3039, 71, 3031, - 3040, 71, 71, 3038, 3034, 71, 71, 71, 71, 3041, - 3035, 3042, 3043, 3046, 71, 3047, 71, 3048, 3048, 3048, - 3048, 3048, 3048, 3048, 3044, 3048, 3048, 3045, 43, 43, - 43, 43, 43, 43, 43, 48, 48, 48, 48, 48, - 48, 48, 53, 53, 53, 53, 53, 53, 53, 59, - 59, 59, 59, 59, 59, 59, 64, 64, 64, 64, - 64, 64, 64, 74, 74, 3048, 74, 74, 74, 74, - 141, 141, 3048, 3048, 3048, 141, 141, 143, 143, 3048, + 3028, 3029, 3032, 71, 71, 71, 3034, 71, 71, 71, + 3033, 71, 3035, 71, 71, 3040, 3030, 71, 3036, 71, + 3037, 71, 71, 3043, 3044, 71, 3045, 71, 3038, 3046, + 3039, 71, 3042, 3041, 71, 71, 3047, 71, 3051, 71, + 71, 71, 71, 3055, 3052, 71, 3048, 3093, 3050, 71, + 3057, 71, 3058, 3049, 3053, 71, 71, 71, 3062, 71, + 3059, 3093, 71, 3060, 3056, 71, 3054, 3063, 71, 71, + 3064, 3065, 71, 71, 71, 71, 3061, 71, 3071, 71, + 3066, 3067, 3069, 71, 3068, 71, 71, 71, 3070, 71, + 3073, 3074, 71, 3077, 3072, 3078, 71, 71, 71, 3081, - 3048, 143, 3048, 143, 145, 3048, 3048, 3048, 3048, 3048, - 145, 148, 148, 3048, 3048, 3048, 148, 148, 150, 3048, - 3048, 3048, 3048, 3048, 150, 152, 152, 3048, 152, 152, - 152, 152, 75, 75, 3048, 75, 75, 75, 75, 13, - 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, - 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, - 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, - 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048 + 3082, 71, 3075, 71, 3084, 71, 3076, 71, 3079, 71, + 3083, 3085, 71, 71, 3086, 71, 3080, 71, 3087, 3093, + 3088, 3091, 71, 3092, 71, 3093, 3093, 3093, 3089, 3093, + 3093, 3093, 3093, 3093, 3093, 3093, 3090, 43, 43, 43, + 43, 43, 43, 43, 48, 48, 48, 48, 48, 48, + 48, 53, 53, 53, 53, 53, 53, 53, 59, 59, + 59, 59, 59, 59, 59, 64, 64, 64, 64, 64, + 64, 64, 74, 74, 3093, 74, 74, 74, 74, 142, + 142, 3093, 3093, 3093, 142, 142, 144, 144, 3093, 3093, + 144, 3093, 144, 146, 3093, 3093, 3093, 3093, 3093, 146, + + 149, 149, 3093, 3093, 3093, 149, 149, 151, 3093, 3093, + 3093, 3093, 3093, 151, 153, 153, 3093, 153, 153, 153, + 153, 75, 75, 3093, 75, 75, 75, 75, 13, 3093, + 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093, + 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093, + 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093, + 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093 } ; -static const flex_int16_t yy_chk[5981] = +static const flex_int16_t yy_chk[6070] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2095,655 +2121,665 @@ static const flex_int16_t yy_chk[5981] = 5, 3, 6, 20, 4, 20, 20, 5, 20, 6, 7, 7, 7, 7, 20, 7, 8, 8, 8, 8, 29, 8, 7, 9, 9, 9, 22, 22, 8, 10, - 10, 10, 15, 25, 9, 29, 15, 25, 3054, 31, + 10, 10, 15, 25, 9, 29, 15, 25, 3099, 31, 10, 11, 11, 11, 11, 11, 11, 19, 79, 19, 19, 30, 19, 11, 31, 79, 30, 25, 19, 19, 47, 47, 11, 12, 12, 12, 12, 12, 12, 21, - 23, 23, 21, 21, 24, 12, 21, 81, 23, 24, - 34, 21, 23, 24, 12, 23, 24, 1005, 24, 24, - 21, 26, 26, 27, 27, 90, 28, 81, 32, 32, - 28, 34, 27, 28, 33, 33, 26, 32, 36, 33, - 28, 35, 28, 32, 90, 42, 35, 32, 52, 84, - 35, 52, 36, 37, 37, 33, 35, 38, 37, 35, - 42, 69, 38, 63, 63, 38, 35, 84, 37, 37, - 40, 37, 38, 80, 40, 69, 38, 38, 39, 39, + 23, 23, 21, 21, 24, 12, 21, 84, 23, 24, + 34, 21, 23, 24, 12, 23, 24, 1016, 24, 24, + 21, 26, 26, 27, 27, 84, 28, 36, 32, 32, + 28, 34, 27, 28, 33, 33, 26, 32, 42, 33, + 28, 36, 28, 32, 37, 37, 127, 32, 52, 37, + 69, 52, 127, 42, 123, 33, 35, 35, 38, 37, + 37, 35, 37, 38, 69, 35, 38, 39, 39, 81, + 39, 35, 40, 38, 35, 80, 40, 38, 38, 39, - 126, 39, 41, 41, 40, 80, 126, 41, 40, 40, - 39, 41, 58, 89, 58, 58, 39, 58, 66, 86, - 66, 66, 68, 66, 68, 68, 71, 68, 71, 71, - 66, 71, 72, 86, 127, 89, 72, 71, 74, 77, - 74, 74, 77, 74, 78, 88, 127, 85, 78, 74, - 74, 82, 83, 87, 82, 83, 85, 92, 93, 87, - 91, 94, 99, 88, 88, 87, 91, 87, 83, 95, - 96, 92, 94, 94, 161, 102, 99, 97, 93, 91, - 94, 97, 161, 105, 98, 106, 101, 95, 96, 98, - 100, 150, 101, 100, 102, 103, 100, 112, 104, 106, + 123, 35, 151, 41, 41, 39, 40, 80, 41, 81, + 40, 40, 41, 58, 77, 58, 58, 77, 58, 63, + 63, 66, 86, 66, 66, 68, 66, 68, 68, 71, + 68, 71, 71, 66, 71, 72, 86, 88, 78, 72, + 71, 74, 78, 74, 74, 82, 74, 83, 82, 85, + 83, 89, 74, 74, 87, 88, 88, 90, 85, 91, + 87, 92, 93, 83, 102, 91, 87, 95, 87, 94, + 97, 96, 98, 89, 97, 92, 90, 98, 91, 99, + 94, 94, 93, 102, 100, 95, 101, 100, 94, 96, + 100, 103, 101, 99, 104, 105, 103, 104, 106, 149, - 103, 104, 105, 109, 107, 104, 108, 105, 107, 100, - 100, 101, 110, 108, 111, 113, 109, 112, 114, 110, - 103, 104, 114, 115, 117, 116, 119, 111, 118, 118, - 116, 122, 120, 113, 116, 121, 120, 123, 132, 125, - 124, 115, 129, 124, 117, 120, 119, 128, 128, 129, - 121, 120, 125, 130, 124, 131, 123, 122, 124, 132, - 129, 133, 134, 135, 134, 128, 136, 137, 128, 130, - 138, 136, 140, 134, 131, 135, 139, 133, 148, 137, - 157, 139, 142, 142, 144, 134, 140, 144, 138, 146, - 154, 146, 146, 154, 146, 149, 149, 151, 157, 151, + 108, 104, 107, 100, 100, 109, 107, 108, 110, 111, + 112, 101, 106, 114, 105, 110, 103, 104, 109, 105, + 113, 115, 111, 116, 113, 115, 118, 117, 119, 119, + 112, 114, 117, 120, 122, 121, 117, 124, 126, 121, + 128, 116, 129, 129, 125, 131, 118, 125, 121, 122, + 130, 126, 128, 120, 121, 132, 124, 130, 125, 133, + 129, 131, 125, 129, 135, 134, 135, 136, 130, 141, + 138, 137, 139, 140, 132, 135, 137, 161, 140, 136, + 133, 134, 138, 141, 143, 143, 145, 135, 161, 145, + 139, 147, 155, 147, 147, 155, 147, 150, 150, 152, - 151, 152, 151, 152, 152, 155, 152, 158, 156, 159, - 155, 162, 163, 152, 156, 160, 164, 159, 165, 166, - 168, 164, 158, 156, 159, 167, 160, 163, 166, 169, - 162, 167, 167, 171, 169, 170, 170, 175, 165, 171, - 173, 172, 179, 172, 173, 168, 172, 174, 174, 173, - 176, 147, 177, 178, 173, 176, 175, 177, 180, 183, - 173, 173, 179, 172, 180, 178, 181, 182, 184, 185, - 181, 186, 182, 183, 187, 188, 192, 190, 191, 187, - 188, 185, 190, 184, 185, 194, 194, 180, 200, 186, - 189, 189, 192, 193, 189, 195, 189, 196, 191, 193, + 158, 152, 152, 153, 152, 153, 153, 156, 153, 159, + 157, 160, 156, 162, 163, 153, 157, 164, 158, 160, + 166, 162, 165, 168, 159, 157, 160, 165, 167, 168, + 168, 169, 164, 163, 170, 171, 171, 167, 172, 170, + 166, 173, 176, 173, 172, 174, 173, 175, 175, 174, + 177, 180, 178, 148, 174, 177, 169, 178, 179, 174, + 182, 176, 181, 173, 182, 174, 174, 183, 181, 184, + 179, 180, 183, 185, 186, 187, 188, 189, 238, 191, + 193, 188, 189, 184, 191, 192, 186, 201, 185, 186, + 218, 181, 238, 187, 190, 190, 193, 194, 190, 198, - 197, 195, 206, 196, 210, 198, 199, 195, 189, 200, - 189, 198, 199, 201, 208, 206, 145, 202, 203, 201, - 197, 199, 202, 204, 203, 205, 210, 207, 212, 204, - 209, 211, 205, 207, 208, 213, 209, 214, 215, 211, - 213, 212, 216, 217, 218, 222, 214, 219, 220, 218, - 218, 221, 219, 215, 223, 221, 224, 226, 216, 225, - 223, 229, 233, 217, 227, 225, 220, 222, 228, 227, - 228, 230, 235, 231, 224, 224, 232, 226, 230, 231, - 229, 233, 232, 234, 235, 236, 237, 237, 239, 234, - 238, 238, 240, 242, 239, 241, 243, 241, 240, 236, + 190, 195, 195, 194, 196, 192, 218, 197, 201, 199, + 196, 200, 190, 197, 190, 199, 196, 200, 202, 198, + 203, 204, 205, 206, 202, 203, 200, 204, 205, 207, + 206, 208, 209, 210, 211, 207, 212, 213, 209, 214, + 211, 215, 216, 219, 208, 213, 215, 217, 222, 220, + 224, 216, 214, 210, 220, 220, 221, 226, 212, 225, + 223, 221, 217, 219, 223, 225, 222, 227, 228, 229, + 231, 232, 224, 227, 229, 226, 226, 230, 232, 230, + 233, 234, 235, 237, 236, 244, 233, 234, 228, 231, + 236, 239, 239, 240, 240, 237, 241, 242, 243, 245, - 245, 243, 246, 244, 247, 249, 248, 250, 143, 260, - 246, 248, 239, 250, 241, 244, 242, 251, 256, 245, - 252, 253, 255, 251, 247, 252, 253, 254, 249, 257, - 258, 259, 256, 254, 260, 261, 263, 255, 263, 259, - 262, 261, 266, 262, 258, 264, 264, 257, 265, 267, - 267, 265, 268, 268, 269, 271, 270, 272, 271, 273, - 266, 272, 275, 274, 283, 277, 276, 277, 273, 274, - 269, 270, 276, 278, 279, 284, 275, 281, 279, 278, - 280, 280, 281, 282, 283, 285, 286, 287, 287, 282, - 289, 288, 290, 284, 288, 279, 290, 291, 296, 286, + 243, 235, 241, 242, 245, 247, 246, 248, 244, 249, + 251, 250, 146, 252, 262, 248, 250, 243, 246, 252, + 241, 253, 257, 254, 247, 255, 256, 253, 254, 249, + 255, 258, 256, 251, 259, 260, 261, 257, 264, 262, + 263, 264, 266, 266, 261, 258, 263, 268, 265, 260, + 265, 267, 259, 271, 267, 269, 269, 270, 270, 272, + 273, 275, 274, 273, 277, 268, 274, 276, 281, 271, + 275, 278, 281, 276, 272, 283, 280, 278, 277, 279, + 283, 279, 280, 282, 282, 284, 285, 286, 287, 281, + 288, 284, 289, 289, 290, 291, 292, 290, 293, 144, - 292, 293, 293, 294, 295, 297, 285, 295, 289, 298, - 296, 297, 298, 299, 301, 302, 291, 303, 292, 315, - 315, 294, 303, 301, 295, 299, 300, 304, 305, 306, - 304, 305, 304, 302, 309, 300, 141, 307, 300, 309, - 309, 311, 306, 300, 300, 300, 300, 312, 304, 307, - 308, 310, 308, 308, 310, 313, 314, 318, 311, 317, - 317, 311, 312, 316, 313, 314, 319, 320, 316, 321, - 322, 319, 318, 327, 323, 324, 336, 336, 329, 320, - 70, 324, 325, 325, 329, 325, 328, 330, 321, 323, - 322, 328, 330, 327, 325, 331, 332, 333, 335, 332, + 292, 294, 296, 288, 298, 286, 285, 295, 295, 287, + 301, 297, 299, 291, 297, 304, 298, 293, 299, 294, + 296, 300, 301, 305, 300, 303, 307, 309, 305, 307, + 308, 297, 302, 304, 303, 306, 318, 318, 306, 309, + 306, 302, 142, 308, 302, 310, 313, 310, 310, 302, + 302, 302, 302, 311, 312, 314, 306, 312, 311, 311, + 315, 321, 316, 313, 317, 324, 313, 319, 320, 320, + 314, 316, 319, 317, 322, 323, 321, 315, 315, 322, + 325, 326, 327, 330, 324, 338, 331, 323, 327, 328, + 328, 331, 328, 332, 338, 70, 326, 333, 336, 332, - 331, 332, 334, 337, 342, 334, 331, 335, 346, 337, - 339, 333, 338, 338, 343, 339, 340, 344, 334, 340, - 349, 334, 346, 334, 342, 340, 568, 345, 348, 340, - 351, 348, 344, 568, 349, 343, 356, 340, 341, 341, - 352, 341, 345, 357, 354, 351, 353, 348, 355, 352, - 354, 353, 353, 361, 341, 356, 359, 341, 357, 341, - 360, 341, 350, 358, 350, 350, 360, 362, 363, 355, - 365, 366, 358, 368, 350, 359, 350, 350, 350, 361, - 364, 350, 363, 367, 369, 370, 364, 362, 368, 369, - 364, 366, 371, 365, 372, 372, 373, 374, 371, 375, + 325, 328, 333, 330, 334, 335, 339, 339, 335, 334, + 335, 337, 336, 340, 337, 334, 341, 341, 342, 340, + 345, 346, 343, 342, 347, 343, 348, 337, 358, 64, + 337, 343, 337, 351, 349, 343, 351, 352, 354, 347, + 345, 348, 346, 343, 344, 344, 355, 344, 349, 358, + 359, 352, 351, 354, 362, 355, 356, 360, 357, 433, + 344, 356, 356, 344, 357, 344, 361, 344, 353, 359, + 353, 353, 360, 362, 364, 361, 365, 366, 368, 363, + 353, 433, 353, 353, 353, 363, 369, 353, 367, 370, + 371, 366, 372, 373, 367, 376, 365, 372, 367, 377, - 370, 376, 377, 367, 378, 379, 381, 376, 382, 374, - 379, 380, 380, 375, 380, 383, 373, 385, 384, 385, - 378, 386, 388, 388, 382, 386, 381, 377, 389, 387, - 390, 383, 384, 387, 391, 392, 396, 385, 393, 397, - 394, 396, 395, 397, 400, 390, 398, 389, 387, 394, - 391, 395, 393, 392, 405, 398, 403, 399, 401, 403, - 394, 64, 394, 399, 401, 400, 402, 404, 406, 406, - 402, 407, 404, 409, 405, 408, 408, 410, 409, 411, - 411, 412, 413, 414, 407, 415, 413, 412, 416, 417, - 410, 418, 418, 416, 417, 419, 420, 421, 414, 422, + 364, 368, 375, 375, 374, 371, 369, 378, 373, 370, + 374, 377, 379, 380, 381, 376, 384, 382, 379, 385, + 387, 378, 382, 383, 383, 386, 383, 388, 389, 388, + 381, 392, 389, 390, 387, 385, 384, 390, 380, 391, + 391, 386, 393, 394, 395, 397, 396, 388, 399, 398, + 392, 400, 390, 399, 397, 400, 403, 393, 398, 394, + 396, 401, 395, 402, 405, 397, 404, 397, 405, 402, + 401, 406, 404, 407, 406, 408, 410, 403, 407, 409, + 409, 411, 411, 412, 413, 414, 414, 415, 412, 410, + 416, 417, 418, 415, 416, 408, 419, 413, 420, 421, - 418, 423, 425, 427, 423, 424, 415, 419, 427, 424, - 428, 422, 426, 426, 425, 421, 420, 429, 429, 430, - 432, 432, 433, 437, 434, 435, 436, 439, 440, 443, - 441, 428, 434, 442, 435, 437, 444, 446, 443, 442, - 452, 430, 444, 433, 441, 439, 436, 439, 440, 445, - 447, 446, 448, 449, 445, 448, 450, 451, 447, 453, - 452, 447, 453, 451, 454, 455, 458, 449, 456, 457, - 454, 450, 459, 456, 461, 460, 459, 462, 463, 455, - 460, 464, 462, 465, 468, 484, 484, 458, 454, 461, - 469, 457, 471, 470, 463, 473, 465, 470, 472, 473, + 421, 419, 422, 420, 423, 424, 417, 425, 421, 426, + 428, 427, 426, 418, 422, 427, 429, 429, 431, 425, + 430, 436, 428, 424, 423, 430, 432, 432, 435, 435, + 437, 438, 439, 442, 441, 446, 440, 444, 437, 431, + 438, 440, 436, 445, 447, 442, 449, 448, 451, 446, + 447, 457, 449, 439, 441, 444, 448, 444, 452, 450, + 454, 455, 451, 445, 450, 453, 452, 456, 453, 452, + 460, 457, 458, 456, 454, 458, 455, 459, 462, 466, + 461, 463, 464, 459, 460, 461, 464, 465, 467, 468, + 469, 470, 465, 467, 466, 473, 511, 474, 476, 475, - 464, 466, 466, 474, 468, 469, 477, 466, 474, 466, - 475, 471, 474, 476, 472, 466, 480, 466, 476, 478, - 466, 466, 477, 479, 482, 475, 483, 466, 478, 479, - 481, 485, 480, 481, 479, 486, 486, 487, 488, 489, - 490, 491, 493, 492, 59, 494, 483, 482, 492, 496, - 488, 493, 487, 495, 489, 496, 485, 498, 499, 490, - 501, 500, 499, 491, 494, 502, 498, 500, 495, 503, - 504, 505, 501, 506, 507, 509, 508, 509, 507, 510, - 502, 511, 511, 513, 504, 515, 505, 510, 503, 508, - 512, 506, 514, 517, 518, 513, 512, 515, 514, 516, + 462, 459, 463, 475, 470, 468, 477, 59, 481, 469, + 471, 471, 474, 481, 511, 473, 471, 476, 471, 478, + 480, 484, 477, 478, 471, 482, 471, 484, 479, 471, + 471, 483, 484, 479, 485, 480, 471, 479, 487, 486, + 483, 482, 486, 488, 489, 489, 490, 491, 491, 492, + 485, 494, 496, 493, 495, 497, 499, 500, 498, 54, + 497, 487, 501, 488, 492, 493, 494, 498, 501, 503, + 506, 490, 500, 495, 496, 499, 504, 505, 503, 507, + 504, 508, 506, 505, 509, 512, 510, 515, 53, 512, + 513, 514, 518, 514, 507, 515, 516, 516, 509, 517, - 519, 520, 516, 521, 520, 519, 533, 517, 522, 518, - 523, 533, 521, 524, 531, 523, 523, 525, 525, 521, - 526, 526, 521, 527, 522, 534, 524, 528, 528, 527, - 529, 529, 530, 532, 535, 531, 532, 536, 530, 538, - 536, 537, 535, 540, 534, 539, 537, 540, 541, 542, - 543, 544, 545, 542, 541, 546, 544, 548, 547, 550, - 54, 546, 538, 547, 539, 552, 549, 556, 543, 549, - 553, 548, 545, 557, 549, 551, 551, 550, 549, 554, - 555, 556, 560, 552, 554, 555, 553, 559, 557, 561, - 562, 560, 561, 559, 562, 563, 564, 565, 566, 564, + 508, 510, 519, 513, 518, 517, 520, 521, 519, 522, + 521, 523, 524, 525, 527, 526, 525, 524, 520, 529, + 530, 530, 528, 522, 526, 536, 523, 528, 528, 543, + 527, 526, 529, 532, 526, 531, 531, 533, 533, 532, + 534, 534, 535, 539, 537, 538, 536, 537, 535, 540, + 538, 541, 543, 542, 541, 544, 545, 540, 542, 546, + 545, 548, 539, 547, 549, 546, 550, 547, 552, 549, + 551, 553, 554, 552, 544, 554, 551, 555, 557, 548, + 554, 556, 556, 558, 554, 553, 550, 559, 560, 561, + 562, 564, 559, 560, 48, 555, 557, 564, 565, 558, - 563, 567, 565, 570, 569, 571, 572, 572, 570, 573, - 574, 575, 576, 584, 566, 53, 562, 569, 573, 567, - 577, 576, 578, 580, 579, 571, 580, 575, 578, 574, - 579, 584, 577, 581, 581, 582, 581, 583, 582, 585, - 586, 588, 583, 587, 594, 590, 586, 588, 587, 589, - 590, 591, 589, 585, 592, 593, 591, 591, 596, 595, - 597, 598, 599, 594, 594, 595, 598, 592, 593, 597, - 600, 600, 601, 602, 603, 604, 602, 596, 605, 601, - 603, 608, 599, 605, 606, 607, 607, 604, 610, 606, - 606, 602, 609, 611, 609, 611, 612, 613, 614, 615, + 571, 566, 567, 561, 566, 562, 567, 565, 568, 569, + 570, 572, 569, 568, 573, 570, 571, 574, 575, 576, + 580, 573, 578, 575, 577, 577, 579, 583, 567, 572, + 574, 578, 581, 583, 582, 585, 580, 584, 585, 576, + 589, 581, 592, 584, 43, 579, 582, 586, 586, 587, + 586, 588, 587, 590, 591, 594, 588, 593, 589, 591, + 594, 592, 595, 593, 601, 597, 596, 590, 595, 596, + 597, 598, 599, 600, 602, 603, 598, 598, 604, 606, + 602, 607, 607, 601, 601, 599, 600, 604, 605, 608, + 611, 610, 609, 605, 603, 609, 608, 610, 612, 606, - 616, 618, 617, 619, 620, 618, 608, 610, 617, 621, - 622, 623, 619, 624, 612, 613, 614, 625, 615, 620, - 616, 626, 627, 628, 621, 624, 629, 626, 622, 630, - 623, 632, 625, 631, 633, 628, 627, 631, 634, 635, - 636, 637, 638, 638, 640, 629, 642, 639, 630, 632, - 633, 639, 644, 641, 645, 637, 634, 635, 635, 636, - 642, 643, 646, 640, 641, 647, 643, 652, 644, 648, - 649, 650, 647, 645, 648, 646, 650, 649, 651, 653, - 654, 655, 656, 651, 657, 652, 653, 658, 661, 654, - 659, 656, 658, 659, 660, 655, 657, 662, 660, 663, + 613, 615, 611, 612, 617, 613, 613, 614, 614, 616, + 609, 616, 618, 619, 618, 620, 621, 622, 623, 624, + 625, 626, 627, 617, 625, 624, 615, 628, 629, 630, + 626, 619, 631, 620, 621, 632, 622, 627, 623, 633, + 634, 635, 628, 636, 631, 633, 629, 637, 630, 639, + 632, 638, 640, 635, 634, 638, 641, 642, 643, 644, + 645, 645, 636, 647, 649, 646, 637, 639, 640, 646, + 648, 651, 652, 644, 641, 642, 642, 643, 649, 650, + 653, 648, 647, 654, 650, 656, 659, 651, 661, 655, + 654, 652, 656, 653, 655, 657, 658, 661, 660, 662, - 665, 664, 661, 666, 666, 671, 662, 667, 667, 668, - 668, 669, 672, 673, 663, 664, 667, 675, 672, 674, - 669, 665, 676, 674, 671, 677, 678, 679, 681, 675, - 680, 682, 678, 673, 683, 679, 686, 680, 689, 692, - 48, 695, 694, 677, 693, 695, 681, 676, 692, 699, - 693, 686, 696, 696, 683, 689, 682, 684, 694, 697, - 697, 698, 684, 701, 700, 702, 684, 699, 704, 684, - 773, 702, 698, 704, 705, 706, 684, 684, 700, 684, - 707, 709, 709, 701, 703, 703, 703, 708, 703, 712, - 708, 703, 710, 706, 773, 705, 703, 711, 711, 710, + 657, 658, 663, 664, 659, 660, 666, 665, 668, 666, + 667, 663, 665, 662, 667, 664, 669, 670, 672, 671, + 673, 673, 668, 675, 675, 669, 674, 674, 676, 678, + 679, 680, 670, 671, 681, 674, 679, 676, 681, 672, + 682, 683, 684, 685, 688, 686, 689, 687, 678, 685, + 690, 680, 682, 686, 687, 699, 711, 696, 693, 700, + 684, 711, 688, 701, 699, 700, 683, 703, 703, 706, + 690, 689, 691, 693, 696, 705, 702, 691, 708, 701, + 702, 691, 704, 704, 691, 707, 705, 706, 712, 709, + 713, 691, 691, 726, 691, 709, 714, 14, 708, 707, - 713, 713, 703, 703, 712, 707, 714, 715, 716, 719, - 715, 714, 720, 716, 717, 717, 718, 722, 718, 721, - 723, 719, 724, 721, 725, 725, 726, 729, 727, 731, - 724, 720, 728, 728, 730, 733, 750, 722, 732, 723, - 733, 726, 727, 750, 732, 729, 730, 734, 734, 735, - 738, 731, 737, 739, 735, 735, 738, 737, 740, 739, - 741, 742, 743, 740, 742, 744, 741, 747, 743, 745, - 745, 746, 746, 744, 748, 747, 749, 751, 752, 752, - 753, 749, 754, 756, 758, 755, 759, 765, 761, 753, - 754, 755, 748, 758, 760, 759, 751, 761, 762, 760, + 710, 710, 710, 715, 710, 726, 715, 710, 713, 712, + 716, 716, 710, 717, 718, 718, 719, 727, 710, 710, + 717, 714, 720, 720, 721, 722, 728, 723, 722, 721, + 728, 719, 723, 724, 724, 725, 727, 725, 729, 731, + 730, 732, 732, 734, 736, 733, 738, 731, 735, 735, + 739, 737, 741, 741, 752, 752, 739, 734, 729, 730, + 733, 740, 736, 737, 742, 745, 740, 744, 738, 742, + 742, 745, 744, 746, 749, 747, 748, 749, 750, 746, + 747, 751, 748, 754, 750, 753, 753, 755, 756, 751, + 757, 754, 758, 756, 760, 759, 763, 757, 761, 761, - 763, 762, 756, 764, 766, 763, 767, 769, 769, 768, - 770, 771, 765, 766, 768, 768, 778, 764, 772, 767, - 774, 779, 776, 774, 776, 770, 779, 772, 777, 777, - 771, 774, 780, 785, 781, 782, 783, 778, 786, 784, - 787, 789, 785, 790, 787, 788, 793, 791, 43, 790, - 792, 795, 794, 780, 781, 782, 791, 795, 783, 784, - 789, 786, 792, 788, 796, 793, 794, 797, 798, 798, - 799, 800, 797, 801, 802, 803, 804, 805, 796, 806, - 800, 807, 802, 808, 810, 809, 811, 807, 812, 814, - 799, 809, 811, 801, 812, 803, 805, 808, 804, 806, + 762, 764, 765, 767, 763, 755, 768, 764, 770, 762, + 758, 759, 767, 760, 769, 768, 773, 770, 774, 769, + 771, 765, 772, 771, 775, 776, 777, 772, 778, 778, + 773, 777, 777, 775, 779, 780, 781, 782, 776, 783, + 786, 786, 783, 774, 785, 781, 785, 787, 788, 779, + 783, 789, 792, 788, 780, 790, 791, 793, 794, 795, + 796, 782, 797, 799, 796, 798, 801, 794, 787, 799, + 800, 802, 789, 803, 792, 790, 791, 793, 801, 800, + 797, 805, 795, 804, 798, 808, 806, 803, 809, 804, + 802, 806, 807, 807, 810, 805, 811, 809, 812, 813, - 815, 813, 816, 817, 810, 813, 822, 816, 814, 818, - 818, 819, 815, 820, 821, 823, 820, 819, 824, 822, - 815, 823, 825, 825, 817, 826, 827, 828, 828, 829, - 830, 827, 821, 832, 830, 831, 831, 833, 824, 835, - 834, 837, 838, 826, 829, 834, 840, 841, 843, 843, - 844, 847, 845, 879, 844, 832, 838, 833, 835, 846, - 846, 879, 849, 866, 866, 837, 840, 845, 841, 842, - 850, 848, 842, 852, 842, 848, 847, 849, 842, 854, - 842, 851, 856, 853, 850, 842, 851, 852, 853, 853, - 842, 855, 858, 854, 857, 855, 859, 856, 860, 857, + 814, 816, 815, 817, 811, 808, 818, 816, 819, 820, + 821, 823, 818, 824, 810, 820, 821, 817, 812, 814, + 822, 813, 815, 826, 822, 824, 825, 830, 819, 831, + 823, 825, 828, 824, 827, 827, 829, 832, 828, 829, + 833, 835, 831, 832, 826, 830, 834, 834, 836, 837, + 837, 838, 839, 836, 840, 840, 839, 841, 842, 835, + 833, 844, 843, 846, 849, 850, 838, 843, 847, 852, + 852, 853, 855, 855, 854, 853, 856, 857, 842, 841, + 844, 857, 847, 858, 849, 860, 850, 846, 851, 854, + 860, 851, 859, 851, 861, 875, 875, 851, 858, 851, - 861, 859, 862, 869, 858, 863, 871, 855, 864, 857, - 867, 863, 860, 865, 864, 867, 862, 868, 870, 865, - 873, 861, 874, 868, 871, 869, 875, 874, 878, 876, - 877, 877, 873, 878, 880, 881, 882, 870, 872, 872, - 875, 876, 883, 883, 872, 884, 872, 886, 880, 884, - 888, 892, 872, 886, 881, 882, 887, 872, 872, 887, - 889, 890, 894, 891, 872, 895, 896, 890, 891, 888, - 892, 894, 897, 889, 895, 898, 899, 901, 897, 902, - 900, 903, 896, 905, 898, 900, 904, 906, 907, 908, - 913, 911, 905, 902, 907, 899, 906, 901, 904, 909, + 863, 856, 865, 864, 851, 862, 859, 864, 861, 851, + 862, 862, 867, 866, 863, 868, 869, 865, 866, 864, + 868, 870, 871, 872, 867, 873, 874, 878, 866, 872, + 869, 873, 874, 876, 877, 879, 871, 880, 876, 882, + 877, 883, 870, 887, 884, 13, 883, 885, 887, 878, + 890, 882, 886, 886, 879, 880, 881, 881, 884, 885, + 888, 891, 881, 889, 881, 892, 892, 893, 888, 890, + 881, 893, 895, 897, 898, 881, 881, 889, 895, 899, + 891, 896, 881, 900, 896, 899, 901, 898, 900, 903, + 904, 905, 897, 907, 906, 908, 909, 910, 903, 904, - 914, 903, 915, 916, 913, 909, 908, 911, 917, 918, - 919, 920, 14, 923, 924, 919, 920, 916, 923, 926, - 914, 915, 927, 924, 918, 926, 917, 925, 925, 929, - 932, 930, 933, 932, 934, 927, 930, 930, 931, 931, - 935, 938, 931, 936, 937, 929, 933, 938, 939, 940, - 941, 946, 942, 943, 934, 940, 936, 942, 935, 937, - 945, 947, 949, 945, 948, 941, 947, 943, 939, 948, - 950, 951, 946, 952, 954, 950, 951, 955, 949, 960, - 954, 956, 957, 958, 958, 952, 959, 956, 957, 961, - 962, 962, 961, 955, 963, 959, 964, 960, 965, 966, + 906, 909, 907, 912, 911, 901, 914, 905, 913, 917, + 915, 922, 920, 923, 908, 914, 916, 910, 911, 915, + 913, 918, 916, 912, 924, 922, 917, 918, 920, 926, + 925, 927, 928, 923, 929, 932, 933, 928, 937, 929, + 932, 934, 934, 924, 925, 933, 927, 926, 935, 936, + 938, 940, 944, 937, 935, 941, 943, 945, 936, 943, + 941, 941, 946, 938, 942, 942, 944, 940, 942, 947, + 948, 950, 949, 951, 952, 957, 953, 945, 949, 951, + 946, 953, 947, 954, 956, 948, 960, 956, 958, 952, + 959, 950, 963, 958, 961, 959, 957, 954, 962, 961, - 967, 968, 966, 969, 976, 970, 971, 968, 975, 969, - 970, 971, 963, 967, 972, 964, 973, 977, 965, 972, - 978, 980, 973, 977, 976, 978, 975, 979, 979, 981, - 980, 982, 983, 984, 985, 983, 984, 986, 981, 987, - 988, 989, 990, 991, 994, 985, 995, 989, 990, 982, - 996, 987, 992, 993, 993, 986, 998, 992, 991, 988, - 995, 997, 996, 994, 999, 997, 1000, 1001, 1003, 1004, - 1004, 1008, 1006, 999, 998, 1007, 1009, 1011, 1011, 1010, - 1012, 1009, 1016, 1008, 1016, 1000, 1006, 1003, 1010, 1013, - 1007, 1014, 1001, 1015, 1017, 1013, 1018, 1014, 1015, 1017, + 965, 966, 960, 962, 963, 967, 965, 968, 969, 969, + 970, 967, 971, 968, 974, 972, 975, 966, 972, 970, + 973, 973, 976, 977, 978, 979, 977, 980, 986, 981, + 971, 979, 974, 980, 981, 975, 982, 978, 983, 984, + 987, 982, 976, 983, 988, 984, 986, 989, 990, 990, + 988, 993, 989, 991, 992, 994, 995, 996, 994, 995, + 987, 997, 991, 992, 998, 999, 1000, 1001, 996, 993, + 1002, 1005, 1000, 1001, 1006, 1003, 998, 1004, 1004, 997, + 1003, 1007, 1008, 1009, 999, 1002, 1008, 1010, 1006, 1011, + 1005, 1012, 1014, 1007, 1015, 1015, 1010, 1019, 1017, 1018, - 1012, 1019, 1020, 1021, 1022, 1023, 1024, 1020, 1025, 1030, - 1018, 1028, 1023, 1027, 1027, 1019, 1029, 1032, 1021, 1040, - 1031, 1024, 1040, 1022, 1030, 1028, 1031, 1025, 1033, 1035, - 1035, 1036, 1039, 1033, 1029, 1041, 1036, 1032, 1037, 1037, - 1042, 1038, 1033, 1043, 1033, 1044, 1039, 1033, 1038, 1045, - 1044, 1046, 1043, 1047, 1041, 1048, 1046, 1051, 1042, 1050, - 1050, 1052, 1051, 1053, 1047, 1054, 1052, 1055, 1045, 1056, - 1054, 1055, 1057, 1058, 1048, 1059, 1061, 1060, 1056, 1062, - 1063, 1064, 1065, 1053, 1066, 1069, 1062, 1057, 1058, 1060, - 1067, 1061, 1063, 1068, 1059, 1070, 1067, 1071, 1073, 1074, + 1020, 1009, 1022, 1022, 1021, 1020, 1023, 1051, 1011, 1019, + 1051, 1014, 1017, 1021, 1018, 1024, 1012, 1025, 1027, 1026, + 1027, 1024, 1028, 1025, 1026, 1029, 1023, 1028, 1030, 1031, + 1032, 1033, 1035, 1034, 1031, 1036, 1038, 1038, 1039, 1029, + 1034, 1040, 1030, 1041, 1043, 1032, 1044, 1035, 1047, 1042, + 1033, 1044, 1039, 1047, 1036, 1042, 1046, 1046, 1041, 1040, + 1044, 1049, 1044, 1050, 1043, 1044, 1048, 1048, 1049, 1052, + 1054, 1053, 1056, 1055, 1058, 1057, 1059, 1050, 1055, 1054, + 1057, 1061, 1061, 1064, 0, 1058, 1066, 1062, 1052, 1053, + 1066, 1056, 1062, 1063, 1065, 1059, 1067, 1068, 1063, 1065, - 1064, 1075, 1066, 1065, 1073, 1069, 1071, 1076, 1068, 1075, - 1078, 1077, 1079, 1074, 1080, 1070, 1077, 1079, 1079, 1082, - 1081, 1086, 1078, 1083, 1083, 1085, 13, 1076, 1088, 1088, - 1086, 1087, 1082, 1080, 1081, 1084, 1089, 1087, 1085, 1091, - 1084, 1089, 1090, 1084, 1084, 1091, 1095, 1092, 1084, 1098, - 1093, 1090, 1092, 1099, 1084, 1093, 1094, 1094, 1084, 1096, - 1096, 1097, 1101, 1100, 1097, 1102, 1097, 1095, 1104, 1098, - 1102, 1099, 1100, 1103, 1105, 1106, 1109, 1139, 1107, 1139, - 1105, 1106, 1101, 1107, 1108, 1109, 1104, 1103, 1108, 1116, - 1109, 1114, 1109, 1112, 1109, 1114, 1109, 1110, 1110, 1111, + 1069, 1070, 1071, 1064, 1072, 1067, 1073, 1075, 1076, 1074, + 1077, 1078, 1068, 1073, 1071, 1069, 1079, 1078, 1080, 1072, + 1070, 1074, 1081, 1082, 1084, 1085, 1075, 1086, 1077, 1076, + 1084, 1079, 1082, 1087, 1089, 1086, 1088, 1091, 1080, 1085, + 1092, 1088, 1081, 1090, 1093, 1818, 1089, 1096, 1090, 1090, + 1094, 1094, 1097, 1087, 1092, 1101, 1091, 1093, 1095, 1098, + 1096, 1097, 1818, 1095, 1101, 1098, 1095, 1095, 1099, 1099, + 1100, 1095, 1102, 1106, 1103, 1100, 1109, 1095, 1102, 1103, + 1104, 1095, 1105, 1105, 1110, 1104, 1107, 1107, 1108, 1111, + 1112, 1108, 1113, 1108, 1106, 1114, 1109, 1113, 1111, 1115, - 1111, 1115, 1111, 1117, 1112, 1118, 1119, 1116, 1120, 1121, - 1118, 1118, 1117, 1120, 1123, 1122, 1115, 1124, 1125, 1126, - 1127, 1127, 1128, 1121, 1122, 1126, 1129, 1131, 1119, 1130, - 1128, 1133, 1125, 1123, 1130, 1132, 1124, 1134, 1135, 1137, - 1129, 1131, 1143, 1135, 1132, 1136, 1136, 1138, 1138, 1133, - 1141, 1142, 1146, 1141, 1137, 1144, 1142, 1145, 1145, 1147, - 1147, 1143, 1134, 1149, 1144, 1148, 1148, 1150, 1149, 1151, - 1152, 1152, 1146, 1153, 1154, 1155, 1156, 1154, 1157, 1159, - 1158, 1156, 1158, 1161, 1162, 0, 1161, 1157, 1150, 1163, - 1151, 1164, 1165, 1153, 1163, 1155, 1164, 1159, 1166, 1162, + 1116, 1117, 1110, 1118, 1120, 1125, 1116, 1117, 1118, 1114, + 1112, 1119, 1122, 1120, 1121, 1119, 1125, 1115, 1120, 1121, + 1120, 1127, 1120, 1128, 1120, 1127, 1122, 1123, 1123, 1124, + 1124, 1129, 1124, 1130, 1131, 1132, 1133, 1134, 1128, 1131, + 1131, 1133, 1130, 1135, 1136, 1137, 1138, 1139, 1141, 1129, + 1146, 1134, 1135, 1139, 1140, 1140, 1141, 1132, 1142, 1144, + 1138, 1143, 1145, 1136, 1137, 1147, 1143, 1150, 1146, 1148, + 0, 1145, 1142, 1144, 1148, 1149, 1149, 1151, 1151, 1152, + 1154, 1152, 1150, 1154, 1155, 1156, 1157, 1158, 1158, 1155, + 1147, 1159, 1160, 1160, 1162, 1157, 1161, 1161, 1163, 1162, - 1165, 1167, 1169, 1166, 1168, 1168, 1167, 1169, 1170, 1171, - 1172, 1173, 1175, 1176, 1178, 1171, 1177, 1172, 1175, 1176, - 1178, 1177, 1179, 1180, 1173, 1181, 1170, 1182, 1182, 1183, - 1185, 1179, 1186, 1187, 1188, 1189, 1181, 1191, 1192, 1187, - 1188, 1189, 1180, 1191, 1193, 1194, 1195, 1196, 1198, 1183, - 1185, 1199, 1192, 1197, 1197, 1186, 1200, 1194, 1192, 1203, - 1195, 1201, 1202, 1202, 1193, 1196, 1201, 1204, 1198, 1206, - 0, 1208, 1204, 1207, 1200, 1209, 1199, 1210, 1207, 1207, - 1211, 1212, 1203, 1213, 1209, 1210, 1216, 1214, 1206, 1208, - 1222, 1215, 1214, 1215, 1211, 1214, 1212, 1218, 1213, 1220, + 1164, 1165, 1165, 1166, 1156, 1167, 1168, 1169, 1167, 1170, + 1172, 1159, 1169, 1171, 1174, 1171, 1175, 1174, 1170, 1163, + 1176, 1164, 1177, 1166, 1178, 1176, 1168, 1177, 1172, 1179, + 1180, 1175, 1178, 1182, 1179, 1180, 1181, 1181, 1182, 1183, + 1184, 1185, 1186, 1188, 1189, 1191, 1184, 1190, 1185, 1188, + 1189, 1191, 1190, 1192, 1193, 1186, 1194, 1183, 1195, 1195, + 1196, 1198, 1192, 1199, 1200, 1201, 1202, 1194, 1204, 1205, + 1200, 1201, 1202, 1193, 1204, 1206, 1207, 1208, 1209, 1211, + 1196, 1198, 1212, 1205, 1210, 1210, 1199, 1213, 1207, 1205, + 1216, 1208, 1214, 1215, 1215, 1206, 1209, 1214, 1217, 1211, - 1216, 1213, 1219, 1218, 1223, 1224, 1219, 1221, 1226, 1222, - 1220, 1225, 1221, 1221, 1227, 1228, 1225, 1230, 1231, 1227, - 1232, 1233, 1233, 1224, 1234, 1235, 1226, 1236, 1234, 1238, - 1223, 1230, 1239, 1237, 1240, 1228, 1231, 1241, 1232, 1237, - 1242, 1238, 1243, 1235, 1244, 1246, 1236, 1245, 1240, 1244, - 1246, 1239, 1241, 1247, 1245, 1242, 1248, 1249, 1249, 1250, - 1251, 1243, 1252, 1253, 1254, 1248, 1251, 1255, 1253, 1262, - 1254, 1247, 1263, 1255, 1250, 1256, 1256, 1257, 1257, 1259, - 1259, 1260, 1261, 1252, 1264, 1260, 1263, 1262, 1265, 1266, - 1266, 1261, 1267, 1268, 1270, 1265, 1271, 1269, 1272, 1264, + 1219, 0, 1221, 1217, 1220, 1213, 1222, 1212, 1223, 1220, + 1220, 1224, 1225, 1216, 1226, 1222, 1223, 1229, 1227, 1219, + 1221, 1235, 1228, 1227, 1228, 1224, 1227, 1225, 1231, 1226, + 1233, 1229, 1226, 1232, 1231, 1236, 1237, 1232, 1234, 1239, + 1235, 1233, 1238, 1234, 1234, 1240, 1241, 1238, 1243, 1244, + 1240, 1245, 1246, 1246, 1237, 1247, 1248, 1239, 1249, 1247, + 1251, 1236, 1243, 1252, 1250, 1253, 1241, 1244, 1254, 1245, + 1250, 1255, 1251, 1256, 1248, 1257, 1259, 1249, 1258, 1253, + 1257, 1259, 1252, 1254, 1260, 1258, 1255, 1261, 1262, 1262, + 1263, 1264, 1256, 1265, 1266, 1267, 1261, 1264, 1268, 1266, - 1273, 1268, 1269, 1272, 1272, 1273, 1273, 1274, 1270, 1275, - 1275, 1276, 1267, 1277, 1278, 1271, 1279, 1280, 1281, 1282, - 1283, 1279, 1285, 1278, 1284, 1286, 1283, 1274, 1287, 1284, - 1276, 1286, 1277, 1288, 1289, 1290, 1280, 1282, 1281, 1288, - 1289, 1291, 1292, 1293, 1294, 1295, 0, 1287, 1285, 1296, - 1297, 1297, 1298, 1299, 1290, 1298, 1300, 1300, 1294, 1303, - 1291, 1292, 1293, 1303, 1296, 1299, 1295, 1301, 1301, 1302, - 1304, 1305, 1306, 1307, 1302, 1307, 1309, 1311, 1310, 1307, - 1305, 1309, 1312, 1304, 1314, 1306, 1313, 1313, 1315, 1314, - 1316, 1317, 1307, 1310, 1315, 1318, 1321, 1311, 1312, 1319, + 1275, 1267, 1260, 1276, 1268, 1263, 1269, 1269, 1270, 1270, + 1272, 1272, 1273, 1274, 1265, 1277, 1273, 1276, 1275, 1278, + 1279, 1279, 1274, 1280, 1281, 1283, 1278, 1284, 1282, 1285, + 1277, 1286, 1281, 1282, 1285, 1285, 1286, 1286, 1287, 1283, + 1288, 1288, 1289, 1280, 1290, 1291, 1284, 1292, 1293, 1294, + 1295, 1296, 1292, 1298, 1291, 1297, 1299, 1296, 1287, 1300, + 1297, 1289, 1299, 1290, 1301, 1302, 1303, 1293, 1295, 1294, + 1301, 1302, 1304, 1305, 1306, 1307, 1308, 1312, 1300, 1298, + 1309, 1310, 1310, 1311, 1313, 1303, 1311, 1314, 0, 1307, + 1318, 1304, 1305, 1306, 1318, 1309, 1312, 1308, 1319, 1314, - 1318, 1322, 1320, 1319, 1317, 1316, 1320, 1323, 1324, 1325, - 1325, 1327, 1329, 1330, 1324, 1333, 1321, 1332, 1330, 1322, - 1331, 1331, 1339, 1332, 1335, 1335, 1340, 1323, 1337, 1327, - 1343, 1337, 1344, 1329, 1346, 1333, 1338, 1338, 1339, 1347, - 1342, 1344, 1340, 1342, 1345, 1345, 1348, 1349, 1350, 1346, - 1343, 1352, 1349, 1351, 1351, 1353, 1354, 1355, 1355, 1356, - 1347, 1357, 1350, 1358, 1362, 1348, 1364, 1359, 1358, 1352, - 1353, 1360, 1360, 1356, 1361, 1363, 1363, 1367, 1361, 1357, - 1365, 1354, 1359, 1366, 1362, 1368, 1371, 1366, 1364, 1372, - 1368, 1365, 1370, 1370, 1373, 1374, 1367, 1375, 1376, 1376, + 1315, 1315, 1317, 1313, 1316, 1316, 1320, 1317, 1321, 1324, + 1322, 1319, 1322, 1325, 1324, 1320, 1322, 1326, 1327, 1328, + 1328, 1321, 1329, 1331, 1330, 1337, 1332, 1329, 1325, 1322, + 1330, 1333, 1336, 1338, 1327, 1344, 1333, 1326, 1331, 1332, + 1334, 1335, 1339, 1337, 1334, 1335, 1340, 1340, 1339, 1342, + 1345, 1348, 1336, 1338, 1347, 1345, 1344, 1346, 1346, 1354, + 1347, 1350, 1350, 1352, 1353, 1353, 1352, 1342, 1355, 1357, + 1358, 1348, 1357, 1359, 1361, 1354, 1360, 1360, 1362, 1363, + 1364, 1365, 1359, 1367, 1355, 1364, 1366, 1366, 1368, 1361, + 1358, 1369, 1370, 1370, 1371, 1365, 1372, 1373, 1363, 1362, - 1377, 1378, 1380, 1372, 1371, 1377, 1379, 1381, 1382, 1374, - 1385, 1380, 1381, 1373, 1373, 1383, 1385, 1383, 1384, 1386, - 1389, 1378, 1375, 1384, 1387, 1391, 1379, 1392, 1382, 1395, - 1387, 1390, 1390, 1392, 1389, 1394, 1396, 1396, 1398, 1386, - 1394, 1397, 1397, 1399, 1391, 1400, 1401, 1402, 1402, 1401, - 1403, 1404, 1398, 1395, 1407, 1412, 1416, 1416, 1406, 1407, - 1400, 1399, 1403, 1405, 1406, 1408, 1405, 1410, 1408, 1405, - 1411, 1404, 1414, 1418, 1413, 1411, 1410, 1413, 1414, 1418, - 1412, 1405, 1415, 1419, 1408, 1417, 1417, 1415, 1419, 1420, - 1421, 1422, 1423, 1424, 1425, 1426, 1424, 1429, 1427, 1428, + 1374, 1367, 1373, 1368, 1375, 1375, 1376, 1377, 1371, 1379, + 1376, 1378, 1378, 1380, 1372, 1374, 1369, 1381, 1382, 1387, + 1383, 1381, 1385, 1385, 1380, 1383, 1386, 1377, 1388, 1389, + 1390, 1379, 1393, 1387, 1391, 1391, 1392, 1382, 1394, 1397, + 1395, 1392, 1401, 1389, 1386, 1396, 0, 1388, 1388, 1395, + 1396, 1398, 1393, 1398, 1400, 1390, 1399, 1402, 1394, 1397, + 1400, 1399, 1401, 1402, 1404, 1405, 1405, 1406, 1407, 1410, + 1409, 1411, 1411, 1413, 1407, 1409, 1412, 1412, 1404, 1414, + 1415, 1416, 1417, 1417, 1416, 1419, 1406, 1413, 1418, 1422, + 1427, 0, 1421, 1410, 1422, 1415, 1420, 1414, 1421, 1420, - 1425, 1426, 1420, 1427, 1430, 1428, 1431, 1431, 1421, 1430, - 1422, 1432, 1423, 1433, 1434, 1435, 1432, 1438, 1436, 1437, - 1429, 1440, 1441, 1439, 1442, 1443, 1444, 1440, 1447, 1438, - 1452, 1433, 1436, 1437, 1434, 1435, 1439, 1446, 1446, 1443, - 1448, 1450, 1441, 1451, 1442, 1448, 1453, 1444, 1447, 1449, - 1449, 1454, 1455, 1458, 1452, 1456, 1450, 1451, 1460, 1457, - 1454, 1462, 1456, 1463, 1453, 1467, 1463, 1455, 1457, 1458, - 1466, 1457, 1470, 1460, 1464, 1464, 1465, 1465, 1460, 1469, - 1469, 1468, 1466, 1467, 1468, 1470, 1462, 1471, 1472, 1473, - 1474, 1475, 1476, 1472, 1473, 1477, 1478, 1480, 1481, 1481, + 1418, 1423, 1420, 1425, 1423, 1419, 1426, 1428, 1431, 1431, + 1428, 1426, 1425, 1429, 1420, 1427, 1430, 1432, 1432, 1429, + 1423, 1430, 1433, 1435, 1434, 1436, 1437, 1438, 1433, 1434, + 1439, 1440, 1441, 1439, 1442, 1443, 1435, 1440, 1441, 1442, + 1444, 1443, 1448, 1436, 1445, 1437, 1449, 1438, 1447, 1445, + 1446, 1446, 1450, 1447, 1451, 1452, 1455, 1456, 1453, 1457, + 1448, 1454, 1455, 1444, 1458, 1459, 1449, 1462, 1451, 1452, + 1453, 1467, 1450, 1465, 1454, 1461, 1461, 1456, 1458, 1457, + 1463, 1464, 1464, 1466, 1468, 1463, 1459, 1462, 1465, 1469, + 1470, 1472, 1471, 1473, 1477, 1467, 1475, 1466, 1469, 1471, - 1482, 1476, 1479, 1480, 1483, 1478, 1471, 1475, 1478, 1474, - 1484, 1479, 1485, 1486, 1477, 1487, 1490, 1483, 1491, 1493, - 1482, 1492, 1492, 1494, 1498, 1495, 1485, 1487, 1484, 1486, - 1495, 1497, 1494, 1496, 1496, 1493, 1491, 1499, 1500, 1501, - 1497, 1490, 1498, 1497, 1501, 1501, 1503, 1504, 1496, 1505, - 1506, 1507, 1508, 1509, 1509, 1506, 1500, 1507, 1499, 1510, - 1503, 1511, 1504, 1512, 1515, 1510, 1511, 1513, 1516, 1512, - 1508, 1505, 1517, 1513, 1518, 1520, 1519, 1524, 1517, 1519, - 1522, 1520, 1516, 1525, 1515, 1519, 1526, 1518, 1522, 1527, - 1528, 1529, 1530, 1531, 1526, 1533, 1524, 1535, 1527, 1532, + 1472, 1478, 1468, 1472, 1478, 1470, 1479, 1479, 1481, 1473, + 1482, 1475, 1480, 1480, 1483, 1486, 1475, 1483, 1485, 1477, + 1481, 1484, 1484, 1489, 1487, 1488, 1491, 1490, 1482, 1487, + 1488, 1485, 1492, 1495, 1486, 1491, 1493, 1494, 1497, 1495, + 1496, 1496, 1489, 1490, 1498, 1493, 1494, 1499, 1493, 1500, + 1501, 1492, 1504, 1507, 1502, 1508, 1503, 1498, 1497, 1502, + 1502, 1503, 1511, 1500, 1504, 1499, 1501, 1509, 1509, 1510, + 1512, 1511, 1514, 1508, 1515, 1512, 1513, 1513, 1507, 1516, + 1517, 1514, 1518, 1520, 1514, 1510, 1521, 1518, 1518, 1522, + 1523, 1513, 1515, 1524, 1525, 1523, 1532, 1520, 1517, 1524, - 1532, 1533, 1525, 1528, 1529, 1534, 1530, 1531, 1536, 1537, - 1535, 1534, 1538, 1539, 1540, 1541, 1542, 1543, 1545, 1545, - 1540, 1532, 1546, 1552, 0, 1547, 1539, 1537, 1536, 1547, - 1554, 1538, 1542, 1548, 1549, 1543, 1550, 1541, 1548, 1549, - 1551, 1550, 1546, 1555, 1555, 1554, 1552, 1556, 1557, 1551, - 1558, 1559, 1559, 1560, 1561, 1564, 1562, 1565, 1563, 1566, - 1557, 1561, 1568, 1567, 1659, 1566, 1556, 1560, 1562, 1558, - 1563, 1659, 1569, 1571, 1564, 1567, 1571, 1565, 1569, 1575, - 1568, 1570, 1570, 1572, 1572, 1574, 1576, 1578, 1575, 1579, - 1574, 1579, 1576, 1577, 1577, 1580, 1581, 1582, 1580, 1578, + 1516, 1521, 1526, 1526, 1527, 1533, 0, 1541, 1528, 1529, + 1527, 1522, 1525, 1528, 1530, 1529, 1532, 1534, 1535, 1533, + 1530, 1536, 1537, 1534, 1536, 1539, 1541, 1542, 1537, 1543, + 1536, 1535, 1544, 1539, 1545, 1546, 1547, 1543, 1548, 1549, + 1549, 1544, 1552, 1550, 1553, 1551, 1542, 1545, 1546, 1550, + 1547, 1551, 1548, 1554, 1555, 1552, 1556, 1557, 1558, 1559, + 1560, 1549, 1563, 1557, 1553, 1562, 1562, 1569, 1564, 1556, + 1571, 1554, 1564, 1555, 1565, 1559, 1566, 1568, 1560, 1565, + 1558, 1566, 1563, 1567, 1573, 1571, 1568, 1574, 1567, 1575, + 1569, 1572, 1572, 1576, 1576, 1577, 1581, 1578, 1579, 1574, - 1583, 1585, 1584, 1586, 1589, 1587, 1585, 1588, 1591, 1589, - 1593, 1597, 1586, 0, 1590, 1593, 1581, 1587, 1583, 1582, - 1584, 1592, 1588, 1590, 1594, 1596, 1592, 1598, 1591, 1595, - 1595, 1596, 1597, 1592, 1599, 1600, 1590, 1602, 1601, 1594, - 1601, 1603, 1603, 1604, 1604, 1606, 1598, 1605, 1605, 1609, - 1599, 1602, 1610, 1602, 1617, 1600, 1607, 1607, 1608, 1608, - 1611, 1611, 1612, 1613, 1614, 1606, 1612, 1614, 1616, 1613, - 1609, 1618, 1617, 1610, 1616, 1619, 1620, 1618, 1623, 1620, - 1621, 1621, 1622, 1622, 1623, 1624, 1625, 1626, 1627, 1628, - 1630, 1631, 1637, 1634, 1627, 1630, 1630, 1624, 1624, 1624, + 1580, 1582, 1584, 1573, 1578, 1583, 1585, 1586, 1575, 1577, + 1579, 1583, 1580, 1586, 1584, 1581, 1587, 1587, 1591, 1588, + 1592, 1582, 1588, 1591, 1585, 1589, 1589, 1593, 1595, 1592, + 1594, 1594, 1596, 1593, 1596, 1597, 1598, 1599, 1597, 1600, + 1595, 1602, 1601, 1603, 1607, 1606, 1602, 1605, 1608, 1604, + 1606, 1614, 1603, 1607, 1612, 1612, 1598, 1600, 1609, 1599, + 1601, 1604, 1605, 1609, 1610, 1611, 1607, 1613, 1608, 1610, + 1609, 1615, 1614, 1613, 1617, 1616, 1618, 1623, 1618, 1619, + 1611, 1620, 1620, 1621, 1621, 1622, 1622, 1624, 1624, 1626, + 1615, 1616, 1627, 1619, 1617, 1619, 1634, 1623, 1625, 1625, - 1619, 1632, 1633, 1632, 1624, 1631, 1625, 1626, 1634, 1628, - 1635, 1636, 1637, 1633, 1638, 1640, 1635, 1639, 1639, 1642, - 1636, 1641, 1641, 1643, 1644, 1644, 1645, 1645, 1646, 1649, - 1649, 1650, 1654, 1651, 1653, 1638, 1656, 1656, 1655, 1642, - 1657, 1640, 1651, 1653, 1655, 1643, 1660, 1658, 1646, 1661, - 1662, 1662, 1663, 1654, 1664, 1660, 1650, 1668, 1666, 1667, - 1669, 1657, 1658, 1666, 1673, 1667, 1670, 1669, 1671, 1673, - 1664, 1675, 1670, 1674, 1671, 1661, 1676, 1668, 1663, 1672, - 1672, 1677, 1674, 1678, 1679, 1680, 1678, 1681, 1681, 1683, - 1682, 1675, 1684, 1677, 1685, 1676, 1682, 1687, 1685, 1688, + 1628, 1628, 1629, 1630, 1631, 1633, 1629, 1631, 1636, 1630, + 1626, 1633, 1635, 1627, 1634, 1641, 1637, 1642, 1635, 1637, + 1638, 1638, 1639, 1639, 1640, 1643, 1644, 1641, 1641, 1641, + 1640, 1645, 1644, 1636, 1641, 1647, 1648, 1642, 1650, 1651, + 1647, 1647, 1649, 1654, 1649, 1643, 1652, 1653, 1655, 1650, + 1648, 1645, 1652, 1657, 1651, 1659, 1653, 1656, 1656, 1658, + 1658, 1660, 1663, 1654, 1661, 1661, 1662, 1662, 1667, 1655, + 1666, 1666, 1668, 1671, 1672, 1659, 1670, 1673, 1673, 1657, + 1672, 1668, 1663, 1660, 1674, 1670, 1675, 1677, 1676, 1678, + 1679, 1679, 1680, 1667, 1671, 1676, 1677, 1681, 1683, 1685, - 1689, 1691, 1679, 1690, 1690, 1689, 1694, 1684, 1692, 1683, - 1702, 1680, 1695, 1696, 1685, 1697, 1695, 1687, 1699, 1696, - 1691, 1688, 1699, 1692, 1697, 1694, 1698, 1698, 1700, 1701, - 1701, 1702, 1703, 1704, 1706, 1705, 1707, 1708, 1709, 1700, - 1705, 1713, 1710, 1708, 1700, 1713, 1703, 1710, 1711, 1711, - 1712, 1712, 1704, 1709, 1706, 1715, 1707, 1716, 1717, 1718, - 1718, 1719, 1719, 1721, 1715, 1720, 1722, 1723, 1716, 1721, - 1720, 1720, 1722, 1716, 1724, 1725, 1726, 1728, 1717, 1724, - 1729, 1731, 1726, 1730, 1729, 1732, 1733, 1725, 1734, 1728, - 1735, 1732, 1737, 1723, 1734, 1730, 1738, 1741, 1739, 1745, + 1684, 1675, 1686, 1683, 1687, 1674, 1684, 1690, 1695, 1686, + 1687, 1691, 1688, 1681, 1688, 1678, 1694, 1691, 1680, 1685, + 1692, 1692, 1693, 1696, 1697, 1694, 1690, 1693, 1695, 1698, + 1699, 1700, 1698, 1701, 1701, 1702, 1697, 1704, 1703, 1705, + 1707, 1702, 1696, 1705, 1708, 1709, 1710, 1710, 1699, 1711, + 1709, 1714, 1704, 0, 1712, 1717, 1716, 1700, 1703, 1705, + 1707, 1715, 1716, 1719, 1717, 1715, 1708, 1719, 1711, 1712, + 1714, 1718, 1718, 1720, 1721, 1721, 1722, 1723, 1725, 1724, + 1726, 1727, 1728, 1725, 1720, 1730, 1737, 1729, 1728, 1720, + 1730, 1723, 1731, 1731, 1732, 1732, 1735, 1722, 1724, 1733, - 1741, 1746, 1735, 1739, 1737, 1755, 1731, 1746, 1733, 1742, - 1742, 1743, 1743, 1744, 1744, 1738, 1747, 1755, 1748, 1745, - 1749, 1750, 1747, 1748, 1752, 1754, 1749, 1758, 1754, 1752, - 1750, 1756, 1756, 1759, 1762, 1760, 1761, 1761, 1766, 1758, - 1760, 1763, 1764, 1762, 1767, 1759, 1763, 1764, 1765, 1765, - 1768, 1769, 1770, 1767, 1771, 1772, 1770, 1773, 1766, 1771, - 1774, 1772, 1775, 1776, 1778, 1778, 1779, 1783, 1768, 1774, - 1769, 1784, 1780, 1781, 1781, 1773, 1778, 1776, 1782, 1783, - 1775, 1780, 1786, 1785, 1779, 1789, 1789, 1782, 1785, 1792, - 1791, 1793, 1784, 1791, 1795, 1786, 1796, 1797, 1798, 1799, + 1726, 1727, 1729, 1733, 1736, 1735, 1737, 1738, 1738, 1739, + 1739, 1740, 1741, 1742, 1743, 1736, 1740, 1740, 1741, 1742, + 1736, 1744, 1745, 1746, 1748, 1750, 1744, 1749, 1751, 1746, + 1753, 1749, 1752, 1754, 1745, 1755, 1748, 1750, 1752, 1754, + 1743, 1758, 1757, 1759, 1762, 1762, 1761, 1755, 1759, 1761, + 1763, 1763, 1753, 1751, 1757, 1764, 1764, 1765, 1766, 1767, + 1758, 1768, 1769, 1770, 1766, 1767, 1768, 1774, 1769, 1772, + 1774, 1775, 1770, 1778, 1772, 1776, 1776, 1765, 1779, 1780, + 1781, 1781, 1782, 1775, 1780, 1778, 1786, 1783, 1784, 1787, + 1779, 1782, 1783, 1784, 1785, 1785, 1788, 1789, 1787, 1790, - 1799, 1804, 1800, 1797, 1800, 1792, 1802, 1793, 1804, 1795, - 1796, 1801, 1801, 1805, 1802, 1798, 1806, 1806, 1807, 1808, - 1809, 1812, 1810, 1811, 1813, 1814, 1816, 1807, 0, 1817, - 1819, 1814, 1809, 1805, 1810, 1811, 1818, 1818, 1820, 1813, - 1808, 1817, 1821, 1823, 1814, 1821, 1816, 1812, 1819, 1822, - 1825, 1826, 1827, 1826, 1822, 1825, 1828, 1829, 1820, 1831, - 1833, 1828, 1834, 1823, 1829, 1835, 1837, 1836, 1831, 1836, - 1827, 1834, 1839, 1840, 1839, 1841, 1841, 1835, 1833, 1842, - 1844, 1843, 1844, 1845, 1846, 1837, 1843, 1840, 1845, 1846, - 1847, 1848, 1849, 1851, 1850, 1852, 1854, 1858, 1849, 1850, + 1791, 1792, 1793, 1790, 1794, 1791, 1786, 1792, 1795, 1796, + 1798, 1798, 1799, 1794, 1788, 1800, 1789, 1801, 1801, 1802, + 1793, 1803, 1798, 1796, 1800, 1804, 1795, 1805, 1802, 1806, + 1799, 1812, 1805, 1803, 1809, 1809, 1811, 1813, 1816, 1811, + 1815, 0, 1806, 1817, 1819, 1819, 1804, 1812, 1820, 1817, + 1820, 1822, 1816, 1813, 1824, 1815, 1821, 1821, 1825, 1822, + 1827, 1824, 1826, 1826, 1828, 1829, 1832, 1830, 1831, 1827, + 1834, 1833, 1837, 1836, 1838, 1838, 1834, 1829, 1825, 1830, + 1831, 1839, 1840, 1842, 1837, 1828, 1833, 1841, 1842, 1834, + 1841, 1843, 1832, 1836, 1846, 1845, 1846, 1847, 1848, 1839, - 1855, 1856, 1856, 1852, 1859, 1842, 1851, 1860, 1847, 1857, - 1857, 1848, 1858, 1860, 1855, 1854, 1861, 1862, 1863, 1862, - 1865, 1861, 1864, 1864, 1859, 1870, 1863, 1866, 1866, 1867, - 1867, 1868, 1865, 1869, 1863, 1872, 1874, 1873, 1869, 1873, - 1868, 1877, 1879, 1870, 1872, 1875, 1876, 1872, 1884, 1883, - 1875, 1875, 1887, 1877, 1879, 1876, 1880, 1874, 1881, 1888, - 1885, 1880, 1883, 1881, 1886, 1886, 1889, 1890, 1884, 1885, - 1887, 1891, 1893, 1894, 1895, 1896, 1904, 1888, 1897, 1898, - 1896, 1890, 1889, 1897, 1893, 1894, 1891, 1901, 1898, 1903, - 1905, 1906, 1907, 1901, 1895, 1903, 1909, 1909, 1908, 1904, + 1845, 1849, 1840, 1848, 1851, 1853, 1855, 1854, 1849, 1857, + 1856, 1843, 1856, 1851, 1862, 1847, 1854, 1859, 1855, 1859, + 1860, 1861, 1861, 1853, 1863, 1864, 1865, 1864, 1857, 1863, + 1866, 1865, 1867, 1868, 1860, 1866, 1869, 1872, 1870, 1871, + 1862, 1873, 1869, 1870, 1876, 1877, 1873, 1873, 1874, 1872, + 1867, 1880, 1871, 1868, 1878, 1878, 1874, 1879, 1879, 1877, + 1881, 1882, 1887, 1876, 1883, 1885, 1880, 1882, 1884, 1883, + 1884, 1886, 1886, 1885, 1887, 1888, 1888, 1889, 1889, 1890, + 1881, 1885, 1891, 1892, 1894, 1896, 1898, 1891, 1890, 1895, + 1899, 1895, 1897, 1894, 1905, 1898, 1894, 1897, 1897, 1901, - 1912, 1910, 1911, 1911, 1913, 1905, 1901, 1908, 1913, 1906, - 1910, 1914, 1915, 1921, 0, 1916, 1914, 1907, 1917, 1912, - 1916, 1916, 1918, 1919, 1917, 1915, 1919, 1920, 1918, 1924, - 1924, 1925, 1925, 1921, 1926, 1920, 1927, 1927, 1928, 1928, - 1929, 1930, 1931, 1926, 1932, 1942, 1925, 1939, 1931, 1932, - 1933, 1933, 1929, 1934, 1934, 1935, 1936, 1925, 1943, 1930, - 1935, 1938, 1936, 1943, 1940, 1938, 1944, 1939, 1940, 1945, - 1942, 1946, 1947, 1949, 1950, 1948, 1946, 1951, 1953, 1950, - 1952, 1952, 1953, 1954, 1945, 1956, 1958, 1955, 1957, 1944, - 1947, 1948, 1955, 1949, 1960, 1961, 1959, 1965, 1954, 1951, + 1902, 1892, 1899, 1903, 1906, 1902, 1896, 1905, 1903, 1907, + 1909, 1901, 1908, 1908, 1910, 1911, 1912, 1915, 1907, 1913, + 1917, 1916, 1918, 1926, 1906, 1929, 1920, 1918, 1909, 1915, + 1912, 1911, 1910, 1916, 1913, 1920, 1919, 1923, 1925, 1927, + 1917, 1919, 1928, 1923, 1925, 1934, 1926, 0, 1930, 1932, + 1929, 1931, 1931, 1937, 1927, 1935, 1923, 1930, 1932, 1935, + 1928, 1933, 1933, 1936, 1934, 1938, 1937, 1939, 1936, 1940, + 1938, 1938, 1942, 1939, 1941, 1940, 1943, 1941, 1946, 1946, + 1942, 1948, 1947, 1947, 1949, 1949, 1950, 1950, 1951, 1952, + 1948, 1960, 1953, 1961, 1954, 1960, 1943, 1947, 1953, 1954, - 1957, 1959, 1962, 1962, 1964, 1958, 1966, 1960, 1967, 1968, - 1969, 1956, 1964, 1961, 1970, 1971, 1965, 1972, 1978, 1974, - 1975, 1975, 2139, 1976, 1977, 1966, 1976, 1971, 1979, 1969, - 2139, 1967, 1978, 1968, 1974, 1970, 1983, 1977, 1972, 1980, - 1980, 1979, 1981, 1981, 1982, 1982, 1984, 1985, 1985, 1986, - 1988, 1983, 1987, 1987, 1991, 1988, 1992, 1990, 1986, 1984, - 1993, 1986, 1990, 1994, 1994, 1995, 1995, 1996, 1997, 1997, - 1998, 2004, 1993, 2007, 1991, 2000, 1992, 1999, 1999, 2001, - 2002, 2002, 2003, 2003, 2001, 2004, 1996, 2005, 1998, 2006, - 2000, 2011, 2007, 2009, 2010, 2010, 2005, 2013, 2009, 2012, + 1951, 1955, 1955, 1956, 1956, 1957, 1958, 1952, 1947, 1964, + 1957, 1962, 1958, 1961, 1965, 1962, 1966, 1967, 1968, 1965, + 1969, 1970, 1971, 1968, 1972, 1973, 1974, 1974, 1976, 1972, + 1978, 1975, 1967, 1979, 1964, 1975, 1977, 1970, 1969, 1966, + 1980, 1977, 1971, 1976, 1981, 1979, 1983, 1973, 1982, 1981, + 1984, 1984, 1986, 1987, 1988, 1989, 1978, 1990, 1991, 1980, + 1986, 1982, 1992, 1993, 1983, 1994, 1999, 1996, 1997, 1997, + 2000, 1998, 1987, 1988, 1998, 1993, 2001, 1991, 1989, 1999, + 2005, 1990, 1996, 1992, 2000, 2006, 1994, 2002, 2002, 2001, + 2003, 2003, 2004, 2004, 2008, 2005, 2007, 2007, 2006, 2009, - 2012, 2014, 2015, 2006, 2018, 2015, 2019, 2014, 2016, 2016, - 2011, 2017, 2017, 2020, 2023, 2013, 2021, 2021, 2024, 2028, - 2025, 2019, 2026, 2018, 2016, 2029, 2026, 2027, 2027, 2030, - 2032, 2032, 2020, 2033, 2023, 2025, 2034, 2035, 2028, 2036, - 2029, 2024, 2037, 2034, 2030, 2038, 2039, 2039, 2041, 2040, - 2041, 2035, 2042, 2033, 2044, 2042, 2045, 2036, 2040, 2046, - 2037, 2045, 2047, 2048, 2046, 2049, 2044, 2051, 2050, 2053, - 2042, 2038, 2042, 2050, 2053, 2054, 2048, 2055, 2056, 2057, - 2054, 2061, 2058, 2062, 2056, 2059, 2049, 2047, 2058, 2060, - 2059, 2068, 2055, 2051, 2060, 2063, 2062, 2073, 2063, 2064, + 2009, 2013, 2010, 2008, 2012, 2014, 2008, 2010, 2015, 2012, + 2016, 2016, 2017, 2017, 2018, 2019, 2019, 2020, 2021, 2021, + 2015, 2013, 2022, 2023, 2026, 2014, 2024, 2024, 2023, 2025, + 2025, 2027, 2028, 2018, 2029, 2020, 2031, 2022, 2026, 2033, + 2027, 2031, 2032, 2032, 2034, 2034, 2028, 2035, 2036, 2037, + 2038, 2038, 2037, 2029, 2036, 2039, 2039, 2040, 2033, 2041, + 2042, 2045, 2042, 2044, 2048, 2035, 2038, 2046, 2046, 2049, + 2050, 2051, 2052, 2052, 2041, 2051, 2040, 2053, 2044, 2054, + 2045, 2058, 2055, 2059, 2048, 2050, 2057, 2057, 2060, 2061, + 2059, 2062, 2049, 2063, 2054, 2065, 2053, 2055, 2064, 2064, - 2057, 2065, 2066, 2067, 2079, 2068, 2061, 2069, 2064, 2070, - 2065, 2066, 2067, 2069, 2071, 2070, 2075, 2073, 2071, 2076, - 2076, 2077, 2078, 2078, 2079, 2075, 2079, 2077, 2081, 2082, - 2085, 2078, 2083, 2083, 2084, 2087, 2088, 2092, 2089, 2085, - 2092, 2093, 2090, 2094, 2081, 2082, 2093, 2087, 2095, 2084, - 2096, 2096, 2088, 2089, 2090, 2097, 2097, 2099, 2099, 2100, - 2095, 2101, 2100, 2094, 2102, 2103, 2101, 2104, 2104, 2105, - 2102, 2103, 2106, 2106, 2107, 2108, 2109, 2110, 2110, 2111, - 2112, 0, 2113, 2105, 2115, 2111, 2107, 2113, 2115, 2108, - 2116, 2117, 2117, 2116, 2112, 2109, 2118, 2119, 2120, 2121, + 2069, 2058, 2060, 2066, 2065, 2066, 2072, 2061, 2067, 2062, + 2070, 2067, 2069, 2071, 2073, 2070, 2074, 2075, 2071, 2063, + 2076, 2080, 2075, 2082, 2078, 2079, 2067, 2073, 2067, 2078, + 2079, 2072, 2081, 2083, 2086, 2084, 2080, 2074, 2081, 2083, + 2084, 2087, 2085, 2089, 2082, 2088, 2076, 2085, 2088, 2090, + 2093, 2091, 2089, 2092, 2087, 2094, 2098, 2095, 2090, 2086, + 2091, 2094, 2092, 2095, 2093, 2096, 2100, 2101, 2101, 2096, + 2104, 2102, 2103, 2103, 2109, 2100, 2098, 2102, 2106, 2107, + 2113, 2103, 2108, 2108, 2110, 2112, 2114, 2115, 2117, 2109, + 2104, 2117, 2104, 2110, 2106, 2107, 2113, 2112, 2118, 2115, - 2123, 2118, 2125, 2121, 2122, 2122, 2119, 2125, 2126, 2127, - 2128, 2129, 2130, 2123, 2131, 2129, 2132, 2133, 2120, 2131, - 2134, 2136, 2132, 2133, 2128, 2137, 2143, 2138, 2126, 2127, - 2137, 2146, 2130, 2138, 2140, 2149, 2140, 2136, 2134, 2149, - 2143, 2144, 2144, 2145, 2147, 2147, 2145, 2150, 2151, 2152, - 2152, 2158, 2153, 2150, 2156, 2156, 2160, 2146, 2161, 2164, - 2151, 2153, 2165, 2166, 2164, 2174, 2167, 2175, 2166, 2158, - 2160, 2167, 2168, 2168, 2161, 2170, 2170, 2172, 2173, 2173, - 2176, 2174, 2178, 2172, 2179, 2176, 2180, 2180, 2165, 2175, - 2182, 2183, 2184, 2185, 2187, 2187, 2179, 2183, 2188, 2182, + 2119, 2114, 2120, 2118, 2121, 2121, 2122, 2122, 2124, 2124, + 2125, 2126, 2127, 2125, 2120, 2128, 2126, 2130, 2127, 2133, + 2119, 2128, 2129, 2129, 2131, 2131, 2132, 2134, 2135, 2135, + 2136, 2130, 2138, 2133, 2137, 2140, 2136, 2138, 2132, 2140, + 2141, 2142, 2142, 2141, 2143, 2144, 2134, 2145, 2137, 2143, + 2148, 2146, 2147, 2147, 2144, 2146, 2150, 2151, 2152, 2153, + 2154, 2150, 2155, 2148, 2154, 2156, 2157, 2145, 2158, 2159, + 2156, 2162, 2157, 2153, 2158, 2161, 2162, 2151, 2152, 2163, + 2164, 2165, 2155, 2165, 2168, 2163, 2171, 2159, 2164, 2169, + 2169, 2161, 2170, 2172, 2172, 2170, 2174, 2175, 2168, 2176, - 2189, 2178, 2191, 2191, 2192, 2192, 2193, 2194, 2185, 2196, - 2184, 2193, 2195, 2197, 2196, 2197, 2198, 2188, 2189, 2199, - 2200, 2195, 2201, 2202, 2203, 2194, 2209, 2201, 2244, 2203, - 2198, 2244, 2200, 2199, 2204, 2204, 2205, 2205, 2206, 2206, - 2207, 2207, 2208, 2202, 2209, 2210, 2211, 2211, 2212, 2212, - 2210, 2213, 2214, 2215, 2208, 2216, 2217, 2217, 2218, 2219, - 2219, 2220, 2220, 2213, 2214, 2221, 2222, 2223, 2224, 2225, - 2226, 2216, 2227, 2215, 2223, 2226, 2221, 2218, 2222, 2228, - 2224, 2229, 2229, 2231, 2230, 2232, 2234, 2233, 2235, 2225, - 2236, 2236, 2227, 2230, 2237, 2241, 2238, 2239, 2242, 2228, + 2174, 2177, 2177, 2175, 2178, 2181, 2181, 2183, 2185, 2189, + 2186, 2176, 2171, 2178, 2189, 2190, 2191, 2199, 2192, 2193, + 2193, 2191, 2185, 2192, 2197, 2183, 2186, 2195, 2195, 2200, + 2197, 2198, 2198, 2199, 2201, 2203, 2205, 2204, 2206, 2201, + 2204, 2190, 2207, 2207, 2209, 2211, 2210, 2212, 2205, 2215, + 2206, 2200, 2210, 2209, 2203, 2214, 2214, 2216, 2218, 2218, + 2219, 2219, 2212, 2211, 2220, 2221, 2223, 2222, 2215, 2220, + 2224, 2223, 2224, 2225, 2226, 2216, 2222, 2227, 2229, 2228, + 2230, 2231, 2231, 2221, 2228, 2230, 2236, 2225, 2226, 2227, + 2232, 2232, 2233, 2233, 2234, 2234, 2235, 2237, 2229, 2238, - 2233, 2243, 2235, 2237, 2245, 2232, 2248, 2248, 0, 2231, - 2234, 2238, 2239, 2241, 2246, 2255, 2247, 2257, 2245, 2246, - 2242, 2247, 2249, 2249, 2243, 2250, 2250, 2252, 2252, 2254, - 2254, 2256, 2259, 2255, 2261, 2260, 2257, 2262, 2263, 2264, - 2266, 2265, 2256, 2265, 2267, 2268, 2272, 2263, 2269, 2269, - 2271, 2271, 2259, 2260, 2278, 2273, 2261, 2262, 2276, 2264, - 2266, 2279, 2267, 2268, 2273, 2274, 2274, 2276, 2272, 2277, - 2277, 2280, 2278, 2281, 2282, 2283, 2285, 2293, 2280, 2279, - 2284, 2286, 2286, 2287, 2287, 2288, 2289, 2290, 2281, 2291, - 2294, 2288, 2282, 2283, 2292, 2285, 2284, 2293, 2295, 2292, + 2238, 2240, 2237, 2241, 2236, 2239, 2239, 2242, 2235, 2243, + 2244, 2244, 2245, 2240, 2249, 2241, 2246, 2246, 2247, 2247, + 2252, 2248, 2250, 2251, 2254, 2243, 2249, 2242, 2253, 2250, + 2255, 2245, 2248, 2253, 2257, 2251, 2256, 2256, 2258, 2259, + 2252, 2260, 2261, 2257, 2254, 2268, 2262, 2263, 2263, 2264, + 2255, 2269, 2265, 2266, 2260, 2270, 2272, 2282, 2264, 2259, + 2262, 2283, 2271, 2268, 2258, 2271, 2261, 2265, 2266, 2273, + 2272, 2274, 2283, 2269, 2273, 2282, 2274, 2284, 2270, 2275, + 2275, 2276, 2276, 2277, 2277, 2279, 2279, 2281, 2281, 2286, + 2287, 2288, 2289, 2290, 2291, 2292, 2284, 2292, 2293, 2294, - 2297, 2297, 2290, 2295, 2289, 2296, 2301, 2296, 2291, 2298, - 2294, 2298, 2299, 2299, 2303, 2304, 2305, 2306, 2308, 2307, - 2309, 2312, 2316, 2303, 2307, 2301, 2313, 2315, 2305, 2313, - 2314, 2314, 2317, 2317, 2304, 2320, 2323, 2306, 2308, 2309, - 2316, 2312, 2315, 2318, 2321, 2322, 2322, 2318, 2321, 2323, - 2320, 2325, 2326, 2327, 2327, 2329, 2330, 2331, 2332, 2332, - 2333, 2331, 2334, 2334, 2335, 2330, 2336, 2329, 2337, 2335, - 2338, 2325, 2326, 2339, 2339, 2336, 2344, 2344, 2345, 2333, - 2346, 2346, 2338, 2347, 2337, 2348, 2349, 2352, 2350, 2351, - 2351, 2354, 2354, 2359, 2357, 2349, 2347, 2350, 2348, 2357, + 2299, 2295, 2290, 2296, 2296, 2298, 2298, 2300, 2287, 2286, + 2301, 2301, 2289, 2288, 2291, 2303, 2300, 2294, 2293, 2295, + 2304, 2304, 2299, 2305, 2303, 2306, 2307, 2308, 2309, 2310, + 2312, 2318, 2311, 2307, 2313, 2313, 2314, 2314, 2315, 2316, + 2317, 2305, 2308, 2306, 2315, 2320, 2309, 2310, 2311, 2312, + 2318, 2319, 2321, 2322, 2328, 2317, 2319, 2316, 2322, 2323, + 2330, 2323, 2324, 2324, 2325, 2320, 2325, 2326, 2326, 2330, + 2331, 2332, 2321, 2328, 2333, 2334, 2335, 2342, 2336, 2339, + 2334, 2340, 2343, 2332, 2340, 2341, 2341, 2344, 2344, 2331, + 2345, 2346, 2342, 2349, 2333, 2354, 2335, 2336, 2347, 2339, - 2345, 2358, 2352, 2360, 2361, 2362, 2358, 2359, 2360, 2363, - 2366, 2364, 2361, 2369, 2374, 2367, 2368, 0, 2363, 2364, - 2367, 2368, 2370, 2370, 2362, 2366, 2371, 2371, 2369, 2372, - 2373, 2375, 2374, 2376, 0, 2373, 2372, 2377, 2379, 2376, - 2378, 2378, 2377, 2380, 2381, 2381, 2382, 2382, 2380, 2375, - 2385, 2386, 2386, 2379, 2387, 2388, 2397, 2387, 2410, 2389, - 2388, 2388, 2390, 2385, 2389, 2391, 2392, 2390, 2393, 2394, - 2392, 2391, 2395, 2393, 2396, 2398, 2410, 2397, 2394, 2399, - 2401, 2398, 2396, 2400, 2403, 2399, 2406, 2395, 2400, 2403, - 2404, 2408, 2401, 2404, 2409, 2411, 2408, 2412, 2406, 2409, + 2343, 2345, 2347, 2350, 2351, 2351, 2346, 2350, 2349, 2352, + 2355, 2356, 2356, 2358, 2359, 2354, 2360, 2361, 2361, 2362, + 2360, 2367, 2352, 2359, 2364, 2358, 2363, 2363, 2365, 2364, + 2355, 2366, 2374, 2367, 2368, 2368, 2376, 2365, 2362, 2373, + 2373, 2375, 2375, 2377, 2378, 2381, 2379, 2366, 2388, 2376, + 2380, 2380, 2391, 2378, 2374, 2379, 2377, 2383, 2383, 2386, + 2381, 2387, 2388, 2389, 2386, 2390, 2387, 2392, 2389, 2393, + 2395, 2391, 2398, 2390, 2396, 2397, 2392, 2393, 2403, 2396, + 2397, 2399, 2399, 2400, 2400, 2395, 2401, 2398, 2404, 2402, + 2406, 2405, 2408, 2401, 2402, 2406, 2403, 2405, 2407, 2407, - 2413, 2414, 2414, 2415, 2418, 2419, 2412, 2420, 2411, 2413, - 2421, 2421, 2415, 2422, 2424, 2423, 2425, 2425, 2426, 2428, - 2430, 2432, 2432, 2418, 2423, 2419, 2420, 2431, 2433, 2424, - 2434, 2431, 2422, 2435, 2428, 2436, 2434, 2426, 2438, 2435, - 2430, 2436, 2437, 2437, 2439, 2441, 2438, 2442, 2444, 2439, - 2445, 2446, 2444, 2433, 2441, 2448, 2448, 2449, 2449, 2453, - 2442, 2450, 2450, 2453, 2445, 2454, 2446, 2452, 2452, 2458, - 2454, 2456, 2456, 2459, 2460, 2461, 2463, 2471, 2459, 2469, - 2461, 2461, 2464, 2464, 2466, 2466, 2460, 2467, 2467, 2458, - 2468, 2473, 2469, 2468, 2477, 2471, 2463, 2474, 2474, 2475, + 2409, 2410, 2410, 2411, 2411, 2409, 2404, 2408, 2414, 2415, + 2415, 2416, 2417, 2424, 2416, 2418, 2420, 2417, 2417, 2419, + 2418, 2414, 2420, 2421, 2419, 2422, 2423, 2421, 2424, 2425, + 2422, 2426, 2427, 2428, 2430, 2423, 2429, 2425, 2427, 2428, + 2432, 2429, 2435, 2437, 2433, 2432, 2430, 2433, 2437, 2439, + 2438, 2440, 2426, 2441, 2435, 2438, 2442, 2443, 2443, 2444, + 2447, 2448, 2441, 2449, 2440, 2442, 2451, 2439, 2444, 2450, + 2450, 2452, 2453, 2454, 2454, 2455, 2457, 2459, 2462, 2447, + 2452, 2448, 2449, 2471, 2460, 2451, 2463, 2453, 2460, 2461, + 2461, 2457, 2463, 2464, 2455, 2465, 2471, 2459, 2467, 2464, - 2475, 2476, 2476, 2478, 2478, 2479, 2480, 2481, 2482, 2477, - 2488, 2473, 2483, 2483, 2482, 2484, 2489, 2487, 2479, 2484, - 2490, 2481, 2487, 2487, 2480, 2491, 2492, 2493, 2495, 2495, - 2494, 2491, 2492, 2488, 2494, 2500, 2489, 2498, 2501, 2503, - 2490, 2501, 2498, 2500, 2504, 2505, 2506, 2504, 2507, 2508, - 0, 2506, 2493, 2509, 2510, 2510, 2511, 2512, 2513, 2514, - 2512, 2517, 2505, 2505, 2503, 2515, 2507, 2509, 2512, 2508, - 2511, 2516, 2513, 2515, 2518, 2518, 2516, 2516, 2514, 2523, - 2517, 2519, 2519, 2520, 2520, 2521, 2521, 2522, 2522, 2524, - 2525, 2526, 2527, 2528, 2524, 2523, 2529, 2531, 2531, 2532, + 2470, 2465, 2468, 2462, 2466, 2466, 2467, 2468, 2473, 2470, + 2474, 2475, 2476, 2474, 2473, 2475, 2477, 2479, 2479, 2480, + 2480, 2481, 2481, 2483, 2483, 2484, 2476, 2485, 2489, 2484, + 2490, 2477, 2485, 2487, 2487, 2490, 2492, 2491, 2494, 2495, + 2495, 2492, 2492, 2497, 2497, 2498, 2498, 2499, 2489, 2491, + 2499, 2500, 2502, 2504, 2505, 2505, 2506, 2506, 2494, 2507, + 2507, 2508, 2509, 2509, 2500, 2510, 2511, 2512, 2513, 2519, + 2502, 2514, 2514, 2504, 2513, 2515, 2508, 2518, 2510, 2515, + 2520, 2512, 2518, 2518, 2511, 2521, 2524, 2522, 2523, 2526, + 2526, 2525, 2519, 2522, 2523, 2525, 2529, 2534, 2531, 2532, - 2533, 2527, 2532, 2535, 2535, 2536, 2537, 2537, 2545, 2538, - 2525, 0, 2536, 2528, 2538, 2541, 2529, 2526, 2533, 2540, - 2540, 2542, 2543, 2548, 2541, 2547, 2545, 2546, 2546, 2547, - 2542, 2543, 2548, 2549, 2550, 2552, 2551, 2556, 2560, 2550, - 2550, 2561, 2556, 2562, 2552, 2557, 2557, 2564, 2549, 2551, - 2559, 2559, 2560, 2565, 2568, 2569, 2564, 2570, 2573, 2575, - 0, 2562, 2571, 2621, 2569, 2565, 2561, 2577, 2571, 2578, - 2573, 2621, 2577, 2580, 2578, 2579, 2579, 2570, 2582, 2568, - 2575, 2589, 2580, 2582, 2583, 2583, 2585, 2585, 2583, 2586, - 2586, 2587, 2587, 2588, 2590, 2591, 2597, 2593, 2598, 2594, + 2520, 2529, 2532, 2536, 2535, 2521, 2531, 2535, 2537, 2538, + 2539, 2524, 2540, 2537, 2541, 2541, 2545, 2542, 2544, 2555, + 2536, 2536, 2534, 2548, 2555, 2543, 2540, 2538, 2543, 2546, + 2539, 2542, 2544, 2547, 2556, 2545, 2543, 2546, 2547, 2547, + 2549, 2549, 2548, 2550, 2550, 2551, 2551, 2552, 2552, 2553, + 2553, 2554, 2557, 2558, 2556, 2559, 2560, 2562, 2562, 2564, + 2563, 2567, 2558, 2563, 2566, 2566, 2569, 2554, 2567, 2568, + 2568, 2569, 2571, 2571, 2572, 2559, 2560, 2564, 2557, 2573, + 2574, 2576, 2578, 2572, 2577, 2577, 2578, 2579, 2573, 2574, + 2580, 2581, 2582, 2584, 2585, 2583, 2579, 2590, 2590, 2576, - 2591, 2589, 2588, 2593, 2594, 2595, 2596, 2596, 2600, 2601, - 2595, 2599, 2602, 2590, 2597, 2601, 2599, 2603, 2603, 2598, - 2605, 2609, 2606, 2607, 2605, 2611, 2600, 2606, 2607, 2608, - 2608, 2610, 2613, 2613, 2615, 2616, 2619, 2602, 2617, 2620, - 2609, 2618, 2617, 2623, 2622, 2611, 2610, 2615, 2616, 2622, - 2618, 2625, 2619, 2624, 2624, 2627, 2627, 2630, 2620, 2628, - 2628, 2632, 2632, 2634, 2635, 2636, 2637, 2639, 2639, 2623, - 2625, 2637, 2640, 2641, 2642, 2644, 2644, 2645, 2630, 2634, - 2635, 2636, 2646, 2646, 2649, 2651, 2652, 2655, 2650, 2659, - 2651, 2645, 2640, 2642, 2650, 2657, 2641, 2653, 2653, 2654, + 2583, 2583, 2581, 2585, 2593, 2589, 2584, 2582, 2594, 2580, + 2589, 2592, 2592, 2595, 2597, 2598, 2601, 2602, 2593, 2603, + 2606, 2608, 2604, 2597, 2610, 2611, 2602, 2598, 2604, 2610, + 2611, 2595, 2606, 2594, 2612, 2612, 2613, 2622, 2615, 2603, + 2623, 2601, 2608, 2615, 0, 2613, 2616, 2616, 2618, 2618, + 2616, 2619, 2619, 2620, 2620, 2621, 2624, 2622, 2627, 2623, + 2626, 2624, 2628, 2627, 2621, 2630, 2626, 2628, 2629, 2629, + 2631, 2632, 2633, 2634, 2635, 2642, 2632, 2636, 2636, 2634, + 2638, 2639, 2640, 2630, 2638, 2643, 2639, 2640, 2641, 2641, + 2633, 2631, 2644, 2648, 2642, 2646, 2646, 2649, 2650, 2635, - 2654, 2656, 2656, 2658, 2649, 2660, 2657, 2655, 2652, 2659, - 2661, 2660, 2658, 2662, 2663, 2664, 2664, 2665, 2666, 2666, - 2665, 2656, 2671, 2670, 2672, 2662, 2673, 2673, 2674, 2661, - 2672, 2674, 2675, 2676, 2663, 2670, 2678, 2680, 2675, 2679, - 2681, 2678, 2671, 2682, 2679, 2685, 2681, 2683, 2683, 2686, - 2687, 2676, 2688, 2689, 2689, 2690, 2680, 2685, 2696, 2691, - 2682, 2682, 2693, 2693, 0, 2688, 2695, 2686, 2691, 2694, - 2694, 2695, 2696, 2697, 2690, 2687, 2698, 2698, 2697, 2699, - 2699, 2700, 2700, 2701, 2703, 2703, 2706, 2708, 2701, 2709, - 2710, 2711, 2711, 2713, 2713, 2715, 2714, 2716, 2717, 2717, + 2643, 2652, 2650, 2653, 2651, 2656, 2648, 2654, 2658, 2655, + 2649, 2663, 2644, 2651, 2655, 2654, 2673, 2652, 2657, 2657, + 2660, 2660, 2653, 2661, 2661, 2665, 2665, 2658, 2667, 2668, + 2669, 2656, 2663, 2670, 2672, 2672, 2673, 2675, 2670, 2674, + 2676, 2677, 2680, 2675, 2667, 2668, 2669, 2684, 2674, 2679, + 2679, 2681, 2681, 2685, 2687, 2690, 2680, 2686, 2694, 2685, + 2677, 2692, 2686, 2676, 2688, 2688, 2696, 2684, 2689, 2689, + 2691, 2691, 2692, 2693, 2695, 2690, 2687, 2697, 2694, 2698, + 2695, 2705, 2693, 2699, 2699, 2696, 2701, 2701, 2700, 2697, + 2691, 2700, 2706, 2705, 2707, 2708, 2708, 2710, 2709, 2698, - 2720, 2719, 2721, 2722, 0, 2706, 2716, 2719, 2722, 2708, - 2714, 2709, 2710, 2725, 2725, 2715, 2727, 2727, 2728, 2729, - 2720, 2721, 2730, 2728, 2731, 2736, 2732, 2734, 2730, 2733, - 2733, 2737, 2734, 2729, 2732, 2738, 2731, 2739, 2740, 2742, - 2738, 2743, 2744, 2745, 2740, 2736, 2746, 2742, 2753, 2739, - 2747, 2737, 2748, 2749, 2750, 2757, 2752, 2761, 2761, 2750, - 2743, 2752, 2744, 2745, 2746, 2754, 2747, 2755, 2753, 2748, - 2748, 2754, 2755, 2758, 2749, 2757, 2762, 2762, 2763, 2767, - 2767, 2773, 2763, 2769, 2769, 2773, 2758, 2770, 2770, 2776, - 2770, 2771, 2771, 2779, 2771, 2772, 2772, 2777, 2772, 2775, + 2707, 2709, 2711, 2710, 2713, 2714, 2715, 2716, 2721, 2713, + 2714, 2717, 2706, 2716, 2718, 2718, 2722, 2725, 2720, 2723, + 2711, 2724, 2724, 0, 2726, 2715, 2721, 2741, 2717, 2717, + 2720, 2731, 2723, 2726, 2728, 2728, 2725, 2729, 2729, 2730, + 2743, 2722, 2732, 2744, 2730, 2731, 2741, 2732, 2733, 2733, + 2734, 2734, 2735, 2735, 2736, 2738, 2738, 2745, 2749, 2736, + 2746, 2746, 2743, 2748, 2748, 2744, 2750, 2751, 2752, 2753, + 2754, 2754, 2757, 2884, 2756, 2758, 2884, 2759, 2753, 2745, + 2756, 2751, 2759, 2766, 2749, 2750, 2762, 2762, 2752, 2764, + 2764, 2765, 2757, 2767, 2758, 2768, 2765, 2766, 2769, 2767, - 2775, 2780, 2785, 2781, 2782, 2782, 2787, 2776, 2781, 2786, - 2787, 2777, 2800, 2779, 2788, 2789, 2786, 2791, 2800, 2792, - 2826, 2780, 2796, 2788, 2793, 2793, 2801, 2785, 2792, 2826, - 2789, 2794, 2794, 2795, 2795, 2791, 2797, 2796, 2798, 2799, - 2802, 2797, 2803, 2804, 2799, 2799, 2806, 2798, 2804, 2805, - 2798, 2801, 2807, 2807, 2805, 2802, 2808, 2878, 2809, 2810, - 2810, 2878, 2808, 2803, 2809, 2806, 2811, 2811, 2812, 2815, - 2815, 2818, 2818, 2812, 2819, 2819, 2820, 2820, 2821, 2821, - 2822, 2822, 2823, 2823, 2824, 2824, 2827, 2827, 2828, 2829, - 2830, 2834, 2832, 2833, 2833, 2835, 2842, 2828, 2837, 2837, + 2770, 2770, 2773, 2771, 2774, 2775, 2769, 2768, 2771, 2776, + 2775, 2777, 2779, 2780, 2781, 2782, 2786, 2777, 2783, 0, + 2779, 2776, 2773, 2784, 2774, 2785, 2787, 2790, 2789, 2794, + 2815, 2787, 2780, 2789, 2781, 2782, 2783, 2786, 2791, 2784, + 2792, 2795, 2785, 2785, 2791, 2792, 2870, 2790, 2815, 2794, + 2798, 2798, 2799, 2799, 2795, 2800, 2804, 2804, 2870, 2800, + 2806, 2806, 2807, 2807, 2810, 2807, 2808, 2808, 2810, 2808, + 2809, 2809, 2812, 2809, 2813, 2814, 2814, 2812, 2816, 2818, + 2819, 2820, 2824, 2813, 2821, 2821, 2820, 2825, 2827, 2826, + 2828, 2830, 2816, 2826, 2825, 2831, 2928, 2827, 2928, 2818, - 2836, 2829, 2838, 2839, 2839, 2844, 2834, 2846, 2835, 2849, - 2830, 2832, 2836, 2843, 2842, 2849, 2843, 2838, 2845, 2845, - 2848, 2850, 2851, 2848, 2852, 2846, 2853, 2851, 2856, 2854, - 2857, 2844, 2860, 2869, 2856, 2850, 2869, 2871, 2876, 2857, - 2872, 2872, 2879, 2852, 2853, 2854, 2877, 2860, 2873, 2873, - 2871, 2874, 2874, 2880, 2882, 2877, 2886, 2883, 2884, 2887, - 2887, 2876, 2879, 2884, 2885, 2888, 2885, 2880, 2883, 2889, - 2891, 2886, 2890, 2892, 2893, 2894, 2896, 2882, 2888, 2895, - 2897, 2902, 2898, 2903, 2894, 2905, 2891, 2898, 2889, 2893, - 2890, 2895, 2904, 2904, 2905, 2902, 2910, 2896, 2892, 2911, + 2819, 2832, 2832, 2835, 2831, 2828, 2840, 2824, 2837, 2830, + 2833, 2833, 2834, 2834, 2836, 2841, 2838, 2837, 2835, 2836, + 2837, 2838, 2838, 2839, 2842, 2845, 0, 2843, 2844, 2839, + 2841, 2840, 2843, 2844, 2846, 2846, 2847, 2848, 2849, 2849, + 2850, 2850, 2847, 2848, 2845, 2842, 2851, 2854, 2854, 2857, + 2857, 2851, 2858, 2858, 2859, 2859, 2860, 2860, 2861, 2861, + 2862, 2862, 2863, 2863, 2864, 2864, 2865, 2867, 2868, 2868, + 2869, 2871, 2874, 2874, 2873, 2875, 2867, 2877, 2883, 2869, + 2879, 2876, 2878, 2878, 2880, 2880, 2885, 2886, 2886, 2877, + 2875, 2871, 2865, 2873, 2876, 2879, 2883, 2887, 2889, 2890, - 2897, 2906, 2906, 2903, 2907, 2907, 2908, 2908, 2909, 2909, - 2912, 2913, 2914, 2912, 2915, 2910, 2913, 2914, 2916, 2911, - 2917, 2918, 2919, 2920, 2921, 2923, 2917, 2924, 2920, 2922, - 2922, 2925, 2925, 2916, 2919, 2918, 2927, 2929, 2935, 2915, - 2923, 2932, 2932, 2936, 2921, 2934, 2924, 2933, 2933, 2936, - 2937, 2927, 2938, 2934, 2939, 2929, 2937, 2935, 2940, 2941, - 2942, 2942, 2943, 2943, 2941, 2945, 2938, 2939, 2946, 2948, - 2949, 2951, 2954, 2952, 2949, 2953, 2955, 2940, 2952, 2956, - 2959, 2959, 2957, 2948, 2962, 2954, 2945, 2957, 2946, 2955, - 2958, 2951, 2963, 2964, 2953, 2958, 2965, 2965, 2956, 2972, + 2891, 2889, 2892, 2893, 2895, 2890, 2894, 2892, 2898, 0, + 2897, 2901, 2885, 2911, 2891, 2887, 2897, 2898, 2911, 2914, + 2895, 2919, 2893, 2921, 2894, 2912, 2901, 2921, 2912, 2915, + 2915, 2920, 2914, 2916, 2916, 2917, 2917, 2922, 2923, 2925, + 2920, 2927, 2926, 2929, 2919, 2932, 2927, 2930, 2930, 2933, + 2931, 2935, 2923, 2926, 2934, 2941, 2936, 2922, 2929, 2937, + 2938, 2939, 2925, 2931, 2932, 2940, 2940, 2933, 2937, 2942, + 2934, 2936, 2938, 2946, 2942, 2941, 2935, 2947, 2948, 2948, + 2949, 2954, 2939, 2950, 2950, 2951, 2951, 2946, 2955, 2949, + 2952, 2952, 2953, 2953, 2957, 2956, 2958, 2947, 2956, 2957, - 2966, 2967, 2968, 2968, 2962, 2966, 2969, 2967, 2970, 2971, - 2963, 2969, 2964, 2970, 2971, 2973, 2975, 2975, 2972, 2976, - 2980, 2973, 2977, 2977, 2976, 2979, 2981, 2982, 2983, 2979, - 2984, 2985, 2986, 2981, 2988, 2988, 2984, 2990, 2990, 2980, - 2991, 2993, 2994, 2992, 2995, 2986, 2982, 2983, 2992, 2991, - 2985, 2997, 2991, 2996, 2996, 2998, 2997, 2995, 3000, 3002, - 2993, 2994, 3001, 3001, 3003, 3003, 3004, 3004, 2998, 3005, - 3006, 3007, 3008, 3008, 3005, 3009, 3014, 3006, 3002, 3010, - 3009, 3010, 3011, 3011, 3000, 3012, 3013, 3016, 3019, 3015, - 3007, 3023, 3012, 3013, 3015, 3014, 3018, 3018, 3021, 3022, + 2954, 2958, 2959, 2960, 2961, 2962, 2964, 2968, 2955, 2963, + 2961, 2964, 2965, 2967, 2967, 2969, 2970, 2970, 2960, 2962, + 2972, 2963, 2968, 2974, 2977, 2977, 2980, 2959, 2978, 2978, + 2979, 2981, 2965, 2982, 2969, 2972, 2983, 2981, 2979, 2982, + 2984, 2974, 2985, 2986, 2990, 2980, 2987, 2987, 2986, 2991, + 2983, 2988, 2988, 2984, 2993, 2994, 2996, 2997, 2998, 2994, + 2999, 2985, 2997, 3001, 3007, 2990, 3000, 3002, 2993, 2991, + 3003, 3008, 3002, 2999, 3009, 3003, 2996, 2998, 3011, 3000, + 3004, 3004, 3001, 3011, 3007, 3010, 3010, 3014, 3012, 3008, + 3013, 3013, 3014, 3009, 3012, 3015, 3016, 3017, 3018, 3025, - 3024, 3025, 3025, 3021, 3022, 3028, 3016, 3019, 3027, 3027, - 3023, 3029, 3030, 3030, 3031, 3031, 3032, 3034, 3034, 3024, - 3035, 3035, 3036, 3032, 3028, 3042, 3038, 3041, 3043, 3036, - 3029, 3038, 3041, 3044, 3044, 3045, 3045, 0, 0, 0, - 0, 0, 0, 0, 3042, 0, 0, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3050, 3050, 3050, 3050, 3050, - 3050, 3050, 3051, 3051, 3051, 3051, 3051, 3051, 3051, 3052, - 3052, 3052, 3052, 3052, 3052, 3052, 3053, 3053, 3053, 3053, - 3053, 3053, 3053, 3055, 3055, 0, 3055, 3055, 3055, 3055, - 3056, 3056, 0, 0, 0, 3056, 3056, 3057, 3057, 0, + 3015, 3016, 3020, 3020, 3018, 3021, 3022, 3022, 3024, 3027, + 3021, 3028, 3024, 3026, 3030, 3029, 3017, 3036, 3025, 3031, + 3026, 3029, 3033, 3033, 3035, 3035, 3036, 3038, 3027, 3036, + 3028, 3037, 3031, 3030, 3039, 3040, 3037, 3041, 3041, 3042, + 3045, 3043, 3046, 3046, 3042, 3047, 3038, 0, 3040, 3048, + 3048, 3049, 3049, 3039, 3043, 3050, 3051, 3052, 3053, 3053, + 3050, 0, 3054, 3051, 3047, 3059, 3045, 3054, 3055, 3061, + 3055, 3056, 3056, 3057, 3058, 3064, 3052, 3060, 3063, 3063, + 3057, 3058, 3060, 3068, 3059, 3066, 3067, 3069, 3061, 3073, + 3066, 3067, 3070, 3070, 3064, 3072, 3072, 3074, 3075, 3075, - 0, 3057, 0, 3057, 3058, 0, 0, 0, 0, 0, - 3058, 3059, 3059, 0, 0, 0, 3059, 3059, 3060, 0, - 0, 0, 0, 0, 3060, 3061, 3061, 0, 3061, 3061, - 3061, 3061, 3062, 3062, 0, 3062, 3062, 3062, 3062, 3048, - 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, - 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, - 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, - 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048, 3048 + 3076, 3076, 3068, 3077, 3079, 3079, 3069, 3081, 3073, 3087, + 3077, 3080, 3080, 3083, 3081, 3086, 3074, 3088, 3083, 0, + 3086, 3089, 3089, 3090, 3090, 0, 0, 0, 3087, 0, + 0, 0, 0, 0, 0, 0, 3088, 3094, 3094, 3094, + 3094, 3094, 3094, 3094, 3095, 3095, 3095, 3095, 3095, 3095, + 3095, 3096, 3096, 3096, 3096, 3096, 3096, 3096, 3097, 3097, + 3097, 3097, 3097, 3097, 3097, 3098, 3098, 3098, 3098, 3098, + 3098, 3098, 3100, 3100, 0, 3100, 3100, 3100, 3100, 3101, + 3101, 0, 0, 0, 3101, 3101, 3102, 3102, 0, 0, + 3102, 0, 3102, 3103, 0, 0, 0, 0, 0, 3103, + + 3104, 3104, 0, 0, 0, 3104, 3104, 3105, 0, 0, + 0, 0, 0, 3105, 3106, 3106, 0, 3106, 3106, 3106, + 3106, 3107, 3107, 0, 3107, 3107, 3107, 3107, 3093, 3093, + 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093, + 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093, + 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093, + 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093, 3093 } ; static yy_state_type yy_last_accepting_state; @@ -2942,7 +2978,7 @@ static void config_end_include(void) } #endif -#line 2943 "" +#line 2980 "" #define YY_NO_INPUT 1 #line 184 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -2951,9 +2987,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 2952 "" +#line 2989 "" -#line 2954 "" +#line 2991 "" #define INITIAL 0 #define quotedstring 1 @@ -3175,7 +3211,7 @@ YY_DECL { #line 204 "./util/configlexer.lex" -#line 3176 "" +#line 3213 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3208,13 +3244,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3049 ) + if ( yy_current_state >= 3094 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 5940 ); + while ( yy_base[yy_current_state] != 6029 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -4615,123 +4651,143 @@ YY_RULE_SETUP case 273: YY_RULE_SETUP #line 491 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_PAD_RESPONSES) } YY_BREAK case 274: YY_RULE_SETUP #line 492 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) } YY_BREAK case 275: YY_RULE_SETUP #line 493 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_PAD_QUERIES) } YY_BREAK case 276: YY_RULE_SETUP #line 494 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) } YY_BREAK case 277: YY_RULE_SETUP #line 495 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 278: YY_RULE_SETUP #line 496 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 279: YY_RULE_SETUP #line 497 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 280: YY_RULE_SETUP #line 498 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 281: YY_RULE_SETUP #line 499 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 282: YY_RULE_SETUP #line 500 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 283: YY_RULE_SETUP #line 501 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 284: YY_RULE_SETUP #line 502 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 285: YY_RULE_SETUP #line 503 "./util/configlexer.lex" -{ YDVAR(0, VAR_IPSET) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 286: YY_RULE_SETUP #line 504 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V4) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 287: YY_RULE_SETUP #line 505 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V6) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 288: YY_RULE_SETUP #line 506 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 289: YY_RULE_SETUP #line 507 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(0, VAR_IPSET) } YY_BREAK case 290: -/* rule 290 can match eol */ YY_RULE_SETUP #line 508 "./util/configlexer.lex" +{ YDVAR(1, VAR_IPSET_NAME_V4) } + YY_BREAK +case 291: +YY_RULE_SETUP +#line 509 "./util/configlexer.lex" +{ YDVAR(1, VAR_IPSET_NAME_V6) } + YY_BREAK +case 292: +YY_RULE_SETUP +#line 510 "./util/configlexer.lex" +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } + YY_BREAK +case 293: +YY_RULE_SETUP +#line 511 "./util/configlexer.lex" +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } + YY_BREAK +case 294: +/* rule 294 can match eol */ +YY_RULE_SETUP +#line 512 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 291: +case 295: YY_RULE_SETUP -#line 511 "./util/configlexer.lex" +#line 515 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 512 "./util/configlexer.lex" +#line 516 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 292: +case 296: YY_RULE_SETUP -#line 517 "./util/configlexer.lex" +#line 521 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 293: -/* rule 293 can match eol */ +case 297: +/* rule 297 can match eol */ YY_RULE_SETUP -#line 518 "./util/configlexer.lex" +#line 522 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 294: +case 298: YY_RULE_SETUP -#line 520 "./util/configlexer.lex" +#line 524 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4744,34 +4800,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 295: +case 299: YY_RULE_SETUP -#line 532 "./util/configlexer.lex" +#line 536 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 533 "./util/configlexer.lex" +#line 537 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 296: +case 300: YY_RULE_SETUP -#line 538 "./util/configlexer.lex" +#line 542 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 297: -/* rule 297 can match eol */ +case 301: +/* rule 301 can match eol */ YY_RULE_SETUP -#line 539 "./util/configlexer.lex" +#line 543 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 298: +case 302: YY_RULE_SETUP -#line 541 "./util/configlexer.lex" +#line 545 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4784,38 +4840,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 299: +case 303: YY_RULE_SETUP -#line 553 "./util/configlexer.lex" +#line 557 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 555 "./util/configlexer.lex" +#line 559 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 300: +case 304: YY_RULE_SETUP -#line 559 "./util/configlexer.lex" +#line 563 "./util/configlexer.lex" { LEXOUT(("ISP ")); /* ignore */ } YY_BREAK -case 301: -/* rule 301 can match eol */ +case 305: +/* rule 305 can match eol */ YY_RULE_SETUP -#line 560 "./util/configlexer.lex" +#line 564 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK -case 302: +case 306: YY_RULE_SETUP -#line 561 "./util/configlexer.lex" +#line 565 "./util/configlexer.lex" { LEXOUT(("IQS ")); BEGIN(include_quoted); } YY_BREAK -case 303: +case 307: YY_RULE_SETUP -#line 562 "./util/configlexer.lex" +#line 566 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4823,27 +4879,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 567 "./util/configlexer.lex" +#line 571 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 304: +case 308: YY_RULE_SETUP -#line 571 "./util/configlexer.lex" +#line 575 "./util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 305: -/* rule 305 can match eol */ +case 309: +/* rule 309 can match eol */ YY_RULE_SETUP -#line 572 "./util/configlexer.lex" +#line 576 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 306: +case 310: YY_RULE_SETUP -#line 574 "./util/configlexer.lex" +#line 578 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4853,7 +4909,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 580 "./util/configlexer.lex" +#line 584 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4865,33 +4921,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 307: +case 311: YY_RULE_SETUP -#line 591 "./util/configlexer.lex" +#line 595 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 308: +case 312: YY_RULE_SETUP -#line 595 "./util/configlexer.lex" +#line 599 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 309: +case 313: YY_RULE_SETUP -#line 599 "./util/configlexer.lex" +#line 603 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 310: +case 314: YY_RULE_SETUP -#line 603 "./util/configlexer.lex" +#line 607 "./util/configlexer.lex" ECHO; YY_BREAK -#line 4892 "" +#line 4949 "" case YY_END_OF_BUFFER: { @@ -5186,7 +5242,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3049 ) + if ( yy_current_state >= 3094 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5214,11 +5270,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3049 ) + if ( yy_current_state >= 3094 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 3048); + yy_is_jam = (yy_current_state == 3093); return yy_is_jam ? 0 : yy_current_state; } @@ -5857,6 +5913,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 603 "./util/configlexer.lex" +#line 607 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index e4baf13f9..5200a5f2f 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -488,6 +488,10 @@ dnscrypt-shared-secret-cache-slabs{COLON} { YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } dnscrypt-nonce-cache-size{COLON} { YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } dnscrypt-nonce-cache-slabs{COLON} { YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +pad-responses{COLON} { YDVAR(1, VAR_PAD_RESPONSES) } +pad-responses-block-size{COLON} { YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) } +pad-queries{COLON} { YDVAR(1, VAR_PAD_QUERIES) } +pad-queries-block-size{COLON} { YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) } ipsecmod-enabled{COLON} { YDVAR(1, VAR_IPSECMOD_ENABLED) } ipsecmod-ignore-bogus{COLON} { YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } ipsecmod-hook{COLON} { YDVAR(1, VAR_IPSECMOD_HOOK) } diff --git a/util/configparser.c b/util/configparser.c index 657f99579..6f3e29eea 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -1,73 +1,23 @@ -/* A Bison parser, made by GNU Bison 3.4.1. */ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ -/* Bison implementation for Yacc-like parsers in C +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYPATCH 20140715 - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, - Inc. +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 +#define YYPREFIX "yy" - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -/* C LALR(1) parser skeleton written by Richard Stallman, by - simplifying the original so-called "semantic" parser. */ - -/* All symbols defined below should begin with yy or YY, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -/* Undocumented macros, especially those whose name start with YY_, - are private implementation details. Do not rely on them. */ - -/* Identify Bison output. */ -#define YYBISON 1 - -/* Bison version. */ -#define YYBISON_VERSION "3.4.1" - -/* Skeleton name. */ -#define YYSKELETON_NAME "yacc.c" - -/* Pure parsers. */ #define YYPURE 0 -/* Push parsers. */ -#define YYPUSH 0 - -/* Pull parsers. */ -#define YYPULL 1 - - - - -/* First part of user prologue. */ -#line 38 "./util/configparser.y" - +#line 39 "./util/configparser.y" #include "config.h" #include @@ -94,6531 +44,1751 @@ extern struct config_parser_state* cfg_parser; #define OUTYY(s) #endif - -#line 99 "util/configparser.c" - -# ifndef YY_NULLPTR -# if defined __cplusplus -# if 201103L <= __cplusplus -# define YY_NULLPTR nullptr -# else -# define YY_NULLPTR 0 -# endif -# else -# define YY_NULLPTR ((void*)0) -# endif -# endif - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 -#endif - -/* Use api.header.include to #include this header - instead of duplicating it here. */ -#ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED -# define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED -/* Debug traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif -#if YYDEBUG -extern int yydebug; -#endif - -/* Token type. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - enum yytokentype - { - SPACE = 258, - LETTER = 259, - NEWLINE = 260, - COMMENT = 261, - COLON = 262, - ANY = 263, - ZONESTR = 264, - STRING_ARG = 265, - VAR_SERVER = 266, - VAR_VERBOSITY = 267, - VAR_NUM_THREADS = 268, - VAR_PORT = 269, - VAR_OUTGOING_RANGE = 270, - VAR_INTERFACE = 271, - VAR_PREFER_IP4 = 272, - VAR_DO_IP4 = 273, - VAR_DO_IP6 = 274, - VAR_PREFER_IP6 = 275, - VAR_DO_UDP = 276, - VAR_DO_TCP = 277, - VAR_TCP_MSS = 278, - VAR_OUTGOING_TCP_MSS = 279, - VAR_TCP_IDLE_TIMEOUT = 280, - VAR_EDNS_TCP_KEEPALIVE = 281, - VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 282, - VAR_CHROOT = 283, - VAR_USERNAME = 284, - VAR_DIRECTORY = 285, - VAR_LOGFILE = 286, - VAR_PIDFILE = 287, - VAR_MSG_CACHE_SIZE = 288, - VAR_MSG_CACHE_SLABS = 289, - VAR_NUM_QUERIES_PER_THREAD = 290, - VAR_RRSET_CACHE_SIZE = 291, - VAR_RRSET_CACHE_SLABS = 292, - VAR_OUTGOING_NUM_TCP = 293, - VAR_INFRA_HOST_TTL = 294, - VAR_INFRA_LAME_TTL = 295, - VAR_INFRA_CACHE_SLABS = 296, - VAR_INFRA_CACHE_NUMHOSTS = 297, - VAR_INFRA_CACHE_LAME_SIZE = 298, - VAR_NAME = 299, - VAR_STUB_ZONE = 300, - VAR_STUB_HOST = 301, - VAR_STUB_ADDR = 302, - VAR_TARGET_FETCH_POLICY = 303, - VAR_HARDEN_SHORT_BUFSIZE = 304, - VAR_HARDEN_LARGE_QUERIES = 305, - VAR_FORWARD_ZONE = 306, - VAR_FORWARD_HOST = 307, - VAR_FORWARD_ADDR = 308, - VAR_DO_NOT_QUERY_ADDRESS = 309, - VAR_HIDE_IDENTITY = 310, - VAR_HIDE_VERSION = 311, - VAR_IDENTITY = 312, - VAR_VERSION = 313, - VAR_HARDEN_GLUE = 314, - VAR_MODULE_CONF = 315, - VAR_TRUST_ANCHOR_FILE = 316, - VAR_TRUST_ANCHOR = 317, - VAR_VAL_OVERRIDE_DATE = 318, - VAR_BOGUS_TTL = 319, - VAR_VAL_CLEAN_ADDITIONAL = 320, - VAR_VAL_PERMISSIVE_MODE = 321, - VAR_INCOMING_NUM_TCP = 322, - VAR_MSG_BUFFER_SIZE = 323, - VAR_KEY_CACHE_SIZE = 324, - VAR_KEY_CACHE_SLABS = 325, - VAR_TRUSTED_KEYS_FILE = 326, - VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 327, - VAR_USE_SYSLOG = 328, - VAR_OUTGOING_INTERFACE = 329, - VAR_ROOT_HINTS = 330, - VAR_DO_NOT_QUERY_LOCALHOST = 331, - VAR_CACHE_MAX_TTL = 332, - VAR_HARDEN_DNSSEC_STRIPPED = 333, - VAR_ACCESS_CONTROL = 334, - VAR_LOCAL_ZONE = 335, - VAR_LOCAL_DATA = 336, - VAR_INTERFACE_AUTOMATIC = 337, - VAR_STATISTICS_INTERVAL = 338, - VAR_DO_DAEMONIZE = 339, - VAR_USE_CAPS_FOR_ID = 340, - VAR_STATISTICS_CUMULATIVE = 341, - VAR_OUTGOING_PORT_PERMIT = 342, - VAR_OUTGOING_PORT_AVOID = 343, - VAR_DLV_ANCHOR_FILE = 344, - VAR_DLV_ANCHOR = 345, - VAR_NEG_CACHE_SIZE = 346, - VAR_HARDEN_REFERRAL_PATH = 347, - VAR_PRIVATE_ADDRESS = 348, - VAR_PRIVATE_DOMAIN = 349, - VAR_REMOTE_CONTROL = 350, - VAR_CONTROL_ENABLE = 351, - VAR_CONTROL_INTERFACE = 352, - VAR_CONTROL_PORT = 353, - VAR_SERVER_KEY_FILE = 354, - VAR_SERVER_CERT_FILE = 355, - VAR_CONTROL_KEY_FILE = 356, - VAR_CONTROL_CERT_FILE = 357, - VAR_CONTROL_USE_CERT = 358, - VAR_EXTENDED_STATISTICS = 359, - VAR_LOCAL_DATA_PTR = 360, - VAR_JOSTLE_TIMEOUT = 361, - VAR_STUB_PRIME = 362, - VAR_UNWANTED_REPLY_THRESHOLD = 363, - VAR_LOG_TIME_ASCII = 364, - VAR_DOMAIN_INSECURE = 365, - VAR_PYTHON = 366, - VAR_PYTHON_SCRIPT = 367, - VAR_VAL_SIG_SKEW_MIN = 368, - VAR_VAL_SIG_SKEW_MAX = 369, - VAR_CACHE_MIN_TTL = 370, - VAR_VAL_LOG_LEVEL = 371, - VAR_AUTO_TRUST_ANCHOR_FILE = 372, - VAR_KEEP_MISSING = 373, - VAR_ADD_HOLDDOWN = 374, - VAR_DEL_HOLDDOWN = 375, - VAR_SO_RCVBUF = 376, - VAR_EDNS_BUFFER_SIZE = 377, - VAR_PREFETCH = 378, - VAR_PREFETCH_KEY = 379, - VAR_SO_SNDBUF = 380, - VAR_SO_REUSEPORT = 381, - VAR_HARDEN_BELOW_NXDOMAIN = 382, - VAR_IGNORE_CD_FLAG = 383, - VAR_LOG_QUERIES = 384, - VAR_LOG_REPLIES = 385, - VAR_LOG_LOCAL_ACTIONS = 386, - VAR_TCP_UPSTREAM = 387, - VAR_SSL_UPSTREAM = 388, - VAR_SSL_SERVICE_KEY = 389, - VAR_SSL_SERVICE_PEM = 390, - VAR_SSL_PORT = 391, - VAR_FORWARD_FIRST = 392, - VAR_STUB_SSL_UPSTREAM = 393, - VAR_FORWARD_SSL_UPSTREAM = 394, - VAR_TLS_CERT_BUNDLE = 395, - VAR_STUB_FIRST = 396, - VAR_MINIMAL_RESPONSES = 397, - VAR_RRSET_ROUNDROBIN = 398, - VAR_MAX_UDP_SIZE = 399, - VAR_DELAY_CLOSE = 400, - VAR_UNBLOCK_LAN_ZONES = 401, - VAR_INSECURE_LAN_ZONES = 402, - VAR_INFRA_CACHE_MIN_RTT = 403, - VAR_DNS64_PREFIX = 404, - VAR_DNS64_SYNTHALL = 405, - VAR_DNS64_IGNORE_AAAA = 406, - VAR_DNSTAP = 407, - VAR_DNSTAP_ENABLE = 408, - VAR_DNSTAP_SOCKET_PATH = 409, - VAR_DNSTAP_IP = 410, - VAR_DNSTAP_TLS = 411, - VAR_DNSTAP_TLS_SERVER_NAME = 412, - VAR_DNSTAP_TLS_CERT_BUNDLE = 413, - VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 414, - VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 415, - VAR_DNSTAP_SEND_IDENTITY = 416, - VAR_DNSTAP_SEND_VERSION = 417, - VAR_DNSTAP_IDENTITY = 418, - VAR_DNSTAP_VERSION = 419, - VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 420, - VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 421, - VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 422, - VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 423, - VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 424, - VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 425, - VAR_RESPONSE_IP_TAG = 426, - VAR_RESPONSE_IP = 427, - VAR_RESPONSE_IP_DATA = 428, - VAR_HARDEN_ALGO_DOWNGRADE = 429, - VAR_IP_TRANSPARENT = 430, - VAR_IP_DSCP = 431, - VAR_DISABLE_DNSSEC_LAME_CHECK = 432, - VAR_IP_RATELIMIT = 433, - VAR_IP_RATELIMIT_SLABS = 434, - VAR_IP_RATELIMIT_SIZE = 435, - VAR_RATELIMIT = 436, - VAR_RATELIMIT_SLABS = 437, - VAR_RATELIMIT_SIZE = 438, - VAR_RATELIMIT_FOR_DOMAIN = 439, - VAR_RATELIMIT_BELOW_DOMAIN = 440, - VAR_IP_RATELIMIT_FACTOR = 441, - VAR_RATELIMIT_FACTOR = 442, - VAR_SEND_CLIENT_SUBNET = 443, - VAR_CLIENT_SUBNET_ZONE = 444, - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 445, - VAR_CLIENT_SUBNET_OPCODE = 446, - VAR_MAX_CLIENT_SUBNET_IPV4 = 447, - VAR_MAX_CLIENT_SUBNET_IPV6 = 448, - VAR_MIN_CLIENT_SUBNET_IPV4 = 449, - VAR_MIN_CLIENT_SUBNET_IPV6 = 450, - VAR_MAX_ECS_TREE_SIZE_IPV4 = 451, - VAR_MAX_ECS_TREE_SIZE_IPV6 = 452, - VAR_CAPS_WHITELIST = 453, - VAR_CACHE_MAX_NEGATIVE_TTL = 454, - VAR_PERMIT_SMALL_HOLDDOWN = 455, - VAR_QNAME_MINIMISATION = 456, - VAR_QNAME_MINIMISATION_STRICT = 457, - VAR_IP_FREEBIND = 458, - VAR_DEFINE_TAG = 459, - VAR_LOCAL_ZONE_TAG = 460, - VAR_ACCESS_CONTROL_TAG = 461, - VAR_LOCAL_ZONE_OVERRIDE = 462, - VAR_ACCESS_CONTROL_TAG_ACTION = 463, - VAR_ACCESS_CONTROL_TAG_DATA = 464, - VAR_VIEW = 465, - VAR_ACCESS_CONTROL_VIEW = 466, - VAR_VIEW_FIRST = 467, - VAR_SERVE_EXPIRED = 468, - VAR_SERVE_EXPIRED_TTL = 469, - VAR_SERVE_EXPIRED_TTL_RESET = 470, - VAR_SERVE_EXPIRED_REPLY_TTL = 471, - VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 472, - VAR_FAKE_DSA = 473, - VAR_FAKE_SHA1 = 474, - VAR_LOG_IDENTITY = 475, - VAR_HIDE_TRUSTANCHOR = 476, - VAR_TRUST_ANCHOR_SIGNALING = 477, - VAR_AGGRESSIVE_NSEC = 478, - VAR_USE_SYSTEMD = 479, - VAR_SHM_ENABLE = 480, - VAR_SHM_KEY = 481, - VAR_ROOT_KEY_SENTINEL = 482, - VAR_DNSCRYPT = 483, - VAR_DNSCRYPT_ENABLE = 484, - VAR_DNSCRYPT_PORT = 485, - VAR_DNSCRYPT_PROVIDER = 486, - VAR_DNSCRYPT_SECRET_KEY = 487, - VAR_DNSCRYPT_PROVIDER_CERT = 488, - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 489, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 490, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 491, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 492, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 493, - VAR_IPSECMOD_ENABLED = 494, - VAR_IPSECMOD_HOOK = 495, - VAR_IPSECMOD_IGNORE_BOGUS = 496, - VAR_IPSECMOD_MAX_TTL = 497, - VAR_IPSECMOD_WHITELIST = 498, - VAR_IPSECMOD_STRICT = 499, - VAR_CACHEDB = 500, - VAR_CACHEDB_BACKEND = 501, - VAR_CACHEDB_SECRETSEED = 502, - VAR_CACHEDB_REDISHOST = 503, - VAR_CACHEDB_REDISPORT = 504, - VAR_CACHEDB_REDISTIMEOUT = 505, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 506, - VAR_FOR_UPSTREAM = 507, - VAR_AUTH_ZONE = 508, - VAR_ZONEFILE = 509, - VAR_MASTER = 510, - VAR_URL = 511, - VAR_FOR_DOWNSTREAM = 512, - VAR_FALLBACK_ENABLED = 513, - VAR_TLS_ADDITIONAL_PORT = 514, - VAR_LOW_RTT = 515, - VAR_LOW_RTT_PERMIL = 516, - VAR_FAST_SERVER_PERMIL = 517, - VAR_FAST_SERVER_NUM = 518, - VAR_ALLOW_NOTIFY = 519, - VAR_TLS_WIN_CERT = 520, - VAR_TCP_CONNECTION_LIMIT = 521, - VAR_FORWARD_NO_CACHE = 522, - VAR_STUB_NO_CACHE = 523, - VAR_LOG_SERVFAIL = 524, - VAR_DENY_ANY = 525, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 526, - VAR_LOG_TAG_QUERYREPLY = 527, - VAR_STREAM_WAIT_SIZE = 528, - VAR_TLS_CIPHERS = 529, - VAR_TLS_CIPHERSUITES = 530, - VAR_IPSET = 531, - VAR_IPSET_NAME_V4 = 532, - VAR_IPSET_NAME_V6 = 533, - VAR_TLS_SESSION_TICKET_KEYS = 534, - VAR_RPZ = 535, - VAR_TAGS = 536, - VAR_RPZ_ACTION_OVERRIDE = 537, - VAR_RPZ_CNAME_OVERRIDE = 538, - VAR_RPZ_LOG = 539, - VAR_RPZ_LOG_NAME = 540 - }; -#endif -/* Tokens. */ -#define SPACE 258 -#define LETTER 259 -#define NEWLINE 260 -#define COMMENT 261 -#define COLON 262 -#define ANY 263 -#define ZONESTR 264 -#define STRING_ARG 265 -#define VAR_SERVER 266 -#define VAR_VERBOSITY 267 -#define VAR_NUM_THREADS 268 -#define VAR_PORT 269 -#define VAR_OUTGOING_RANGE 270 -#define VAR_INTERFACE 271 -#define VAR_PREFER_IP4 272 -#define VAR_DO_IP4 273 -#define VAR_DO_IP6 274 -#define VAR_PREFER_IP6 275 -#define VAR_DO_UDP 276 -#define VAR_DO_TCP 277 -#define VAR_TCP_MSS 278 -#define VAR_OUTGOING_TCP_MSS 279 -#define VAR_TCP_IDLE_TIMEOUT 280 -#define VAR_EDNS_TCP_KEEPALIVE 281 -#define VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 282 -#define VAR_CHROOT 283 -#define VAR_USERNAME 284 -#define VAR_DIRECTORY 285 -#define VAR_LOGFILE 286 -#define VAR_PIDFILE 287 -#define VAR_MSG_CACHE_SIZE 288 -#define VAR_MSG_CACHE_SLABS 289 -#define VAR_NUM_QUERIES_PER_THREAD 290 -#define VAR_RRSET_CACHE_SIZE 291 -#define VAR_RRSET_CACHE_SLABS 292 -#define VAR_OUTGOING_NUM_TCP 293 -#define VAR_INFRA_HOST_TTL 294 -#define VAR_INFRA_LAME_TTL 295 -#define VAR_INFRA_CACHE_SLABS 296 -#define VAR_INFRA_CACHE_NUMHOSTS 297 -#define VAR_INFRA_CACHE_LAME_SIZE 298 -#define VAR_NAME 299 -#define VAR_STUB_ZONE 300 -#define VAR_STUB_HOST 301 -#define VAR_STUB_ADDR 302 -#define VAR_TARGET_FETCH_POLICY 303 -#define VAR_HARDEN_SHORT_BUFSIZE 304 -#define VAR_HARDEN_LARGE_QUERIES 305 -#define VAR_FORWARD_ZONE 306 -#define VAR_FORWARD_HOST 307 -#define VAR_FORWARD_ADDR 308 -#define VAR_DO_NOT_QUERY_ADDRESS 309 -#define VAR_HIDE_IDENTITY 310 -#define VAR_HIDE_VERSION 311 -#define VAR_IDENTITY 312 -#define VAR_VERSION 313 -#define VAR_HARDEN_GLUE 314 -#define VAR_MODULE_CONF 315 -#define VAR_TRUST_ANCHOR_FILE 316 -#define VAR_TRUST_ANCHOR 317 -#define VAR_VAL_OVERRIDE_DATE 318 -#define VAR_BOGUS_TTL 319 -#define VAR_VAL_CLEAN_ADDITIONAL 320 -#define VAR_VAL_PERMISSIVE_MODE 321 -#define VAR_INCOMING_NUM_TCP 322 -#define VAR_MSG_BUFFER_SIZE 323 -#define VAR_KEY_CACHE_SIZE 324 -#define VAR_KEY_CACHE_SLABS 325 -#define VAR_TRUSTED_KEYS_FILE 326 -#define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 327 -#define VAR_USE_SYSLOG 328 -#define VAR_OUTGOING_INTERFACE 329 -#define VAR_ROOT_HINTS 330 -#define VAR_DO_NOT_QUERY_LOCALHOST 331 -#define VAR_CACHE_MAX_TTL 332 -#define VAR_HARDEN_DNSSEC_STRIPPED 333 -#define VAR_ACCESS_CONTROL 334 -#define VAR_LOCAL_ZONE 335 -#define VAR_LOCAL_DATA 336 -#define VAR_INTERFACE_AUTOMATIC 337 -#define VAR_STATISTICS_INTERVAL 338 -#define VAR_DO_DAEMONIZE 339 -#define VAR_USE_CAPS_FOR_ID 340 -#define VAR_STATISTICS_CUMULATIVE 341 -#define VAR_OUTGOING_PORT_PERMIT 342 -#define VAR_OUTGOING_PORT_AVOID 343 -#define VAR_DLV_ANCHOR_FILE 344 -#define VAR_DLV_ANCHOR 345 -#define VAR_NEG_CACHE_SIZE 346 -#define VAR_HARDEN_REFERRAL_PATH 347 -#define VAR_PRIVATE_ADDRESS 348 -#define VAR_PRIVATE_DOMAIN 349 -#define VAR_REMOTE_CONTROL 350 -#define VAR_CONTROL_ENABLE 351 -#define VAR_CONTROL_INTERFACE 352 -#define VAR_CONTROL_PORT 353 -#define VAR_SERVER_KEY_FILE 354 -#define VAR_SERVER_CERT_FILE 355 -#define VAR_CONTROL_KEY_FILE 356 -#define VAR_CONTROL_CERT_FILE 357 -#define VAR_CONTROL_USE_CERT 358 -#define VAR_EXTENDED_STATISTICS 359 -#define VAR_LOCAL_DATA_PTR 360 -#define VAR_JOSTLE_TIMEOUT 361 -#define VAR_STUB_PRIME 362 -#define VAR_UNWANTED_REPLY_THRESHOLD 363 -#define VAR_LOG_TIME_ASCII 364 -#define VAR_DOMAIN_INSECURE 365 -#define VAR_PYTHON 366 -#define VAR_PYTHON_SCRIPT 367 -#define VAR_VAL_SIG_SKEW_MIN 368 -#define VAR_VAL_SIG_SKEW_MAX 369 -#define VAR_CACHE_MIN_TTL 370 -#define VAR_VAL_LOG_LEVEL 371 -#define VAR_AUTO_TRUST_ANCHOR_FILE 372 -#define VAR_KEEP_MISSING 373 -#define VAR_ADD_HOLDDOWN 374 -#define VAR_DEL_HOLDDOWN 375 -#define VAR_SO_RCVBUF 376 -#define VAR_EDNS_BUFFER_SIZE 377 -#define VAR_PREFETCH 378 -#define VAR_PREFETCH_KEY 379 -#define VAR_SO_SNDBUF 380 -#define VAR_SO_REUSEPORT 381 -#define VAR_HARDEN_BELOW_NXDOMAIN 382 -#define VAR_IGNORE_CD_FLAG 383 -#define VAR_LOG_QUERIES 384 -#define VAR_LOG_REPLIES 385 -#define VAR_LOG_LOCAL_ACTIONS 386 -#define VAR_TCP_UPSTREAM 387 -#define VAR_SSL_UPSTREAM 388 -#define VAR_SSL_SERVICE_KEY 389 -#define VAR_SSL_SERVICE_PEM 390 -#define VAR_SSL_PORT 391 -#define VAR_FORWARD_FIRST 392 -#define VAR_STUB_SSL_UPSTREAM 393 -#define VAR_FORWARD_SSL_UPSTREAM 394 -#define VAR_TLS_CERT_BUNDLE 395 -#define VAR_STUB_FIRST 396 -#define VAR_MINIMAL_RESPONSES 397 -#define VAR_RRSET_ROUNDROBIN 398 -#define VAR_MAX_UDP_SIZE 399 -#define VAR_DELAY_CLOSE 400 -#define VAR_UNBLOCK_LAN_ZONES 401 -#define VAR_INSECURE_LAN_ZONES 402 -#define VAR_INFRA_CACHE_MIN_RTT 403 -#define VAR_DNS64_PREFIX 404 -#define VAR_DNS64_SYNTHALL 405 -#define VAR_DNS64_IGNORE_AAAA 406 -#define VAR_DNSTAP 407 -#define VAR_DNSTAP_ENABLE 408 -#define VAR_DNSTAP_SOCKET_PATH 409 -#define VAR_DNSTAP_IP 410 -#define VAR_DNSTAP_TLS 411 -#define VAR_DNSTAP_TLS_SERVER_NAME 412 -#define VAR_DNSTAP_TLS_CERT_BUNDLE 413 -#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 414 -#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 415 -#define VAR_DNSTAP_SEND_IDENTITY 416 -#define VAR_DNSTAP_SEND_VERSION 417 -#define VAR_DNSTAP_IDENTITY 418 -#define VAR_DNSTAP_VERSION 419 -#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 420 -#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 421 -#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 422 -#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 423 -#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 424 -#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 425 -#define VAR_RESPONSE_IP_TAG 426 -#define VAR_RESPONSE_IP 427 -#define VAR_RESPONSE_IP_DATA 428 -#define VAR_HARDEN_ALGO_DOWNGRADE 429 -#define VAR_IP_TRANSPARENT 430 -#define VAR_IP_DSCP 431 -#define VAR_DISABLE_DNSSEC_LAME_CHECK 432 -#define VAR_IP_RATELIMIT 433 -#define VAR_IP_RATELIMIT_SLABS 434 -#define VAR_IP_RATELIMIT_SIZE 435 -#define VAR_RATELIMIT 436 -#define VAR_RATELIMIT_SLABS 437 -#define VAR_RATELIMIT_SIZE 438 -#define VAR_RATELIMIT_FOR_DOMAIN 439 -#define VAR_RATELIMIT_BELOW_DOMAIN 440 -#define VAR_IP_RATELIMIT_FACTOR 441 -#define VAR_RATELIMIT_FACTOR 442 -#define VAR_SEND_CLIENT_SUBNET 443 -#define VAR_CLIENT_SUBNET_ZONE 444 -#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 445 -#define VAR_CLIENT_SUBNET_OPCODE 446 -#define VAR_MAX_CLIENT_SUBNET_IPV4 447 -#define VAR_MAX_CLIENT_SUBNET_IPV6 448 -#define VAR_MIN_CLIENT_SUBNET_IPV4 449 -#define VAR_MIN_CLIENT_SUBNET_IPV6 450 -#define VAR_MAX_ECS_TREE_SIZE_IPV4 451 -#define VAR_MAX_ECS_TREE_SIZE_IPV6 452 -#define VAR_CAPS_WHITELIST 453 -#define VAR_CACHE_MAX_NEGATIVE_TTL 454 -#define VAR_PERMIT_SMALL_HOLDDOWN 455 -#define VAR_QNAME_MINIMISATION 456 -#define VAR_QNAME_MINIMISATION_STRICT 457 -#define VAR_IP_FREEBIND 458 -#define VAR_DEFINE_TAG 459 -#define VAR_LOCAL_ZONE_TAG 460 -#define VAR_ACCESS_CONTROL_TAG 461 -#define VAR_LOCAL_ZONE_OVERRIDE 462 -#define VAR_ACCESS_CONTROL_TAG_ACTION 463 -#define VAR_ACCESS_CONTROL_TAG_DATA 464 -#define VAR_VIEW 465 -#define VAR_ACCESS_CONTROL_VIEW 466 -#define VAR_VIEW_FIRST 467 -#define VAR_SERVE_EXPIRED 468 -#define VAR_SERVE_EXPIRED_TTL 469 -#define VAR_SERVE_EXPIRED_TTL_RESET 470 -#define VAR_SERVE_EXPIRED_REPLY_TTL 471 -#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 472 -#define VAR_FAKE_DSA 473 -#define VAR_FAKE_SHA1 474 -#define VAR_LOG_IDENTITY 475 -#define VAR_HIDE_TRUSTANCHOR 476 -#define VAR_TRUST_ANCHOR_SIGNALING 477 -#define VAR_AGGRESSIVE_NSEC 478 -#define VAR_USE_SYSTEMD 479 -#define VAR_SHM_ENABLE 480 -#define VAR_SHM_KEY 481 -#define VAR_ROOT_KEY_SENTINEL 482 -#define VAR_DNSCRYPT 483 -#define VAR_DNSCRYPT_ENABLE 484 -#define VAR_DNSCRYPT_PORT 485 -#define VAR_DNSCRYPT_PROVIDER 486 -#define VAR_DNSCRYPT_SECRET_KEY 487 -#define VAR_DNSCRYPT_PROVIDER_CERT 488 -#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 489 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 490 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 491 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 492 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 493 -#define VAR_IPSECMOD_ENABLED 494 -#define VAR_IPSECMOD_HOOK 495 -#define VAR_IPSECMOD_IGNORE_BOGUS 496 -#define VAR_IPSECMOD_MAX_TTL 497 -#define VAR_IPSECMOD_WHITELIST 498 -#define VAR_IPSECMOD_STRICT 499 -#define VAR_CACHEDB 500 -#define VAR_CACHEDB_BACKEND 501 -#define VAR_CACHEDB_SECRETSEED 502 -#define VAR_CACHEDB_REDISHOST 503 -#define VAR_CACHEDB_REDISPORT 504 -#define VAR_CACHEDB_REDISTIMEOUT 505 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 506 -#define VAR_FOR_UPSTREAM 507 -#define VAR_AUTH_ZONE 508 -#define VAR_ZONEFILE 509 -#define VAR_MASTER 510 -#define VAR_URL 511 -#define VAR_FOR_DOWNSTREAM 512 -#define VAR_FALLBACK_ENABLED 513 -#define VAR_TLS_ADDITIONAL_PORT 514 -#define VAR_LOW_RTT 515 -#define VAR_LOW_RTT_PERMIL 516 -#define VAR_FAST_SERVER_PERMIL 517 -#define VAR_FAST_SERVER_NUM 518 -#define VAR_ALLOW_NOTIFY 519 -#define VAR_TLS_WIN_CERT 520 -#define VAR_TCP_CONNECTION_LIMIT 521 -#define VAR_FORWARD_NO_CACHE 522 -#define VAR_STUB_NO_CACHE 523 -#define VAR_LOG_SERVFAIL 524 -#define VAR_DENY_ANY 525 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 526 -#define VAR_LOG_TAG_QUERYREPLY 527 -#define VAR_STREAM_WAIT_SIZE 528 -#define VAR_TLS_CIPHERS 529 -#define VAR_TLS_CIPHERSUITES 530 -#define VAR_IPSET 531 -#define VAR_IPSET_NAME_V4 532 -#define VAR_IPSET_NAME_V6 533 -#define VAR_TLS_SESSION_TICKET_KEYS 534 -#define VAR_RPZ 535 -#define VAR_TAGS 536 -#define VAR_RPZ_ACTION_OVERRIDE 537 -#define VAR_RPZ_CNAME_OVERRIDE 538 -#define VAR_RPZ_LOG 539 -#define VAR_RPZ_LOG_NAME 540 - -/* Value type. */ -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -union YYSTYPE -{ #line 66 "./util/configparser.y" - +#ifdef YYSTYPE +#undef YYSTYPE_IS_DECLARED +#define YYSTYPE_IS_DECLARED 1 +#endif +#ifndef YYSTYPE_IS_DECLARED +#define YYSTYPE_IS_DECLARED 1 +typedef union { char* str; +} YYSTYPE; +#endif /* !YYSTYPE_IS_DECLARED */ +#line 59 "util/configparser.c" -#line 716 "util/configparser.c" - -}; -typedef union YYSTYPE YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 -# define YYSTYPE_IS_DECLARED 1 -#endif - - -extern YYSTYPE yylval; - -int yyparse (void); - -#endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED */ - - - -#ifdef short -# undef short -#endif - -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 yytype_uint8; -#else -typedef unsigned char yytype_uint8; -#endif - -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 yytype_int8; -#else -typedef signed char yytype_int8; -#endif - -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; -#else -typedef unsigned short yytype_uint16; -#endif - -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 yytype_int16; -#else -typedef short yytype_int16; -#endif - -#ifndef YYSIZE_T -# ifdef __SIZE_TYPE__ -# define YYSIZE_T __SIZE_TYPE__ -# elif defined size_t -# define YYSIZE_T size_t -# elif ! defined YYSIZE_T -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) # else -# define YYSIZE_T unsigned +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) # endif -#endif - -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) - -#ifndef YY_ -# if defined YYENABLE_NLS && YYENABLE_NLS -# if ENABLE_NLS -# include /* INFRINGES ON USER NAME SPACE */ -# define YY_(Msgid) dgettext ("bison-runtime", Msgid) -# endif -# endif -# ifndef YY_ -# define YY_(Msgid) Msgid -# endif -#endif - -#ifndef YY_ATTRIBUTE -# if (defined __GNUC__ \ - && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ - || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C -# define YY_ATTRIBUTE(Spec) __attribute__(Spec) -# else -# define YY_ATTRIBUTE(Spec) /* empty */ -# endif -#endif - -#ifndef YY_ATTRIBUTE_PURE -# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) -#endif - -#ifndef YY_ATTRIBUTE_UNUSED -# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) -#endif - -/* Suppress unused-variable warnings by "using" E. */ -#if ! defined lint || defined __GNUC__ -# define YYUSE(E) ((void) (E)) #else -# define YYUSE(E) /* empty */ +# define YYPARSE_DECL() yyparse(void) #endif -#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ -/* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ - _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ - _Pragma ("GCC diagnostic pop") +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) #else -# define YY_INITIAL_VALUE(Value) Value -#endif -#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_END -#endif -#ifndef YY_INITIAL_VALUE -# define YY_INITIAL_VALUE(Value) /* Nothing. */ +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() #endif +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif -#define YY_ASSERT(E) ((void) (0 && (E))) +extern int YYPARSE_DECL(); -#if ! defined yyoverflow || YYERROR_VERBOSE - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef YYSTACK_USE_ALLOCA -# if YYSTACK_USE_ALLOCA -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# elif defined __BUILTIN_VA_ARG_INCR -# include /* INFRINGES ON USER NAME SPACE */ -# elif defined _AIX -# define YYSTACK_ALLOC __alloca -# elif defined _MSC_VER -# include /* INFRINGES ON USER NAME SPACE */ -# define alloca _alloca -# else -# define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS -# include /* INFRINGES ON USER NAME SPACE */ - /* Use EXIT_SUCCESS as a witness for stdlib.h. */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's 'empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) -# ifndef YYSTACK_ALLOC_MAXIMUM - /* The OS might guarantee only one guard page at the bottom of the stack, - and a page size can be as small as 4096 bytes. So we cannot safely - invoke alloca (N) if N exceeds 4096. Use a slightly smaller number - to allow for a few compiler-allocated temporary stack slots. */ -# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ -# endif -# else -# define YYSTACK_ALLOC YYMALLOC -# define YYSTACK_FREE YYFREE -# ifndef YYSTACK_ALLOC_MAXIMUM -# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM -# endif -# if (defined __cplusplus && ! defined EXIT_SUCCESS \ - && ! ((defined YYMALLOC || defined malloc) \ - && (defined YYFREE || defined free))) -# include /* INFRINGES ON USER NAME SPACE */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# ifndef YYMALLOC -# define YYMALLOC malloc -# if ! defined malloc && ! defined EXIT_SUCCESS -void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifndef YYFREE -# define YYFREE free -# if ! defined free && ! defined EXIT_SUCCESS -void free (void *); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# endif -#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ - - -#if (! defined yyoverflow \ - && (! defined __cplusplus \ - || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union yyalloc -{ - yytype_int16 yyss_alloc; - YYSTYPE yyvs_alloc; +#define SPACE 257 +#define LETTER 258 +#define NEWLINE 259 +#define COMMENT 260 +#define COLON 261 +#define ANY 262 +#define ZONESTR 263 +#define STRING_ARG 264 +#define VAR_SERVER 265 +#define VAR_VERBOSITY 266 +#define VAR_NUM_THREADS 267 +#define VAR_PORT 268 +#define VAR_OUTGOING_RANGE 269 +#define VAR_INTERFACE 270 +#define VAR_PREFER_IP4 271 +#define VAR_DO_IP4 272 +#define VAR_DO_IP6 273 +#define VAR_PREFER_IP6 274 +#define VAR_DO_UDP 275 +#define VAR_DO_TCP 276 +#define VAR_TCP_MSS 277 +#define VAR_OUTGOING_TCP_MSS 278 +#define VAR_TCP_IDLE_TIMEOUT 279 +#define VAR_EDNS_TCP_KEEPALIVE 280 +#define VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 281 +#define VAR_CHROOT 282 +#define VAR_USERNAME 283 +#define VAR_DIRECTORY 284 +#define VAR_LOGFILE 285 +#define VAR_PIDFILE 286 +#define VAR_MSG_CACHE_SIZE 287 +#define VAR_MSG_CACHE_SLABS 288 +#define VAR_NUM_QUERIES_PER_THREAD 289 +#define VAR_RRSET_CACHE_SIZE 290 +#define VAR_RRSET_CACHE_SLABS 291 +#define VAR_OUTGOING_NUM_TCP 292 +#define VAR_INFRA_HOST_TTL 293 +#define VAR_INFRA_LAME_TTL 294 +#define VAR_INFRA_CACHE_SLABS 295 +#define VAR_INFRA_CACHE_NUMHOSTS 296 +#define VAR_INFRA_CACHE_LAME_SIZE 297 +#define VAR_NAME 298 +#define VAR_STUB_ZONE 299 +#define VAR_STUB_HOST 300 +#define VAR_STUB_ADDR 301 +#define VAR_TARGET_FETCH_POLICY 302 +#define VAR_HARDEN_SHORT_BUFSIZE 303 +#define VAR_HARDEN_LARGE_QUERIES 304 +#define VAR_FORWARD_ZONE 305 +#define VAR_FORWARD_HOST 306 +#define VAR_FORWARD_ADDR 307 +#define VAR_DO_NOT_QUERY_ADDRESS 308 +#define VAR_HIDE_IDENTITY 309 +#define VAR_HIDE_VERSION 310 +#define VAR_IDENTITY 311 +#define VAR_VERSION 312 +#define VAR_HARDEN_GLUE 313 +#define VAR_MODULE_CONF 314 +#define VAR_TRUST_ANCHOR_FILE 315 +#define VAR_TRUST_ANCHOR 316 +#define VAR_VAL_OVERRIDE_DATE 317 +#define VAR_BOGUS_TTL 318 +#define VAR_VAL_CLEAN_ADDITIONAL 319 +#define VAR_VAL_PERMISSIVE_MODE 320 +#define VAR_INCOMING_NUM_TCP 321 +#define VAR_MSG_BUFFER_SIZE 322 +#define VAR_KEY_CACHE_SIZE 323 +#define VAR_KEY_CACHE_SLABS 324 +#define VAR_TRUSTED_KEYS_FILE 325 +#define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 326 +#define VAR_USE_SYSLOG 327 +#define VAR_OUTGOING_INTERFACE 328 +#define VAR_ROOT_HINTS 329 +#define VAR_DO_NOT_QUERY_LOCALHOST 330 +#define VAR_CACHE_MAX_TTL 331 +#define VAR_HARDEN_DNSSEC_STRIPPED 332 +#define VAR_ACCESS_CONTROL 333 +#define VAR_LOCAL_ZONE 334 +#define VAR_LOCAL_DATA 335 +#define VAR_INTERFACE_AUTOMATIC 336 +#define VAR_STATISTICS_INTERVAL 337 +#define VAR_DO_DAEMONIZE 338 +#define VAR_USE_CAPS_FOR_ID 339 +#define VAR_STATISTICS_CUMULATIVE 340 +#define VAR_OUTGOING_PORT_PERMIT 341 +#define VAR_OUTGOING_PORT_AVOID 342 +#define VAR_DLV_ANCHOR_FILE 343 +#define VAR_DLV_ANCHOR 344 +#define VAR_NEG_CACHE_SIZE 345 +#define VAR_HARDEN_REFERRAL_PATH 346 +#define VAR_PRIVATE_ADDRESS 347 +#define VAR_PRIVATE_DOMAIN 348 +#define VAR_REMOTE_CONTROL 349 +#define VAR_CONTROL_ENABLE 350 +#define VAR_CONTROL_INTERFACE 351 +#define VAR_CONTROL_PORT 352 +#define VAR_SERVER_KEY_FILE 353 +#define VAR_SERVER_CERT_FILE 354 +#define VAR_CONTROL_KEY_FILE 355 +#define VAR_CONTROL_CERT_FILE 356 +#define VAR_CONTROL_USE_CERT 357 +#define VAR_EXTENDED_STATISTICS 358 +#define VAR_LOCAL_DATA_PTR 359 +#define VAR_JOSTLE_TIMEOUT 360 +#define VAR_STUB_PRIME 361 +#define VAR_UNWANTED_REPLY_THRESHOLD 362 +#define VAR_LOG_TIME_ASCII 363 +#define VAR_DOMAIN_INSECURE 364 +#define VAR_PYTHON 365 +#define VAR_PYTHON_SCRIPT 366 +#define VAR_VAL_SIG_SKEW_MIN 367 +#define VAR_VAL_SIG_SKEW_MAX 368 +#define VAR_CACHE_MIN_TTL 369 +#define VAR_VAL_LOG_LEVEL 370 +#define VAR_AUTO_TRUST_ANCHOR_FILE 371 +#define VAR_KEEP_MISSING 372 +#define VAR_ADD_HOLDDOWN 373 +#define VAR_DEL_HOLDDOWN 374 +#define VAR_SO_RCVBUF 375 +#define VAR_EDNS_BUFFER_SIZE 376 +#define VAR_PREFETCH 377 +#define VAR_PREFETCH_KEY 378 +#define VAR_SO_SNDBUF 379 +#define VAR_SO_REUSEPORT 380 +#define VAR_HARDEN_BELOW_NXDOMAIN 381 +#define VAR_IGNORE_CD_FLAG 382 +#define VAR_LOG_QUERIES 383 +#define VAR_LOG_REPLIES 384 +#define VAR_LOG_LOCAL_ACTIONS 385 +#define VAR_TCP_UPSTREAM 386 +#define VAR_SSL_UPSTREAM 387 +#define VAR_SSL_SERVICE_KEY 388 +#define VAR_SSL_SERVICE_PEM 389 +#define VAR_SSL_PORT 390 +#define VAR_FORWARD_FIRST 391 +#define VAR_STUB_SSL_UPSTREAM 392 +#define VAR_FORWARD_SSL_UPSTREAM 393 +#define VAR_TLS_CERT_BUNDLE 394 +#define VAR_STUB_FIRST 395 +#define VAR_MINIMAL_RESPONSES 396 +#define VAR_RRSET_ROUNDROBIN 397 +#define VAR_MAX_UDP_SIZE 398 +#define VAR_DELAY_CLOSE 399 +#define VAR_UNBLOCK_LAN_ZONES 400 +#define VAR_INSECURE_LAN_ZONES 401 +#define VAR_INFRA_CACHE_MIN_RTT 402 +#define VAR_DNS64_PREFIX 403 +#define VAR_DNS64_SYNTHALL 404 +#define VAR_DNS64_IGNORE_AAAA 405 +#define VAR_DNSTAP 406 +#define VAR_DNSTAP_ENABLE 407 +#define VAR_DNSTAP_SOCKET_PATH 408 +#define VAR_DNSTAP_IP 409 +#define VAR_DNSTAP_TLS 410 +#define VAR_DNSTAP_TLS_SERVER_NAME 411 +#define VAR_DNSTAP_TLS_CERT_BUNDLE 412 +#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 413 +#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 414 +#define VAR_DNSTAP_SEND_IDENTITY 415 +#define VAR_DNSTAP_SEND_VERSION 416 +#define VAR_DNSTAP_IDENTITY 417 +#define VAR_DNSTAP_VERSION 418 +#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 419 +#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 420 +#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 421 +#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 422 +#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 423 +#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 424 +#define VAR_RESPONSE_IP_TAG 425 +#define VAR_RESPONSE_IP 426 +#define VAR_RESPONSE_IP_DATA 427 +#define VAR_HARDEN_ALGO_DOWNGRADE 428 +#define VAR_IP_TRANSPARENT 429 +#define VAR_IP_DSCP 430 +#define VAR_DISABLE_DNSSEC_LAME_CHECK 431 +#define VAR_IP_RATELIMIT 432 +#define VAR_IP_RATELIMIT_SLABS 433 +#define VAR_IP_RATELIMIT_SIZE 434 +#define VAR_RATELIMIT 435 +#define VAR_RATELIMIT_SLABS 436 +#define VAR_RATELIMIT_SIZE 437 +#define VAR_RATELIMIT_FOR_DOMAIN 438 +#define VAR_RATELIMIT_BELOW_DOMAIN 439 +#define VAR_IP_RATELIMIT_FACTOR 440 +#define VAR_RATELIMIT_FACTOR 441 +#define VAR_SEND_CLIENT_SUBNET 442 +#define VAR_CLIENT_SUBNET_ZONE 443 +#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 444 +#define VAR_CLIENT_SUBNET_OPCODE 445 +#define VAR_MAX_CLIENT_SUBNET_IPV4 446 +#define VAR_MAX_CLIENT_SUBNET_IPV6 447 +#define VAR_MIN_CLIENT_SUBNET_IPV4 448 +#define VAR_MIN_CLIENT_SUBNET_IPV6 449 +#define VAR_MAX_ECS_TREE_SIZE_IPV4 450 +#define VAR_MAX_ECS_TREE_SIZE_IPV6 451 +#define VAR_CAPS_WHITELIST 452 +#define VAR_CACHE_MAX_NEGATIVE_TTL 453 +#define VAR_PERMIT_SMALL_HOLDDOWN 454 +#define VAR_QNAME_MINIMISATION 455 +#define VAR_QNAME_MINIMISATION_STRICT 456 +#define VAR_IP_FREEBIND 457 +#define VAR_DEFINE_TAG 458 +#define VAR_LOCAL_ZONE_TAG 459 +#define VAR_ACCESS_CONTROL_TAG 460 +#define VAR_LOCAL_ZONE_OVERRIDE 461 +#define VAR_ACCESS_CONTROL_TAG_ACTION 462 +#define VAR_ACCESS_CONTROL_TAG_DATA 463 +#define VAR_VIEW 464 +#define VAR_ACCESS_CONTROL_VIEW 465 +#define VAR_VIEW_FIRST 466 +#define VAR_SERVE_EXPIRED 467 +#define VAR_SERVE_EXPIRED_TTL 468 +#define VAR_SERVE_EXPIRED_TTL_RESET 469 +#define VAR_SERVE_EXPIRED_REPLY_TTL 470 +#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 471 +#define VAR_FAKE_DSA 472 +#define VAR_FAKE_SHA1 473 +#define VAR_LOG_IDENTITY 474 +#define VAR_HIDE_TRUSTANCHOR 475 +#define VAR_TRUST_ANCHOR_SIGNALING 476 +#define VAR_AGGRESSIVE_NSEC 477 +#define VAR_USE_SYSTEMD 478 +#define VAR_SHM_ENABLE 479 +#define VAR_SHM_KEY 480 +#define VAR_ROOT_KEY_SENTINEL 481 +#define VAR_DNSCRYPT 482 +#define VAR_DNSCRYPT_ENABLE 483 +#define VAR_DNSCRYPT_PORT 484 +#define VAR_DNSCRYPT_PROVIDER 485 +#define VAR_DNSCRYPT_SECRET_KEY 486 +#define VAR_DNSCRYPT_PROVIDER_CERT 487 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 488 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 489 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 490 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 491 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 492 +#define VAR_PAD_RESPONSES 493 +#define VAR_PAD_RESPONSES_BLOCK_SIZE 494 +#define VAR_PAD_QUERIES 495 +#define VAR_PAD_QUERIES_BLOCK_SIZE 496 +#define VAR_IPSECMOD_ENABLED 497 +#define VAR_IPSECMOD_HOOK 498 +#define VAR_IPSECMOD_IGNORE_BOGUS 499 +#define VAR_IPSECMOD_MAX_TTL 500 +#define VAR_IPSECMOD_WHITELIST 501 +#define VAR_IPSECMOD_STRICT 502 +#define VAR_CACHEDB 503 +#define VAR_CACHEDB_BACKEND 504 +#define VAR_CACHEDB_SECRETSEED 505 +#define VAR_CACHEDB_REDISHOST 506 +#define VAR_CACHEDB_REDISPORT 507 +#define VAR_CACHEDB_REDISTIMEOUT 508 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 509 +#define VAR_FOR_UPSTREAM 510 +#define VAR_AUTH_ZONE 511 +#define VAR_ZONEFILE 512 +#define VAR_MASTER 513 +#define VAR_URL 514 +#define VAR_FOR_DOWNSTREAM 515 +#define VAR_FALLBACK_ENABLED 516 +#define VAR_TLS_ADDITIONAL_PORT 517 +#define VAR_LOW_RTT 518 +#define VAR_LOW_RTT_PERMIL 519 +#define VAR_FAST_SERVER_PERMIL 520 +#define VAR_FAST_SERVER_NUM 521 +#define VAR_ALLOW_NOTIFY 522 +#define VAR_TLS_WIN_CERT 523 +#define VAR_TCP_CONNECTION_LIMIT 524 +#define VAR_FORWARD_NO_CACHE 525 +#define VAR_STUB_NO_CACHE 526 +#define VAR_LOG_SERVFAIL 527 +#define VAR_DENY_ANY 528 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 529 +#define VAR_LOG_TAG_QUERYREPLY 530 +#define VAR_STREAM_WAIT_SIZE 531 +#define VAR_TLS_CIPHERS 532 +#define VAR_TLS_CIPHERSUITES 533 +#define VAR_IPSET 534 +#define VAR_IPSET_NAME_V4 535 +#define VAR_IPSET_NAME_V6 536 +#define VAR_TLS_SESSION_TICKET_KEYS 537 +#define VAR_RPZ 538 +#define VAR_TAGS 539 +#define VAR_RPZ_ACTION_OVERRIDE 540 +#define VAR_RPZ_CNAME_OVERRIDE 541 +#define VAR_RPZ_LOG 542 +#define VAR_RPZ_LOG_NAME 543 +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT yylhs[] = { -1, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 3, 3, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 4, 5, 5, 220, 220, 220, 220, 220, 220, 220, + 6, 7, 7, 228, 228, 228, 228, 228, 228, 14, + 15, 15, 235, 235, 235, 235, 235, 235, 235, 22, + 23, 23, 243, 243, 243, 243, 243, 243, 243, 243, + 252, 253, 254, 255, 256, 24, 25, 25, 257, 257, + 257, 257, 257, 257, 257, 257, 257, 257, 27, 28, + 91, 94, 103, 191, 192, 29, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 42, 82, 30, 95, + 96, 53, 75, 90, 31, 32, 35, 36, 33, 34, + 37, 38, 39, 40, 41, 126, 203, 127, 129, 130, + 131, 205, 210, 206, 217, 218, 219, 187, 92, 81, + 107, 124, 125, 215, 212, 128, 43, 44, 45, 46, + 47, 83, 97, 98, 113, 69, 79, 70, 195, 196, + 108, 63, 64, 194, 65, 66, 117, 121, 135, 144, + 170, 147, 216, 118, 76, 48, 49, 50, 105, 136, + 137, 138, 51, 52, 54, 55, 57, 58, 56, 142, + 59, 60, 61, 67, 86, 122, 100, 143, 93, 166, + 101, 102, 119, 120, 213, 106, 62, 84, 87, 68, + 71, 109, 110, 85, 167, 111, 72, 73, 74, 204, + 123, 180, 181, 182, 183, 184, 185, 193, 112, 80, + 114, 115, 116, 168, 77, 78, 99, 88, 89, 104, + 132, 133, 214, 134, 139, 140, 141, 171, 172, 174, + 176, 177, 175, 178, 188, 145, 146, 150, 151, 148, + 149, 152, 153, 155, 154, 207, 209, 208, 169, 179, + 258, 259, 260, 261, 197, 199, 198, 200, 201, 202, + 221, 222, 223, 225, 226, 227, 224, 229, 230, 231, + 232, 233, 234, 244, 245, 246, 247, 251, 248, 249, + 250, 236, 237, 240, 241, 238, 242, 239, 10, 11, + 11, 262, 262, 262, 262, 262, 262, 262, 262, 263, + 265, 264, 270, 266, 267, 268, 269, 12, 13, 13, + 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + 271, 271, 271, 271, 271, 271, 271, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 8, 9, 9, 290, + 291, 173, 186, 189, 190, 16, 17, 17, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 293, 294, + 295, 297, 298, 296, 299, 300, 301, 302, 18, 19, + 19, 303, 303, 303, 303, 303, 304, 305, 306, 307, + 308, 211, 20, 21, 21, 309, 309, 310, 311, }; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ - + YYSTACK_GAP_MAXIMUM) - -# define YYCOPY_NEEDED 1 - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ - Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (0) - -#endif - -#if defined YYCOPY_NEEDED && YYCOPY_NEEDED -/* Copy COUNT objects from SRC to DST. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) -# else -# define YYCOPY(Dst, Src, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (Dst)[yyi] = (Src)[yyi]; \ - } \ - while (0) -# endif -# endif -#endif /* !YYCOPY_NEEDED */ - -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 2 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 606 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 286 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 309 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 596 -/* YYNSTATES -- Number of states. */ -#define YYNSTATES 887 - -#define YYUNDEFTOK 2 -#define YYMAXUTOK 540 - -/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, with out-of-bounds checking. */ -#define YYTRANSLATE(YYX) \ - ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) - -/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex. */ -static const yytype_uint16 yytranslate[] = -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, - 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285 +static const YYINT yylen[] = { 2, + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, + 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, + 4, 4, 4, 3, 3, 2, 2, 2, 2, 2, + 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 3, 3, 3, 2, 2, 2, 1, 2, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, + 2, 2, 2, 3, 3, 1, 2, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, + 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 2, 3, 1, 2, 0, 1, 1, 2, 2, }; - +static const YYINT yydefred[] = { 1, + 0, 15, 211, 221, 489, 547, 508, 230, 556, 579, + 240, 593, 256, 2, 17, 213, 223, 549, 491, 510, + 232, 558, 581, 595, 242, 258, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 16, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 0, 0, 0, 0, 0, + 0, 0, 212, 214, 215, 216, 217, 218, 219, 220, + 0, 0, 0, 0, 0, 0, 222, 224, 225, 226, + 227, 228, 229, 0, 548, 550, 0, 0, 0, 0, + 0, 0, 0, 0, 490, 492, 493, 494, 495, 496, + 497, 498, 499, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 509, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, + 0, 0, 0, 0, 0, 0, 0, 231, 233, 234, + 235, 236, 237, 238, 239, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 557, 559, 560, 561, 562, + 563, 564, 565, 566, 567, 568, 0, 0, 0, 0, + 0, 580, 582, 583, 584, 585, 586, 0, 0, 594, + 596, 597, 0, 0, 0, 0, 0, 0, 0, 0, + 241, 243, 244, 245, 246, 247, 248, 249, 250, 0, + 0, 0, 0, 0, 259, 260, 262, 263, 264, 261, + 265, 266, 267, 268, 257, 270, 269, 276, 289, 287, + 299, 295, 296, 300, 297, 298, 301, 302, 303, 304, + 305, 327, 328, 329, 330, 331, 356, 357, 358, 363, + 364, 292, 365, 366, 369, 367, 368, 371, 372, 373, + 387, 342, 343, 345, 346, 374, 390, 336, 338, 391, + 397, 398, 399, 293, 355, 415, 416, 337, 410, 320, + 288, 332, 388, 394, 375, 0, 0, 419, 294, 271, + 319, 379, 272, 290, 291, 333, 334, 417, 377, 381, + 382, 273, 420, 359, 386, 321, 341, 392, 393, 396, + 409, 335, 413, 411, 412, 347, 354, 383, 384, 348, + 349, 376, 401, 322, 323, 326, 306, 308, 309, 310, + 311, 312, 421, 422, 424, 360, 361, 362, 370, 425, + 426, 427, 0, 0, 0, 378, 350, 352, 552, 436, + 440, 438, 437, 441, 439, 0, 0, 444, 445, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 380, + 395, 414, 449, 450, 351, 428, 0, 0, 0, 0, + 0, 0, 402, 403, 404, 405, 406, 407, 408, 553, + 344, 339, 400, 318, 274, 275, 340, 455, 457, 456, + 458, 459, 460, 307, 314, 446, 448, 447, 313, 0, + 325, 385, 423, 324, 353, 315, 316, 317, 461, 462, + 463, 467, 466, 464, 465, 468, 469, 470, 471, 473, + 472, 551, 500, 502, 501, 504, 505, 506, 507, 503, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 482, 0, + 486, 487, 0, 0, 488, 569, 570, 571, 574, 572, + 573, 575, 576, 577, 578, 587, 588, 589, 590, 591, + 598, 599, 474, 480, 475, 476, 477, 479, 481, 478, + 251, 252, 253, 254, 255, 389, 418, 435, 554, 555, + 442, 443, 429, 430, 0, 0, 0, 434, 592, 483, + 484, 485, 433, 431, 432, +}; +static const YYINT yydgoto[] = { 1, + 14, 15, 27, 16, 28, 17, 29, 18, 30, 19, + 31, 20, 32, 21, 33, 22, 34, 23, 35, 24, + 36, 25, 37, 26, 38, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 433, + 434, 435, 436, 437, 438, 439, 440, 447, 448, 449, + 450, 451, 452, 453, 518, 519, 520, 521, 522, 523, + 524, 525, 571, 572, 573, 574, 575, 576, 577, 578, + 579, 590, 591, 592, 593, 594, 595, 0, 0, 0, + 0, 465, 466, 467, 468, 469, 470, 471, 472, 473, + 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 455, + 456, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 552, 553, 554, 555, 556, 557, 560, 561, + 562, +}; +static const YYINT yysindex[] = { 0, + -248, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 369, -290, -280, -357, + -322, -335, -298, -445, -485, -529, -240, -293, -252, -239, + -216, -215, -214, -212, -211, -210, -209, -208, -205, -204, + -202, -201, -200, -199, -198, -197, -196, -195, -194, -174, + -173, -172, -167, -166, -165, -164, -161, -160, -158, -157, + -156, -155, -154, -152, -150, -149, -148, -146, -145, -144, + -143, -142, -141, -140, -139, -138, -137, -134, -133, -132, + -131, -130, -129, -128, -127, -126, -125, -124, -123, -122, + -121, -120, -119, -118, -117, -116, -115, -114, -113, -112, + -111, -110, -109, -108, -107, -105, -104, -103, -102, -101, + -100, -99, -98, -97, -95, -94, -93, -92, -91, -90, + -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, + -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, + -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, + -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, + -49, -47, -46, -42, -41, -40, -39, -38, -37, -36, + -34, -33, -32, -31, -29, -27, -26, -25, -24, -23, + -22, -21, -20, -13, -12, -11, -10, -8, -7, -6, + -5, -4, -3, -2, 7, 19, 20, 21, 23, 24, + 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 40, 41, 46, 47, 52, 53, 58, 59, 60, 61, + 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 63, 64, 65, 66, 67, + 68, 69, 0, 0, 0, 0, 0, 0, 0, 0, + 70, 71, 72, 73, 74, 75, 0, 0, 0, 0, + 0, 0, 0, 76, 0, 0, 77, 78, 79, 80, + 81, 82, 83, 84, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 85, 90, 91, 92, 106, 107, 108, + 109, 110, 111, 112, 113, 118, 119, 120, 121, 122, + 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 124, 125, 126, 127, 132, 133, 138, 0, 0, 0, + 0, 0, 0, 0, 0, 139, 140, 141, 142, 147, + 148, 149, 150, 151, 152, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 153, 154, 159, 160, + 161, 0, 0, 0, 0, 0, 0, 162, 163, 0, + 0, 0, 164, 165, 166, 167, 168, 169, 170, 171, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, + 173, 174, 175, 176, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 177, 182, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 183, 184, 185, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 186, 187, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 188, 189, 190, 191, + 192, 193, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, + 0, 0, 200, 205, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 206, 207, 208, 0, 0, 0, + 0, 0, 0, 0, 0, +}; +static const YYINT yyrindex[] = { 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, + 13, 14, 15, 16, 93, 94, 95, 96, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, +}; +static const YYINT yygindex[] = { 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -14, 226, 227, 239, 0, 0, 0, + 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, +}; +#define YYTABLESIZE 906 +static const YYINT yytable[] = { 511, + 3, 4, 5, 6, 563, 558, 559, 426, 454, 427, + 428, 596, 7, 8, 9, 10, 2, 441, 547, 548, + 549, 550, 551, 585, 597, 442, 443, 457, 458, 459, + 460, 461, 462, 463, 464, 512, 513, 526, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 598, 599, 600, + 3, 601, 602, 603, 604, 605, 4, 563, 606, 607, + 514, 608, 609, 610, 611, 612, 613, 614, 615, 616, + 429, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 617, + 618, 619, 11, 12, 13, 14, 620, 621, 622, 623, + 5, 430, 624, 625, 431, 626, 627, 628, 629, 630, + 444, 631, 445, 632, 633, 634, 6, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 644, 515, 516, 645, + 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, + 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, + 666, 667, 668, 669, 670, 671, 672, 7, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 517, 682, 683, + 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, + 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, + 724, 725, 726, 727, 728, 8, 729, 730, 565, 566, + 567, 731, 732, 733, 734, 735, 736, 737, 570, 738, + 739, 740, 741, 9, 742, 432, 743, 744, 745, 746, + 747, 748, 749, 750, 446, 580, 581, 582, 583, 584, + 751, 752, 753, 754, 10, 755, 756, 757, 758, 759, + 760, 761, 11, 586, 587, 3, 4, 5, 6, 564, + 762, 565, 566, 567, 568, 569, 588, 7, 8, 9, + 10, 570, 763, 764, 765, 12, 766, 767, 768, 13, + 769, 770, 771, 772, 773, 774, 775, 776, 777, 3, + 4, 5, 6, 778, 779, 3, 4, 5, 6, 780, + 781, 7, 8, 9, 10, 782, 783, 7, 8, 9, + 10, 784, 785, 786, 787, 788, 789, 790, 791, 792, + 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, + 803, 804, 805, 806, 807, 808, 809, 810, 811, 3, + 4, 5, 6, 812, 813, 814, 589, 11, 12, 13, + 14, 7, 8, 9, 10, 3, 4, 5, 6, 815, + 816, 817, 818, 819, 820, 821, 822, 7, 8, 9, + 10, 823, 824, 825, 826, 827, 828, 829, 830, 831, + 832, 11, 12, 13, 14, 833, 834, 11, 12, 13, + 14, 835, 836, 837, 838, 839, 3, 4, 5, 6, + 840, 841, 842, 843, 844, 845, 846, 847, 7, 8, + 9, 10, 848, 849, 850, 851, 852, 853, 854, 855, + 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, + 866, 11, 12, 13, 14, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 11, 12, 13, + 14, 879, 880, 881, 3, 4, 5, 6, 882, 883, + 884, 885, 0, 0, 0, 0, 7, 8, 9, 10, + 0, 0, 3, 4, 5, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 8, 9, 10, 11, 12, + 13, 14, 0, 3, 4, 5, 6, 0, 0, 0, + 0, 3, 4, 5, 6, 7, 8, 9, 10, 0, + 0, 0, 0, 7, 8, 9, 10, 0, 0, 0, + 0, 0, 0, 0, 3, 4, 5, 6, 3, 4, + 5, 6, 0, 0, 0, 0, 7, 8, 9, 10, + 7, 8, 9, 10, 0, 0, 11, 12, 13, 14, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 11, 12, 13, 14, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 11, 12, 13, 14, 0, + 0, 0, 0, 11, 12, 13, 14, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 11, 12, 13, 14, + 11, 12, 13, 14, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 0, 0, 0, 0, + 71, 72, 73, 0, 0, 0, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 115, 116, 117, 0, + 118, 119, 120, 0, 0, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 0, + 0, 0, 145, 0, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 0, 195, 0, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 211, 212, 213, 214, 215, + 216, 0, 0, 0, 0, 0, 0, 217, 0, 0, + 0, 0, 0, 0, 0, 218, 219, 0, 220, 221, + 0, 222, 223, 0, 0, 224, 225, 226, 227, 228, + 229, 230, 0, 0, 0, 231, +}; +static const YYINT yycheck[] = { 298, + 0, 0, 0, 0, 298, 535, 536, 298, 366, 300, + 301, 264, 0, 0, 0, 0, 265, 298, 504, 505, + 506, 507, 508, 38, 264, 306, 307, 350, 351, 352, + 353, 354, 355, 356, 357, 334, 335, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 264, 264, 264, + 299, 264, 264, 264, 264, 264, 305, 298, 264, 264, + 359, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 361, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 264, + 264, 264, 0, 0, 0, 0, 264, 264, 264, 264, + 349, 392, 264, 264, 395, 264, 264, 264, 264, 264, + 391, 264, 393, 264, 264, 264, 365, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 426, 427, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 406, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 466, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 464, 264, 264, 512, 513, + 514, 264, 264, 264, 264, 264, 264, 264, 522, 264, + 264, 264, 264, 482, 264, 526, 264, 264, 264, 264, + 264, 264, 264, 264, 525, 539, 540, 541, 542, 543, + 264, 264, 264, 264, 503, 264, 264, 264, 264, 264, + 264, 264, 511, 38, 38, 265, 265, 265, 265, 510, + 264, 512, 513, 514, 515, 516, 38, 265, 265, 265, + 265, 522, 264, 264, 264, 534, 264, 264, 264, 538, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 299, + 299, 299, 299, 264, 264, 305, 305, 305, 305, 264, + 264, 299, 299, 299, 299, 264, 264, 305, 305, 305, + 305, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 349, + 349, 349, 349, 264, 264, 264, 38, 265, 265, 265, + 265, 349, 349, 349, 349, 365, 365, 365, 365, 264, + 264, 264, 264, 264, 264, 264, 264, 365, 365, 365, + 365, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 299, 299, 299, 299, 264, 264, 305, 305, 305, + 305, 264, 264, 264, 264, 264, 406, 406, 406, 406, + 264, 264, 264, 264, 264, 264, 264, 264, 406, 406, + 406, 406, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 349, 349, 349, 349, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 365, 365, 365, + 365, 264, 264, 264, 464, 464, 464, 464, 264, 264, + 264, 264, -1, -1, -1, -1, 464, 464, 464, 464, + -1, -1, 482, 482, 482, 482, -1, -1, -1, -1, + -1, -1, -1, -1, 482, 482, 482, 482, 406, 406, + 406, 406, -1, 503, 503, 503, 503, -1, -1, -1, + -1, 511, 511, 511, 511, 503, 503, 503, 503, -1, + -1, -1, -1, 511, 511, 511, 511, -1, -1, -1, + -1, -1, -1, -1, 534, 534, 534, 534, 538, 538, + 538, 538, -1, -1, -1, -1, 534, 534, 534, 534, + 538, 538, 538, 538, -1, -1, 464, 464, 464, 464, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 482, 482, 482, 482, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 503, 503, 503, 503, -1, + -1, -1, -1, 511, 511, 511, 511, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 534, 534, 534, 534, + 538, 538, 538, 538, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, -1, -1, -1, -1, + 302, 303, 304, -1, -1, -1, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 358, 359, 360, -1, + 362, 363, 364, -1, -1, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, -1, + -1, -1, 394, -1, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, -1, 465, -1, 467, 468, 469, 470, 471, + 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 497, 498, 499, 500, 501, + 502, -1, -1, -1, -1, -1, -1, 509, -1, -1, + -1, -1, -1, -1, -1, 517, 518, -1, 520, 521, + -1, 523, 524, -1, -1, 527, 528, 529, 530, 531, + 532, 533, -1, -1, -1, 537, +}; +#define YYFINAL 1 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 543 +#define YYUNDFTOKEN 857 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG - /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_uint16 yyrline[] = -{ - 0, 178, 178, 178, 179, 179, 180, 180, 181, 181, - 181, 182, 182, 183, 183, 184, 188, 193, 194, 195, - 195, 195, 196, 196, 197, 197, 197, 198, 198, 199, - 199, 199, 200, 200, 201, 201, 201, 202, 202, 202, - 203, 203, 204, 204, 205, 205, 206, 206, 207, 207, - 208, 208, 209, 209, 210, 210, 211, 211, 211, 212, - 212, 212, 213, 213, 213, 214, 214, 215, 215, 216, - 216, 217, 217, 218, 218, 218, 219, 219, 220, 220, - 221, 221, 221, 222, 222, 223, 223, 224, 224, 225, - 225, 225, 226, 226, 227, 227, 228, 228, 229, 229, - 230, 230, 231, 231, 231, 232, 232, 233, 233, 233, - 234, 234, 234, 235, 235, 235, 236, 236, 236, 236, - 237, 238, 238, 238, 239, 239, 239, 240, 240, 241, - 241, 242, 242, 242, 243, 243, 244, 244, 244, 245, - 246, 246, 247, 247, 248, 249, 249, 250, 250, 251, - 251, 252, 253, 253, 254, 254, 255, 255, 256, 256, - 257, 257, 258, 258, 258, 259, 259, 260, 260, 261, - 261, 262, 262, 263, 263, 264, 264, 265, 265, 265, - 266, 266, 266, 267, 267, 267, 268, 268, 269, 270, - 270, 271, 271, 272, 272, 273, 273, 274, 274, 274, - 275, 275, 275, 276, 276, 276, 277, 277, 278, 278, - 279, 279, 281, 293, 294, 295, 295, 295, 295, 295, - 296, 296, 298, 310, 311, 312, 312, 312, 312, 313, - 313, 315, 329, 330, 331, 331, 331, 331, 332, 332, - 332, 334, 351, 352, 353, 353, 353, 353, 354, 354, - 354, 355, 358, 377, 394, 402, 412, 420, 437, 438, - 439, 439, 439, 439, 439, 440, 440, 440, 441, 441, - 443, 452, 461, 472, 481, 490, 499, 510, 519, 531, - 545, 560, 571, 588, 605, 622, 639, 654, 669, 682, - 697, 706, 715, 724, 733, 742, 751, 760, 769, 778, - 787, 796, 805, 814, 823, 836, 845, 858, 867, 876, - 885, 892, 899, 908, 915, 924, 932, 939, 946, 954, - 963, 972, 986, 995, 1004, 1013, 1022, 1031, 1040, 1047, - 1054, 1080, 1088, 1095, 1102, 1109, 1116, 1124, 1132, 1140, - 1147, 1158, 1169, 1176, 1185, 1194, 1203, 1210, 1217, 1225, - 1233, 1243, 1253, 1263, 1277, 1285, 1298, 1309, 1317, 1330, - 1339, 1348, 1357, 1367, 1377, 1385, 1398, 1407, 1415, 1424, - 1432, 1445, 1454, 1461, 1471, 1481, 1491, 1501, 1511, 1521, - 1531, 1541, 1548, 1555, 1562, 1571, 1580, 1589, 1598, 1605, - 1615, 1635, 1642, 1660, 1673, 1686, 1695, 1704, 1713, 1722, - 1732, 1742, 1753, 1762, 1771, 1780, 1789, 1798, 1807, 1820, - 1833, 1842, 1849, 1858, 1867, 1876, 1885, 1893, 1906, 1914, - 1955, 1962, 1977, 1987, 1997, 2004, 2011, 2018, 2027, 2035, - 2049, 2070, 2091, 2103, 2115, 2127, 2136, 2157, 2167, 2176, - 2184, 2192, 2205, 2218, 2233, 2248, 2257, 2266, 2272, 2281, - 2290, 2300, 2310, 2323, 2336, 2348, 2362, 2374, 2388, 2398, - 2405, 2412, 2421, 2430, 2440, 2450, 2460, 2467, 2474, 2483, - 2492, 2502, 2512, 2519, 2526, 2533, 2541, 2551, 2561, 2571, - 2581, 2620, 2630, 2638, 2646, 2661, 2670, 2675, 2676, 2677, - 2677, 2677, 2678, 2678, 2678, 2679, 2679, 2681, 2691, 2700, - 2707, 2714, 2721, 2728, 2735, 2742, 2747, 2748, 2749, 2749, - 2750, 2750, 2750, 2751, 2752, 2752, 2753, 2753, 2754, 2754, - 2755, 2756, 2757, 2758, 2759, 2760, 2762, 2771, 2778, 2785, - 2794, 2801, 2808, 2815, 2822, 2831, 2840, 2847, 2854, 2864, - 2874, 2884, 2894, 2904, 2914, 2919, 2920, 2921, 2923, 2929, - 2939, 2946, 2955, 2963, 2968, 2969, 2971, 2971, 2971, 2972, - 2972, 2973, 2974, 2975, 2976, 2977, 2979, 2989, 2998, 3005, - 3014, 3021, 3030, 3038, 3051, 3059, 3072, 3077, 3078, 3079, - 3079, 3080, 3080, 3080, 3082, 3094, 3106, 3118, 3133, 3146, - 3157, 3162, 3163, 3164, 3164, 3166, 3181 +static const char *const yyname[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"SPACE","LETTER","NEWLINE", +"COMMENT","COLON","ANY","ZONESTR","STRING_ARG","VAR_SERVER","VAR_VERBOSITY", +"VAR_NUM_THREADS","VAR_PORT","VAR_OUTGOING_RANGE","VAR_INTERFACE", +"VAR_PREFER_IP4","VAR_DO_IP4","VAR_DO_IP6","VAR_PREFER_IP6","VAR_DO_UDP", +"VAR_DO_TCP","VAR_TCP_MSS","VAR_OUTGOING_TCP_MSS","VAR_TCP_IDLE_TIMEOUT", +"VAR_EDNS_TCP_KEEPALIVE","VAR_EDNS_TCP_KEEPALIVE_TIMEOUT","VAR_CHROOT", +"VAR_USERNAME","VAR_DIRECTORY","VAR_LOGFILE","VAR_PIDFILE","VAR_MSG_CACHE_SIZE", +"VAR_MSG_CACHE_SLABS","VAR_NUM_QUERIES_PER_THREAD","VAR_RRSET_CACHE_SIZE", +"VAR_RRSET_CACHE_SLABS","VAR_OUTGOING_NUM_TCP","VAR_INFRA_HOST_TTL", +"VAR_INFRA_LAME_TTL","VAR_INFRA_CACHE_SLABS","VAR_INFRA_CACHE_NUMHOSTS", +"VAR_INFRA_CACHE_LAME_SIZE","VAR_NAME","VAR_STUB_ZONE","VAR_STUB_HOST", +"VAR_STUB_ADDR","VAR_TARGET_FETCH_POLICY","VAR_HARDEN_SHORT_BUFSIZE", +"VAR_HARDEN_LARGE_QUERIES","VAR_FORWARD_ZONE","VAR_FORWARD_HOST", +"VAR_FORWARD_ADDR","VAR_DO_NOT_QUERY_ADDRESS","VAR_HIDE_IDENTITY", +"VAR_HIDE_VERSION","VAR_IDENTITY","VAR_VERSION","VAR_HARDEN_GLUE", +"VAR_MODULE_CONF","VAR_TRUST_ANCHOR_FILE","VAR_TRUST_ANCHOR", +"VAR_VAL_OVERRIDE_DATE","VAR_BOGUS_TTL","VAR_VAL_CLEAN_ADDITIONAL", +"VAR_VAL_PERMISSIVE_MODE","VAR_INCOMING_NUM_TCP","VAR_MSG_BUFFER_SIZE", +"VAR_KEY_CACHE_SIZE","VAR_KEY_CACHE_SLABS","VAR_TRUSTED_KEYS_FILE", +"VAR_VAL_NSEC3_KEYSIZE_ITERATIONS","VAR_USE_SYSLOG","VAR_OUTGOING_INTERFACE", +"VAR_ROOT_HINTS","VAR_DO_NOT_QUERY_LOCALHOST","VAR_CACHE_MAX_TTL", +"VAR_HARDEN_DNSSEC_STRIPPED","VAR_ACCESS_CONTROL","VAR_LOCAL_ZONE", +"VAR_LOCAL_DATA","VAR_INTERFACE_AUTOMATIC","VAR_STATISTICS_INTERVAL", +"VAR_DO_DAEMONIZE","VAR_USE_CAPS_FOR_ID","VAR_STATISTICS_CUMULATIVE", +"VAR_OUTGOING_PORT_PERMIT","VAR_OUTGOING_PORT_AVOID","VAR_DLV_ANCHOR_FILE", +"VAR_DLV_ANCHOR","VAR_NEG_CACHE_SIZE","VAR_HARDEN_REFERRAL_PATH", +"VAR_PRIVATE_ADDRESS","VAR_PRIVATE_DOMAIN","VAR_REMOTE_CONTROL", +"VAR_CONTROL_ENABLE","VAR_CONTROL_INTERFACE","VAR_CONTROL_PORT", +"VAR_SERVER_KEY_FILE","VAR_SERVER_CERT_FILE","VAR_CONTROL_KEY_FILE", +"VAR_CONTROL_CERT_FILE","VAR_CONTROL_USE_CERT","VAR_EXTENDED_STATISTICS", +"VAR_LOCAL_DATA_PTR","VAR_JOSTLE_TIMEOUT","VAR_STUB_PRIME", +"VAR_UNWANTED_REPLY_THRESHOLD","VAR_LOG_TIME_ASCII","VAR_DOMAIN_INSECURE", +"VAR_PYTHON","VAR_PYTHON_SCRIPT","VAR_VAL_SIG_SKEW_MIN","VAR_VAL_SIG_SKEW_MAX", +"VAR_CACHE_MIN_TTL","VAR_VAL_LOG_LEVEL","VAR_AUTO_TRUST_ANCHOR_FILE", +"VAR_KEEP_MISSING","VAR_ADD_HOLDDOWN","VAR_DEL_HOLDDOWN","VAR_SO_RCVBUF", +"VAR_EDNS_BUFFER_SIZE","VAR_PREFETCH","VAR_PREFETCH_KEY","VAR_SO_SNDBUF", +"VAR_SO_REUSEPORT","VAR_HARDEN_BELOW_NXDOMAIN","VAR_IGNORE_CD_FLAG", +"VAR_LOG_QUERIES","VAR_LOG_REPLIES","VAR_LOG_LOCAL_ACTIONS","VAR_TCP_UPSTREAM", +"VAR_SSL_UPSTREAM","VAR_SSL_SERVICE_KEY","VAR_SSL_SERVICE_PEM","VAR_SSL_PORT", +"VAR_FORWARD_FIRST","VAR_STUB_SSL_UPSTREAM","VAR_FORWARD_SSL_UPSTREAM", +"VAR_TLS_CERT_BUNDLE","VAR_STUB_FIRST","VAR_MINIMAL_RESPONSES", +"VAR_RRSET_ROUNDROBIN","VAR_MAX_UDP_SIZE","VAR_DELAY_CLOSE", +"VAR_UNBLOCK_LAN_ZONES","VAR_INSECURE_LAN_ZONES","VAR_INFRA_CACHE_MIN_RTT", +"VAR_DNS64_PREFIX","VAR_DNS64_SYNTHALL","VAR_DNS64_IGNORE_AAAA","VAR_DNSTAP", +"VAR_DNSTAP_ENABLE","VAR_DNSTAP_SOCKET_PATH","VAR_DNSTAP_IP","VAR_DNSTAP_TLS", +"VAR_DNSTAP_TLS_SERVER_NAME","VAR_DNSTAP_TLS_CERT_BUNDLE", +"VAR_DNSTAP_TLS_CLIENT_KEY_FILE","VAR_DNSTAP_TLS_CLIENT_CERT_FILE", +"VAR_DNSTAP_SEND_IDENTITY","VAR_DNSTAP_SEND_VERSION","VAR_DNSTAP_IDENTITY", +"VAR_DNSTAP_VERSION","VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES", +"VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES", +"VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES", +"VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES", +"VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES", +"VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES","VAR_RESPONSE_IP_TAG", +"VAR_RESPONSE_IP","VAR_RESPONSE_IP_DATA","VAR_HARDEN_ALGO_DOWNGRADE", +"VAR_IP_TRANSPARENT","VAR_IP_DSCP","VAR_DISABLE_DNSSEC_LAME_CHECK", +"VAR_IP_RATELIMIT","VAR_IP_RATELIMIT_SLABS","VAR_IP_RATELIMIT_SIZE", +"VAR_RATELIMIT","VAR_RATELIMIT_SLABS","VAR_RATELIMIT_SIZE", +"VAR_RATELIMIT_FOR_DOMAIN","VAR_RATELIMIT_BELOW_DOMAIN", +"VAR_IP_RATELIMIT_FACTOR","VAR_RATELIMIT_FACTOR","VAR_SEND_CLIENT_SUBNET", +"VAR_CLIENT_SUBNET_ZONE","VAR_CLIENT_SUBNET_ALWAYS_FORWARD", +"VAR_CLIENT_SUBNET_OPCODE","VAR_MAX_CLIENT_SUBNET_IPV4", +"VAR_MAX_CLIENT_SUBNET_IPV6","VAR_MIN_CLIENT_SUBNET_IPV4", +"VAR_MIN_CLIENT_SUBNET_IPV6","VAR_MAX_ECS_TREE_SIZE_IPV4", +"VAR_MAX_ECS_TREE_SIZE_IPV6","VAR_CAPS_WHITELIST","VAR_CACHE_MAX_NEGATIVE_TTL", +"VAR_PERMIT_SMALL_HOLDDOWN","VAR_QNAME_MINIMISATION", +"VAR_QNAME_MINIMISATION_STRICT","VAR_IP_FREEBIND","VAR_DEFINE_TAG", +"VAR_LOCAL_ZONE_TAG","VAR_ACCESS_CONTROL_TAG","VAR_LOCAL_ZONE_OVERRIDE", +"VAR_ACCESS_CONTROL_TAG_ACTION","VAR_ACCESS_CONTROL_TAG_DATA","VAR_VIEW", +"VAR_ACCESS_CONTROL_VIEW","VAR_VIEW_FIRST","VAR_SERVE_EXPIRED", +"VAR_SERVE_EXPIRED_TTL","VAR_SERVE_EXPIRED_TTL_RESET", +"VAR_SERVE_EXPIRED_REPLY_TTL","VAR_SERVE_EXPIRED_CLIENT_TIMEOUT","VAR_FAKE_DSA", +"VAR_FAKE_SHA1","VAR_LOG_IDENTITY","VAR_HIDE_TRUSTANCHOR", +"VAR_TRUST_ANCHOR_SIGNALING","VAR_AGGRESSIVE_NSEC","VAR_USE_SYSTEMD", +"VAR_SHM_ENABLE","VAR_SHM_KEY","VAR_ROOT_KEY_SENTINEL","VAR_DNSCRYPT", +"VAR_DNSCRYPT_ENABLE","VAR_DNSCRYPT_PORT","VAR_DNSCRYPT_PROVIDER", +"VAR_DNSCRYPT_SECRET_KEY","VAR_DNSCRYPT_PROVIDER_CERT", +"VAR_DNSCRYPT_PROVIDER_CERT_ROTATED","VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE", +"VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS","VAR_DNSCRYPT_NONCE_CACHE_SIZE", +"VAR_DNSCRYPT_NONCE_CACHE_SLABS","VAR_PAD_RESPONSES", +"VAR_PAD_RESPONSES_BLOCK_SIZE","VAR_PAD_QUERIES","VAR_PAD_QUERIES_BLOCK_SIZE", +"VAR_IPSECMOD_ENABLED","VAR_IPSECMOD_HOOK","VAR_IPSECMOD_IGNORE_BOGUS", +"VAR_IPSECMOD_MAX_TTL","VAR_IPSECMOD_WHITELIST","VAR_IPSECMOD_STRICT", +"VAR_CACHEDB","VAR_CACHEDB_BACKEND","VAR_CACHEDB_SECRETSEED", +"VAR_CACHEDB_REDISHOST","VAR_CACHEDB_REDISPORT","VAR_CACHEDB_REDISTIMEOUT", +"VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM","VAR_FOR_UPSTREAM","VAR_AUTH_ZONE", +"VAR_ZONEFILE","VAR_MASTER","VAR_URL","VAR_FOR_DOWNSTREAM", +"VAR_FALLBACK_ENABLED","VAR_TLS_ADDITIONAL_PORT","VAR_LOW_RTT", +"VAR_LOW_RTT_PERMIL","VAR_FAST_SERVER_PERMIL","VAR_FAST_SERVER_NUM", +"VAR_ALLOW_NOTIFY","VAR_TLS_WIN_CERT","VAR_TCP_CONNECTION_LIMIT", +"VAR_FORWARD_NO_CACHE","VAR_STUB_NO_CACHE","VAR_LOG_SERVFAIL","VAR_DENY_ANY", +"VAR_UNKNOWN_SERVER_TIME_LIMIT","VAR_LOG_TAG_QUERYREPLY","VAR_STREAM_WAIT_SIZE", +"VAR_TLS_CIPHERS","VAR_TLS_CIPHERSUITES","VAR_IPSET","VAR_IPSET_NAME_V4", +"VAR_IPSET_NAME_V6","VAR_TLS_SESSION_TICKET_KEYS","VAR_RPZ","VAR_TAGS", +"VAR_RPZ_ACTION_OVERRIDE","VAR_RPZ_CNAME_OVERRIDE","VAR_RPZ_LOG", +"VAR_RPZ_LOG_NAME",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,"illegal-symbol", +}; +static const char *const yyrule[] = { +"$accept : toplevelvars", +"toplevelvars :", +"toplevelvars : toplevelvars toplevelvar", +"toplevelvar : serverstart contents_server", +"toplevelvar : stubstart contents_stub", +"toplevelvar : forwardstart contents_forward", +"toplevelvar : pythonstart contents_py", +"toplevelvar : rcstart contents_rc", +"toplevelvar : dtstart contents_dt", +"toplevelvar : viewstart contents_view", +"toplevelvar : dnscstart contents_dnsc", +"toplevelvar : cachedbstart contents_cachedb", +"toplevelvar : ipsetstart contents_ipset", +"toplevelvar : authstart contents_auth", +"toplevelvar : rpzstart contents_rpz", +"serverstart : VAR_SERVER", +"contents_server : contents_server content_server", +"contents_server :", +"content_server : server_num_threads", +"content_server : server_verbosity", +"content_server : server_port", +"content_server : server_outgoing_range", +"content_server : server_do_ip4", +"content_server : server_do_ip6", +"content_server : server_prefer_ip4", +"content_server : server_prefer_ip6", +"content_server : server_do_udp", +"content_server : server_do_tcp", +"content_server : server_tcp_mss", +"content_server : server_outgoing_tcp_mss", +"content_server : server_tcp_idle_timeout", +"content_server : server_tcp_keepalive", +"content_server : server_tcp_keepalive_timeout", +"content_server : server_interface", +"content_server : server_chroot", +"content_server : server_username", +"content_server : server_directory", +"content_server : server_logfile", +"content_server : server_pidfile", +"content_server : server_msg_cache_size", +"content_server : server_msg_cache_slabs", +"content_server : server_num_queries_per_thread", +"content_server : server_rrset_cache_size", +"content_server : server_rrset_cache_slabs", +"content_server : server_outgoing_num_tcp", +"content_server : server_infra_host_ttl", +"content_server : server_infra_lame_ttl", +"content_server : server_infra_cache_slabs", +"content_server : server_infra_cache_numhosts", +"content_server : server_infra_cache_lame_size", +"content_server : server_target_fetch_policy", +"content_server : server_harden_short_bufsize", +"content_server : server_harden_large_queries", +"content_server : server_do_not_query_address", +"content_server : server_hide_identity", +"content_server : server_hide_version", +"content_server : server_identity", +"content_server : server_version", +"content_server : server_harden_glue", +"content_server : server_module_conf", +"content_server : server_trust_anchor_file", +"content_server : server_trust_anchor", +"content_server : server_val_override_date", +"content_server : server_bogus_ttl", +"content_server : server_val_clean_additional", +"content_server : server_val_permissive_mode", +"content_server : server_incoming_num_tcp", +"content_server : server_msg_buffer_size", +"content_server : server_key_cache_size", +"content_server : server_key_cache_slabs", +"content_server : server_trusted_keys_file", +"content_server : server_val_nsec3_keysize_iterations", +"content_server : server_use_syslog", +"content_server : server_outgoing_interface", +"content_server : server_root_hints", +"content_server : server_do_not_query_localhost", +"content_server : server_cache_max_ttl", +"content_server : server_harden_dnssec_stripped", +"content_server : server_access_control", +"content_server : server_local_zone", +"content_server : server_local_data", +"content_server : server_interface_automatic", +"content_server : server_statistics_interval", +"content_server : server_do_daemonize", +"content_server : server_use_caps_for_id", +"content_server : server_statistics_cumulative", +"content_server : server_outgoing_port_permit", +"content_server : server_outgoing_port_avoid", +"content_server : server_dlv_anchor_file", +"content_server : server_dlv_anchor", +"content_server : server_neg_cache_size", +"content_server : server_harden_referral_path", +"content_server : server_private_address", +"content_server : server_private_domain", +"content_server : server_extended_statistics", +"content_server : server_local_data_ptr", +"content_server : server_jostle_timeout", +"content_server : server_unwanted_reply_threshold", +"content_server : server_log_time_ascii", +"content_server : server_domain_insecure", +"content_server : server_val_sig_skew_min", +"content_server : server_val_sig_skew_max", +"content_server : server_cache_min_ttl", +"content_server : server_val_log_level", +"content_server : server_auto_trust_anchor_file", +"content_server : server_add_holddown", +"content_server : server_del_holddown", +"content_server : server_keep_missing", +"content_server : server_so_rcvbuf", +"content_server : server_edns_buffer_size", +"content_server : server_prefetch", +"content_server : server_prefetch_key", +"content_server : server_so_sndbuf", +"content_server : server_harden_below_nxdomain", +"content_server : server_ignore_cd_flag", +"content_server : server_log_queries", +"content_server : server_log_replies", +"content_server : server_tcp_upstream", +"content_server : server_ssl_upstream", +"content_server : server_log_local_actions", +"content_server : server_ssl_service_key", +"content_server : server_ssl_service_pem", +"content_server : server_ssl_port", +"content_server : server_minimal_responses", +"content_server : server_rrset_roundrobin", +"content_server : server_max_udp_size", +"content_server : server_so_reuseport", +"content_server : server_delay_close", +"content_server : server_unblock_lan_zones", +"content_server : server_insecure_lan_zones", +"content_server : server_dns64_prefix", +"content_server : server_dns64_synthall", +"content_server : server_dns64_ignore_aaaa", +"content_server : server_infra_cache_min_rtt", +"content_server : server_harden_algo_downgrade", +"content_server : server_ip_transparent", +"content_server : server_ip_ratelimit", +"content_server : server_ratelimit", +"content_server : server_ip_dscp", +"content_server : server_ip_ratelimit_slabs", +"content_server : server_ratelimit_slabs", +"content_server : server_ip_ratelimit_size", +"content_server : server_ratelimit_size", +"content_server : server_ratelimit_for_domain", +"content_server : server_ratelimit_below_domain", +"content_server : server_ratelimit_factor", +"content_server : server_ip_ratelimit_factor", +"content_server : server_send_client_subnet", +"content_server : server_client_subnet_zone", +"content_server : server_client_subnet_always_forward", +"content_server : server_client_subnet_opcode", +"content_server : server_max_client_subnet_ipv4", +"content_server : server_max_client_subnet_ipv6", +"content_server : server_min_client_subnet_ipv4", +"content_server : server_min_client_subnet_ipv6", +"content_server : server_max_ecs_tree_size_ipv4", +"content_server : server_max_ecs_tree_size_ipv6", +"content_server : server_caps_whitelist", +"content_server : server_cache_max_negative_ttl", +"content_server : server_permit_small_holddown", +"content_server : server_qname_minimisation", +"content_server : server_ip_freebind", +"content_server : server_define_tag", +"content_server : server_local_zone_tag", +"content_server : server_disable_dnssec_lame_check", +"content_server : server_access_control_tag", +"content_server : server_local_zone_override", +"content_server : server_access_control_tag_action", +"content_server : server_access_control_tag_data", +"content_server : server_access_control_view", +"content_server : server_qname_minimisation_strict", +"content_server : server_serve_expired", +"content_server : server_serve_expired_ttl", +"content_server : server_serve_expired_ttl_reset", +"content_server : server_serve_expired_reply_ttl", +"content_server : server_serve_expired_client_timeout", +"content_server : server_fake_dsa", +"content_server : server_log_identity", +"content_server : server_use_systemd", +"content_server : server_response_ip_tag", +"content_server : server_response_ip", +"content_server : server_response_ip_data", +"content_server : server_shm_enable", +"content_server : server_shm_key", +"content_server : server_fake_sha1", +"content_server : server_hide_trustanchor", +"content_server : server_trust_anchor_signaling", +"content_server : server_root_key_sentinel", +"content_server : server_ipsecmod_enabled", +"content_server : server_ipsecmod_hook", +"content_server : server_ipsecmod_ignore_bogus", +"content_server : server_ipsecmod_max_ttl", +"content_server : server_ipsecmod_whitelist", +"content_server : server_ipsecmod_strict", +"content_server : server_udp_upstream_without_downstream", +"content_server : server_aggressive_nsec", +"content_server : server_tls_cert_bundle", +"content_server : server_tls_additional_port", +"content_server : server_low_rtt", +"content_server : server_fast_server_permil", +"content_server : server_fast_server_num", +"content_server : server_tls_win_cert", +"content_server : server_tcp_connection_limit", +"content_server : server_log_servfail", +"content_server : server_deny_any", +"content_server : server_unknown_server_time_limit", +"content_server : server_log_tag_queryreply", +"content_server : server_stream_wait_size", +"content_server : server_tls_ciphers", +"content_server : server_tls_ciphersuites", +"content_server : server_tls_session_ticket_keys", +"stubstart : VAR_STUB_ZONE", +"contents_stub : contents_stub content_stub", +"contents_stub :", +"content_stub : stub_name", +"content_stub : stub_host", +"content_stub : stub_addr", +"content_stub : stub_prime", +"content_stub : stub_first", +"content_stub : stub_no_cache", +"content_stub : stub_ssl_upstream", +"forwardstart : VAR_FORWARD_ZONE", +"contents_forward : contents_forward content_forward", +"contents_forward :", +"content_forward : forward_name", +"content_forward : forward_host", +"content_forward : forward_addr", +"content_forward : forward_first", +"content_forward : forward_no_cache", +"content_forward : forward_ssl_upstream", +"viewstart : VAR_VIEW", +"contents_view : contents_view content_view", +"contents_view :", +"content_view : view_name", +"content_view : view_local_zone", +"content_view : view_local_data", +"content_view : view_first", +"content_view : view_response_ip", +"content_view : view_response_ip_data", +"content_view : view_local_data_ptr", +"authstart : VAR_AUTH_ZONE", +"contents_auth : contents_auth content_auth", +"contents_auth :", +"content_auth : auth_name", +"content_auth : auth_zonefile", +"content_auth : auth_master", +"content_auth : auth_url", +"content_auth : auth_for_downstream", +"content_auth : auth_for_upstream", +"content_auth : auth_fallback_enabled", +"content_auth : auth_allow_notify", +"rpz_tag : VAR_TAGS STRING_ARG", +"rpz_action_override : VAR_RPZ_ACTION_OVERRIDE STRING_ARG", +"rpz_cname_override : VAR_RPZ_CNAME_OVERRIDE STRING_ARG", +"rpz_log : VAR_RPZ_LOG STRING_ARG", +"rpz_log_name : VAR_RPZ_LOG_NAME STRING_ARG", +"rpzstart : VAR_RPZ", +"contents_rpz : contents_rpz content_rpz", +"contents_rpz :", +"content_rpz : auth_name", +"content_rpz : auth_zonefile", +"content_rpz : rpz_tag", +"content_rpz : auth_master", +"content_rpz : auth_url", +"content_rpz : auth_allow_notify", +"content_rpz : rpz_action_override", +"content_rpz : rpz_cname_override", +"content_rpz : rpz_log", +"content_rpz : rpz_log_name", +"server_num_threads : VAR_NUM_THREADS STRING_ARG", +"server_verbosity : VAR_VERBOSITY STRING_ARG", +"server_statistics_interval : VAR_STATISTICS_INTERVAL STRING_ARG", +"server_statistics_cumulative : VAR_STATISTICS_CUMULATIVE STRING_ARG", +"server_extended_statistics : VAR_EXTENDED_STATISTICS STRING_ARG", +"server_shm_enable : VAR_SHM_ENABLE STRING_ARG", +"server_shm_key : VAR_SHM_KEY STRING_ARG", +"server_port : VAR_PORT STRING_ARG", +"server_send_client_subnet : VAR_SEND_CLIENT_SUBNET STRING_ARG", +"server_client_subnet_zone : VAR_CLIENT_SUBNET_ZONE STRING_ARG", +"server_client_subnet_always_forward : VAR_CLIENT_SUBNET_ALWAYS_FORWARD STRING_ARG", +"server_client_subnet_opcode : VAR_CLIENT_SUBNET_OPCODE STRING_ARG", +"server_max_client_subnet_ipv4 : VAR_MAX_CLIENT_SUBNET_IPV4 STRING_ARG", +"server_max_client_subnet_ipv6 : VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG", +"server_min_client_subnet_ipv4 : VAR_MIN_CLIENT_SUBNET_IPV4 STRING_ARG", +"server_min_client_subnet_ipv6 : VAR_MIN_CLIENT_SUBNET_IPV6 STRING_ARG", +"server_max_ecs_tree_size_ipv4 : VAR_MAX_ECS_TREE_SIZE_IPV4 STRING_ARG", +"server_max_ecs_tree_size_ipv6 : VAR_MAX_ECS_TREE_SIZE_IPV6 STRING_ARG", +"server_interface : VAR_INTERFACE STRING_ARG", +"server_outgoing_interface : VAR_OUTGOING_INTERFACE STRING_ARG", +"server_outgoing_range : VAR_OUTGOING_RANGE STRING_ARG", +"server_outgoing_port_permit : VAR_OUTGOING_PORT_PERMIT STRING_ARG", +"server_outgoing_port_avoid : VAR_OUTGOING_PORT_AVOID STRING_ARG", +"server_outgoing_num_tcp : VAR_OUTGOING_NUM_TCP STRING_ARG", +"server_incoming_num_tcp : VAR_INCOMING_NUM_TCP STRING_ARG", +"server_interface_automatic : VAR_INTERFACE_AUTOMATIC STRING_ARG", +"server_do_ip4 : VAR_DO_IP4 STRING_ARG", +"server_do_ip6 : VAR_DO_IP6 STRING_ARG", +"server_do_udp : VAR_DO_UDP STRING_ARG", +"server_do_tcp : VAR_DO_TCP STRING_ARG", +"server_prefer_ip4 : VAR_PREFER_IP4 STRING_ARG", +"server_prefer_ip6 : VAR_PREFER_IP6 STRING_ARG", +"server_tcp_mss : VAR_TCP_MSS STRING_ARG", +"server_outgoing_tcp_mss : VAR_OUTGOING_TCP_MSS STRING_ARG", +"server_tcp_idle_timeout : VAR_TCP_IDLE_TIMEOUT STRING_ARG", +"server_tcp_keepalive : VAR_EDNS_TCP_KEEPALIVE STRING_ARG", +"server_tcp_keepalive_timeout : VAR_EDNS_TCP_KEEPALIVE_TIMEOUT STRING_ARG", +"server_tcp_upstream : VAR_TCP_UPSTREAM STRING_ARG", +"server_udp_upstream_without_downstream : VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM STRING_ARG", +"server_ssl_upstream : VAR_SSL_UPSTREAM STRING_ARG", +"server_ssl_service_key : VAR_SSL_SERVICE_KEY STRING_ARG", +"server_ssl_service_pem : VAR_SSL_SERVICE_PEM STRING_ARG", +"server_ssl_port : VAR_SSL_PORT STRING_ARG", +"server_tls_cert_bundle : VAR_TLS_CERT_BUNDLE STRING_ARG", +"server_tls_win_cert : VAR_TLS_WIN_CERT STRING_ARG", +"server_tls_additional_port : VAR_TLS_ADDITIONAL_PORT STRING_ARG", +"server_tls_ciphers : VAR_TLS_CIPHERS STRING_ARG", +"server_tls_ciphersuites : VAR_TLS_CIPHERSUITES STRING_ARG", +"server_tls_session_ticket_keys : VAR_TLS_SESSION_TICKET_KEYS STRING_ARG", +"server_use_systemd : VAR_USE_SYSTEMD STRING_ARG", +"server_do_daemonize : VAR_DO_DAEMONIZE STRING_ARG", +"server_use_syslog : VAR_USE_SYSLOG STRING_ARG", +"server_log_time_ascii : VAR_LOG_TIME_ASCII STRING_ARG", +"server_log_queries : VAR_LOG_QUERIES STRING_ARG", +"server_log_replies : VAR_LOG_REPLIES STRING_ARG", +"server_log_tag_queryreply : VAR_LOG_TAG_QUERYREPLY STRING_ARG", +"server_log_servfail : VAR_LOG_SERVFAIL STRING_ARG", +"server_log_local_actions : VAR_LOG_LOCAL_ACTIONS STRING_ARG", +"server_chroot : VAR_CHROOT STRING_ARG", +"server_username : VAR_USERNAME STRING_ARG", +"server_directory : VAR_DIRECTORY STRING_ARG", +"server_logfile : VAR_LOGFILE STRING_ARG", +"server_pidfile : VAR_PIDFILE STRING_ARG", +"server_root_hints : VAR_ROOT_HINTS STRING_ARG", +"server_dlv_anchor_file : VAR_DLV_ANCHOR_FILE STRING_ARG", +"server_dlv_anchor : VAR_DLV_ANCHOR STRING_ARG", +"server_auto_trust_anchor_file : VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG", +"server_trust_anchor_file : VAR_TRUST_ANCHOR_FILE STRING_ARG", +"server_trusted_keys_file : VAR_TRUSTED_KEYS_FILE STRING_ARG", +"server_trust_anchor : VAR_TRUST_ANCHOR STRING_ARG", +"server_trust_anchor_signaling : VAR_TRUST_ANCHOR_SIGNALING STRING_ARG", +"server_root_key_sentinel : VAR_ROOT_KEY_SENTINEL STRING_ARG", +"server_domain_insecure : VAR_DOMAIN_INSECURE STRING_ARG", +"server_hide_identity : VAR_HIDE_IDENTITY STRING_ARG", +"server_hide_version : VAR_HIDE_VERSION STRING_ARG", +"server_hide_trustanchor : VAR_HIDE_TRUSTANCHOR STRING_ARG", +"server_identity : VAR_IDENTITY STRING_ARG", +"server_version : VAR_VERSION STRING_ARG", +"server_so_rcvbuf : VAR_SO_RCVBUF STRING_ARG", +"server_so_sndbuf : VAR_SO_SNDBUF STRING_ARG", +"server_so_reuseport : VAR_SO_REUSEPORT STRING_ARG", +"server_ip_transparent : VAR_IP_TRANSPARENT STRING_ARG", +"server_ip_freebind : VAR_IP_FREEBIND STRING_ARG", +"server_ip_dscp : VAR_IP_DSCP STRING_ARG", +"server_stream_wait_size : VAR_STREAM_WAIT_SIZE STRING_ARG", +"server_edns_buffer_size : VAR_EDNS_BUFFER_SIZE STRING_ARG", +"server_msg_buffer_size : VAR_MSG_BUFFER_SIZE STRING_ARG", +"server_msg_cache_size : VAR_MSG_CACHE_SIZE STRING_ARG", +"server_msg_cache_slabs : VAR_MSG_CACHE_SLABS STRING_ARG", +"server_num_queries_per_thread : VAR_NUM_QUERIES_PER_THREAD STRING_ARG", +"server_jostle_timeout : VAR_JOSTLE_TIMEOUT STRING_ARG", +"server_delay_close : VAR_DELAY_CLOSE STRING_ARG", +"server_unblock_lan_zones : VAR_UNBLOCK_LAN_ZONES STRING_ARG", +"server_insecure_lan_zones : VAR_INSECURE_LAN_ZONES STRING_ARG", +"server_rrset_cache_size : VAR_RRSET_CACHE_SIZE STRING_ARG", +"server_rrset_cache_slabs : VAR_RRSET_CACHE_SLABS STRING_ARG", +"server_infra_host_ttl : VAR_INFRA_HOST_TTL STRING_ARG", +"server_infra_lame_ttl : VAR_INFRA_LAME_TTL STRING_ARG", +"server_infra_cache_numhosts : VAR_INFRA_CACHE_NUMHOSTS STRING_ARG", +"server_infra_cache_lame_size : VAR_INFRA_CACHE_LAME_SIZE STRING_ARG", +"server_infra_cache_slabs : VAR_INFRA_CACHE_SLABS STRING_ARG", +"server_infra_cache_min_rtt : VAR_INFRA_CACHE_MIN_RTT STRING_ARG", +"server_target_fetch_policy : VAR_TARGET_FETCH_POLICY STRING_ARG", +"server_harden_short_bufsize : VAR_HARDEN_SHORT_BUFSIZE STRING_ARG", +"server_harden_large_queries : VAR_HARDEN_LARGE_QUERIES STRING_ARG", +"server_harden_glue : VAR_HARDEN_GLUE STRING_ARG", +"server_harden_dnssec_stripped : VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG", +"server_harden_below_nxdomain : VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG", +"server_harden_referral_path : VAR_HARDEN_REFERRAL_PATH STRING_ARG", +"server_harden_algo_downgrade : VAR_HARDEN_ALGO_DOWNGRADE STRING_ARG", +"server_use_caps_for_id : VAR_USE_CAPS_FOR_ID STRING_ARG", +"server_caps_whitelist : VAR_CAPS_WHITELIST STRING_ARG", +"server_private_address : VAR_PRIVATE_ADDRESS STRING_ARG", +"server_private_domain : VAR_PRIVATE_DOMAIN STRING_ARG", +"server_prefetch : VAR_PREFETCH STRING_ARG", +"server_prefetch_key : VAR_PREFETCH_KEY STRING_ARG", +"server_deny_any : VAR_DENY_ANY STRING_ARG", +"server_unwanted_reply_threshold : VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG", +"server_do_not_query_address : VAR_DO_NOT_QUERY_ADDRESS STRING_ARG", +"server_do_not_query_localhost : VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG", +"server_access_control : VAR_ACCESS_CONTROL STRING_ARG STRING_ARG", +"server_module_conf : VAR_MODULE_CONF STRING_ARG", +"server_val_override_date : VAR_VAL_OVERRIDE_DATE STRING_ARG", +"server_val_sig_skew_min : VAR_VAL_SIG_SKEW_MIN STRING_ARG", +"server_val_sig_skew_max : VAR_VAL_SIG_SKEW_MAX STRING_ARG", +"server_cache_max_ttl : VAR_CACHE_MAX_TTL STRING_ARG", +"server_cache_max_negative_ttl : VAR_CACHE_MAX_NEGATIVE_TTL STRING_ARG", +"server_cache_min_ttl : VAR_CACHE_MIN_TTL STRING_ARG", +"server_bogus_ttl : VAR_BOGUS_TTL STRING_ARG", +"server_val_clean_additional : VAR_VAL_CLEAN_ADDITIONAL STRING_ARG", +"server_val_permissive_mode : VAR_VAL_PERMISSIVE_MODE STRING_ARG", +"server_aggressive_nsec : VAR_AGGRESSIVE_NSEC STRING_ARG", +"server_ignore_cd_flag : VAR_IGNORE_CD_FLAG STRING_ARG", +"server_serve_expired : VAR_SERVE_EXPIRED STRING_ARG", +"server_serve_expired_ttl : VAR_SERVE_EXPIRED_TTL STRING_ARG", +"server_serve_expired_ttl_reset : VAR_SERVE_EXPIRED_TTL_RESET STRING_ARG", +"server_serve_expired_reply_ttl : VAR_SERVE_EXPIRED_REPLY_TTL STRING_ARG", +"server_serve_expired_client_timeout : VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG", +"server_fake_dsa : VAR_FAKE_DSA STRING_ARG", +"server_fake_sha1 : VAR_FAKE_SHA1 STRING_ARG", +"server_val_log_level : VAR_VAL_LOG_LEVEL STRING_ARG", +"server_val_nsec3_keysize_iterations : VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG", +"server_add_holddown : VAR_ADD_HOLDDOWN STRING_ARG", +"server_del_holddown : VAR_DEL_HOLDDOWN STRING_ARG", +"server_keep_missing : VAR_KEEP_MISSING STRING_ARG", +"server_permit_small_holddown : VAR_PERMIT_SMALL_HOLDDOWN STRING_ARG", +"server_key_cache_size : VAR_KEY_CACHE_SIZE STRING_ARG", +"server_key_cache_slabs : VAR_KEY_CACHE_SLABS STRING_ARG", +"server_neg_cache_size : VAR_NEG_CACHE_SIZE STRING_ARG", +"server_local_zone : VAR_LOCAL_ZONE STRING_ARG STRING_ARG", +"server_local_data : VAR_LOCAL_DATA STRING_ARG", +"server_local_data_ptr : VAR_LOCAL_DATA_PTR STRING_ARG", +"server_minimal_responses : VAR_MINIMAL_RESPONSES STRING_ARG", +"server_rrset_roundrobin : VAR_RRSET_ROUNDROBIN STRING_ARG", +"server_unknown_server_time_limit : VAR_UNKNOWN_SERVER_TIME_LIMIT STRING_ARG", +"server_max_udp_size : VAR_MAX_UDP_SIZE STRING_ARG", +"server_dns64_prefix : VAR_DNS64_PREFIX STRING_ARG", +"server_dns64_synthall : VAR_DNS64_SYNTHALL STRING_ARG", +"server_dns64_ignore_aaaa : VAR_DNS64_IGNORE_AAAA STRING_ARG", +"server_define_tag : VAR_DEFINE_TAG STRING_ARG", +"server_local_zone_tag : VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG", +"server_access_control_tag : VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG", +"server_access_control_tag_action : VAR_ACCESS_CONTROL_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG", +"server_access_control_tag_data : VAR_ACCESS_CONTROL_TAG_DATA STRING_ARG STRING_ARG STRING_ARG", +"server_local_zone_override : VAR_LOCAL_ZONE_OVERRIDE STRING_ARG STRING_ARG STRING_ARG", +"server_access_control_view : VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG", +"server_response_ip_tag : VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG", +"server_ip_ratelimit : VAR_IP_RATELIMIT STRING_ARG", +"server_ratelimit : VAR_RATELIMIT STRING_ARG", +"server_ip_ratelimit_size : VAR_IP_RATELIMIT_SIZE STRING_ARG", +"server_ratelimit_size : VAR_RATELIMIT_SIZE STRING_ARG", +"server_ip_ratelimit_slabs : VAR_IP_RATELIMIT_SLABS STRING_ARG", +"server_ratelimit_slabs : VAR_RATELIMIT_SLABS STRING_ARG", +"server_ratelimit_for_domain : VAR_RATELIMIT_FOR_DOMAIN STRING_ARG STRING_ARG", +"server_ratelimit_below_domain : VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG", +"server_ip_ratelimit_factor : VAR_IP_RATELIMIT_FACTOR STRING_ARG", +"server_ratelimit_factor : VAR_RATELIMIT_FACTOR STRING_ARG", +"server_low_rtt : VAR_LOW_RTT STRING_ARG", +"server_fast_server_num : VAR_FAST_SERVER_NUM STRING_ARG", +"server_fast_server_permil : VAR_FAST_SERVER_PERMIL STRING_ARG", +"server_qname_minimisation : VAR_QNAME_MINIMISATION STRING_ARG", +"server_qname_minimisation_strict : VAR_QNAME_MINIMISATION_STRICT STRING_ARG", +"server_pad_responses : VAR_PAD_RESPONSES STRING_ARG", +"server_pad_responses_block_size : VAR_PAD_RESPONSES_BLOCK_SIZE STRING_ARG", +"server_pad_queries : VAR_PAD_QUERIES STRING_ARG", +"server_pad_queries_block_size : VAR_PAD_QUERIES_BLOCK_SIZE STRING_ARG", +"server_ipsecmod_enabled : VAR_IPSECMOD_ENABLED STRING_ARG", +"server_ipsecmod_ignore_bogus : VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG", +"server_ipsecmod_hook : VAR_IPSECMOD_HOOK STRING_ARG", +"server_ipsecmod_max_ttl : VAR_IPSECMOD_MAX_TTL STRING_ARG", +"server_ipsecmod_whitelist : VAR_IPSECMOD_WHITELIST STRING_ARG", +"server_ipsecmod_strict : VAR_IPSECMOD_STRICT STRING_ARG", +"stub_name : VAR_NAME STRING_ARG", +"stub_host : VAR_STUB_HOST STRING_ARG", +"stub_addr : VAR_STUB_ADDR STRING_ARG", +"stub_first : VAR_STUB_FIRST STRING_ARG", +"stub_no_cache : VAR_STUB_NO_CACHE STRING_ARG", +"stub_ssl_upstream : VAR_STUB_SSL_UPSTREAM STRING_ARG", +"stub_prime : VAR_STUB_PRIME STRING_ARG", +"forward_name : VAR_NAME STRING_ARG", +"forward_host : VAR_FORWARD_HOST STRING_ARG", +"forward_addr : VAR_FORWARD_ADDR STRING_ARG", +"forward_first : VAR_FORWARD_FIRST STRING_ARG", +"forward_no_cache : VAR_FORWARD_NO_CACHE STRING_ARG", +"forward_ssl_upstream : VAR_FORWARD_SSL_UPSTREAM STRING_ARG", +"auth_name : VAR_NAME STRING_ARG", +"auth_zonefile : VAR_ZONEFILE STRING_ARG", +"auth_master : VAR_MASTER STRING_ARG", +"auth_url : VAR_URL STRING_ARG", +"auth_allow_notify : VAR_ALLOW_NOTIFY STRING_ARG", +"auth_for_downstream : VAR_FOR_DOWNSTREAM STRING_ARG", +"auth_for_upstream : VAR_FOR_UPSTREAM STRING_ARG", +"auth_fallback_enabled : VAR_FALLBACK_ENABLED STRING_ARG", +"view_name : VAR_NAME STRING_ARG", +"view_local_zone : VAR_LOCAL_ZONE STRING_ARG STRING_ARG", +"view_response_ip : VAR_RESPONSE_IP STRING_ARG STRING_ARG", +"view_response_ip_data : VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG", +"view_local_data : VAR_LOCAL_DATA STRING_ARG", +"view_local_data_ptr : VAR_LOCAL_DATA_PTR STRING_ARG", +"view_first : VAR_VIEW_FIRST STRING_ARG", +"rcstart : VAR_REMOTE_CONTROL", +"contents_rc : contents_rc content_rc", +"contents_rc :", +"content_rc : rc_control_enable", +"content_rc : rc_control_interface", +"content_rc : rc_control_port", +"content_rc : rc_server_key_file", +"content_rc : rc_server_cert_file", +"content_rc : rc_control_key_file", +"content_rc : rc_control_cert_file", +"content_rc : rc_control_use_cert", +"rc_control_enable : VAR_CONTROL_ENABLE STRING_ARG", +"rc_control_port : VAR_CONTROL_PORT STRING_ARG", +"rc_control_interface : VAR_CONTROL_INTERFACE STRING_ARG", +"rc_control_use_cert : VAR_CONTROL_USE_CERT STRING_ARG", +"rc_server_key_file : VAR_SERVER_KEY_FILE STRING_ARG", +"rc_server_cert_file : VAR_SERVER_CERT_FILE STRING_ARG", +"rc_control_key_file : VAR_CONTROL_KEY_FILE STRING_ARG", +"rc_control_cert_file : VAR_CONTROL_CERT_FILE STRING_ARG", +"dtstart : VAR_DNSTAP", +"contents_dt : contents_dt content_dt", +"contents_dt :", +"content_dt : dt_dnstap_enable", +"content_dt : dt_dnstap_socket_path", +"content_dt : dt_dnstap_ip", +"content_dt : dt_dnstap_tls", +"content_dt : dt_dnstap_tls_server_name", +"content_dt : dt_dnstap_tls_cert_bundle", +"content_dt : dt_dnstap_tls_client_key_file", +"content_dt : dt_dnstap_tls_client_cert_file", +"content_dt : dt_dnstap_send_identity", +"content_dt : dt_dnstap_send_version", +"content_dt : dt_dnstap_identity", +"content_dt : dt_dnstap_version", +"content_dt : dt_dnstap_log_resolver_query_messages", +"content_dt : dt_dnstap_log_resolver_response_messages", +"content_dt : dt_dnstap_log_client_query_messages", +"content_dt : dt_dnstap_log_client_response_messages", +"content_dt : dt_dnstap_log_forwarder_query_messages", +"content_dt : dt_dnstap_log_forwarder_response_messages", +"dt_dnstap_enable : VAR_DNSTAP_ENABLE STRING_ARG", +"dt_dnstap_socket_path : VAR_DNSTAP_SOCKET_PATH STRING_ARG", +"dt_dnstap_ip : VAR_DNSTAP_IP STRING_ARG", +"dt_dnstap_tls : VAR_DNSTAP_TLS STRING_ARG", +"dt_dnstap_tls_server_name : VAR_DNSTAP_TLS_SERVER_NAME STRING_ARG", +"dt_dnstap_tls_cert_bundle : VAR_DNSTAP_TLS_CERT_BUNDLE STRING_ARG", +"dt_dnstap_tls_client_key_file : VAR_DNSTAP_TLS_CLIENT_KEY_FILE STRING_ARG", +"dt_dnstap_tls_client_cert_file : VAR_DNSTAP_TLS_CLIENT_CERT_FILE STRING_ARG", +"dt_dnstap_send_identity : VAR_DNSTAP_SEND_IDENTITY STRING_ARG", +"dt_dnstap_send_version : VAR_DNSTAP_SEND_VERSION STRING_ARG", +"dt_dnstap_identity : VAR_DNSTAP_IDENTITY STRING_ARG", +"dt_dnstap_version : VAR_DNSTAP_VERSION STRING_ARG", +"dt_dnstap_log_resolver_query_messages : VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES STRING_ARG", +"dt_dnstap_log_resolver_response_messages : VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES STRING_ARG", +"dt_dnstap_log_client_query_messages : VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES STRING_ARG", +"dt_dnstap_log_client_response_messages : VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES STRING_ARG", +"dt_dnstap_log_forwarder_query_messages : VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES STRING_ARG", +"dt_dnstap_log_forwarder_response_messages : VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES STRING_ARG", +"pythonstart : VAR_PYTHON", +"contents_py : contents_py content_py", +"contents_py :", +"content_py : py_script", +"py_script : VAR_PYTHON_SCRIPT STRING_ARG", +"server_disable_dnssec_lame_check : VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG", +"server_log_identity : VAR_LOG_IDENTITY STRING_ARG", +"server_response_ip : VAR_RESPONSE_IP STRING_ARG STRING_ARG", +"server_response_ip_data : VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG", +"dnscstart : VAR_DNSCRYPT", +"contents_dnsc : contents_dnsc content_dnsc", +"contents_dnsc :", +"content_dnsc : dnsc_dnscrypt_enable", +"content_dnsc : dnsc_dnscrypt_port", +"content_dnsc : dnsc_dnscrypt_provider", +"content_dnsc : dnsc_dnscrypt_secret_key", +"content_dnsc : dnsc_dnscrypt_provider_cert", +"content_dnsc : dnsc_dnscrypt_provider_cert_rotated", +"content_dnsc : dnsc_dnscrypt_shared_secret_cache_size", +"content_dnsc : dnsc_dnscrypt_shared_secret_cache_slabs", +"content_dnsc : dnsc_dnscrypt_nonce_cache_size", +"content_dnsc : dnsc_dnscrypt_nonce_cache_slabs", +"dnsc_dnscrypt_enable : VAR_DNSCRYPT_ENABLE STRING_ARG", +"dnsc_dnscrypt_port : VAR_DNSCRYPT_PORT STRING_ARG", +"dnsc_dnscrypt_provider : VAR_DNSCRYPT_PROVIDER STRING_ARG", +"dnsc_dnscrypt_provider_cert : VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG", +"dnsc_dnscrypt_provider_cert_rotated : VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG", +"dnsc_dnscrypt_secret_key : VAR_DNSCRYPT_SECRET_KEY STRING_ARG", +"dnsc_dnscrypt_shared_secret_cache_size : VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG", +"dnsc_dnscrypt_shared_secret_cache_slabs : VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG", +"dnsc_dnscrypt_nonce_cache_size : VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG", +"dnsc_dnscrypt_nonce_cache_slabs : VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG", +"cachedbstart : VAR_CACHEDB", +"contents_cachedb : contents_cachedb content_cachedb", +"contents_cachedb :", +"content_cachedb : cachedb_backend_name", +"content_cachedb : cachedb_secret_seed", +"content_cachedb : redis_server_host", +"content_cachedb : redis_server_port", +"content_cachedb : redis_timeout", +"cachedb_backend_name : VAR_CACHEDB_BACKEND STRING_ARG", +"cachedb_secret_seed : VAR_CACHEDB_SECRETSEED STRING_ARG", +"redis_server_host : VAR_CACHEDB_REDISHOST STRING_ARG", +"redis_server_port : VAR_CACHEDB_REDISPORT STRING_ARG", +"redis_timeout : VAR_CACHEDB_REDISTIMEOUT STRING_ARG", +"server_tcp_connection_limit : VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG", +"ipsetstart : VAR_IPSET", +"contents_ipset : contents_ipset content_ipset", +"contents_ipset :", +"content_ipset : ipset_name_v4", +"content_ipset : ipset_name_v6", +"ipset_name_v4 : VAR_IPSET_NAME_V4 STRING_ARG", +"ipset_name_v6 : VAR_IPSET_NAME_V6 STRING_ARG", + }; #endif -#if YYDEBUG || YYERROR_VERBOSE || 0 -/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ -static const char *const yytname[] = -{ - "$end", "error", "$undefined", "SPACE", "LETTER", "NEWLINE", "COMMENT", - "COLON", "ANY", "ZONESTR", "STRING_ARG", "VAR_SERVER", "VAR_VERBOSITY", - "VAR_NUM_THREADS", "VAR_PORT", "VAR_OUTGOING_RANGE", "VAR_INTERFACE", - "VAR_PREFER_IP4", "VAR_DO_IP4", "VAR_DO_IP6", "VAR_PREFER_IP6", - "VAR_DO_UDP", "VAR_DO_TCP", "VAR_TCP_MSS", "VAR_OUTGOING_TCP_MSS", - "VAR_TCP_IDLE_TIMEOUT", "VAR_EDNS_TCP_KEEPALIVE", - "VAR_EDNS_TCP_KEEPALIVE_TIMEOUT", "VAR_CHROOT", "VAR_USERNAME", - "VAR_DIRECTORY", "VAR_LOGFILE", "VAR_PIDFILE", "VAR_MSG_CACHE_SIZE", - "VAR_MSG_CACHE_SLABS", "VAR_NUM_QUERIES_PER_THREAD", - "VAR_RRSET_CACHE_SIZE", "VAR_RRSET_CACHE_SLABS", "VAR_OUTGOING_NUM_TCP", - "VAR_INFRA_HOST_TTL", "VAR_INFRA_LAME_TTL", "VAR_INFRA_CACHE_SLABS", - "VAR_INFRA_CACHE_NUMHOSTS", "VAR_INFRA_CACHE_LAME_SIZE", "VAR_NAME", - "VAR_STUB_ZONE", "VAR_STUB_HOST", "VAR_STUB_ADDR", - "VAR_TARGET_FETCH_POLICY", "VAR_HARDEN_SHORT_BUFSIZE", - "VAR_HARDEN_LARGE_QUERIES", "VAR_FORWARD_ZONE", "VAR_FORWARD_HOST", - "VAR_FORWARD_ADDR", "VAR_DO_NOT_QUERY_ADDRESS", "VAR_HIDE_IDENTITY", - "VAR_HIDE_VERSION", "VAR_IDENTITY", "VAR_VERSION", "VAR_HARDEN_GLUE", - "VAR_MODULE_CONF", "VAR_TRUST_ANCHOR_FILE", "VAR_TRUST_ANCHOR", - "VAR_VAL_OVERRIDE_DATE", "VAR_BOGUS_TTL", "VAR_VAL_CLEAN_ADDITIONAL", - "VAR_VAL_PERMISSIVE_MODE", "VAR_INCOMING_NUM_TCP", "VAR_MSG_BUFFER_SIZE", - "VAR_KEY_CACHE_SIZE", "VAR_KEY_CACHE_SLABS", "VAR_TRUSTED_KEYS_FILE", - "VAR_VAL_NSEC3_KEYSIZE_ITERATIONS", "VAR_USE_SYSLOG", - "VAR_OUTGOING_INTERFACE", "VAR_ROOT_HINTS", "VAR_DO_NOT_QUERY_LOCALHOST", - "VAR_CACHE_MAX_TTL", "VAR_HARDEN_DNSSEC_STRIPPED", "VAR_ACCESS_CONTROL", - "VAR_LOCAL_ZONE", "VAR_LOCAL_DATA", "VAR_INTERFACE_AUTOMATIC", - "VAR_STATISTICS_INTERVAL", "VAR_DO_DAEMONIZE", "VAR_USE_CAPS_FOR_ID", - "VAR_STATISTICS_CUMULATIVE", "VAR_OUTGOING_PORT_PERMIT", - "VAR_OUTGOING_PORT_AVOID", "VAR_DLV_ANCHOR_FILE", "VAR_DLV_ANCHOR", - "VAR_NEG_CACHE_SIZE", "VAR_HARDEN_REFERRAL_PATH", "VAR_PRIVATE_ADDRESS", - "VAR_PRIVATE_DOMAIN", "VAR_REMOTE_CONTROL", "VAR_CONTROL_ENABLE", - "VAR_CONTROL_INTERFACE", "VAR_CONTROL_PORT", "VAR_SERVER_KEY_FILE", - "VAR_SERVER_CERT_FILE", "VAR_CONTROL_KEY_FILE", "VAR_CONTROL_CERT_FILE", - "VAR_CONTROL_USE_CERT", "VAR_EXTENDED_STATISTICS", "VAR_LOCAL_DATA_PTR", - "VAR_JOSTLE_TIMEOUT", "VAR_STUB_PRIME", "VAR_UNWANTED_REPLY_THRESHOLD", - "VAR_LOG_TIME_ASCII", "VAR_DOMAIN_INSECURE", "VAR_PYTHON", - "VAR_PYTHON_SCRIPT", "VAR_VAL_SIG_SKEW_MIN", "VAR_VAL_SIG_SKEW_MAX", - "VAR_CACHE_MIN_TTL", "VAR_VAL_LOG_LEVEL", "VAR_AUTO_TRUST_ANCHOR_FILE", - "VAR_KEEP_MISSING", "VAR_ADD_HOLDDOWN", "VAR_DEL_HOLDDOWN", - "VAR_SO_RCVBUF", "VAR_EDNS_BUFFER_SIZE", "VAR_PREFETCH", - "VAR_PREFETCH_KEY", "VAR_SO_SNDBUF", "VAR_SO_REUSEPORT", - "VAR_HARDEN_BELOW_NXDOMAIN", "VAR_IGNORE_CD_FLAG", "VAR_LOG_QUERIES", - "VAR_LOG_REPLIES", "VAR_LOG_LOCAL_ACTIONS", "VAR_TCP_UPSTREAM", - "VAR_SSL_UPSTREAM", "VAR_SSL_SERVICE_KEY", "VAR_SSL_SERVICE_PEM", - "VAR_SSL_PORT", "VAR_FORWARD_FIRST", "VAR_STUB_SSL_UPSTREAM", - "VAR_FORWARD_SSL_UPSTREAM", "VAR_TLS_CERT_BUNDLE", "VAR_STUB_FIRST", - "VAR_MINIMAL_RESPONSES", "VAR_RRSET_ROUNDROBIN", "VAR_MAX_UDP_SIZE", - "VAR_DELAY_CLOSE", "VAR_UNBLOCK_LAN_ZONES", "VAR_INSECURE_LAN_ZONES", - "VAR_INFRA_CACHE_MIN_RTT", "VAR_DNS64_PREFIX", "VAR_DNS64_SYNTHALL", - "VAR_DNS64_IGNORE_AAAA", "VAR_DNSTAP", "VAR_DNSTAP_ENABLE", - "VAR_DNSTAP_SOCKET_PATH", "VAR_DNSTAP_IP", "VAR_DNSTAP_TLS", - "VAR_DNSTAP_TLS_SERVER_NAME", "VAR_DNSTAP_TLS_CERT_BUNDLE", - "VAR_DNSTAP_TLS_CLIENT_KEY_FILE", "VAR_DNSTAP_TLS_CLIENT_CERT_FILE", - "VAR_DNSTAP_SEND_IDENTITY", "VAR_DNSTAP_SEND_VERSION", - "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION", - "VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES", - "VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES", - "VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES", - "VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES", - "VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES", - "VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES", "VAR_RESPONSE_IP_TAG", - "VAR_RESPONSE_IP", "VAR_RESPONSE_IP_DATA", "VAR_HARDEN_ALGO_DOWNGRADE", - "VAR_IP_TRANSPARENT", "VAR_IP_DSCP", "VAR_DISABLE_DNSSEC_LAME_CHECK", - "VAR_IP_RATELIMIT", "VAR_IP_RATELIMIT_SLABS", "VAR_IP_RATELIMIT_SIZE", - "VAR_RATELIMIT", "VAR_RATELIMIT_SLABS", "VAR_RATELIMIT_SIZE", - "VAR_RATELIMIT_FOR_DOMAIN", "VAR_RATELIMIT_BELOW_DOMAIN", - "VAR_IP_RATELIMIT_FACTOR", "VAR_RATELIMIT_FACTOR", - "VAR_SEND_CLIENT_SUBNET", "VAR_CLIENT_SUBNET_ZONE", - "VAR_CLIENT_SUBNET_ALWAYS_FORWARD", "VAR_CLIENT_SUBNET_OPCODE", - "VAR_MAX_CLIENT_SUBNET_IPV4", "VAR_MAX_CLIENT_SUBNET_IPV6", - "VAR_MIN_CLIENT_SUBNET_IPV4", "VAR_MIN_CLIENT_SUBNET_IPV6", - "VAR_MAX_ECS_TREE_SIZE_IPV4", "VAR_MAX_ECS_TREE_SIZE_IPV6", - "VAR_CAPS_WHITELIST", "VAR_CACHE_MAX_NEGATIVE_TTL", - "VAR_PERMIT_SMALL_HOLDDOWN", "VAR_QNAME_MINIMISATION", - "VAR_QNAME_MINIMISATION_STRICT", "VAR_IP_FREEBIND", "VAR_DEFINE_TAG", - "VAR_LOCAL_ZONE_TAG", "VAR_ACCESS_CONTROL_TAG", - "VAR_LOCAL_ZONE_OVERRIDE", "VAR_ACCESS_CONTROL_TAG_ACTION", - "VAR_ACCESS_CONTROL_TAG_DATA", "VAR_VIEW", "VAR_ACCESS_CONTROL_VIEW", - "VAR_VIEW_FIRST", "VAR_SERVE_EXPIRED", "VAR_SERVE_EXPIRED_TTL", - "VAR_SERVE_EXPIRED_TTL_RESET", "VAR_SERVE_EXPIRED_REPLY_TTL", - "VAR_SERVE_EXPIRED_CLIENT_TIMEOUT", "VAR_FAKE_DSA", "VAR_FAKE_SHA1", - "VAR_LOG_IDENTITY", "VAR_HIDE_TRUSTANCHOR", "VAR_TRUST_ANCHOR_SIGNALING", - "VAR_AGGRESSIVE_NSEC", "VAR_USE_SYSTEMD", "VAR_SHM_ENABLE", - "VAR_SHM_KEY", "VAR_ROOT_KEY_SENTINEL", "VAR_DNSCRYPT", - "VAR_DNSCRYPT_ENABLE", "VAR_DNSCRYPT_PORT", "VAR_DNSCRYPT_PROVIDER", - "VAR_DNSCRYPT_SECRET_KEY", "VAR_DNSCRYPT_PROVIDER_CERT", - "VAR_DNSCRYPT_PROVIDER_CERT_ROTATED", - "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE", - "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS", - "VAR_DNSCRYPT_NONCE_CACHE_SIZE", "VAR_DNSCRYPT_NONCE_CACHE_SLABS", - "VAR_IPSECMOD_ENABLED", "VAR_IPSECMOD_HOOK", "VAR_IPSECMOD_IGNORE_BOGUS", - "VAR_IPSECMOD_MAX_TTL", "VAR_IPSECMOD_WHITELIST", "VAR_IPSECMOD_STRICT", - "VAR_CACHEDB", "VAR_CACHEDB_BACKEND", "VAR_CACHEDB_SECRETSEED", - "VAR_CACHEDB_REDISHOST", "VAR_CACHEDB_REDISPORT", - "VAR_CACHEDB_REDISTIMEOUT", "VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM", - "VAR_FOR_UPSTREAM", "VAR_AUTH_ZONE", "VAR_ZONEFILE", "VAR_MASTER", - "VAR_URL", "VAR_FOR_DOWNSTREAM", "VAR_FALLBACK_ENABLED", - "VAR_TLS_ADDITIONAL_PORT", "VAR_LOW_RTT", "VAR_LOW_RTT_PERMIL", - "VAR_FAST_SERVER_PERMIL", "VAR_FAST_SERVER_NUM", "VAR_ALLOW_NOTIFY", - "VAR_TLS_WIN_CERT", "VAR_TCP_CONNECTION_LIMIT", "VAR_FORWARD_NO_CACHE", - "VAR_STUB_NO_CACHE", "VAR_LOG_SERVFAIL", "VAR_DENY_ANY", - "VAR_UNKNOWN_SERVER_TIME_LIMIT", "VAR_LOG_TAG_QUERYREPLY", - "VAR_STREAM_WAIT_SIZE", "VAR_TLS_CIPHERS", "VAR_TLS_CIPHERSUITES", - "VAR_IPSET", "VAR_IPSET_NAME_V4", "VAR_IPSET_NAME_V6", - "VAR_TLS_SESSION_TICKET_KEYS", "VAR_RPZ", "VAR_TAGS", - "VAR_RPZ_ACTION_OVERRIDE", "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", - "VAR_RPZ_LOG_NAME", "$accept", "toplevelvars", "toplevelvar", - "serverstart", "contents_server", "content_server", "stubstart", - "contents_stub", "content_stub", "forwardstart", "contents_forward", - "content_forward", "viewstart", "contents_view", "content_view", - "authstart", "contents_auth", "content_auth", "rpz_tag", - "rpz_action_override", "rpz_cname_override", "rpz_log", "rpz_log_name", - "rpzstart", "contents_rpz", "content_rpz", "server_num_threads", - "server_verbosity", "server_statistics_interval", - "server_statistics_cumulative", "server_extended_statistics", - "server_shm_enable", "server_shm_key", "server_port", - "server_send_client_subnet", "server_client_subnet_zone", - "server_client_subnet_always_forward", "server_client_subnet_opcode", - "server_max_client_subnet_ipv4", "server_max_client_subnet_ipv6", - "server_min_client_subnet_ipv4", "server_min_client_subnet_ipv6", - "server_max_ecs_tree_size_ipv4", "server_max_ecs_tree_size_ipv6", - "server_interface", "server_outgoing_interface", "server_outgoing_range", - "server_outgoing_port_permit", "server_outgoing_port_avoid", - "server_outgoing_num_tcp", "server_incoming_num_tcp", - "server_interface_automatic", "server_do_ip4", "server_do_ip6", - "server_do_udp", "server_do_tcp", "server_prefer_ip4", - "server_prefer_ip6", "server_tcp_mss", "server_outgoing_tcp_mss", - "server_tcp_idle_timeout", "server_tcp_keepalive", - "server_tcp_keepalive_timeout", "server_tcp_upstream", - "server_udp_upstream_without_downstream", "server_ssl_upstream", - "server_ssl_service_key", "server_ssl_service_pem", "server_ssl_port", - "server_tls_cert_bundle", "server_tls_win_cert", - "server_tls_additional_port", "server_tls_ciphers", - "server_tls_ciphersuites", "server_tls_session_ticket_keys", - "server_use_systemd", "server_do_daemonize", "server_use_syslog", - "server_log_time_ascii", "server_log_queries", "server_log_replies", - "server_log_tag_queryreply", "server_log_servfail", - "server_log_local_actions", "server_chroot", "server_username", - "server_directory", "server_logfile", "server_pidfile", - "server_root_hints", "server_dlv_anchor_file", "server_dlv_anchor", - "server_auto_trust_anchor_file", "server_trust_anchor_file", - "server_trusted_keys_file", "server_trust_anchor", - "server_trust_anchor_signaling", "server_root_key_sentinel", - "server_domain_insecure", "server_hide_identity", "server_hide_version", - "server_hide_trustanchor", "server_identity", "server_version", - "server_so_rcvbuf", "server_so_sndbuf", "server_so_reuseport", - "server_ip_transparent", "server_ip_freebind", "server_ip_dscp", - "server_stream_wait_size", "server_edns_buffer_size", - "server_msg_buffer_size", "server_msg_cache_size", - "server_msg_cache_slabs", "server_num_queries_per_thread", - "server_jostle_timeout", "server_delay_close", - "server_unblock_lan_zones", "server_insecure_lan_zones", - "server_rrset_cache_size", "server_rrset_cache_slabs", - "server_infra_host_ttl", "server_infra_lame_ttl", - "server_infra_cache_numhosts", "server_infra_cache_lame_size", - "server_infra_cache_slabs", "server_infra_cache_min_rtt", - "server_target_fetch_policy", "server_harden_short_bufsize", - "server_harden_large_queries", "server_harden_glue", - "server_harden_dnssec_stripped", "server_harden_below_nxdomain", - "server_harden_referral_path", "server_harden_algo_downgrade", - "server_use_caps_for_id", "server_caps_whitelist", - "server_private_address", "server_private_domain", "server_prefetch", - "server_prefetch_key", "server_deny_any", - "server_unwanted_reply_threshold", "server_do_not_query_address", - "server_do_not_query_localhost", "server_access_control", - "server_module_conf", "server_val_override_date", - "server_val_sig_skew_min", "server_val_sig_skew_max", - "server_cache_max_ttl", "server_cache_max_negative_ttl", - "server_cache_min_ttl", "server_bogus_ttl", - "server_val_clean_additional", "server_val_permissive_mode", - "server_aggressive_nsec", "server_ignore_cd_flag", - "server_serve_expired", "server_serve_expired_ttl", - "server_serve_expired_ttl_reset", "server_serve_expired_reply_ttl", - "server_serve_expired_client_timeout", "server_fake_dsa", - "server_fake_sha1", "server_val_log_level", - "server_val_nsec3_keysize_iterations", "server_add_holddown", - "server_del_holddown", "server_keep_missing", - "server_permit_small_holddown", "server_key_cache_size", - "server_key_cache_slabs", "server_neg_cache_size", "server_local_zone", - "server_local_data", "server_local_data_ptr", "server_minimal_responses", - "server_rrset_roundrobin", "server_unknown_server_time_limit", - "server_max_udp_size", "server_dns64_prefix", "server_dns64_synthall", - "server_dns64_ignore_aaaa", "server_define_tag", "server_local_zone_tag", - "server_access_control_tag", "server_access_control_tag_action", - "server_access_control_tag_data", "server_local_zone_override", - "server_access_control_view", "server_response_ip_tag", - "server_ip_ratelimit", "server_ratelimit", "server_ip_ratelimit_size", - "server_ratelimit_size", "server_ip_ratelimit_slabs", - "server_ratelimit_slabs", "server_ratelimit_for_domain", - "server_ratelimit_below_domain", "server_ip_ratelimit_factor", - "server_ratelimit_factor", "server_low_rtt", "server_fast_server_num", - "server_fast_server_permil", "server_qname_minimisation", - "server_qname_minimisation_strict", "server_ipsecmod_enabled", - "server_ipsecmod_ignore_bogus", "server_ipsecmod_hook", - "server_ipsecmod_max_ttl", "server_ipsecmod_whitelist", - "server_ipsecmod_strict", "stub_name", "stub_host", "stub_addr", - "stub_first", "stub_no_cache", "stub_ssl_upstream", "stub_prime", - "forward_name", "forward_host", "forward_addr", "forward_first", - "forward_no_cache", "forward_ssl_upstream", "auth_name", "auth_zonefile", - "auth_master", "auth_url", "auth_allow_notify", "auth_for_downstream", - "auth_for_upstream", "auth_fallback_enabled", "view_name", - "view_local_zone", "view_response_ip", "view_response_ip_data", - "view_local_data", "view_local_data_ptr", "view_first", "rcstart", - "contents_rc", "content_rc", "rc_control_enable", "rc_control_port", - "rc_control_interface", "rc_control_use_cert", "rc_server_key_file", - "rc_server_cert_file", "rc_control_key_file", "rc_control_cert_file", - "dtstart", "contents_dt", "content_dt", "dt_dnstap_enable", - "dt_dnstap_socket_path", "dt_dnstap_ip", "dt_dnstap_tls", - "dt_dnstap_tls_server_name", "dt_dnstap_tls_cert_bundle", - "dt_dnstap_tls_client_key_file", "dt_dnstap_tls_client_cert_file", - "dt_dnstap_send_identity", "dt_dnstap_send_version", - "dt_dnstap_identity", "dt_dnstap_version", - "dt_dnstap_log_resolver_query_messages", - "dt_dnstap_log_resolver_response_messages", - "dt_dnstap_log_client_query_messages", - "dt_dnstap_log_client_response_messages", - "dt_dnstap_log_forwarder_query_messages", - "dt_dnstap_log_forwarder_response_messages", "pythonstart", - "contents_py", "content_py", "py_script", - "server_disable_dnssec_lame_check", "server_log_identity", - "server_response_ip", "server_response_ip_data", "dnscstart", - "contents_dnsc", "content_dnsc", "dnsc_dnscrypt_enable", - "dnsc_dnscrypt_port", "dnsc_dnscrypt_provider", - "dnsc_dnscrypt_provider_cert", "dnsc_dnscrypt_provider_cert_rotated", - "dnsc_dnscrypt_secret_key", "dnsc_dnscrypt_shared_secret_cache_size", - "dnsc_dnscrypt_shared_secret_cache_slabs", - "dnsc_dnscrypt_nonce_cache_size", "dnsc_dnscrypt_nonce_cache_slabs", - "cachedbstart", "contents_cachedb", "content_cachedb", - "cachedb_backend_name", "cachedb_secret_seed", "redis_server_host", - "redis_server_port", "redis_timeout", "server_tcp_connection_limit", - "ipsetstart", "contents_ipset", "content_ipset", "ipset_name_v4", - "ipset_name_v6", YY_NULLPTR -}; -#endif - -# ifdef YYPRINT -/* YYTOKNUM[NUM] -- (External) token number corresponding to the - (internal) symbol number NUM (which must be that of a token). */ -static const yytype_uint16 yytoknum[] = -{ - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, - 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, - 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, - 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, - 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 539, 540 -}; -# endif - -#define YYPACT_NINF -270 - -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-270))) - -#define YYTABLE_NINF -1 - -#define yytable_value_is_error(Yytable_value) \ - 0 - - /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -static const yytype_int16 yypact[] = -{ - -270, 0, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, 269, -42, - -37, -41, -21, -43, -44, -87, -106, -205, -229, -269, - 2, 3, 4, 12, 24, 25, 26, 27, 28, 31, - 32, 33, 34, 36, 37, 38, 39, 40, 50, 51, - 52, 53, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 87, 88, 91, 93, 94, 95, 96, - 97, 98, 99, 100, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 204, 205, - 206, 207, 208, 209, 210, 212, 213, 214, 215, 217, - 219, 222, 234, 236, 237, 238, 239, 240, 241, 242, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, - 264, 265, 267, 268, 303, 304, 305, 306, 310, 311, - 312, 354, 355, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, 356, 357, 358, - 359, 360, 361, 362, -270, -270, -270, -270, -270, -270, - -270, -270, 366, 370, 371, 396, 397, 398, -270, -270, - -270, -270, -270, -270, -270, 400, 411, 412, 413, 414, - 415, 416, -270, -270, -270, -270, -270, -270, -270, -270, - 417, 418, 419, 420, 421, 422, 423, 424, -270, -270, - -270, -270, -270, -270, -270, -270, -270, 425, 426, 427, - 428, 429, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, 469, 471, 487, 488, 489, 490, 491, - 492, -270, -270, -270, -270, -270, -270, -270, -270, -270, - 493, 494, 495, 496, 497, 504, 505, 506, 507, 508, - 509, 511, 512, 513, 514, 515, 516, 517, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, 520, -270, -270, - 523, 526, 527, 535, 536, 537, 539, 540, 541, 542, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, 543, 544, 545, 546, 547, -270, -270, -270, -270, - -270, -270, 548, 549, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, 550, 551, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, 552, 553, 554, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, 555, 556, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, 557, 558, - 559, 560, 561, 562, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, 563, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, 564, -270, -270, 565, 566, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, 567, 568, 569, -270, - -270, -270, -270, -270, -270, -270, -270 -}; - - /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. - Performed when YYTABLE does not specify something else to do. Zero - means the default is an error. */ -static const yytype_uint16 yydefact[] = -{ - 2, 0, 1, 16, 212, 222, 486, 544, 505, 231, - 553, 576, 241, 590, 257, 3, 18, 214, 224, 233, - 243, 259, 488, 507, 546, 555, 578, 592, 4, 5, - 6, 10, 14, 15, 8, 9, 7, 11, 12, 13, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 17, 19, 20, 83, 86, 95, 183, - 184, 21, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 34, 74, 22, 87, 88, 45, 67, 82, - 23, 24, 27, 28, 25, 26, 29, 30, 31, 32, - 33, 118, 195, 119, 121, 122, 123, 197, 202, 198, - 209, 210, 211, 179, 84, 73, 99, 116, 117, 207, - 204, 120, 35, 36, 37, 38, 39, 75, 89, 90, - 105, 61, 71, 62, 187, 188, 100, 55, 56, 186, - 57, 58, 109, 113, 127, 136, 162, 139, 208, 110, - 68, 40, 41, 42, 97, 128, 129, 130, 43, 44, - 46, 47, 49, 50, 48, 134, 51, 52, 53, 59, - 78, 114, 92, 135, 85, 158, 93, 94, 111, 112, - 205, 98, 54, 76, 79, 60, 63, 101, 102, 77, - 159, 103, 64, 65, 66, 196, 115, 172, 173, 174, - 175, 176, 177, 185, 104, 72, 106, 107, 108, 160, - 69, 70, 91, 80, 81, 96, 124, 125, 206, 126, - 131, 132, 133, 163, 164, 166, 168, 169, 167, 170, - 180, 137, 138, 142, 143, 140, 141, 144, 145, 147, - 146, 199, 201, 200, 161, 171, 189, 191, 190, 192, - 193, 194, 165, 178, 181, 182, 203, 0, 0, 0, - 0, 0, 0, 0, 213, 215, 216, 217, 219, 220, - 221, 218, 0, 0, 0, 0, 0, 0, 223, 225, - 226, 227, 228, 229, 230, 0, 0, 0, 0, 0, - 0, 0, 232, 234, 235, 238, 239, 236, 240, 237, - 0, 0, 0, 0, 0, 0, 0, 0, 242, 244, - 245, 246, 247, 251, 248, 249, 250, 0, 0, 0, - 0, 0, 262, 266, 267, 268, 269, 258, 260, 261, - 263, 264, 265, 0, 0, 0, 0, 0, 0, 0, - 0, 487, 489, 491, 490, 496, 492, 493, 494, 495, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 506, 508, - 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 524, 525, 0, 545, 547, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 554, 556, 557, 558, 560, 561, 559, 562, 563, 564, - 565, 0, 0, 0, 0, 0, 577, 579, 580, 581, - 582, 583, 0, 0, 591, 593, 594, 271, 270, 277, - 290, 288, 300, 296, 297, 301, 298, 299, 302, 303, - 304, 305, 306, 328, 329, 330, 331, 332, 357, 358, - 359, 364, 365, 293, 366, 367, 370, 368, 369, 372, - 373, 374, 388, 343, 344, 346, 347, 375, 391, 337, - 339, 392, 398, 399, 400, 294, 356, 416, 417, 338, - 411, 321, 289, 333, 389, 395, 376, 0, 0, 420, - 295, 272, 320, 380, 273, 291, 292, 334, 335, 418, - 378, 382, 383, 274, 421, 360, 387, 322, 342, 393, - 394, 397, 410, 336, 414, 412, 413, 348, 355, 384, - 385, 349, 350, 377, 402, 323, 324, 327, 307, 309, - 310, 311, 312, 313, 422, 423, 425, 361, 362, 363, - 371, 426, 427, 428, 0, 0, 0, 379, 351, 353, - 549, 437, 441, 439, 438, 442, 440, 0, 0, 445, - 446, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 287, 381, 396, 415, 450, 451, 352, 429, 0, 0, - 0, 0, 0, 0, 403, 404, 405, 406, 407, 408, - 409, 550, 345, 340, 401, 319, 275, 276, 341, 452, - 454, 453, 455, 456, 457, 308, 315, 447, 449, 448, - 314, 0, 326, 386, 424, 325, 354, 316, 317, 318, - 458, 459, 460, 464, 463, 461, 462, 465, 466, 467, - 468, 470, 469, 479, 0, 483, 484, 0, 0, 485, - 471, 477, 472, 473, 474, 476, 478, 475, 252, 253, - 254, 255, 256, 497, 499, 498, 501, 502, 503, 504, - 500, 526, 527, 528, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 548, - 566, 567, 568, 571, 569, 570, 572, 573, 574, 575, - 584, 585, 586, 587, 588, 595, 596, 390, 419, 436, - 551, 552, 443, 444, 430, 431, 0, 0, 0, 435, - 589, 480, 481, 482, 434, 432, 433 -}; - - /* YYPGOTO[NTERM-NUM]. */ -static const yytype_int16 yypgoto[] = -{ - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -23, 570, 571, - 572, 573, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, -270, -270, -270 -}; - - /* YYDEFGOTO[NTERM-NUM]. */ -static const yytype_int16 yydefgoto[] = -{ - -1, 1, 15, 16, 28, 233, 17, 29, 434, 18, - 30, 448, 19, 31, 462, 20, 32, 478, 492, 493, - 494, 495, 496, 21, 33, 497, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 435, 436, 437, 438, 439, 440, - 441, 449, 450, 451, 452, 453, 454, 479, 480, 481, - 482, 483, 484, 485, 486, 463, 464, 465, 466, 467, - 468, 469, 22, 34, 511, 512, 513, 514, 515, 516, - 517, 518, 519, 23, 35, 538, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 554, 555, 556, 24, 36, 558, 559, 422, 423, - 424, 425, 25, 37, 570, 571, 572, 573, 574, 575, - 576, 577, 578, 579, 580, 26, 38, 586, 587, 588, - 589, 590, 591, 426, 27, 39, 594, 595, 596 -}; - - /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule whose - number is the opposite. If YYTABLE_NINF, syntax error. */ -static const yytype_uint16 yytable[] = -{ - 2, 470, 427, 455, 428, 429, 557, 442, 592, 593, - 498, 3, 597, 598, 599, 443, 444, 581, 582, 583, - 584, 585, 600, 470, 560, 561, 562, 563, 564, 565, - 566, 567, 568, 569, 601, 602, 603, 604, 605, 456, - 457, 606, 607, 608, 609, 4, 610, 611, 612, 613, - 614, 5, 503, 504, 505, 506, 507, 508, 509, 510, - 615, 616, 617, 618, 458, 430, 520, 521, 522, 523, - 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, - 534, 535, 536, 537, 619, 620, 621, 622, 623, 624, - 625, 626, 627, 628, 629, 6, 431, 630, 631, 432, - 445, 632, 446, 633, 634, 635, 636, 637, 638, 639, - 640, 7, 641, 642, 643, 644, 645, 646, 647, 648, - 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, - 659, 459, 460, 660, 661, 662, 663, 664, 665, 666, - 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, - 677, 678, 8, 679, 680, 681, 682, 683, 684, 685, - 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, - 696, 461, 697, 698, 699, 700, 701, 702, 703, 704, - 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, - 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, - 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, - 9, 472, 473, 474, 735, 736, 737, 738, 739, 740, - 741, 477, 742, 743, 744, 745, 433, 746, 10, 747, - 447, 471, 748, 472, 473, 474, 475, 476, 487, 488, - 489, 490, 491, 477, 749, 11, 750, 751, 752, 753, - 754, 755, 756, 12, 757, 758, 759, 760, 761, 762, - 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, - 773, 774, 775, 776, 777, 778, 13, 779, 780, 0, - 14, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 781, 782, 783, 784, 72, 73, 74, - 785, 786, 787, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 788, 789, 790, 791, 792, 793, - 794, 795, 796, 116, 117, 118, 797, 119, 120, 121, - 798, 799, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 800, 801, 802, 146, - 803, 147, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 804, 805, 806, 807, 808, 809, 810, 811, 812, - 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, - 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, - 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 191, 192, 193, 194, 195, 823, - 196, 824, 197, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 210, 211, 825, 826, 827, - 828, 829, 830, 831, 832, 833, 834, 835, 212, 213, - 214, 215, 216, 217, 836, 837, 838, 839, 840, 841, - 218, 842, 843, 844, 845, 846, 847, 848, 219, 220, - 849, 221, 222, 850, 223, 224, 851, 852, 225, 226, - 227, 228, 229, 230, 231, 853, 854, 855, 232, 856, - 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, - 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, - 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 499, 500, 501, 502 -}; - -static const yytype_int16 yycheck[] = -{ - 0, 44, 44, 44, 46, 47, 112, 44, 277, 278, - 33, 11, 10, 10, 10, 52, 53, 246, 247, 248, - 249, 250, 10, 44, 229, 230, 231, 232, 233, 234, - 235, 236, 237, 238, 10, 10, 10, 10, 10, 80, - 81, 10, 10, 10, 10, 45, 10, 10, 10, 10, - 10, 51, 96, 97, 98, 99, 100, 101, 102, 103, - 10, 10, 10, 10, 105, 107, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 95, 138, 10, 10, 141, - 137, 10, 139, 10, 10, 10, 10, 10, 10, 10, - 10, 111, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 172, 173, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 152, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 212, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 210, 254, 255, 256, 10, 10, 10, 10, 10, 10, - 10, 264, 10, 10, 10, 10, 268, 10, 228, 10, - 267, 252, 10, 254, 255, 256, 257, 258, 281, 282, - 283, 284, 285, 264, 10, 245, 10, 10, 10, 10, - 10, 10, 10, 253, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 276, 10, 10, -1, - 280, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 10, 10, 10, 10, 48, 49, 50, - 10, 10, 10, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, - 91, 92, 93, 94, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 104, 105, 106, 10, 108, 109, 110, - 10, 10, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 10, 10, 10, 140, - 10, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, - 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 207, 208, 209, 10, - 211, 10, 213, 214, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 239, 240, - 241, 242, 243, 244, 10, 10, 10, 10, 10, 10, - 251, 10, 10, 10, 10, 10, 10, 10, 259, 260, - 10, 262, 263, 10, 265, 266, 10, 10, 269, 270, - 271, 272, 273, 274, 275, 10, 10, 10, 279, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 33, 33, 33, 33 -}; - - /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const yytype_uint16 yystos[] = -{ - 0, 287, 0, 11, 45, 51, 95, 111, 152, 210, - 228, 245, 253, 276, 280, 288, 289, 292, 295, 298, - 301, 309, 528, 539, 560, 568, 581, 590, 290, 293, - 296, 299, 302, 310, 529, 540, 561, 569, 582, 591, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 48, 49, 50, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 104, 105, 106, 108, - 109, 110, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 140, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, - 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, - 204, 205, 206, 207, 208, 209, 211, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 239, 240, 241, 242, 243, 244, 251, 259, - 260, 262, 263, 265, 266, 269, 270, 271, 272, 273, - 274, 275, 279, 291, 312, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, - 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, - 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 498, 499, 564, 565, 566, 567, 589, 44, 46, 47, - 107, 138, 141, 268, 294, 500, 501, 502, 503, 504, - 505, 506, 44, 52, 53, 137, 139, 267, 297, 507, - 508, 509, 510, 511, 512, 44, 80, 81, 105, 172, - 173, 212, 300, 521, 522, 523, 524, 525, 526, 527, - 44, 252, 254, 255, 256, 257, 258, 264, 303, 513, - 514, 515, 516, 517, 518, 519, 520, 281, 282, 283, - 284, 285, 304, 305, 306, 307, 308, 311, 513, 514, - 515, 516, 517, 96, 97, 98, 99, 100, 101, 102, - 103, 530, 531, 532, 533, 534, 535, 536, 537, 538, - 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, - 163, 164, 165, 166, 167, 168, 169, 170, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 554, 555, 556, 557, 558, 559, 112, 562, 563, - 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, - 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, - 580, 246, 247, 248, 249, 250, 583, 584, 585, 586, - 587, 588, 277, 278, 592, 593, 594, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10 -}; - - /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint16 yyr1[] = -{ - 0, 286, 287, 287, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 289, 290, 290, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 292, 293, 293, 294, 294, 294, 294, 294, - 294, 294, 295, 296, 296, 297, 297, 297, 297, 297, - 297, 298, 299, 299, 300, 300, 300, 300, 300, 300, - 300, 301, 302, 302, 303, 303, 303, 303, 303, 303, - 303, 303, 304, 305, 306, 307, 308, 309, 310, 310, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, - 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, - 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, - 522, 523, 524, 525, 526, 527, 528, 529, 529, 530, - 530, 530, 530, 530, 530, 530, 530, 531, 532, 533, - 534, 535, 536, 537, 538, 539, 540, 540, 541, 541, - 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, - 541, 541, 541, 541, 541, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, - 556, 557, 558, 559, 560, 561, 561, 562, 563, 564, - 565, 566, 567, 568, 569, 569, 570, 570, 570, 570, - 570, 570, 570, 570, 570, 570, 571, 572, 573, 574, - 575, 576, 577, 578, 579, 580, 581, 582, 582, 583, - 583, 583, 583, 583, 584, 585, 586, 587, 588, 589, - 590, 591, 591, 592, 592, 593, 594 -}; - - /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = -{ - 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, - 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 1, 2, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 4, 4, 4, 3, 3, 2, 2, 2, - 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 3, 2, 2, 2, 1, 2, 0, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 1, 2, 0, 1, 2, 2, - 2, 3, 3, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, - 1, 2, 0, 1, 1, 2, 2 -}; - - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 - -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab - - -#define YYRECOVERING() (!!yyerrstatus) - -#define YYBACKUP(Token, Value) \ - do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ - while (0) - -/* Error token number */ -#define YYTERROR 1 -#define YYERRCODE 256 - - - -/* Enable debugging if requested. */ -#if YYDEBUG - -# ifndef YYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (0) - -/* This macro is provided for backward compatibility. */ -#ifndef YY_LOCATION_PRINT -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -#endif - - -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yy_symbol_print (stderr, \ - Type, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (0) - - -/*-----------------------------------. -| Print this symbol's value on YYO. | -`-----------------------------------*/ - -static void -yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) -{ - FILE *yyoutput = yyo; - YYUSE (yyoutput); - if (!yyvaluep) - return; -# ifdef YYPRINT - if (yytype < YYNTOKENS) - YYPRINT (yyo, yytoknum[yytype], *yyvaluep); -# endif - YYUSE (yytype); -} - - -/*---------------------------. -| Print this symbol on YYO. | -`---------------------------*/ - -static void -yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) -{ - YYFPRINTF (yyo, "%s %s (", - yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); - - yy_symbol_value_print (yyo, yytype, yyvaluep); - YYFPRINTF (yyo, ")"); -} - -/*------------------------------------------------------------------. -| yy_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ - -static void -yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) -{ - YYFPRINTF (stderr, "Stack now"); - for (; yybottom <= yytop; yybottom++) - { - int yybot = *yybottom; - YYFPRINTF (stderr, " %d", yybot); - } - YYFPRINTF (stderr, "\n"); -} - -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (0) - - -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ - -static void -yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) -{ - unsigned long yylno = yyrline[yyrule]; - int yynrhs = yyr2[yyrule]; - int yyi; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", - yyrule - 1, yylno); - /* The symbols being reduced. */ - for (yyi = 0; yyi < yynrhs; yyi++) - { - YYFPRINTF (stderr, " $%d = ", yyi + 1); - yy_symbol_print (stderr, - yystos[yyssp[yyi + 1 - yynrhs]], - &yyvsp[(yyi + 1) - (yynrhs)] - ); - YYFPRINTF (stderr, "\n"); - } -} - -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (yyssp, yyvsp, Rule); \ -} while (0) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ - - -/* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH -# define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ - -#ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 -#endif - - -#if YYERROR_VERBOSE - -# ifndef yystrlen -# if defined __GLIBC__ && defined _STRING_H -# define yystrlen strlen -# else -/* Return the length of YYSTR. */ -static YYSIZE_T -yystrlen (const char *yystr) -{ - YYSIZE_T yylen; - for (yylen = 0; yystr[yylen]; yylen++) - continue; - return yylen; -} -# endif -# endif - -# ifndef yystpcpy -# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -static char * -yystpcpy (char *yydest, const char *yysrc) -{ - char *yyd = yydest; - const char *yys = yysrc; - - while ((*yyd++ = *yys++) != '\0') - continue; - - return yyd - 1; -} -# endif -# endif - -# ifndef yytnamerr -/* Copy to YYRES the contents of YYSTR after stripping away unnecessary - quotes and backslashes, so that it's suitable for yyerror. The - heuristic is that double-quoting is unnecessary unless the string - contains an apostrophe, a comma, or backslash (other than - backslash-backslash). YYSTR is taken from yytname. If YYRES is - null, do not copy; instead, return the length of what the result - would have been. */ -static YYSIZE_T -yytnamerr (char *yyres, const char *yystr) -{ - if (*yystr == '"') - { - YYSIZE_T yyn = 0; - char const *yyp = yystr; - - for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - else - goto append; - - append: - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } - do_not_strip_quotes: ; - } - - if (! yyres) - return yystrlen (yystr); - - return (YYSIZE_T) (yystpcpy (yyres, yystr) - yyres); -} -# endif - -/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message - about the unexpected token YYTOKEN for the state stack whose top is - YYSSP. - - Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is - not large enough to hold the message. In that case, also set - *YYMSG_ALLOC to the required number of bytes. Return 2 if the - required number of bytes is too large to store. */ -static int -yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) -{ - YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); - YYSIZE_T yysize = yysize0; - enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; - /* Internationalized format string. */ - const char *yyformat = YY_NULLPTR; - /* Arguments of yyformat. */ - char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ - int yycount = 0; - - /* There are many possibilities here to consider: - - If this state is a consistent state with a default action, then - the only way this function was invoked is if the default action - is an error action. In that case, don't check for expected - tokens because there are none. - - The only way there can be no lookahead present (in yychar) is if - this state is a consistent state with a default action. Thus, - detecting the absence of a lookahead is sufficient to determine - that there is no unexpected or expected token to report. In that - case, just report a simple "syntax error". - - Don't assume there isn't a lookahead just because this state is a - consistent state with a default action. There might have been a - previous inconsistent state, consistent state with a non-default - action, or user semantic action that manipulated yychar. - - Of course, the expected token list depends on states to have - correct lookahead information, and it depends on the parser not - to perform extra reductions after fetching a lookahead from the - scanner and before detecting a syntax error. Thus, state merging - (from LALR or IELR) and default reductions corrupt the expected - token list. However, the list is correct for canonical LR with - one exception: it will still contain any token that will not be - accepted due to an error action in a later state. - */ - if (yytoken != YYEMPTY) - { - int yyn = yypact[*yyssp]; - yyarg[yycount++] = yytname[yytoken]; - if (!yypact_value_is_default (yyn)) - { - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. In other words, skip the first -YYN actions for - this state because they are default actions. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn + 1; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yyx; - - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR - && !yytable_value_is_error (yytable[yyx + yyn])) - { - if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - yycount = 1; - yysize = yysize0; - break; - } - yyarg[yycount++] = yytname[yyx]; - { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); - if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) - yysize = yysize1; - else - return 2; - } - } - } - } - - switch (yycount) - { -# define YYCASE_(N, S) \ - case N: \ - yyformat = S; \ - break - default: /* Avoid compiler warnings. */ - YYCASE_(0, YY_("syntax error")); - YYCASE_(1, YY_("syntax error, unexpected %s")); - YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); - YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); - YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); - YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); -# undef YYCASE_ - } - - { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) - yysize = yysize1; - else - return 2; - } - - if (*yymsg_alloc < yysize) - { - *yymsg_alloc = 2 * yysize; - if (! (yysize <= *yymsg_alloc - && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) - *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; - return 1; - } - - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - { - char *yyp = *yymsg; - int yyi = 0; - while ((*yyp = *yyformat) != '\0') - if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) - { - yyp += yytnamerr (yyp, yyarg[yyi++]); - yyformat += 2; - } - else - { - yyp++; - yyformat++; - } - } - return 0; -} -#endif /* YYERROR_VERBOSE */ - -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -static void -yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) -{ - YYUSE (yyvaluep); - if (!yymsg) - yymsg = "Deleting"; - YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); - - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - YYUSE (yytype); - YY_IGNORE_MAYBE_UNINITIALIZED_END -} - - - - -/* The lookahead symbol. */ -int yychar; - -/* The semantic value of the lookahead symbol. */ -YYSTYPE yylval; -/* Number of syntax errors so far. */ -int yynerrs; - - -/*----------. -| yyparse. | -`----------*/ - -int -yyparse (void) -{ - int yystate; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - - /* The stacks and their tools: - 'yyss': related to states. - 'yyvs': related to semantic values. - - Refer to the stacks through separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs; - YYSTYPE *yyvsp; - - YYSIZE_T yystacksize; - - int yyn; - int yyresult; - /* Lookahead token as an internal (translated) token number. */ - int yytoken = 0; - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; - -#if YYERROR_VERBOSE - /* Buffer for error messages, and its allocated size. */ - char yymsgbuf[128]; - char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; -#endif - -#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) - - /* The number of symbols on the RHS of the reduced rule. - Keep to zero when no symbol should be popped. */ - int yylen = 0; - - yyssp = yyss = yyssa; - yyvsp = yyvs = yyvsa; - yystacksize = YYINITDEPTH; - - YYDPRINTF ((stderr, "Starting parse\n")); - - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - goto yysetstate; - - -/*------------------------------------------------------------. -| yynewstate -- push a new state, which is found in yystate. | -`------------------------------------------------------------*/ -yynewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. So pushing a state here evens the stacks. */ - yyssp++; - - -/*--------------------------------------------------------------------. -| yynewstate -- set current state (the top of the stack) to yystate. | -`--------------------------------------------------------------------*/ -yysetstate: - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - YY_ASSERT (0 <= yystate && yystate < YYNSTATES); - *yyssp = (yytype_int16) yystate; - - if (yyss + yystacksize - 1 <= yyssp) -#if !defined yyoverflow && !defined YYSTACK_RELOCATE - goto yyexhaustedlab; +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE #else - { - /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1); - -# if defined yyoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - &yystacksize); - yyss = yyss1; - yyvs = yyvs1; - } -# else /* defined YYSTACK_RELOCATE */ - /* Extend the stack our own way. */ - if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; - yystacksize *= 2; - if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; - - { - yytype_int16 *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss_alloc, yyss); - YYSTACK_RELOCATE (yyvs_alloc, yyvs); -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); - } -# endif - - yyssp = yyss + yysize - 1; - yyvsp = yyvs + yysize - 1; - - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long) yystacksize)); - - if (yyss + yystacksize - 1 <= yyssp) - YYABORT; - } -#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ - - if (yystate == YYFINAL) - YYACCEPT; - - goto yybackup; - - -/*-----------. -| yybackup. | -`-----------*/ -yybackup: - /* Do appropriate processing given the current state. Read a - lookahead token if we need one and don't already have one. */ - - /* First try to decide what to do without reference to lookahead token. */ - yyn = yypact[yystate]; - if (yypact_value_is_default (yyn)) - goto yydefault; - - /* Not known => get a lookahead token if don't already have one. */ - - /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ - if (yychar == YYEMPTY) - { - YYDPRINTF ((stderr, "Reading a token: ")); - yychar = yylex (); - } - - if (yychar <= YYEOF) - { - yychar = yytoken = YYEOF; - YYDPRINTF ((stderr, "Now at end of input.\n")); - } - else - { - yytoken = YYTRANSLATE (yychar); - YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); - } - - /* If the proper action on seeing token YYTOKEN is to reduce or to - detect an error, take that action. */ - yyn += yytoken; - if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) - goto yydefault; - yyn = yytable[yyn]; - if (yyn <= 0) - { - if (yytable_value_is_error (yyn)) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; - - /* Shift the lookahead token. */ - YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the shifted token. */ - yychar = YYEMPTY; - - yystate = yyn; - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - goto yynewstate; - - -/*-----------------------------------------------------------. -| yydefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ -yydefault: - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - goto yyreduce; - - -/*-----------------------------. -| yyreduce -- do a reduction. | -`-----------------------------*/ -yyreduce: - /* yyn is the number of a rule to reduce with. */ - yylen = yyr2[yyn]; - - /* If YYLEN is nonzero, implement the default value of the action: - '$$ = $1'. - - Otherwise, the following line sets YYVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - yyval = yyvsp[1-yylen]; - - - YY_REDUCE_PRINT (yyn); - switch (yyn) - { - case 16: -#line 189 "./util/configparser.y" - { - OUTYY(("\nP(server:)\n")); - } -#line 2706 "util/configparser.c" - break; - - case 212: -#line 282 "./util/configparser.y" - { - struct config_stub* s; - OUTYY(("\nP(stub_zone:)\n")); - s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); - if(s) { - s->next = cfg_parser->cfg->stubs; - cfg_parser->cfg->stubs = s; - } else - yyerror("out of memory"); - } -#line 2721 "util/configparser.c" - break; - - case 222: -#line 299 "./util/configparser.y" - { - struct config_stub* s; - OUTYY(("\nP(forward_zone:)\n")); - s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); - if(s) { - s->next = cfg_parser->cfg->forwards; - cfg_parser->cfg->forwards = s; - } else - yyerror("out of memory"); - } -#line 2736 "util/configparser.c" - break; - - case 231: -#line 316 "./util/configparser.y" - { - struct config_view* s; - OUTYY(("\nP(view:)\n")); - s = (struct config_view*)calloc(1, sizeof(struct config_view)); - if(s) { - s->next = cfg_parser->cfg->views; - if(s->next && !s->next->name) - yyerror("view without name"); - cfg_parser->cfg->views = s; - } else - yyerror("out of memory"); - } -#line 2753 "util/configparser.c" - break; - - case 241: -#line 335 "./util/configparser.y" - { - struct config_auth* s; - OUTYY(("\nP(auth_zone:)\n")); - s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); - if(s) { - s->next = cfg_parser->cfg->auths; - cfg_parser->cfg->auths = s; - /* defaults for auth zone */ - s->for_downstream = 1; - s->for_upstream = 1; - s->fallback_enabled = 0; - s->isrpz = 0; - } else - yyerror("out of memory"); - } -#line 2773 "util/configparser.c" - break; - - case 252: -#line 359 "./util/configparser.y" - { - uint8_t* bitlist; - size_t len = 0; - OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[0].str))); - bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), - &len); - free((yyvsp[0].str)); - if(!bitlist) { - yyerror("could not parse tags, (define-tag them first)"); - } - if(bitlist) { - cfg_parser->cfg->auths->rpz_taglist = bitlist; - cfg_parser->cfg->auths->rpz_taglistlen = len; - - } - } -#line 2794 "util/configparser.c" - break; - - case 253: -#line 378 "./util/configparser.y" - { - OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 && - strcmp((yyvsp[0].str), "passthru")!=0 && strcmp((yyvsp[0].str), "drop")!=0 && - strcmp((yyvsp[0].str), "cname")!=0 && strcmp((yyvsp[0].str), "disabled")!=0) { - yyerror("rpz-action-override action: expected nxdomain, " - "nodata, passthru, drop, cname or disabled"); - free((yyvsp[0].str)); - cfg_parser->cfg->auths->rpz_action_override = NULL; - } - else { - cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); - } - } -#line 2813 "util/configparser.c" - break; - - case 254: -#line 395 "./util/configparser.y" - { - OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->auths->rpz_cname); - cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str); - } -#line 2823 "util/configparser.c" - break; - - case 255: -#line 403 "./util/configparser.y" - { - OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 2835 "util/configparser.c" - break; - - case 256: -#line 413 "./util/configparser.y" - { - OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->auths->rpz_log_name); - cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str); - } -#line 2845 "util/configparser.c" - break; - - case 257: -#line 421 "./util/configparser.y" - { - struct config_auth* s; - OUTYY(("\nP(rpz:)\n")); - s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); - if(s) { - s->next = cfg_parser->cfg->auths; - cfg_parser->cfg->auths = s; - /* defaults for RPZ auth zone */ - s->for_downstream = 0; - s->for_upstream = 0; - s->fallback_enabled = 0; - s->isrpz = 1; - } else - yyerror("out of memory"); - } -#line 2865 "util/configparser.c" - break; - - case 270: -#line 444 "./util/configparser.y" - { - OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 2877 "util/configparser.c" - break; - - case 271: -#line 453 "./util/configparser.y" - { - OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 2889 "util/configparser.c" - break; - - case 272: -#line 462 "./util/configparser.y" - { - OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) - cfg_parser->cfg->stat_interval = 0; - else if(atoi((yyvsp[0].str)) == 0) - yyerror("number expected"); - else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 2903 "util/configparser.c" - break; - - case 273: -#line 473 "./util/configparser.y" - { - OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 2915 "util/configparser.c" - break; - - case 274: -#line 482 "./util/configparser.y" - { - OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 2927 "util/configparser.c" - break; - - case 275: -#line 491 "./util/configparser.y" - { - OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 2939 "util/configparser.c" - break; - - case 276: -#line 500 "./util/configparser.y" - { - OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) - cfg_parser->cfg->shm_key = 0; - else if(atoi((yyvsp[0].str)) == 0) - yyerror("number expected"); - else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 2953 "util/configparser.c" - break; - - case 277: -#line 511 "./util/configparser.y" - { - OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0) - yyerror("port number expected"); - else cfg_parser->cfg->port = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 2965 "util/configparser.c" - break; - - case 278: -#line 520 "./util/configparser.y" - { - #ifdef CLIENT_SUBNET - OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet, (yyvsp[0].str))) - fatal_exit("out of memory adding client-subnet"); - #else - OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); - free((yyvsp[0].str)); - #endif - } -#line 2980 "util/configparser.c" - break; - - case 279: -#line 532 "./util/configparser.y" - { - #ifdef CLIENT_SUBNET - OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet_zone, - (yyvsp[0].str))) - fatal_exit("out of memory adding client-subnet-zone"); - #else - OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); - free((yyvsp[0].str)); - #endif - } -#line 2996 "util/configparser.c" - break; - - case 280: -#line 546 "./util/configparser.y" - { - #ifdef CLIENT_SUBNET - OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else - cfg_parser->cfg->client_subnet_always_forward = - (strcmp((yyvsp[0].str), "yes")==0); - #else - OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); - #endif - free((yyvsp[0].str)); - } -#line 3014 "util/configparser.c" - break; - - case 281: -#line 561 "./util/configparser.y" - { - #ifdef CLIENT_SUBNET - OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); - OUTYY(("P(Deprecated option, ignoring)\n")); - #else - OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); - #endif - free((yyvsp[0].str)); - } -#line 3028 "util/configparser.c" - break; - - case 282: -#line 572 "./util/configparser.y" - { - #ifdef CLIENT_SUBNET - OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("IPv4 subnet length expected"); - else if (atoi((yyvsp[0].str)) > 32) - cfg_parser->cfg->max_client_subnet_ipv4 = 32; - else if (atoi((yyvsp[0].str)) < 0) - cfg_parser->cfg->max_client_subnet_ipv4 = 0; - else cfg_parser->cfg->max_client_subnet_ipv4 = (uint8_t)atoi((yyvsp[0].str)); - #else - OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); - #endif - free((yyvsp[0].str)); - } -#line 3048 "util/configparser.c" - break; - - case 283: -#line 589 "./util/configparser.y" - { - #ifdef CLIENT_SUBNET - OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("Ipv6 subnet length expected"); - else if (atoi((yyvsp[0].str)) > 128) - cfg_parser->cfg->max_client_subnet_ipv6 = 128; - else if (atoi((yyvsp[0].str)) < 0) - cfg_parser->cfg->max_client_subnet_ipv6 = 0; - else cfg_parser->cfg->max_client_subnet_ipv6 = (uint8_t)atoi((yyvsp[0].str)); - #else - OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); - #endif - free((yyvsp[0].str)); - } -#line 3068 "util/configparser.c" - break; - - case 284: -#line 606 "./util/configparser.y" - { - #ifdef CLIENT_SUBNET - OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("IPv4 subnet length expected"); - else if (atoi((yyvsp[0].str)) > 32) - cfg_parser->cfg->min_client_subnet_ipv4 = 32; - else if (atoi((yyvsp[0].str)) < 0) - cfg_parser->cfg->min_client_subnet_ipv4 = 0; - else cfg_parser->cfg->min_client_subnet_ipv4 = (uint8_t)atoi((yyvsp[0].str)); - #else - OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); - #endif - free((yyvsp[0].str)); - } -#line 3088 "util/configparser.c" - break; - - case 285: -#line 623 "./util/configparser.y" - { - #ifdef CLIENT_SUBNET - OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("Ipv6 subnet length expected"); - else if (atoi((yyvsp[0].str)) > 128) - cfg_parser->cfg->min_client_subnet_ipv6 = 128; - else if (atoi((yyvsp[0].str)) < 0) - cfg_parser->cfg->min_client_subnet_ipv6 = 0; - else cfg_parser->cfg->min_client_subnet_ipv6 = (uint8_t)atoi((yyvsp[0].str)); - #else - OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); - #endif - free((yyvsp[0].str)); - } -#line 3108 "util/configparser.c" - break; - - case 286: -#line 640 "./util/configparser.y" - { - #ifdef CLIENT_SUBNET - OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("IPv4 ECS tree size expected"); - else if (atoi((yyvsp[0].str)) < 0) - cfg_parser->cfg->max_ecs_tree_size_ipv4 = 0; - else cfg_parser->cfg->max_ecs_tree_size_ipv4 = (uint32_t)atoi((yyvsp[0].str)); - #else - OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); - #endif - free((yyvsp[0].str)); - } -#line 3126 "util/configparser.c" - break; - - case 287: -#line 655 "./util/configparser.y" - { - #ifdef CLIENT_SUBNET - OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("IPv6 ECS tree size expected"); - else if (atoi((yyvsp[0].str)) < 0) - cfg_parser->cfg->max_ecs_tree_size_ipv6 = 0; - else cfg_parser->cfg->max_ecs_tree_size_ipv6 = (uint32_t)atoi((yyvsp[0].str)); - #else - OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); - #endif - free((yyvsp[0].str)); - } -#line 3144 "util/configparser.c" - break; - - case 288: -#line 670 "./util/configparser.y" - { - OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); - if(cfg_parser->cfg->num_ifs == 0) - cfg_parser->cfg->ifs = calloc(1, sizeof(char*)); - else cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs, - (cfg_parser->cfg->num_ifs+1)*sizeof(char*)); - if(!cfg_parser->cfg->ifs) - yyerror("out of memory"); - else - cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); - } -#line 3160 "util/configparser.c" - break; - - case 289: -#line 683 "./util/configparser.y" - { - OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); - if(cfg_parser->cfg->num_out_ifs == 0) - cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*)); - else cfg_parser->cfg->out_ifs = realloc( - cfg_parser->cfg->out_ifs, - (cfg_parser->cfg->num_out_ifs+1)*sizeof(char*)); - if(!cfg_parser->cfg->out_ifs) - yyerror("out of memory"); - else - cfg_parser->cfg->out_ifs[ - cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); - } -#line 3178 "util/configparser.c" - break; - - case 290: -#line 698 "./util/configparser.y" - { - OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0) - yyerror("number expected"); - else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 3190 "util/configparser.c" - break; - - case 291: -#line 707 "./util/configparser.y" - { - OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); - if(!cfg_mark_ports((yyvsp[0].str), 1, - cfg_parser->cfg->outgoing_avail_ports, 65536)) - yyerror("port number or range (\"low-high\") expected"); - free((yyvsp[0].str)); - } -#line 3202 "util/configparser.c" - break; - - case 292: -#line 716 "./util/configparser.y" - { - OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); - if(!cfg_mark_ports((yyvsp[0].str), 0, - cfg_parser->cfg->outgoing_avail_ports, 65536)) - yyerror("port number or range (\"low-high\") expected"); - free((yyvsp[0].str)); - } -#line 3214 "util/configparser.c" - break; - - case 293: -#line 725 "./util/configparser.y" - { - OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 3226 "util/configparser.c" - break; - - case 294: -#line 734 "./util/configparser.y" - { - OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 3238 "util/configparser.c" - break; - - case 295: -#line 743 "./util/configparser.y" - { - OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3250 "util/configparser.c" - break; - - case 296: -#line 752 "./util/configparser.y" - { - OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3262 "util/configparser.c" - break; - - case 297: -#line 761 "./util/configparser.y" - { - OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3274 "util/configparser.c" - break; - - case 298: -#line 770 "./util/configparser.y" - { - OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3286 "util/configparser.c" - break; - - case 299: -#line 779 "./util/configparser.y" - { - OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3298 "util/configparser.c" - break; - - case 300: -#line 788 "./util/configparser.y" - { - OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3310 "util/configparser.c" - break; - - case 301: -#line 797 "./util/configparser.y" - { - OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3322 "util/configparser.c" - break; - - case 302: -#line 806 "./util/configparser.y" - { - OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 3334 "util/configparser.c" - break; - - case 303: -#line 815 "./util/configparser.y" - { - OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 3346 "util/configparser.c" - break; - - case 304: -#line 824 "./util/configparser.y" - { - OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else if (atoi((yyvsp[0].str)) > 120000) - cfg_parser->cfg->tcp_idle_timeout = 120000; - else if (atoi((yyvsp[0].str)) < 1) - cfg_parser->cfg->tcp_idle_timeout = 1; - else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 3362 "util/configparser.c" - break; - - case 305: -#line 837 "./util/configparser.y" - { - OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3374 "util/configparser.c" - break; - - case 306: -#line 846 "./util/configparser.y" - { - OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else if (atoi((yyvsp[0].str)) > 6553500) - cfg_parser->cfg->tcp_keepalive_timeout = 6553500; - else if (atoi((yyvsp[0].str)) < 1) - cfg_parser->cfg->tcp_keepalive_timeout = 0; - else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 3390 "util/configparser.c" - break; - - case 307: -#line 859 "./util/configparser.y" - { - OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3402 "util/configparser.c" - break; - - case 308: -#line 868 "./util/configparser.y" - { - OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3414 "util/configparser.c" - break; - - case 309: -#line 877 "./util/configparser.y" - { - OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3426 "util/configparser.c" - break; - - case 310: -#line 886 "./util/configparser.y" - { - OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->ssl_service_key); - cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); - } -#line 3436 "util/configparser.c" - break; - - case 311: -#line 893 "./util/configparser.y" - { - OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->ssl_service_pem); - cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); - } -#line 3446 "util/configparser.c" - break; - - case 312: -#line 900 "./util/configparser.y" - { - OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0) - yyerror("port number expected"); - else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 3458 "util/configparser.c" - break; - - case 313: -#line 909 "./util/configparser.y" - { - OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->tls_cert_bundle); - cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str); - } -#line 3468 "util/configparser.c" - break; - - case 314: -#line 916 "./util/configparser.y" - { - OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3480 "util/configparser.c" - break; - - case 315: -#line 925 "./util/configparser.y" - { - OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, - (yyvsp[0].str))) - yyerror("out of memory"); - } -#line 3491 "util/configparser.c" - break; - - case 316: -#line 933 "./util/configparser.y" - { - OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->tls_ciphers); - cfg_parser->cfg->tls_ciphers = (yyvsp[0].str); - } -#line 3501 "util/configparser.c" - break; - - case 317: -#line 940 "./util/configparser.y" - { - OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->tls_ciphersuites); - cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str); - } -#line 3511 "util/configparser.c" - break; - - case 318: -#line 947 "./util/configparser.y" - { - OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, - (yyvsp[0].str))) - yyerror("out of memory"); - } -#line 3522 "util/configparser.c" - break; - - case 319: -#line 955 "./util/configparser.y" - { - OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3534 "util/configparser.c" - break; - - case 320: -#line 964 "./util/configparser.y" - { - OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3546 "util/configparser.c" - break; - - case 321: -#line 973 "./util/configparser.y" - { - OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->use_syslog = (strcmp((yyvsp[0].str), "yes")==0); -#if !defined(HAVE_SYSLOG_H) && !defined(UB_ON_WINDOWS) - if(strcmp((yyvsp[0].str), "yes") == 0) - yyerror("no syslog services are available. " - "(reconfigure and compile to add)"); -#endif - free((yyvsp[0].str)); - } -#line 3563 "util/configparser.c" - break; - - case 322: -#line 987 "./util/configparser.y" - { - OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3575 "util/configparser.c" - break; - - case 323: -#line 996 "./util/configparser.y" - { - OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3587 "util/configparser.c" - break; - - case 324: -#line 1005 "./util/configparser.y" - { - OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3599 "util/configparser.c" - break; - - case 325: -#line 1014 "./util/configparser.y" - { - OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3611 "util/configparser.c" - break; - - case 326: -#line 1023 "./util/configparser.y" - { - OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3623 "util/configparser.c" - break; - - case 327: -#line 1032 "./util/configparser.y" - { - OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3635 "util/configparser.c" - break; - - case 328: -#line 1041 "./util/configparser.y" - { - OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->chrootdir); - cfg_parser->cfg->chrootdir = (yyvsp[0].str); - } -#line 3645 "util/configparser.c" - break; - - case 329: -#line 1048 "./util/configparser.y" - { - OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->username); - cfg_parser->cfg->username = (yyvsp[0].str); - } -#line 3655 "util/configparser.c" - break; - - case 330: -#line 1055 "./util/configparser.y" - { - OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->directory); - cfg_parser->cfg->directory = (yyvsp[0].str); - /* change there right away for includes relative to this */ - if((yyvsp[0].str)[0]) { - char* d; -#ifdef UB_ON_WINDOWS - w_config_adjust_directory(cfg_parser->cfg); -#endif - d = cfg_parser->cfg->directory; - /* adjust directory if we have already chroot, - * like, we reread after sighup */ - if(cfg_parser->chroot && cfg_parser->chroot[0] && - strncmp(d, cfg_parser->chroot, strlen( - cfg_parser->chroot)) == 0) - d += strlen(cfg_parser->chroot); - if(d[0]) { - if(chdir(d)) - log_err("cannot chdir to directory: %s (%s)", - d, strerror(errno)); - } - } - } -#line 3684 "util/configparser.c" - break; - - case 331: -#line 1081 "./util/configparser.y" - { - OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->logfile); - cfg_parser->cfg->logfile = (yyvsp[0].str); - cfg_parser->cfg->use_syslog = 0; - } -#line 3695 "util/configparser.c" - break; - - case 332: -#line 1089 "./util/configparser.y" - { - OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->pidfile); - cfg_parser->cfg->pidfile = (yyvsp[0].str); - } -#line 3705 "util/configparser.c" - break; - - case 333: -#line 1096 "./util/configparser.y" - { - OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str))) - yyerror("out of memory"); - } -#line 3715 "util/configparser.c" - break; - - case 334: -#line 1103 "./util/configparser.y" - { - OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->dlv_anchor_file); - cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); - } -#line 3725 "util/configparser.c" - break; - - case 335: -#line 1110 "./util/configparser.y" - { - OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) - yyerror("out of memory"); - } -#line 3735 "util/configparser.c" - break; - - case 336: -#line 1117 "./util/configparser.y" - { - OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg-> - auto_trust_anchor_file_list, (yyvsp[0].str))) - yyerror("out of memory"); - } -#line 3746 "util/configparser.c" - break; - - case 337: -#line 1125 "./util/configparser.y" - { - OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg-> - trust_anchor_file_list, (yyvsp[0].str))) - yyerror("out of memory"); - } -#line 3757 "util/configparser.c" - break; - - case 338: -#line 1133 "./util/configparser.y" - { - OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg-> - trusted_keys_file_list, (yyvsp[0].str))) - yyerror("out of memory"); - } -#line 3768 "util/configparser.c" - break; - - case 339: -#line 1141 "./util/configparser.y" - { - OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str))) - yyerror("out of memory"); - } -#line 3778 "util/configparser.c" - break; - - case 340: -#line 1148 "./util/configparser.y" - { - OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else - cfg_parser->cfg->trust_anchor_signaling = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3792 "util/configparser.c" - break; - - case 341: -#line 1159 "./util/configparser.y" - { - OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else - cfg_parser->cfg->root_key_sentinel = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3806 "util/configparser.c" - break; - - case 342: -#line 1170 "./util/configparser.y" - { - OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) - yyerror("out of memory"); - } -#line 3816 "util/configparser.c" - break; - - case 343: -#line 1177 "./util/configparser.y" - { - OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3828 "util/configparser.c" - break; - - case 344: -#line 1186 "./util/configparser.y" - { - OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3840 "util/configparser.c" - break; - - case 345: -#line 1195 "./util/configparser.y" - { - OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3852 "util/configparser.c" - break; - - case 346: -#line 1204 "./util/configparser.y" - { - OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->identity); - cfg_parser->cfg->identity = (yyvsp[0].str); - } -#line 3862 "util/configparser.c" - break; - - case 347: -#line 1211 "./util/configparser.y" - { - OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->version); - cfg_parser->cfg->version = (yyvsp[0].str); - } -#line 3872 "util/configparser.c" - break; - - case 348: -#line 1218 "./util/configparser.y" - { - OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); - if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf)) - yyerror("buffer size expected"); - free((yyvsp[0].str)); - } -#line 3883 "util/configparser.c" - break; - - case 349: -#line 1226 "./util/configparser.y" - { - OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); - if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf)) - yyerror("buffer size expected"); - free((yyvsp[0].str)); - } -#line 3894 "util/configparser.c" - break; - - case 350: -#line 1234 "./util/configparser.y" - { - OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->so_reuseport = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3907 "util/configparser.c" - break; - - case 351: -#line 1244 "./util/configparser.y" - { - OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->ip_transparent = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3920 "util/configparser.c" - break; - - case 352: -#line 1254 "./util/configparser.y" - { - OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->ip_freebind = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 3933 "util/configparser.c" - break; - - case 353: -#line 1264 "./util/configparser.y" - { - OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else if (atoi((yyvsp[0].str)) > 63) - yyerror("value too large (max 63)"); - else if (atoi((yyvsp[0].str)) < 0) - yyerror("value too small (min 0)"); - else - cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 3950 "util/configparser.c" - break; - - case 354: -#line 1278 "./util/configparser.y" - { - OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str))); - if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size)) - yyerror("memory size expected"); - free((yyvsp[0].str)); - } -#line 3961 "util/configparser.c" - break; - - case 355: -#line 1286 "./util/configparser.y" - { - OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0) - yyerror("number expected"); - else if (atoi((yyvsp[0].str)) < 12) - yyerror("edns buffer size too small"); - else if (atoi((yyvsp[0].str)) > 65535) - cfg_parser->cfg->edns_buffer_size = 65535; - else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 3977 "util/configparser.c" - break; - - case 356: -#line 1299 "./util/configparser.y" - { - OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0) - yyerror("number expected"); - else if (atoi((yyvsp[0].str)) < 4096) - yyerror("message buffer size too small (use 4096)"); - else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 3991 "util/configparser.c" - break; - - case 357: -#line 1310 "./util/configparser.y" - { - OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); - if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size)) - yyerror("memory size expected"); - free((yyvsp[0].str)); - } -#line 4002 "util/configparser.c" - break; - - case 358: -#line 1318 "./util/configparser.y" - { - OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0) - yyerror("number expected"); - else { - cfg_parser->cfg->msg_cache_slabs = atoi((yyvsp[0].str)); - if(!is_pow2(cfg_parser->cfg->msg_cache_slabs)) - yyerror("must be a power of 2"); - } - free((yyvsp[0].str)); - } -#line 4018 "util/configparser.c" - break; - - case 359: -#line 1331 "./util/configparser.y" - { - OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0) - yyerror("number expected"); - else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 4030 "util/configparser.c" - break; - - case 360: -#line 1340 "./util/configparser.y" - { - OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 4042 "util/configparser.c" - break; - - case 361: -#line 1349 "./util/configparser.y" - { - OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 4054 "util/configparser.c" - break; - - case 362: -#line 1358 "./util/configparser.y" - { - OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->unblock_lan_zones = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4067 "util/configparser.c" - break; - - case 363: -#line 1368 "./util/configparser.y" - { - OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->insecure_lan_zones = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4080 "util/configparser.c" - break; - - case 364: -#line 1378 "./util/configparser.y" - { - OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); - if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size)) - yyerror("memory size expected"); - free((yyvsp[0].str)); - } -#line 4091 "util/configparser.c" - break; - - case 365: -#line 1386 "./util/configparser.y" - { - OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0) - yyerror("number expected"); - else { - cfg_parser->cfg->rrset_cache_slabs = atoi((yyvsp[0].str)); - if(!is_pow2(cfg_parser->cfg->rrset_cache_slabs)) - yyerror("must be a power of 2"); - } - free((yyvsp[0].str)); - } -#line 4107 "util/configparser.c" - break; - - case 366: -#line 1399 "./util/configparser.y" - { - OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 4119 "util/configparser.c" - break; - - case 367: -#line 1408 "./util/configparser.y" - { - OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); - verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " - "removed, use infra-host-ttl)", (yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 4130 "util/configparser.c" - break; - - case 368: -#line 1416 "./util/configparser.y" - { - OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0) - yyerror("number expected"); - else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 4142 "util/configparser.c" - break; - - case 369: -#line 1425 "./util/configparser.y" - { - OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); - verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " - "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 4153 "util/configparser.c" - break; - - case 370: -#line 1433 "./util/configparser.y" - { - OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0) - yyerror("number expected"); - else { - cfg_parser->cfg->infra_cache_slabs = atoi((yyvsp[0].str)); - if(!is_pow2(cfg_parser->cfg->infra_cache_slabs)) - yyerror("must be a power of 2"); - } - free((yyvsp[0].str)); - } -#line 4169 "util/configparser.c" - break; - - case 371: -#line 1446 "./util/configparser.y" - { - OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 4181 "util/configparser.c" - break; - - case 372: -#line 1455 "./util/configparser.y" - { - OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->target_fetch_policy); - cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); - } -#line 4191 "util/configparser.c" - break; - - case 373: -#line 1462 "./util/configparser.y" - { - OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->harden_short_bufsize = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4204 "util/configparser.c" - break; - - case 374: -#line 1472 "./util/configparser.y" - { - OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->harden_large_queries = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4217 "util/configparser.c" - break; - - case 375: -#line 1482 "./util/configparser.y" - { - OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->harden_glue = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4230 "util/configparser.c" - break; - - case 376: -#line 1492 "./util/configparser.y" - { - OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->harden_dnssec_stripped = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4243 "util/configparser.c" - break; - - case 377: -#line 1502 "./util/configparser.y" - { - OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->harden_below_nxdomain = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4256 "util/configparser.c" - break; - - case 378: -#line 1512 "./util/configparser.y" - { - OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->harden_referral_path = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4269 "util/configparser.c" - break; - - case 379: -#line 1522 "./util/configparser.y" - { - OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->harden_algo_downgrade = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4282 "util/configparser.c" - break; - - case 380: -#line 1532 "./util/configparser.y" - { - OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->use_caps_bits_for_id = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4295 "util/configparser.c" - break; - - case 381: -#line 1542 "./util/configparser.y" - { - OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) - yyerror("out of memory"); - } -#line 4305 "util/configparser.c" - break; - - case 382: -#line 1549 "./util/configparser.y" - { - OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str))) - yyerror("out of memory"); - } -#line 4315 "util/configparser.c" - break; - - case 383: -#line 1556 "./util/configparser.y" - { - OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str))) - yyerror("out of memory"); - } -#line 4325 "util/configparser.c" - break; - - case 384: -#line 1563 "./util/configparser.y" - { - OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4337 "util/configparser.c" - break; - - case 385: -#line 1572 "./util/configparser.y" - { - OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4349 "util/configparser.c" - break; - - case 386: -#line 1581 "./util/configparser.y" - { - OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4361 "util/configparser.c" - break; - - case 387: -#line 1590 "./util/configparser.y" - { - OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 4373 "util/configparser.c" - break; - - case 388: -#line 1599 "./util/configparser.y" - { - OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str))) - yyerror("out of memory"); - } -#line 4383 "util/configparser.c" - break; - - case 389: -#line 1606 "./util/configparser.y" - { - OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->donotquery_localhost = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4396 "util/configparser.c" - break; - - case 390: -#line 1616 "./util/configparser.y" - { - OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && - strcmp((yyvsp[0].str), "deny_non_local")!=0 && - strcmp((yyvsp[0].str), "refuse_non_local")!=0 && - strcmp((yyvsp[0].str), "allow_setrd")!=0 && - strcmp((yyvsp[0].str), "allow")!=0 && - strcmp((yyvsp[0].str), "allow_snoop")!=0) { - yyerror("expected deny, refuse, deny_non_local, " - "refuse_non_local, allow, allow_setrd or " - "allow_snoop in access control action"); - free((yyvsp[-1].str)); - free((yyvsp[0].str)); - } else { - if(!cfg_str2list_insert(&cfg_parser->cfg->acls, (yyvsp[-1].str), (yyvsp[0].str))) - fatal_exit("out of memory adding acl"); - } - } -#line 4419 "util/configparser.c" - break; - - case 391: -#line 1636 "./util/configparser.y" - { - OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->module_conf); - cfg_parser->cfg->module_conf = (yyvsp[0].str); - } -#line 4429 "util/configparser.c" - break; - - case 392: -#line 1643 "./util/configparser.y" - { - OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); - if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { - cfg_parser->cfg->val_date_override = 0; - } else if(strlen((yyvsp[0].str)) == 14) { - cfg_parser->cfg->val_date_override = - cfg_convert_timeval((yyvsp[0].str)); - if(!cfg_parser->cfg->val_date_override) - yyerror("bad date/time specification"); - } else { - if(atoi((yyvsp[0].str)) == 0) - yyerror("number expected"); - cfg_parser->cfg->val_date_override = atoi((yyvsp[0].str)); - } - free((yyvsp[0].str)); - } -#line 4450 "util/configparser.c" - break; - - case 393: -#line 1661 "./util/configparser.y" - { - OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); - if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { - cfg_parser->cfg->val_sig_skew_min = 0; - } else { - cfg_parser->cfg->val_sig_skew_min = atoi((yyvsp[0].str)); - if(!cfg_parser->cfg->val_sig_skew_min) - yyerror("number expected"); - } - free((yyvsp[0].str)); - } -#line 4466 "util/configparser.c" - break; - - case 394: -#line 1674 "./util/configparser.y" - { - OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); - if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { - cfg_parser->cfg->val_sig_skew_max = 0; - } else { - cfg_parser->cfg->val_sig_skew_max = atoi((yyvsp[0].str)); - if(!cfg_parser->cfg->val_sig_skew_max) - yyerror("number expected"); - } - free((yyvsp[0].str)); - } -#line 4482 "util/configparser.c" - break; - - case 395: -#line 1687 "./util/configparser.y" - { - OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 4494 "util/configparser.c" - break; - - case 396: -#line 1696 "./util/configparser.y" - { - OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 4506 "util/configparser.c" - break; - - case 397: -#line 1705 "./util/configparser.y" - { - OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 4518 "util/configparser.c" - break; - - case 398: -#line 1714 "./util/configparser.y" - { - OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 4530 "util/configparser.c" - break; - - case 399: -#line 1723 "./util/configparser.y" - { - OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->val_clean_additional = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4543 "util/configparser.c" - break; - - case 400: -#line 1733 "./util/configparser.y" - { - OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->val_permissive_mode = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4556 "util/configparser.c" - break; - - case 401: -#line 1743 "./util/configparser.y" - { - OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else - cfg_parser->cfg->aggressive_nsec = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4570 "util/configparser.c" - break; - - case 402: -#line 1754 "./util/configparser.y" - { - OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4582 "util/configparser.c" - break; - - case 403: -#line 1763 "./util/configparser.y" - { - OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4594 "util/configparser.c" - break; - - case 404: -#line 1772 "./util/configparser.y" - { - OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 4606 "util/configparser.c" - break; - - case 405: -#line 1781 "./util/configparser.y" - { - OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4618 "util/configparser.c" - break; - - case 406: -#line 1790 "./util/configparser.y" - { - OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 4630 "util/configparser.c" - break; - - case 407: -#line 1799 "./util/configparser.y" - { - OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 4642 "util/configparser.c" - break; - - case 408: -#line 1808 "./util/configparser.y" - { - OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); -#if defined(HAVE_SSL) || defined(HAVE_NETTLE) - else fake_dsa = (strcmp((yyvsp[0].str), "yes")==0); - if(fake_dsa) - log_warn("test option fake_dsa is enabled"); -#endif - free((yyvsp[0].str)); - } -#line 4658 "util/configparser.c" - break; - - case 409: -#line 1821 "./util/configparser.y" - { - OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); -#if defined(HAVE_SSL) || defined(HAVE_NETTLE) - else fake_sha1 = (strcmp((yyvsp[0].str), "yes")==0); - if(fake_sha1) - log_warn("test option fake_sha1 is enabled"); -#endif - free((yyvsp[0].str)); - } -#line 4674 "util/configparser.c" - break; - - case 410: -#line 1834 "./util/configparser.y" - { - OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 4686 "util/configparser.c" - break; - - case 411: -#line 1843 "./util/configparser.y" - { - OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->val_nsec3_key_iterations); - cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); - } -#line 4696 "util/configparser.c" - break; - - case 412: -#line 1850 "./util/configparser.y" - { - OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 4708 "util/configparser.c" - break; - - case 413: -#line 1859 "./util/configparser.y" - { - OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 4720 "util/configparser.c" - break; - - case 414: -#line 1868 "./util/configparser.y" - { - OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 4732 "util/configparser.c" - break; - - case 415: -#line 1877 "./util/configparser.y" - { - OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->permit_small_holddown = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4745 "util/configparser.c" - break; - - case 416: -#line 1886 "./util/configparser.y" - { - OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); - if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size)) - yyerror("memory size expected"); - free((yyvsp[0].str)); - } -#line 4756 "util/configparser.c" - break; - - case 417: -#line 1894 "./util/configparser.y" - { - OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0) - yyerror("number expected"); - else { - cfg_parser->cfg->key_cache_slabs = atoi((yyvsp[0].str)); - if(!is_pow2(cfg_parser->cfg->key_cache_slabs)) - yyerror("must be a power of 2"); - } - free((yyvsp[0].str)); - } -#line 4772 "util/configparser.c" - break; - - case 418: -#line 1907 "./util/configparser.y" - { - OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); - if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size)) - yyerror("memory size expected"); - free((yyvsp[0].str)); - } -#line 4783 "util/configparser.c" - break; - - case 419: -#line 1915 "./util/configparser.y" - { - OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && - strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "redirect")!=0 && - strcmp((yyvsp[0].str), "transparent")!=0 && strcmp((yyvsp[0].str), "nodefault")!=0 - && strcmp((yyvsp[0].str), "typetransparent")!=0 - && strcmp((yyvsp[0].str), "always_transparent")!=0 - && strcmp((yyvsp[0].str), "always_refuse")!=0 - && strcmp((yyvsp[0].str), "always_nxdomain")!=0 - && strcmp((yyvsp[0].str), "noview")!=0 - && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0 - && strcmp((yyvsp[0].str), "inform_redirect") != 0 - && strcmp((yyvsp[0].str), "ipset") != 0) { - yyerror("local-zone type: expected static, deny, " - "refuse, redirect, transparent, " - "typetransparent, inform, inform_deny, " - "inform_redirect, always_transparent, " - "always_refuse, always_nxdomain, noview " - ", nodefault or ipset"); - free((yyvsp[-1].str)); - free((yyvsp[0].str)); - } else if(strcmp((yyvsp[0].str), "nodefault")==0) { - if(!cfg_strlist_insert(&cfg_parser->cfg-> - local_zones_nodefault, (yyvsp[-1].str))) - fatal_exit("out of memory adding local-zone"); - free((yyvsp[0].str)); -#ifdef USE_IPSET - } else if(strcmp((yyvsp[0].str), "ipset")==0) { - if(!cfg_strlist_insert(&cfg_parser->cfg-> - local_zones_ipset, (yyvsp[-1].str))) - fatal_exit("out of memory adding local-zone"); - free((yyvsp[0].str)); -#endif - } else { - if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones, - (yyvsp[-1].str), (yyvsp[0].str))) - fatal_exit("out of memory adding local-zone"); - } - } -#line 4827 "util/configparser.c" - break; - - case 420: -#line 1956 "./util/configparser.y" - { - OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) - fatal_exit("out of memory adding local-data"); - } -#line 4837 "util/configparser.c" - break; - - case 421: -#line 1963 "./util/configparser.y" - { - char* ptr; - OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); - ptr = cfg_ptr_reverse((yyvsp[0].str)); - free((yyvsp[0].str)); - if(ptr) { - if(!cfg_strlist_insert(&cfg_parser->cfg-> - local_data, ptr)) - fatal_exit("out of memory adding local-data"); - } else { - yyerror("local-data-ptr could not be reversed"); - } - } -#line 4855 "util/configparser.c" - break; - - case 422: -#line 1978 "./util/configparser.y" - { - OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->minimal_responses = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4868 "util/configparser.c" - break; - - case 423: -#line 1988 "./util/configparser.y" - { - OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->rrset_roundrobin = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4881 "util/configparser.c" - break; - - case 424: -#line 1998 "./util/configparser.y" - { - OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str))); - cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 4891 "util/configparser.c" - break; - - case 425: -#line 2005 "./util/configparser.y" - { - OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); - cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 4901 "util/configparser.c" - break; - - case 426: -#line 2012 "./util/configparser.y" - { - OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->dns64_prefix); - cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); - } -#line 4911 "util/configparser.c" - break; - - case 427: -#line 2019 "./util/configparser.y" - { - OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 4923 "util/configparser.c" - break; - - case 428: -#line 2028 "./util/configparser.y" - { - OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, - (yyvsp[0].str))) - fatal_exit("out of memory adding dns64-ignore-aaaa"); - } -#line 4934 "util/configparser.c" - break; - - case 429: -#line 2036 "./util/configparser.y" - { - char* p, *s = (yyvsp[0].str); - OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); - while((p=strsep(&s, " \t\n")) != NULL) { - if(*p) { - if(!config_add_tag(cfg_parser->cfg, p)) - yyerror("could not define-tag, " - "out of memory"); - } - } - free((yyvsp[0].str)); - } -#line 4951 "util/configparser.c" - break; - - case 430: -#line 2050 "./util/configparser.y" - { - size_t len = 0; - uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), - &len); - free((yyvsp[0].str)); - OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[-1].str))); - if(!bitlist) { - yyerror("could not parse tags, (define-tag them first)"); - free((yyvsp[-1].str)); - } - if(bitlist) { - if(!cfg_strbytelist_insert( - &cfg_parser->cfg->local_zone_tags, - (yyvsp[-1].str), bitlist, len)) { - yyerror("out of memory"); - free((yyvsp[-1].str)); - } - } - } -#line 4975 "util/configparser.c" - break; - - case 431: -#line 2071 "./util/configparser.y" - { - size_t len = 0; - uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), - &len); - free((yyvsp[0].str)); - OUTYY(("P(server_access_control_tag:%s)\n", (yyvsp[-1].str))); - if(!bitlist) { - yyerror("could not parse tags, (define-tag them first)"); - free((yyvsp[-1].str)); - } - if(bitlist) { - if(!cfg_strbytelist_insert( - &cfg_parser->cfg->acl_tags, - (yyvsp[-1].str), bitlist, len)) { - yyerror("out of memory"); - free((yyvsp[-1].str)); - } - } - } -#line 4999 "util/configparser.c" - break; - - case 432: -#line 2092 "./util/configparser.y" - { - OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); - if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, - (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) { - yyerror("out of memory"); - free((yyvsp[-2].str)); - free((yyvsp[-1].str)); - free((yyvsp[0].str)); - } - } -#line 5014 "util/configparser.c" - break; - - case 433: -#line 2104 "./util/configparser.y" - { - OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); - if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, - (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) { - yyerror("out of memory"); - free((yyvsp[-2].str)); - free((yyvsp[-1].str)); - free((yyvsp[0].str)); - } - } -#line 5029 "util/configparser.c" - break; - - case 434: -#line 2116 "./util/configparser.y" - { - OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); - if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, - (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) { - yyerror("out of memory"); - free((yyvsp[-2].str)); - free((yyvsp[-1].str)); - free((yyvsp[0].str)); - } - } -#line 5044 "util/configparser.c" - break; - - case 435: -#line 2128 "./util/configparser.y" - { - OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); - if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, - (yyvsp[-1].str), (yyvsp[0].str))) { - yyerror("out of memory"); - } - } -#line 5056 "util/configparser.c" - break; - - case 436: -#line 2137 "./util/configparser.y" - { - size_t len = 0; - uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), - &len); - free((yyvsp[0].str)); - OUTYY(("P(response_ip_tag:%s)\n", (yyvsp[-1].str))); - if(!bitlist) { - yyerror("could not parse tags, (define-tag them first)"); - free((yyvsp[-1].str)); - } - if(bitlist) { - if(!cfg_strbytelist_insert( - &cfg_parser->cfg->respip_tags, - (yyvsp[-1].str), bitlist, len)) { - yyerror("out of memory"); - free((yyvsp[-1].str)); - } - } - } -#line 5080 "util/configparser.c" - break; - - case 437: -#line 2158 "./util/configparser.y" - { - OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 5092 "util/configparser.c" - break; - - case 438: -#line 2168 "./util/configparser.y" - { - OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 5104 "util/configparser.c" - break; - - case 439: -#line 2177 "./util/configparser.y" - { - OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str))); - if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size)) - yyerror("memory size expected"); - free((yyvsp[0].str)); - } -#line 5115 "util/configparser.c" - break; - - case 440: -#line 2185 "./util/configparser.y" - { - OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); - if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) - yyerror("memory size expected"); - free((yyvsp[0].str)); - } -#line 5126 "util/configparser.c" - break; - - case 441: -#line 2193 "./util/configparser.y" - { - OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0) - yyerror("number expected"); - else { - cfg_parser->cfg->ip_ratelimit_slabs = atoi((yyvsp[0].str)); - if(!is_pow2(cfg_parser->cfg->ip_ratelimit_slabs)) - yyerror("must be a power of 2"); - } - free((yyvsp[0].str)); - } -#line 5142 "util/configparser.c" - break; - - case 442: -#line 2206 "./util/configparser.y" - { - OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0) - yyerror("number expected"); - else { - cfg_parser->cfg->ratelimit_slabs = atoi((yyvsp[0].str)); - if(!is_pow2(cfg_parser->cfg->ratelimit_slabs)) - yyerror("must be a power of 2"); - } - free((yyvsp[0].str)); - } -#line 5158 "util/configparser.c" - break; - - case 443: -#line 2219 "./util/configparser.y" - { - OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { - yyerror("number expected"); - free((yyvsp[-1].str)); - free((yyvsp[0].str)); - } else { - if(!cfg_str2list_insert(&cfg_parser->cfg-> - ratelimit_for_domain, (yyvsp[-1].str), (yyvsp[0].str))) - fatal_exit("out of memory adding " - "ratelimit-for-domain"); - } - } -#line 5176 "util/configparser.c" - break; - - case 444: -#line 2234 "./util/configparser.y" - { - OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { - yyerror("number expected"); - free((yyvsp[-1].str)); - free((yyvsp[0].str)); - } else { - if(!cfg_str2list_insert(&cfg_parser->cfg-> - ratelimit_below_domain, (yyvsp[-1].str), (yyvsp[0].str))) - fatal_exit("out of memory adding " - "ratelimit-below-domain"); - } - } -#line 5194 "util/configparser.c" - break; - - case 445: -#line 2249 "./util/configparser.y" - { - OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 5206 "util/configparser.c" - break; - - case 446: -#line 2258 "./util/configparser.y" - { - OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 5218 "util/configparser.c" - break; - - case 447: -#line 2267 "./util/configparser.y" - { - OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); - free((yyvsp[0].str)); - } -#line 5227 "util/configparser.c" - break; - - case 448: -#line 2273 "./util/configparser.y" - { - OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) <= 0) - yyerror("number expected"); - else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 5239 "util/configparser.c" - break; - - case 449: -#line 2282 "./util/configparser.y" - { - OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 5251 "util/configparser.c" - break; - - case 450: -#line 2291 "./util/configparser.y" - { - OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->qname_minimisation = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 5264 "util/configparser.c" - break; - - case 451: -#line 2301 "./util/configparser.y" - { - OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->qname_minimisation_strict = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 5277 "util/configparser.c" - break; - - case 452: -#line 2311 "./util/configparser.y" - { - #ifdef USE_IPSECMOD - OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->ipsecmod_enabled = (strcmp((yyvsp[0].str), "yes")==0); - #else - OUTYY(("P(Compiled without IPsec module, ignoring)\n")); - #endif - free((yyvsp[0].str)); - } -#line 5293 "util/configparser.c" - break; - - case 453: -#line 2324 "./util/configparser.y" - { - #ifdef USE_IPSECMOD - OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->ipsecmod_ignore_bogus = (strcmp((yyvsp[0].str), "yes")==0); - #else - OUTYY(("P(Compiled without IPsec module, ignoring)\n")); - #endif - free((yyvsp[0].str)); - } -#line 5309 "util/configparser.c" - break; - - case 454: -#line 2337 "./util/configparser.y" - { - #ifdef USE_IPSECMOD - OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->ipsecmod_hook); - cfg_parser->cfg->ipsecmod_hook = (yyvsp[0].str); - #else - OUTYY(("P(Compiled without IPsec module, ignoring)\n")); - free((yyvsp[0].str)); - #endif - } -#line 5324 "util/configparser.c" - break; - - case 455: -#line 2349 "./util/configparser.y" - { - #ifdef USE_IPSECMOD - OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) - yyerror("number expected"); - else cfg_parser->cfg->ipsecmod_max_ttl = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - #else - OUTYY(("P(Compiled without IPsec module, ignoring)\n")); - free((yyvsp[0].str)); - #endif - } -#line 5341 "util/configparser.c" - break; - - case 456: -#line 2363 "./util/configparser.y" - { - #ifdef USE_IPSECMOD - OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->ipsecmod_whitelist, (yyvsp[0].str))) - yyerror("out of memory"); - #else - OUTYY(("P(Compiled without IPsec module, ignoring)\n")); - free((yyvsp[0].str)); - #endif - } -#line 5356 "util/configparser.c" - break; - - case 457: -#line 2375 "./util/configparser.y" - { - #ifdef USE_IPSECMOD - OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->ipsecmod_strict = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - #else - OUTYY(("P(Compiled without IPsec module, ignoring)\n")); - free((yyvsp[0].str)); - #endif - } -#line 5373 "util/configparser.c" - break; - - case 458: -#line 2389 "./util/configparser.y" - { - OUTYY(("P(name:%s)\n", (yyvsp[0].str))); - if(cfg_parser->cfg->stubs->name) - yyerror("stub name override, there must be one name " - "for one stub-zone"); - free(cfg_parser->cfg->stubs->name); - cfg_parser->cfg->stubs->name = (yyvsp[0].str); - } -#line 5386 "util/configparser.c" - break; - - case 459: -#line 2399 "./util/configparser.y" - { - OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str))) - yyerror("out of memory"); - } -#line 5396 "util/configparser.c" - break; - - case 460: -#line 2406 "./util/configparser.y" - { - OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str))) - yyerror("out of memory"); - } -#line 5406 "util/configparser.c" - break; - - case 461: -#line 2413 "./util/configparser.y" - { - OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 5418 "util/configparser.c" - break; - - case 462: -#line 2422 "./util/configparser.y" - { - OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 5430 "util/configparser.c" - break; - - case 463: -#line 2431 "./util/configparser.y" - { - OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->stubs->ssl_upstream = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 5443 "util/configparser.c" - break; - - case 464: -#line 2441 "./util/configparser.y" - { - OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->stubs->isprime = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 5456 "util/configparser.c" - break; - - case 465: -#line 2451 "./util/configparser.y" - { - OUTYY(("P(name:%s)\n", (yyvsp[0].str))); - if(cfg_parser->cfg->forwards->name) - yyerror("forward name override, there must be one " - "name for one forward-zone"); - free(cfg_parser->cfg->forwards->name); - cfg_parser->cfg->forwards->name = (yyvsp[0].str); - } -#line 5469 "util/configparser.c" - break; - - case 466: -#line 2461 "./util/configparser.y" - { - OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str))) - yyerror("out of memory"); - } -#line 5479 "util/configparser.c" - break; - - case 467: -#line 2468 "./util/configparser.y" - { - OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str))) - yyerror("out of memory"); - } -#line 5489 "util/configparser.c" - break; - - case 468: -#line 2475 "./util/configparser.y" - { - OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 5501 "util/configparser.c" - break; - - case 469: -#line 2484 "./util/configparser.y" - { - OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 5513 "util/configparser.c" - break; - - case 470: -#line 2493 "./util/configparser.y" - { - OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->forwards->ssl_upstream = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 5526 "util/configparser.c" - break; - - case 471: -#line 2503 "./util/configparser.y" - { - OUTYY(("P(name:%s)\n", (yyvsp[0].str))); - if(cfg_parser->cfg->auths->name) - yyerror("auth name override, there must be one name " - "for one auth-zone"); - free(cfg_parser->cfg->auths->name); - cfg_parser->cfg->auths->name = (yyvsp[0].str); - } -#line 5539 "util/configparser.c" - break; - - case 472: -#line 2513 "./util/configparser.y" - { - OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->auths->zonefile); - cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); - } -#line 5549 "util/configparser.c" - break; - - case 473: -#line 2520 "./util/configparser.y" - { - OUTYY(("P(master:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str))) - yyerror("out of memory"); - } -#line 5559 "util/configparser.c" - break; - - case 474: -#line 2527 "./util/configparser.y" - { - OUTYY(("P(url:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str))) - yyerror("out of memory"); - } -#line 5569 "util/configparser.c" - break; - - case 475: -#line 2534 "./util/configparser.y" - { - OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, - (yyvsp[0].str))) - yyerror("out of memory"); - } -#line 5580 "util/configparser.c" - break; - - case 476: -#line 2542 "./util/configparser.y" - { - OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->auths->for_downstream = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 5593 "util/configparser.c" - break; - - case 477: -#line 2552 "./util/configparser.y" - { - OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->auths->for_upstream = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 5606 "util/configparser.c" - break; - - case 478: -#line 2562 "./util/configparser.y" - { - OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->auths->fallback_enabled = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 5619 "util/configparser.c" - break; - - case 479: -#line 2572 "./util/configparser.y" - { - OUTYY(("P(name:%s)\n", (yyvsp[0].str))); - if(cfg_parser->cfg->views->name) - yyerror("view name override, there must be one " - "name for one view"); - free(cfg_parser->cfg->views->name); - cfg_parser->cfg->views->name = (yyvsp[0].str); - } -#line 5632 "util/configparser.c" - break; - - case 480: -#line 2582 "./util/configparser.y" - { - OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && - strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "redirect")!=0 && - strcmp((yyvsp[0].str), "transparent")!=0 && strcmp((yyvsp[0].str), "nodefault")!=0 - && strcmp((yyvsp[0].str), "typetransparent")!=0 - && strcmp((yyvsp[0].str), "always_transparent")!=0 - && strcmp((yyvsp[0].str), "always_refuse")!=0 - && strcmp((yyvsp[0].str), "always_nxdomain")!=0 - && strcmp((yyvsp[0].str), "noview")!=0 - && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0) { - yyerror("local-zone type: expected static, deny, " - "refuse, redirect, transparent, " - "typetransparent, inform, inform_deny, " - "always_transparent, always_refuse, " - "always_nxdomain, noview or nodefault"); - free((yyvsp[-1].str)); - free((yyvsp[0].str)); - } else if(strcmp((yyvsp[0].str), "nodefault")==0) { - if(!cfg_strlist_insert(&cfg_parser->cfg->views-> - local_zones_nodefault, (yyvsp[-1].str))) - fatal_exit("out of memory adding local-zone"); - free((yyvsp[0].str)); -#ifdef USE_IPSET - } else if(strcmp((yyvsp[0].str), "ipset")==0) { - if(!cfg_strlist_insert(&cfg_parser->cfg->views-> - local_zones_ipset, (yyvsp[-1].str))) - fatal_exit("out of memory adding local-zone"); - free((yyvsp[0].str)); -#endif - } else { - if(!cfg_str2list_insert( - &cfg_parser->cfg->views->local_zones, - (yyvsp[-1].str), (yyvsp[0].str))) - fatal_exit("out of memory adding local-zone"); - } - } -#line 5674 "util/configparser.c" - break; - - case 481: -#line 2621 "./util/configparser.y" - { - OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); - validate_respip_action((yyvsp[0].str)); - if(!cfg_str2list_insert( - &cfg_parser->cfg->views->respip_actions, (yyvsp[-1].str), (yyvsp[0].str))) - fatal_exit("out of memory adding per-view " - "response-ip action"); - } -#line 5687 "util/configparser.c" - break; - - case 482: -#line 2631 "./util/configparser.y" - { - OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); - if(!cfg_str2list_insert( - &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) - fatal_exit("out of memory adding response-ip-data"); - } -#line 5698 "util/configparser.c" - break; - - case 483: -#line 2639 "./util/configparser.y" - { - OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { - fatal_exit("out of memory adding local-data"); - } - } -#line 5709 "util/configparser.c" - break; - - case 484: -#line 2647 "./util/configparser.y" - { - char* ptr; - OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); - ptr = cfg_ptr_reverse((yyvsp[0].str)); - free((yyvsp[0].str)); - if(ptr) { - if(!cfg_strlist_insert(&cfg_parser->cfg->views-> - local_data, ptr)) - fatal_exit("out of memory adding local-data"); - } else { - yyerror("local-data-ptr could not be reversed"); - } - } -#line 5727 "util/configparser.c" - break; - - case 485: -#line 2662 "./util/configparser.y" - { - OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 5739 "util/configparser.c" - break; - - case 486: -#line 2671 "./util/configparser.y" - { - OUTYY(("\nP(remote-control:)\n")); - } -#line 5747 "util/configparser.c" - break; - - case 497: -#line 2682 "./util/configparser.y" - { - OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->remote_control_enable = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 5760 "util/configparser.c" - break; - - case 498: -#line 2692 "./util/configparser.y" - { - OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0) - yyerror("control port number expected"); - else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 5772 "util/configparser.c" - break; - - case 499: -#line 2701 "./util/configparser.y" - { - OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str))) - yyerror("out of memory"); - } -#line 5782 "util/configparser.c" - break; - - case 500: -#line 2708 "./util/configparser.y" - { - OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str))); - cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 5792 "util/configparser.c" - break; - - case 501: -#line 2715 "./util/configparser.y" - { - OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->server_key_file); - cfg_parser->cfg->server_key_file = (yyvsp[0].str); - } -#line 5802 "util/configparser.c" - break; - - case 502: -#line 2722 "./util/configparser.y" - { - OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->server_cert_file); - cfg_parser->cfg->server_cert_file = (yyvsp[0].str); - } -#line 5812 "util/configparser.c" - break; - - case 503: -#line 2729 "./util/configparser.y" - { - OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->control_key_file); - cfg_parser->cfg->control_key_file = (yyvsp[0].str); - } -#line 5822 "util/configparser.c" - break; - - case 504: -#line 2736 "./util/configparser.y" - { - OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->control_cert_file); - cfg_parser->cfg->control_cert_file = (yyvsp[0].str); - } -#line 5832 "util/configparser.c" - break; - - case 505: -#line 2743 "./util/configparser.y" - { - OUTYY(("\nP(dnstap:)\n")); - } -#line 5840 "util/configparser.c" - break; - - case 526: -#line 2763 "./util/configparser.y" - { - OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 5852 "util/configparser.c" - break; - - case 527: -#line 2772 "./util/configparser.y" - { - OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->dnstap_socket_path); - cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); - } -#line 5862 "util/configparser.c" - break; - - case 528: -#line 2779 "./util/configparser.y" - { - OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->dnstap_ip); - cfg_parser->cfg->dnstap_ip = (yyvsp[0].str); - } -#line 5872 "util/configparser.c" - break; - - case 529: -#line 2786 "./util/configparser.y" - { - OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 5884 "util/configparser.c" - break; - - case 530: -#line 2795 "./util/configparser.y" - { - OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->dnstap_tls_server_name); - cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str); - } -#line 5894 "util/configparser.c" - break; - - case 531: -#line 2802 "./util/configparser.y" - { - OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->dnstap_tls_cert_bundle); - cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str); - } -#line 5904 "util/configparser.c" - break; - - case 532: -#line 2809 "./util/configparser.y" - { - OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->dnstap_tls_client_key_file); - cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str); - } -#line 5914 "util/configparser.c" - break; - - case 533: -#line 2816 "./util/configparser.y" - { - OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->dnstap_tls_client_cert_file); - cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str); - } -#line 5924 "util/configparser.c" - break; - - case 534: -#line 2823 "./util/configparser.y" - { - OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 5936 "util/configparser.c" - break; - - case 535: -#line 2832 "./util/configparser.y" - { - OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 5948 "util/configparser.c" - break; - - case 536: -#line 2841 "./util/configparser.y" - { - OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->dnstap_identity); - cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); - } -#line 5958 "util/configparser.c" - break; - - case 537: -#line 2848 "./util/configparser.y" - { - OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->dnstap_version); - cfg_parser->cfg->dnstap_version = (yyvsp[0].str); - } -#line 5968 "util/configparser.c" - break; - - case 538: -#line 2855 "./util/configparser.y" - { - OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->dnstap_log_resolver_query_messages = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 5981 "util/configparser.c" - break; - - case 539: -#line 2865 "./util/configparser.y" - { - OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->dnstap_log_resolver_response_messages = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 5994 "util/configparser.c" - break; - - case 540: -#line 2875 "./util/configparser.y" - { - OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->dnstap_log_client_query_messages = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 6007 "util/configparser.c" - break; - - case 541: -#line 2885 "./util/configparser.y" - { - OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->dnstap_log_client_response_messages = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 6020 "util/configparser.c" - break; - - case 542: -#line 2895 "./util/configparser.y" - { - OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->dnstap_log_forwarder_query_messages = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 6033 "util/configparser.c" - break; - - case 543: -#line 2905 "./util/configparser.y" - { - OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->dnstap_log_forwarder_response_messages = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 6046 "util/configparser.c" - break; - - case 544: -#line 2915 "./util/configparser.y" - { - OUTYY(("\nP(python:)\n")); - } -#line 6054 "util/configparser.c" - break; - - case 548: -#line 2924 "./util/configparser.y" - { - OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str))) - yyerror("out of memory"); - } -#line 6064 "util/configparser.c" - break; - - case 549: -#line 2930 "./util/configparser.y" - { - OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); - if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->disable_dnssec_lame_check = - (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 6077 "util/configparser.c" - break; - - case 550: -#line 2940 "./util/configparser.y" - { - OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->log_identity); - cfg_parser->cfg->log_identity = (yyvsp[0].str); - } -#line 6087 "util/configparser.c" - break; - - case 551: -#line 2947 "./util/configparser.y" - { - OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); - validate_respip_action((yyvsp[0].str)); - if(!cfg_str2list_insert(&cfg_parser->cfg->respip_actions, - (yyvsp[-1].str), (yyvsp[0].str))) - fatal_exit("out of memory adding response-ip"); - } -#line 6099 "util/configparser.c" - break; - - case 552: -#line 2956 "./util/configparser.y" - { - OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); - if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, - (yyvsp[-1].str), (yyvsp[0].str))) - fatal_exit("out of memory adding response-ip-data"); - } -#line 6110 "util/configparser.c" - break; - - case 553: -#line 2964 "./util/configparser.y" - { - OUTYY(("\nP(dnscrypt:)\n")); - } -#line 6118 "util/configparser.c" - break; - - case 566: -#line 2980 "./util/configparser.y" - { - OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); - free((yyvsp[0].str)); - } -#line 6130 "util/configparser.c" - break; - - case 567: -#line 2990 "./util/configparser.y" - { - OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0) - yyerror("port number expected"); - else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 6142 "util/configparser.c" - break; - - case 568: -#line 2999 "./util/configparser.y" - { - OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->dnscrypt_provider); - cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); - } -#line 6152 "util/configparser.c" - break; - - case 569: -#line 3006 "./util/configparser.y" - { - OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); - if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) - log_warn("dnscrypt-provider-cert %s is a duplicate", (yyvsp[0].str)); - if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) - fatal_exit("out of memory adding dnscrypt-provider-cert"); - } -#line 6164 "util/configparser.c" - break; - - case 570: -#line 3015 "./util/configparser.y" - { - OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str))) - fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); - } -#line 6174 "util/configparser.c" - break; - - case 571: -#line 3022 "./util/configparser.y" - { - OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); - if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) - log_warn("dnscrypt-secret-key: %s is a duplicate", (yyvsp[0].str)); - if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) - fatal_exit("out of memory adding dnscrypt-secret-key"); - } -#line 6186 "util/configparser.c" - break; - - case 572: -#line 3031 "./util/configparser.y" - { - OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); - if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) - yyerror("memory size expected"); - free((yyvsp[0].str)); - } -#line 6197 "util/configparser.c" - break; - - case 573: -#line 3039 "./util/configparser.y" - { - OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0) - yyerror("number expected"); - else { - cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs = atoi((yyvsp[0].str)); - if(!is_pow2(cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs)) - yyerror("must be a power of 2"); - } - free((yyvsp[0].str)); - } -#line 6213 "util/configparser.c" - break; - - case 574: -#line 3052 "./util/configparser.y" - { - OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str))); - if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) - yyerror("memory size expected"); - free((yyvsp[0].str)); - } -#line 6224 "util/configparser.c" - break; - - case 575: -#line 3060 "./util/configparser.y" - { - OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0) - yyerror("number expected"); - else { - cfg_parser->cfg->dnscrypt_nonce_cache_slabs = atoi((yyvsp[0].str)); - if(!is_pow2(cfg_parser->cfg->dnscrypt_nonce_cache_slabs)) - yyerror("must be a power of 2"); - } - free((yyvsp[0].str)); - } -#line 6240 "util/configparser.c" - break; - - case 576: -#line 3073 "./util/configparser.y" - { - OUTYY(("\nP(cachedb:)\n")); - } -#line 6248 "util/configparser.c" - break; - - case 584: -#line 3083 "./util/configparser.y" - { - #ifdef USE_CACHEDB - OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->cachedb_backend); - cfg_parser->cfg->cachedb_backend = (yyvsp[0].str); - #else - OUTYY(("P(Compiled without cachedb, ignoring)\n")); - free((yyvsp[0].str)); - #endif - } -#line 6263 "util/configparser.c" - break; - - case 585: -#line 3095 "./util/configparser.y" - { - #ifdef USE_CACHEDB - OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->cachedb_secret); - cfg_parser->cfg->cachedb_secret = (yyvsp[0].str); - #else - OUTYY(("P(Compiled without cachedb, ignoring)\n")); - free((yyvsp[0].str)); - #endif - } -#line 6278 "util/configparser.c" - break; - - case 586: -#line 3107 "./util/configparser.y" - { - #if defined(USE_CACHEDB) && defined(USE_REDIS) - OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); - free(cfg_parser->cfg->redis_server_host); - cfg_parser->cfg->redis_server_host = (yyvsp[0].str); - #else - OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); - free((yyvsp[0].str)); - #endif - } -#line 6293 "util/configparser.c" - break; - - case 587: -#line 3119 "./util/configparser.y" - { - #if defined(USE_CACHEDB) && defined(USE_REDIS) - int port; - OUTYY(("P(redis_server_port:%s)\n", (yyvsp[0].str))); - port = atoi((yyvsp[0].str)); - if(port == 0 || port < 0 || port > 65535) - yyerror("valid redis server port number expected"); - else cfg_parser->cfg->redis_server_port = port; - #else - OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); - #endif - free((yyvsp[0].str)); - } -#line 6311 "util/configparser.c" - break; - - case 588: -#line 3134 "./util/configparser.y" - { - #if defined(USE_CACHEDB) && defined(USE_REDIS) - OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); - if(atoi((yyvsp[0].str)) == 0) - yyerror("redis timeout value expected"); - else cfg_parser->cfg->redis_timeout = atoi((yyvsp[0].str)); - #else - OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); - #endif - free((yyvsp[0].str)); - } -#line 6327 "util/configparser.c" - break; - - case 589: -#line 3147 "./util/configparser.y" - { - OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); - if (atoi((yyvsp[0].str)) < 0) - yyerror("positive number expected"); - else { - if(!cfg_str2list_insert(&cfg_parser->cfg->tcp_connection_limits, (yyvsp[-1].str), (yyvsp[0].str))) - fatal_exit("out of memory adding tcp connection limit"); - } - } -#line 6341 "util/configparser.c" - break; - - case 590: -#line 3158 "./util/configparser.y" - { - OUTYY(("\nP(ipset:)\n")); - } -#line 6349 "util/configparser.c" - break; - - case 595: -#line 3167 "./util/configparser.y" - { - #ifdef USE_IPSET - OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); - if(cfg_parser->cfg->ipset_name_v4) - yyerror("ipset name v4 override, there must be one " - "name for ip v4"); - free(cfg_parser->cfg->ipset_name_v4); - cfg_parser->cfg->ipset_name_v4 = (yyvsp[0].str); - #else - OUTYY(("P(Compiled without ipset, ignoring)\n")); - free((yyvsp[0].str)); - #endif - } -#line 6367 "util/configparser.c" - break; - - case 596: -#line 3182 "./util/configparser.y" - { - #ifdef USE_IPSET - OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); - if(cfg_parser->cfg->ipset_name_v6) - yyerror("ipset name v6 override, there must be one " - "name for ip v6"); - free(cfg_parser->cfg->ipset_name_v6); - cfg_parser->cfg->ipset_name_v6 = (yyvsp[0].str); - #else - OUTYY(("P(Compiled without ipset, ignoring)\n")); - free((yyvsp[0].str)); - #endif - } -#line 6385 "util/configparser.c" - break; - - -#line 6389 "util/configparser.c" - - default: break; - } - /* User semantic actions sometimes alter yychar, and that requires - that yytoken be updated with the new translation. We take the - approach of translating immediately before every use of yytoken. - One alternative is translating here after every semantic action, - but that translation would be missed if the semantic action invokes - YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or - if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an - incorrect destructor might then be invoked immediately. In the - case of YYERROR or YYBACKUP, subsequent parser actions might lead - to an incorrect destructor call or verbose syntax error message - before the lookahead is translated. */ - YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); - - YYPOPSTACK (yylen); - yylen = 0; - YY_STACK_PRINT (yyss, yyssp); - - *++yyvsp = yyval; - - /* Now 'shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ - { - const int yylhs = yyr1[yyn] - YYNTOKENS; - const int yyi = yypgoto[yylhs] + *yyssp; - yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp - ? yytable[yyi] - : yydefgoto[yylhs]); - } - - goto yynewstate; - - -/*--------------------------------------. -| yyerrlab -- here on detecting error. | -`--------------------------------------*/ -yyerrlab: - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); - - /* If not already recovering from an error, report this error. */ - if (!yyerrstatus) - { - ++yynerrs; -#if ! YYERROR_VERBOSE - yyerror (YY_("syntax error")); +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH #else -# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ - yyssp, yytoken) - { - char const *yymsgp = YY_("syntax error"); - int yysyntax_error_status; - yysyntax_error_status = YYSYNTAX_ERROR; - if (yysyntax_error_status == 0) - yymsgp = yymsg; - else if (yysyntax_error_status == 1) - { - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); - if (!yymsg) - { - yymsg = yymsgbuf; - yymsg_alloc = sizeof yymsgbuf; - yysyntax_error_status = 2; - } - else - { - yysyntax_error_status = YYSYNTAX_ERROR; - yymsgp = yymsg; - } - } - yyerror (yymsgp); - if (yysyntax_error_status == 2) - goto yyexhaustedlab; - } -# undef YYSYNTAX_ERROR +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 #endif - } - - - - if (yyerrstatus == 3) - { - /* If just tried and failed to reuse lookahead token after an - error, discard it. */ - - if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; - } - else - { - yydestruct ("Error: discarding", - yytoken, &yylval); - yychar = YYEMPTY; - } - } - - /* Else will try to reuse lookahead token after shifting the error - token. */ - goto yyerrlab1; - - -/*---------------------------------------------------. -| yyerrorlab -- error raised explicitly by YYERROR. | -`---------------------------------------------------*/ -yyerrorlab: - /* Pacify compilers when the user code never invokes YYERROR and the - label yyerrorlab therefore never appears in user code. */ - if (0) - YYERROR; - - /* Do not reclaim the symbols of the rule whose action triggered - this YYERROR. */ - YYPOPSTACK (yylen); - yylen = 0; - YY_STACK_PRINT (yyss, yyssp); - yystate = *yyssp; - goto yyerrlab1; - - -/*-------------------------------------------------------------. -| yyerrlab1 -- common code for both syntax error and YYERROR. | -`-------------------------------------------------------------*/ -yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ - - for (;;) - { - yyn = yypact[yystate]; - if (!yypact_value_is_default (yyn)) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } - - /* Pop the current state because it cannot handle the error token. */ - if (yyssp == yyss) - YYABORT; - - - yydestruct ("Error: popping", - yystos[yystate], yyvsp); - YYPOPSTACK (1); - yystate = *yyssp; - YY_STACK_PRINT (yyss, yyssp); - } - - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - - - /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); - - yystate = yyn; - goto yynewstate; - - -/*-------------------------------------. -| yyacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -yyacceptlab: - yyresult = 0; - goto yyreturn; - - -/*-----------------------------------. -| yyabortlab -- YYABORT comes here. | -`-----------------------------------*/ -yyabortlab: - yyresult = 1; - goto yyreturn; - - -#if !defined yyoverflow || YYERROR_VERBOSE -/*-------------------------------------------------. -| yyexhaustedlab -- memory exhaustion comes here. | -`-------------------------------------------------*/ -yyexhaustedlab: - yyerror (YY_("memory exhausted")); - yyresult = 2; - /* Fall through. */ #endif +#define YYINITSTACKSIZE 200 -/*-----------------------------------------------------. -| yyreturn -- parsing is finished, return the result. | -`-----------------------------------------------------*/ -yyreturn: - if (yychar != YYEMPTY) - { - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = YYTRANSLATE (yychar); - yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval); - } - /* Do not reclaim the symbols of the rule whose action triggered - this YYABORT or YYACCEPT. */ - YYPOPSTACK (yylen); - YY_STACK_PRINT (yyss, yyssp); - while (yyssp != yyss) - { - yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); - YYPOPSTACK (1); - } -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); -#endif -#if YYERROR_VERBOSE - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); -#endif - return yyresult; -} -#line 3196 "./util/configparser.y" - +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 3237 "./util/configparser.y" /* parse helper routines could be here */ static void @@ -6639,3 +1809,3430 @@ validate_respip_action(const char* action) } +#line 1813 "util/configparser.c" + +#if YYDEBUG +#include /* needed for printf */ +#endif + +#include /* needed for malloc, etc */ +#include /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { +case 15: +#line 191 "./util/configparser.y" + { + OUTYY(("\nP(server:)\n")); + } +break; +case 211: +#line 284 "./util/configparser.y" + { + struct config_stub* s; + OUTYY(("\nP(stub_zone:)\n")); + s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); + if(s) { + s->next = cfg_parser->cfg->stubs; + cfg_parser->cfg->stubs = s; + } else + yyerror("out of memory"); + } +break; +case 221: +#line 301 "./util/configparser.y" + { + struct config_stub* s; + OUTYY(("\nP(forward_zone:)\n")); + s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); + if(s) { + s->next = cfg_parser->cfg->forwards; + cfg_parser->cfg->forwards = s; + } else + yyerror("out of memory"); + } +break; +case 230: +#line 318 "./util/configparser.y" + { + struct config_view* s; + OUTYY(("\nP(view:)\n")); + s = (struct config_view*)calloc(1, sizeof(struct config_view)); + if(s) { + s->next = cfg_parser->cfg->views; + if(s->next && !s->next->name) + yyerror("view without name"); + cfg_parser->cfg->views = s; + } else + yyerror("out of memory"); + } +break; +case 240: +#line 337 "./util/configparser.y" + { + struct config_auth* s; + OUTYY(("\nP(auth_zone:)\n")); + s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); + if(s) { + s->next = cfg_parser->cfg->auths; + cfg_parser->cfg->auths = s; + /* defaults for auth zone */ + s->for_downstream = 1; + s->for_upstream = 1; + s->fallback_enabled = 0; + s->isrpz = 0; + } else + yyerror("out of memory"); + } +break; +case 251: +#line 361 "./util/configparser.y" + { + uint8_t* bitlist; + size_t len = 0; + OUTYY(("P(server_local_zone_tag:%s)\n", yystack.l_mark[0].str)); + bitlist = config_parse_taglist(cfg_parser->cfg, yystack.l_mark[0].str, + &len); + free(yystack.l_mark[0].str); + if(!bitlist) { + yyerror("could not parse tags, (define-tag them first)"); + } + if(bitlist) { + cfg_parser->cfg->auths->rpz_taglist = bitlist; + cfg_parser->cfg->auths->rpz_taglistlen = len; + + } + } +break; +case 252: +#line 380 "./util/configparser.y" + { + OUTYY(("P(rpz_action_override:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "nxdomain")!=0 && strcmp(yystack.l_mark[0].str, "nodata")!=0 && + strcmp(yystack.l_mark[0].str, "passthru")!=0 && strcmp(yystack.l_mark[0].str, "drop")!=0 && + strcmp(yystack.l_mark[0].str, "cname")!=0 && strcmp(yystack.l_mark[0].str, "disabled")!=0) { + yyerror("rpz-action-override action: expected nxdomain, " + "nodata, passthru, drop, cname or disabled"); + free(yystack.l_mark[0].str); + cfg_parser->cfg->auths->rpz_action_override = NULL; + } + else { + cfg_parser->cfg->auths->rpz_action_override = yystack.l_mark[0].str; + } + } +break; +case 253: +#line 397 "./util/configparser.y" + { + OUTYY(("P(rpz_cname_override:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->auths->rpz_cname); + cfg_parser->cfg->auths->rpz_cname = yystack.l_mark[0].str; + } +break; +case 254: +#line 405 "./util/configparser.y" + { + OUTYY(("P(rpz_log:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->auths->rpz_log = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 255: +#line 415 "./util/configparser.y" + { + OUTYY(("P(rpz_log_name:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->auths->rpz_log_name); + cfg_parser->cfg->auths->rpz_log_name = yystack.l_mark[0].str; + } +break; +case 256: +#line 423 "./util/configparser.y" + { + struct config_auth* s; + OUTYY(("\nP(rpz:)\n")); + s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); + if(s) { + s->next = cfg_parser->cfg->auths; + cfg_parser->cfg->auths = s; + /* defaults for RPZ auth zone */ + s->for_downstream = 0; + s->for_upstream = 0; + s->fallback_enabled = 0; + s->isrpz = 1; + } else + yyerror("out of memory"); + } +break; +case 269: +#line 446 "./util/configparser.y" + { + OUTYY(("P(server_num_threads:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->num_threads = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 270: +#line 455 "./util/configparser.y" + { + OUTYY(("P(server_verbosity:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->verbosity = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 271: +#line 464 "./util/configparser.y" + { + OUTYY(("P(server_statistics_interval:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "") == 0 || strcmp(yystack.l_mark[0].str, "0") == 0) + cfg_parser->cfg->stat_interval = 0; + else if(atoi(yystack.l_mark[0].str) == 0) + yyerror("number expected"); + else cfg_parser->cfg->stat_interval = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 272: +#line 475 "./util/configparser.y" + { + OUTYY(("P(server_statistics_cumulative:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->stat_cumulative = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 273: +#line 484 "./util/configparser.y" + { + OUTYY(("P(server_extended_statistics:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->stat_extended = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 274: +#line 493 "./util/configparser.y" + { + OUTYY(("P(server_shm_enable:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->shm_enable = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 275: +#line 502 "./util/configparser.y" + { + OUTYY(("P(server_shm_key:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "") == 0 || strcmp(yystack.l_mark[0].str, "0") == 0) + cfg_parser->cfg->shm_key = 0; + else if(atoi(yystack.l_mark[0].str) == 0) + yyerror("number expected"); + else cfg_parser->cfg->shm_key = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 276: +#line 513 "./util/configparser.y" + { + OUTYY(("P(server_port:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0) + yyerror("port number expected"); + else cfg_parser->cfg->port = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 277: +#line 522 "./util/configparser.y" + { + #ifdef CLIENT_SUBNET + OUTYY(("P(server_send_client_subnet:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet, yystack.l_mark[0].str)) + fatal_exit("out of memory adding client-subnet"); + #else + OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); + free(yystack.l_mark[0].str); + #endif + } +break; +case 278: +#line 534 "./util/configparser.y" + { + #ifdef CLIENT_SUBNET + OUTYY(("P(server_client_subnet_zone:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet_zone, + yystack.l_mark[0].str)) + fatal_exit("out of memory adding client-subnet-zone"); + #else + OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); + free(yystack.l_mark[0].str); + #endif + } +break; +case 279: +#line 548 "./util/configparser.y" + { + #ifdef CLIENT_SUBNET + OUTYY(("P(server_client_subnet_always_forward:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else + cfg_parser->cfg->client_subnet_always_forward = + (strcmp(yystack.l_mark[0].str, "yes")==0); + #else + OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); + #endif + free(yystack.l_mark[0].str); + } +break; +case 280: +#line 563 "./util/configparser.y" + { + #ifdef CLIENT_SUBNET + OUTYY(("P(client_subnet_opcode:%s)\n", yystack.l_mark[0].str)); + OUTYY(("P(Deprecated option, ignoring)\n")); + #else + OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); + #endif + free(yystack.l_mark[0].str); + } +break; +case 281: +#line 574 "./util/configparser.y" + { + #ifdef CLIENT_SUBNET + OUTYY(("P(max_client_subnet_ipv4:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("IPv4 subnet length expected"); + else if (atoi(yystack.l_mark[0].str) > 32) + cfg_parser->cfg->max_client_subnet_ipv4 = 32; + else if (atoi(yystack.l_mark[0].str) < 0) + cfg_parser->cfg->max_client_subnet_ipv4 = 0; + else cfg_parser->cfg->max_client_subnet_ipv4 = (uint8_t)atoi(yystack.l_mark[0].str); + #else + OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); + #endif + free(yystack.l_mark[0].str); + } +break; +case 282: +#line 591 "./util/configparser.y" + { + #ifdef CLIENT_SUBNET + OUTYY(("P(max_client_subnet_ipv6:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("Ipv6 subnet length expected"); + else if (atoi(yystack.l_mark[0].str) > 128) + cfg_parser->cfg->max_client_subnet_ipv6 = 128; + else if (atoi(yystack.l_mark[0].str) < 0) + cfg_parser->cfg->max_client_subnet_ipv6 = 0; + else cfg_parser->cfg->max_client_subnet_ipv6 = (uint8_t)atoi(yystack.l_mark[0].str); + #else + OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); + #endif + free(yystack.l_mark[0].str); + } +break; +case 283: +#line 608 "./util/configparser.y" + { + #ifdef CLIENT_SUBNET + OUTYY(("P(min_client_subnet_ipv4:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("IPv4 subnet length expected"); + else if (atoi(yystack.l_mark[0].str) > 32) + cfg_parser->cfg->min_client_subnet_ipv4 = 32; + else if (atoi(yystack.l_mark[0].str) < 0) + cfg_parser->cfg->min_client_subnet_ipv4 = 0; + else cfg_parser->cfg->min_client_subnet_ipv4 = (uint8_t)atoi(yystack.l_mark[0].str); + #else + OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); + #endif + free(yystack.l_mark[0].str); + } +break; +case 284: +#line 625 "./util/configparser.y" + { + #ifdef CLIENT_SUBNET + OUTYY(("P(min_client_subnet_ipv6:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("Ipv6 subnet length expected"); + else if (atoi(yystack.l_mark[0].str) > 128) + cfg_parser->cfg->min_client_subnet_ipv6 = 128; + else if (atoi(yystack.l_mark[0].str) < 0) + cfg_parser->cfg->min_client_subnet_ipv6 = 0; + else cfg_parser->cfg->min_client_subnet_ipv6 = (uint8_t)atoi(yystack.l_mark[0].str); + #else + OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); + #endif + free(yystack.l_mark[0].str); + } +break; +case 285: +#line 642 "./util/configparser.y" + { + #ifdef CLIENT_SUBNET + OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("IPv4 ECS tree size expected"); + else if (atoi(yystack.l_mark[0].str) < 0) + cfg_parser->cfg->max_ecs_tree_size_ipv4 = 0; + else cfg_parser->cfg->max_ecs_tree_size_ipv4 = (uint32_t)atoi(yystack.l_mark[0].str); + #else + OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); + #endif + free(yystack.l_mark[0].str); + } +break; +case 286: +#line 657 "./util/configparser.y" + { + #ifdef CLIENT_SUBNET + OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("IPv6 ECS tree size expected"); + else if (atoi(yystack.l_mark[0].str) < 0) + cfg_parser->cfg->max_ecs_tree_size_ipv6 = 0; + else cfg_parser->cfg->max_ecs_tree_size_ipv6 = (uint32_t)atoi(yystack.l_mark[0].str); + #else + OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); + #endif + free(yystack.l_mark[0].str); + } +break; +case 287: +#line 672 "./util/configparser.y" + { + OUTYY(("P(server_interface:%s)\n", yystack.l_mark[0].str)); + if(cfg_parser->cfg->num_ifs == 0) + cfg_parser->cfg->ifs = calloc(1, sizeof(char*)); + else cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs, + (cfg_parser->cfg->num_ifs+1)*sizeof(char*)); + if(!cfg_parser->cfg->ifs) + yyerror("out of memory"); + else + cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = yystack.l_mark[0].str; + } +break; +case 288: +#line 685 "./util/configparser.y" + { + OUTYY(("P(server_outgoing_interface:%s)\n", yystack.l_mark[0].str)); + if(cfg_parser->cfg->num_out_ifs == 0) + cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*)); + else cfg_parser->cfg->out_ifs = realloc( + cfg_parser->cfg->out_ifs, + (cfg_parser->cfg->num_out_ifs+1)*sizeof(char*)); + if(!cfg_parser->cfg->out_ifs) + yyerror("out of memory"); + else + cfg_parser->cfg->out_ifs[ + cfg_parser->cfg->num_out_ifs++] = yystack.l_mark[0].str; + } +break; +case 289: +#line 700 "./util/configparser.y" + { + OUTYY(("P(server_outgoing_range:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0) + yyerror("number expected"); + else cfg_parser->cfg->outgoing_num_ports = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 290: +#line 709 "./util/configparser.y" + { + OUTYY(("P(server_outgoing_port_permit:%s)\n", yystack.l_mark[0].str)); + if(!cfg_mark_ports(yystack.l_mark[0].str, 1, + cfg_parser->cfg->outgoing_avail_ports, 65536)) + yyerror("port number or range (\"low-high\") expected"); + free(yystack.l_mark[0].str); + } +break; +case 291: +#line 718 "./util/configparser.y" + { + OUTYY(("P(server_outgoing_port_avoid:%s)\n", yystack.l_mark[0].str)); + if(!cfg_mark_ports(yystack.l_mark[0].str, 0, + cfg_parser->cfg->outgoing_avail_ports, 65536)) + yyerror("port number or range (\"low-high\") expected"); + free(yystack.l_mark[0].str); + } +break; +case 292: +#line 727 "./util/configparser.y" + { + OUTYY(("P(server_outgoing_num_tcp:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->outgoing_num_tcp = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 293: +#line 736 "./util/configparser.y" + { + OUTYY(("P(server_incoming_num_tcp:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->incoming_num_tcp = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 294: +#line 745 "./util/configparser.y" + { + OUTYY(("P(server_interface_automatic:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->if_automatic = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 295: +#line 754 "./util/configparser.y" + { + OUTYY(("P(server_do_ip4:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->do_ip4 = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 296: +#line 763 "./util/configparser.y" + { + OUTYY(("P(server_do_ip6:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->do_ip6 = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 297: +#line 772 "./util/configparser.y" + { + OUTYY(("P(server_do_udp:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->do_udp = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 298: +#line 781 "./util/configparser.y" + { + OUTYY(("P(server_do_tcp:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->do_tcp = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 299: +#line 790 "./util/configparser.y" + { + OUTYY(("P(server_prefer_ip4:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->prefer_ip4 = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 300: +#line 799 "./util/configparser.y" + { + OUTYY(("P(server_prefer_ip6:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->prefer_ip6 = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 301: +#line 808 "./util/configparser.y" + { + OUTYY(("P(server_tcp_mss:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->tcp_mss = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 302: +#line 817 "./util/configparser.y" + { + OUTYY(("P(server_outgoing_tcp_mss:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->outgoing_tcp_mss = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 303: +#line 826 "./util/configparser.y" + { + OUTYY(("P(server_tcp_idle_timeout:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else if (atoi(yystack.l_mark[0].str) > 120000) + cfg_parser->cfg->tcp_idle_timeout = 120000; + else if (atoi(yystack.l_mark[0].str) < 1) + cfg_parser->cfg->tcp_idle_timeout = 1; + else cfg_parser->cfg->tcp_idle_timeout = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 304: +#line 839 "./util/configparser.y" + { + OUTYY(("P(server_tcp_keepalive:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->do_tcp_keepalive = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 305: +#line 848 "./util/configparser.y" + { + OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else if (atoi(yystack.l_mark[0].str) > 6553500) + cfg_parser->cfg->tcp_keepalive_timeout = 6553500; + else if (atoi(yystack.l_mark[0].str) < 1) + cfg_parser->cfg->tcp_keepalive_timeout = 0; + else cfg_parser->cfg->tcp_keepalive_timeout = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 306: +#line 861 "./util/configparser.y" + { + OUTYY(("P(server_tcp_upstream:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->tcp_upstream = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 307: +#line 870 "./util/configparser.y" + { + OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 308: +#line 879 "./util/configparser.y" + { + OUTYY(("P(server_ssl_upstream:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ssl_upstream = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 309: +#line 888 "./util/configparser.y" + { + OUTYY(("P(server_ssl_service_key:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->ssl_service_key); + cfg_parser->cfg->ssl_service_key = yystack.l_mark[0].str; + } +break; +case 310: +#line 895 "./util/configparser.y" + { + OUTYY(("P(server_ssl_service_pem:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->ssl_service_pem); + cfg_parser->cfg->ssl_service_pem = yystack.l_mark[0].str; + } +break; +case 311: +#line 902 "./util/configparser.y" + { + OUTYY(("P(server_ssl_port:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0) + yyerror("port number expected"); + else cfg_parser->cfg->ssl_port = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 312: +#line 911 "./util/configparser.y" + { + OUTYY(("P(server_tls_cert_bundle:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->tls_cert_bundle); + cfg_parser->cfg->tls_cert_bundle = yystack.l_mark[0].str; + } +break; +case 313: +#line 918 "./util/configparser.y" + { + OUTYY(("P(server_tls_win_cert:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->tls_win_cert = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 314: +#line 927 "./util/configparser.y" + { + OUTYY(("P(server_tls_additional_port:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, + yystack.l_mark[0].str)) + yyerror("out of memory"); + } +break; +case 315: +#line 935 "./util/configparser.y" + { + OUTYY(("P(server_tls_ciphers:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->tls_ciphers); + cfg_parser->cfg->tls_ciphers = yystack.l_mark[0].str; + } +break; +case 316: +#line 942 "./util/configparser.y" + { + OUTYY(("P(server_tls_ciphersuites:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->tls_ciphersuites); + cfg_parser->cfg->tls_ciphersuites = yystack.l_mark[0].str; + } +break; +case 317: +#line 949 "./util/configparser.y" + { + OUTYY(("P(server_tls_session_ticket_keys:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, + yystack.l_mark[0].str)) + yyerror("out of memory"); + } +break; +case 318: +#line 957 "./util/configparser.y" + { + OUTYY(("P(server_use_systemd:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->use_systemd = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 319: +#line 966 "./util/configparser.y" + { + OUTYY(("P(server_do_daemonize:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->do_daemonize = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 320: +#line 975 "./util/configparser.y" + { + OUTYY(("P(server_use_syslog:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->use_syslog = (strcmp(yystack.l_mark[0].str, "yes")==0); +#if !defined(HAVE_SYSLOG_H) && !defined(UB_ON_WINDOWS) + if(strcmp(yystack.l_mark[0].str, "yes") == 0) + yyerror("no syslog services are available. " + "(reconfigure and compile to add)"); +#endif + free(yystack.l_mark[0].str); + } +break; +case 321: +#line 989 "./util/configparser.y" + { + OUTYY(("P(server_log_time_ascii:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->log_time_ascii = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 322: +#line 998 "./util/configparser.y" + { + OUTYY(("P(server_log_queries:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->log_queries = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 323: +#line 1007 "./util/configparser.y" + { + OUTYY(("P(server_log_replies:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->log_replies = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 324: +#line 1016 "./util/configparser.y" + { + OUTYY(("P(server_log_tag_queryreply:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->log_tag_queryreply = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 325: +#line 1025 "./util/configparser.y" + { + OUTYY(("P(server_log_servfail:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->log_servfail = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 326: +#line 1034 "./util/configparser.y" + { + OUTYY(("P(server_log_local_actions:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->log_local_actions = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 327: +#line 1043 "./util/configparser.y" + { + OUTYY(("P(server_chroot:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->chrootdir); + cfg_parser->cfg->chrootdir = yystack.l_mark[0].str; + } +break; +case 328: +#line 1050 "./util/configparser.y" + { + OUTYY(("P(server_username:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->username); + cfg_parser->cfg->username = yystack.l_mark[0].str; + } +break; +case 329: +#line 1057 "./util/configparser.y" + { + OUTYY(("P(server_directory:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->directory); + cfg_parser->cfg->directory = yystack.l_mark[0].str; + /* change there right away for includes relative to this */ + if(yystack.l_mark[0].str[0]) { + char* d; +#ifdef UB_ON_WINDOWS + w_config_adjust_directory(cfg_parser->cfg); +#endif + d = cfg_parser->cfg->directory; + /* adjust directory if we have already chroot, + * like, we reread after sighup */ + if(cfg_parser->chroot && cfg_parser->chroot[0] && + strncmp(d, cfg_parser->chroot, strlen( + cfg_parser->chroot)) == 0) + d += strlen(cfg_parser->chroot); + if(d[0]) { + if(chdir(d)) + log_err("cannot chdir to directory: %s (%s)", + d, strerror(errno)); + } + } + } +break; +case 330: +#line 1083 "./util/configparser.y" + { + OUTYY(("P(server_logfile:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->logfile); + cfg_parser->cfg->logfile = yystack.l_mark[0].str; + cfg_parser->cfg->use_syslog = 0; + } +break; +case 331: +#line 1091 "./util/configparser.y" + { + OUTYY(("P(server_pidfile:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->pidfile); + cfg_parser->cfg->pidfile = yystack.l_mark[0].str; + } +break; +case 332: +#line 1098 "./util/configparser.y" + { + OUTYY(("P(server_root_hints:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, yystack.l_mark[0].str)) + yyerror("out of memory"); + } +break; +case 333: +#line 1105 "./util/configparser.y" + { + OUTYY(("P(server_dlv_anchor_file:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->dlv_anchor_file); + cfg_parser->cfg->dlv_anchor_file = yystack.l_mark[0].str; + } +break; +case 334: +#line 1112 "./util/configparser.y" + { + OUTYY(("P(server_dlv_anchor:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, yystack.l_mark[0].str)) + yyerror("out of memory"); + } +break; +case 335: +#line 1119 "./util/configparser.y" + { + OUTYY(("P(server_auto_trust_anchor_file:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg-> + auto_trust_anchor_file_list, yystack.l_mark[0].str)) + yyerror("out of memory"); + } +break; +case 336: +#line 1127 "./util/configparser.y" + { + OUTYY(("P(server_trust_anchor_file:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg-> + trust_anchor_file_list, yystack.l_mark[0].str)) + yyerror("out of memory"); + } +break; +case 337: +#line 1135 "./util/configparser.y" + { + OUTYY(("P(server_trusted_keys_file:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg-> + trusted_keys_file_list, yystack.l_mark[0].str)) + yyerror("out of memory"); + } +break; +case 338: +#line 1143 "./util/configparser.y" + { + OUTYY(("P(server_trust_anchor:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, yystack.l_mark[0].str)) + yyerror("out of memory"); + } +break; +case 339: +#line 1150 "./util/configparser.y" + { + OUTYY(("P(server_trust_anchor_signaling:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else + cfg_parser->cfg->trust_anchor_signaling = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 340: +#line 1161 "./util/configparser.y" + { + OUTYY(("P(server_root_key_sentinel:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else + cfg_parser->cfg->root_key_sentinel = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 341: +#line 1172 "./util/configparser.y" + { + OUTYY(("P(server_domain_insecure:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, yystack.l_mark[0].str)) + yyerror("out of memory"); + } +break; +case 342: +#line 1179 "./util/configparser.y" + { + OUTYY(("P(server_hide_identity:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->hide_identity = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 343: +#line 1188 "./util/configparser.y" + { + OUTYY(("P(server_hide_version:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->hide_version = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 344: +#line 1197 "./util/configparser.y" + { + OUTYY(("P(server_hide_trustanchor:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->hide_trustanchor = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 345: +#line 1206 "./util/configparser.y" + { + OUTYY(("P(server_identity:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->identity); + cfg_parser->cfg->identity = yystack.l_mark[0].str; + } +break; +case 346: +#line 1213 "./util/configparser.y" + { + OUTYY(("P(server_version:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->version); + cfg_parser->cfg->version = yystack.l_mark[0].str; + } +break; +case 347: +#line 1220 "./util/configparser.y" + { + OUTYY(("P(server_so_rcvbuf:%s)\n", yystack.l_mark[0].str)); + if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->so_rcvbuf)) + yyerror("buffer size expected"); + free(yystack.l_mark[0].str); + } +break; +case 348: +#line 1228 "./util/configparser.y" + { + OUTYY(("P(server_so_sndbuf:%s)\n", yystack.l_mark[0].str)); + if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->so_sndbuf)) + yyerror("buffer size expected"); + free(yystack.l_mark[0].str); + } +break; +case 349: +#line 1236 "./util/configparser.y" + { + OUTYY(("P(server_so_reuseport:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->so_reuseport = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 350: +#line 1246 "./util/configparser.y" + { + OUTYY(("P(server_ip_transparent:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ip_transparent = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 351: +#line 1256 "./util/configparser.y" + { + OUTYY(("P(server_ip_freebind:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ip_freebind = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 352: +#line 1266 "./util/configparser.y" + { + OUTYY(("P(server_ip_dscp:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else if (atoi(yystack.l_mark[0].str) > 63) + yyerror("value too large (max 63)"); + else if (atoi(yystack.l_mark[0].str) < 0) + yyerror("value too small (min 0)"); + else + cfg_parser->cfg->ip_dscp = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 353: +#line 1280 "./util/configparser.y" + { + OUTYY(("P(server_stream_wait_size:%s)\n", yystack.l_mark[0].str)); + if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->stream_wait_size)) + yyerror("memory size expected"); + free(yystack.l_mark[0].str); + } +break; +case 354: +#line 1288 "./util/configparser.y" + { + OUTYY(("P(server_edns_buffer_size:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0) + yyerror("number expected"); + else if (atoi(yystack.l_mark[0].str) < 12) + yyerror("edns buffer size too small"); + else if (atoi(yystack.l_mark[0].str) > 65535) + cfg_parser->cfg->edns_buffer_size = 65535; + else cfg_parser->cfg->edns_buffer_size = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 355: +#line 1301 "./util/configparser.y" + { + OUTYY(("P(server_msg_buffer_size:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0) + yyerror("number expected"); + else if (atoi(yystack.l_mark[0].str) < 4096) + yyerror("message buffer size too small (use 4096)"); + else cfg_parser->cfg->msg_buffer_size = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 356: +#line 1312 "./util/configparser.y" + { + OUTYY(("P(server_msg_cache_size:%s)\n", yystack.l_mark[0].str)); + if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->msg_cache_size)) + yyerror("memory size expected"); + free(yystack.l_mark[0].str); + } +break; +case 357: +#line 1320 "./util/configparser.y" + { + OUTYY(("P(server_msg_cache_slabs:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0) + yyerror("number expected"); + else { + cfg_parser->cfg->msg_cache_slabs = atoi(yystack.l_mark[0].str); + if(!is_pow2(cfg_parser->cfg->msg_cache_slabs)) + yyerror("must be a power of 2"); + } + free(yystack.l_mark[0].str); + } +break; +case 358: +#line 1333 "./util/configparser.y" + { + OUTYY(("P(server_num_queries_per_thread:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0) + yyerror("number expected"); + else cfg_parser->cfg->num_queries_per_thread = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 359: +#line 1342 "./util/configparser.y" + { + OUTYY(("P(server_jostle_timeout:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->jostle_time = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 360: +#line 1351 "./util/configparser.y" + { + OUTYY(("P(server_delay_close:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->delay_close = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 361: +#line 1360 "./util/configparser.y" + { + OUTYY(("P(server_unblock_lan_zones:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->unblock_lan_zones = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 362: +#line 1370 "./util/configparser.y" + { + OUTYY(("P(server_insecure_lan_zones:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->insecure_lan_zones = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 363: +#line 1380 "./util/configparser.y" + { + OUTYY(("P(server_rrset_cache_size:%s)\n", yystack.l_mark[0].str)); + if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->rrset_cache_size)) + yyerror("memory size expected"); + free(yystack.l_mark[0].str); + } +break; +case 364: +#line 1388 "./util/configparser.y" + { + OUTYY(("P(server_rrset_cache_slabs:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0) + yyerror("number expected"); + else { + cfg_parser->cfg->rrset_cache_slabs = atoi(yystack.l_mark[0].str); + if(!is_pow2(cfg_parser->cfg->rrset_cache_slabs)) + yyerror("must be a power of 2"); + } + free(yystack.l_mark[0].str); + } +break; +case 365: +#line 1401 "./util/configparser.y" + { + OUTYY(("P(server_infra_host_ttl:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->host_ttl = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 366: +#line 1410 "./util/configparser.y" + { + OUTYY(("P(server_infra_lame_ttl:%s)\n", yystack.l_mark[0].str)); + verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " + "removed, use infra-host-ttl)", yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 367: +#line 1418 "./util/configparser.y" + { + OUTYY(("P(server_infra_cache_numhosts:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0) + yyerror("number expected"); + else cfg_parser->cfg->infra_cache_numhosts = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 368: +#line 1427 "./util/configparser.y" + { + OUTYY(("P(server_infra_cache_lame_size:%s)\n", yystack.l_mark[0].str)); + verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " + "(option removed, use infra-cache-numhosts)", yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 369: +#line 1435 "./util/configparser.y" + { + OUTYY(("P(server_infra_cache_slabs:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0) + yyerror("number expected"); + else { + cfg_parser->cfg->infra_cache_slabs = atoi(yystack.l_mark[0].str); + if(!is_pow2(cfg_parser->cfg->infra_cache_slabs)) + yyerror("must be a power of 2"); + } + free(yystack.l_mark[0].str); + } +break; +case 370: +#line 1448 "./util/configparser.y" + { + OUTYY(("P(server_infra_cache_min_rtt:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->infra_cache_min_rtt = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 371: +#line 1457 "./util/configparser.y" + { + OUTYY(("P(server_target_fetch_policy:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->target_fetch_policy); + cfg_parser->cfg->target_fetch_policy = yystack.l_mark[0].str; + } +break; +case 372: +#line 1464 "./util/configparser.y" + { + OUTYY(("P(server_harden_short_bufsize:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->harden_short_bufsize = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 373: +#line 1474 "./util/configparser.y" + { + OUTYY(("P(server_harden_large_queries:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->harden_large_queries = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 374: +#line 1484 "./util/configparser.y" + { + OUTYY(("P(server_harden_glue:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->harden_glue = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 375: +#line 1494 "./util/configparser.y" + { + OUTYY(("P(server_harden_dnssec_stripped:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->harden_dnssec_stripped = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 376: +#line 1504 "./util/configparser.y" + { + OUTYY(("P(server_harden_below_nxdomain:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->harden_below_nxdomain = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 377: +#line 1514 "./util/configparser.y" + { + OUTYY(("P(server_harden_referral_path:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->harden_referral_path = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 378: +#line 1524 "./util/configparser.y" + { + OUTYY(("P(server_harden_algo_downgrade:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->harden_algo_downgrade = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 379: +#line 1534 "./util/configparser.y" + { + OUTYY(("P(server_use_caps_for_id:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->use_caps_bits_for_id = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 380: +#line 1544 "./util/configparser.y" + { + OUTYY(("P(server_caps_whitelist:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, yystack.l_mark[0].str)) + yyerror("out of memory"); + } +break; +case 381: +#line 1551 "./util/configparser.y" + { + OUTYY(("P(server_private_address:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, yystack.l_mark[0].str)) + yyerror("out of memory"); + } +break; +case 382: +#line 1558 "./util/configparser.y" + { + OUTYY(("P(server_private_domain:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, yystack.l_mark[0].str)) + yyerror("out of memory"); + } +break; +case 383: +#line 1565 "./util/configparser.y" + { + OUTYY(("P(server_prefetch:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->prefetch = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 384: +#line 1574 "./util/configparser.y" + { + OUTYY(("P(server_prefetch_key:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->prefetch_key = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 385: +#line 1583 "./util/configparser.y" + { + OUTYY(("P(server_deny_any:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->deny_any = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 386: +#line 1592 "./util/configparser.y" + { + OUTYY(("P(server_unwanted_reply_threshold:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->unwanted_threshold = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 387: +#line 1601 "./util/configparser.y" + { + OUTYY(("P(server_do_not_query_address:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, yystack.l_mark[0].str)) + yyerror("out of memory"); + } +break; +case 388: +#line 1608 "./util/configparser.y" + { + OUTYY(("P(server_do_not_query_localhost:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->donotquery_localhost = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 389: +#line 1618 "./util/configparser.y" + { + OUTYY(("P(server_access_control:%s %s)\n", yystack.l_mark[-1].str, yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "deny")!=0 && strcmp(yystack.l_mark[0].str, "refuse")!=0 && + strcmp(yystack.l_mark[0].str, "deny_non_local")!=0 && + strcmp(yystack.l_mark[0].str, "refuse_non_local")!=0 && + strcmp(yystack.l_mark[0].str, "allow_setrd")!=0 && + strcmp(yystack.l_mark[0].str, "allow")!=0 && + strcmp(yystack.l_mark[0].str, "allow_snoop")!=0) { + yyerror("expected deny, refuse, deny_non_local, " + "refuse_non_local, allow, allow_setrd or " + "allow_snoop in access control action"); + free(yystack.l_mark[-1].str); + free(yystack.l_mark[0].str); + } else { + if(!cfg_str2list_insert(&cfg_parser->cfg->acls, yystack.l_mark[-1].str, yystack.l_mark[0].str)) + fatal_exit("out of memory adding acl"); + } + } +break; +case 390: +#line 1638 "./util/configparser.y" + { + OUTYY(("P(server_module_conf:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->module_conf); + cfg_parser->cfg->module_conf = yystack.l_mark[0].str; + } +break; +case 391: +#line 1645 "./util/configparser.y" + { + OUTYY(("P(server_val_override_date:%s)\n", yystack.l_mark[0].str)); + if(*yystack.l_mark[0].str == '\0' || strcmp(yystack.l_mark[0].str, "0") == 0) { + cfg_parser->cfg->val_date_override = 0; + } else if(strlen(yystack.l_mark[0].str) == 14) { + cfg_parser->cfg->val_date_override = + cfg_convert_timeval(yystack.l_mark[0].str); + if(!cfg_parser->cfg->val_date_override) + yyerror("bad date/time specification"); + } else { + if(atoi(yystack.l_mark[0].str) == 0) + yyerror("number expected"); + cfg_parser->cfg->val_date_override = atoi(yystack.l_mark[0].str); + } + free(yystack.l_mark[0].str); + } +break; +case 392: +#line 1663 "./util/configparser.y" + { + OUTYY(("P(server_val_sig_skew_min:%s)\n", yystack.l_mark[0].str)); + if(*yystack.l_mark[0].str == '\0' || strcmp(yystack.l_mark[0].str, "0") == 0) { + cfg_parser->cfg->val_sig_skew_min = 0; + } else { + cfg_parser->cfg->val_sig_skew_min = atoi(yystack.l_mark[0].str); + if(!cfg_parser->cfg->val_sig_skew_min) + yyerror("number expected"); + } + free(yystack.l_mark[0].str); + } +break; +case 393: +#line 1676 "./util/configparser.y" + { + OUTYY(("P(server_val_sig_skew_max:%s)\n", yystack.l_mark[0].str)); + if(*yystack.l_mark[0].str == '\0' || strcmp(yystack.l_mark[0].str, "0") == 0) { + cfg_parser->cfg->val_sig_skew_max = 0; + } else { + cfg_parser->cfg->val_sig_skew_max = atoi(yystack.l_mark[0].str); + if(!cfg_parser->cfg->val_sig_skew_max) + yyerror("number expected"); + } + free(yystack.l_mark[0].str); + } +break; +case 394: +#line 1689 "./util/configparser.y" + { + OUTYY(("P(server_cache_max_ttl:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->max_ttl = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 395: +#line 1698 "./util/configparser.y" + { + OUTYY(("P(server_cache_max_negative_ttl:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->max_negative_ttl = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 396: +#line 1707 "./util/configparser.y" + { + OUTYY(("P(server_cache_min_ttl:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->min_ttl = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 397: +#line 1716 "./util/configparser.y" + { + OUTYY(("P(server_bogus_ttl:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->bogus_ttl = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 398: +#line 1725 "./util/configparser.y" + { + OUTYY(("P(server_val_clean_additional:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->val_clean_additional = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 399: +#line 1735 "./util/configparser.y" + { + OUTYY(("P(server_val_permissive_mode:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->val_permissive_mode = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 400: +#line 1745 "./util/configparser.y" + { + OUTYY(("P(server_aggressive_nsec:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else + cfg_parser->cfg->aggressive_nsec = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 401: +#line 1756 "./util/configparser.y" + { + OUTYY(("P(server_ignore_cd_flag:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ignore_cd = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 402: +#line 1765 "./util/configparser.y" + { + OUTYY(("P(server_serve_expired:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->serve_expired = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 403: +#line 1774 "./util/configparser.y" + { + OUTYY(("P(server_serve_expired_ttl:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->serve_expired_ttl = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 404: +#line 1783 "./util/configparser.y" + { + OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 405: +#line 1792 "./util/configparser.y" + { + OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->serve_expired_reply_ttl = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 406: +#line 1801 "./util/configparser.y" + { + OUTYY(("P(server_serve_expired_client_timeout:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->serve_expired_client_timeout = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 407: +#line 1810 "./util/configparser.y" + { + OUTYY(("P(server_fake_dsa:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); +#if defined(HAVE_SSL) || defined(HAVE_NETTLE) + else fake_dsa = (strcmp(yystack.l_mark[0].str, "yes")==0); + if(fake_dsa) + log_warn("test option fake_dsa is enabled"); +#endif + free(yystack.l_mark[0].str); + } +break; +case 408: +#line 1823 "./util/configparser.y" + { + OUTYY(("P(server_fake_sha1:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); +#if defined(HAVE_SSL) || defined(HAVE_NETTLE) + else fake_sha1 = (strcmp(yystack.l_mark[0].str, "yes")==0); + if(fake_sha1) + log_warn("test option fake_sha1 is enabled"); +#endif + free(yystack.l_mark[0].str); + } +break; +case 409: +#line 1836 "./util/configparser.y" + { + OUTYY(("P(server_val_log_level:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->val_log_level = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 410: +#line 1845 "./util/configparser.y" + { + OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->val_nsec3_key_iterations); + cfg_parser->cfg->val_nsec3_key_iterations = yystack.l_mark[0].str; + } +break; +case 411: +#line 1852 "./util/configparser.y" + { + OUTYY(("P(server_add_holddown:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->add_holddown = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 412: +#line 1861 "./util/configparser.y" + { + OUTYY(("P(server_del_holddown:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->del_holddown = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 413: +#line 1870 "./util/configparser.y" + { + OUTYY(("P(server_keep_missing:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->keep_missing = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 414: +#line 1879 "./util/configparser.y" + { + OUTYY(("P(server_permit_small_holddown:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->permit_small_holddown = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 415: +#line 1888 "./util/configparser.y" + { + OUTYY(("P(server_key_cache_size:%s)\n", yystack.l_mark[0].str)); + if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->key_cache_size)) + yyerror("memory size expected"); + free(yystack.l_mark[0].str); + } +break; +case 416: +#line 1896 "./util/configparser.y" + { + OUTYY(("P(server_key_cache_slabs:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0) + yyerror("number expected"); + else { + cfg_parser->cfg->key_cache_slabs = atoi(yystack.l_mark[0].str); + if(!is_pow2(cfg_parser->cfg->key_cache_slabs)) + yyerror("must be a power of 2"); + } + free(yystack.l_mark[0].str); + } +break; +case 417: +#line 1909 "./util/configparser.y" + { + OUTYY(("P(server_neg_cache_size:%s)\n", yystack.l_mark[0].str)); + if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->neg_cache_size)) + yyerror("memory size expected"); + free(yystack.l_mark[0].str); + } +break; +case 418: +#line 1917 "./util/configparser.y" + { + OUTYY(("P(server_local_zone:%s %s)\n", yystack.l_mark[-1].str, yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "static")!=0 && strcmp(yystack.l_mark[0].str, "deny")!=0 && + strcmp(yystack.l_mark[0].str, "refuse")!=0 && strcmp(yystack.l_mark[0].str, "redirect")!=0 && + strcmp(yystack.l_mark[0].str, "transparent")!=0 && strcmp(yystack.l_mark[0].str, "nodefault")!=0 + && strcmp(yystack.l_mark[0].str, "typetransparent")!=0 + && strcmp(yystack.l_mark[0].str, "always_transparent")!=0 + && strcmp(yystack.l_mark[0].str, "always_refuse")!=0 + && strcmp(yystack.l_mark[0].str, "always_nxdomain")!=0 + && strcmp(yystack.l_mark[0].str, "noview")!=0 + && strcmp(yystack.l_mark[0].str, "inform")!=0 && strcmp(yystack.l_mark[0].str, "inform_deny")!=0 + && strcmp(yystack.l_mark[0].str, "inform_redirect") != 0 + && strcmp(yystack.l_mark[0].str, "ipset") != 0) { + yyerror("local-zone type: expected static, deny, " + "refuse, redirect, transparent, " + "typetransparent, inform, inform_deny, " + "inform_redirect, always_transparent, " + "always_refuse, always_nxdomain, noview " + ", nodefault or ipset"); + free(yystack.l_mark[-1].str); + free(yystack.l_mark[0].str); + } else if(strcmp(yystack.l_mark[0].str, "nodefault")==0) { + if(!cfg_strlist_insert(&cfg_parser->cfg-> + local_zones_nodefault, yystack.l_mark[-1].str)) + fatal_exit("out of memory adding local-zone"); + free(yystack.l_mark[0].str); +#ifdef USE_IPSET + } else if(strcmp(yystack.l_mark[0].str, "ipset")==0) { + if(!cfg_strlist_insert(&cfg_parser->cfg-> + local_zones_ipset, yystack.l_mark[-1].str)) + fatal_exit("out of memory adding local-zone"); + free(yystack.l_mark[0].str); +#endif + } else { + if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones, + yystack.l_mark[-1].str, yystack.l_mark[0].str)) + fatal_exit("out of memory adding local-zone"); + } + } +break; +case 419: +#line 1958 "./util/configparser.y" + { + OUTYY(("P(server_local_data:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, yystack.l_mark[0].str)) + fatal_exit("out of memory adding local-data"); + } +break; +case 420: +#line 1965 "./util/configparser.y" + { + char* ptr; + OUTYY(("P(server_local_data_ptr:%s)\n", yystack.l_mark[0].str)); + ptr = cfg_ptr_reverse(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + if(ptr) { + if(!cfg_strlist_insert(&cfg_parser->cfg-> + local_data, ptr)) + fatal_exit("out of memory adding local-data"); + } else { + yyerror("local-data-ptr could not be reversed"); + } + } +break; +case 421: +#line 1980 "./util/configparser.y" + { + OUTYY(("P(server_minimal_responses:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->minimal_responses = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 422: +#line 1990 "./util/configparser.y" + { + OUTYY(("P(server_rrset_roundrobin:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->rrset_roundrobin = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 423: +#line 2000 "./util/configparser.y" + { + OUTYY(("P(server_unknown_server_time_limit:%s)\n", yystack.l_mark[0].str)); + cfg_parser->cfg->unknown_server_time_limit = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 424: +#line 2007 "./util/configparser.y" + { + OUTYY(("P(server_max_udp_size:%s)\n", yystack.l_mark[0].str)); + cfg_parser->cfg->max_udp_size = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 425: +#line 2014 "./util/configparser.y" + { + OUTYY(("P(dns64_prefix:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->dns64_prefix); + cfg_parser->cfg->dns64_prefix = yystack.l_mark[0].str; + } +break; +case 426: +#line 2021 "./util/configparser.y" + { + OUTYY(("P(server_dns64_synthall:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->dns64_synthall = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 427: +#line 2030 "./util/configparser.y" + { + OUTYY(("P(dns64_ignore_aaaa:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, + yystack.l_mark[0].str)) + fatal_exit("out of memory adding dns64-ignore-aaaa"); + } +break; +case 428: +#line 2038 "./util/configparser.y" + { + char* p, *s = yystack.l_mark[0].str; + OUTYY(("P(server_define_tag:%s)\n", yystack.l_mark[0].str)); + while((p=strsep(&s, " \t\n")) != NULL) { + if(*p) { + if(!config_add_tag(cfg_parser->cfg, p)) + yyerror("could not define-tag, " + "out of memory"); + } + } + free(yystack.l_mark[0].str); + } +break; +case 429: +#line 2052 "./util/configparser.y" + { + size_t len = 0; + uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, yystack.l_mark[0].str, + &len); + free(yystack.l_mark[0].str); + OUTYY(("P(server_local_zone_tag:%s)\n", yystack.l_mark[-1].str)); + if(!bitlist) { + yyerror("could not parse tags, (define-tag them first)"); + free(yystack.l_mark[-1].str); + } + if(bitlist) { + if(!cfg_strbytelist_insert( + &cfg_parser->cfg->local_zone_tags, + yystack.l_mark[-1].str, bitlist, len)) { + yyerror("out of memory"); + free(yystack.l_mark[-1].str); + } + } + } +break; +case 430: +#line 2073 "./util/configparser.y" + { + size_t len = 0; + uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, yystack.l_mark[0].str, + &len); + free(yystack.l_mark[0].str); + OUTYY(("P(server_access_control_tag:%s)\n", yystack.l_mark[-1].str)); + if(!bitlist) { + yyerror("could not parse tags, (define-tag them first)"); + free(yystack.l_mark[-1].str); + } + if(bitlist) { + if(!cfg_strbytelist_insert( + &cfg_parser->cfg->acl_tags, + yystack.l_mark[-1].str, bitlist, len)) { + yyerror("out of memory"); + free(yystack.l_mark[-1].str); + } + } + } +break; +case 431: +#line 2094 "./util/configparser.y" + { + OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", yystack.l_mark[-2].str, yystack.l_mark[-1].str, yystack.l_mark[0].str)); + if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, + yystack.l_mark[-2].str, yystack.l_mark[-1].str, yystack.l_mark[0].str)) { + yyerror("out of memory"); + free(yystack.l_mark[-2].str); + free(yystack.l_mark[-1].str); + free(yystack.l_mark[0].str); + } + } +break; +case 432: +#line 2106 "./util/configparser.y" + { + OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", yystack.l_mark[-2].str, yystack.l_mark[-1].str, yystack.l_mark[0].str)); + if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, + yystack.l_mark[-2].str, yystack.l_mark[-1].str, yystack.l_mark[0].str)) { + yyerror("out of memory"); + free(yystack.l_mark[-2].str); + free(yystack.l_mark[-1].str); + free(yystack.l_mark[0].str); + } + } +break; +case 433: +#line 2118 "./util/configparser.y" + { + OUTYY(("P(server_local_zone_override:%s %s %s)\n", yystack.l_mark[-2].str, yystack.l_mark[-1].str, yystack.l_mark[0].str)); + if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, + yystack.l_mark[-2].str, yystack.l_mark[-1].str, yystack.l_mark[0].str)) { + yyerror("out of memory"); + free(yystack.l_mark[-2].str); + free(yystack.l_mark[-1].str); + free(yystack.l_mark[0].str); + } + } +break; +case 434: +#line 2130 "./util/configparser.y" + { + OUTYY(("P(server_access_control_view:%s %s)\n", yystack.l_mark[-1].str, yystack.l_mark[0].str)); + if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, + yystack.l_mark[-1].str, yystack.l_mark[0].str)) { + yyerror("out of memory"); + } + } +break; +case 435: +#line 2139 "./util/configparser.y" + { + size_t len = 0; + uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, yystack.l_mark[0].str, + &len); + free(yystack.l_mark[0].str); + OUTYY(("P(response_ip_tag:%s)\n", yystack.l_mark[-1].str)); + if(!bitlist) { + yyerror("could not parse tags, (define-tag them first)"); + free(yystack.l_mark[-1].str); + } + if(bitlist) { + if(!cfg_strbytelist_insert( + &cfg_parser->cfg->respip_tags, + yystack.l_mark[-1].str, bitlist, len)) { + yyerror("out of memory"); + free(yystack.l_mark[-1].str); + } + } + } +break; +case 436: +#line 2160 "./util/configparser.y" + { + OUTYY(("P(server_ip_ratelimit:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->ip_ratelimit = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 437: +#line 2170 "./util/configparser.y" + { + OUTYY(("P(server_ratelimit:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->ratelimit = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 438: +#line 2179 "./util/configparser.y" + { + OUTYY(("P(server_ip_ratelimit_size:%s)\n", yystack.l_mark[0].str)); + if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->ip_ratelimit_size)) + yyerror("memory size expected"); + free(yystack.l_mark[0].str); + } +break; +case 439: +#line 2187 "./util/configparser.y" + { + OUTYY(("P(server_ratelimit_size:%s)\n", yystack.l_mark[0].str)); + if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->ratelimit_size)) + yyerror("memory size expected"); + free(yystack.l_mark[0].str); + } +break; +case 440: +#line 2195 "./util/configparser.y" + { + OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0) + yyerror("number expected"); + else { + cfg_parser->cfg->ip_ratelimit_slabs = atoi(yystack.l_mark[0].str); + if(!is_pow2(cfg_parser->cfg->ip_ratelimit_slabs)) + yyerror("must be a power of 2"); + } + free(yystack.l_mark[0].str); + } +break; +case 441: +#line 2208 "./util/configparser.y" + { + OUTYY(("P(server_ratelimit_slabs:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0) + yyerror("number expected"); + else { + cfg_parser->cfg->ratelimit_slabs = atoi(yystack.l_mark[0].str); + if(!is_pow2(cfg_parser->cfg->ratelimit_slabs)) + yyerror("must be a power of 2"); + } + free(yystack.l_mark[0].str); + } +break; +case 442: +#line 2221 "./util/configparser.y" + { + OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", yystack.l_mark[-1].str, yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) { + yyerror("number expected"); + free(yystack.l_mark[-1].str); + free(yystack.l_mark[0].str); + } else { + if(!cfg_str2list_insert(&cfg_parser->cfg-> + ratelimit_for_domain, yystack.l_mark[-1].str, yystack.l_mark[0].str)) + fatal_exit("out of memory adding " + "ratelimit-for-domain"); + } + } +break; +case 443: +#line 2236 "./util/configparser.y" + { + OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", yystack.l_mark[-1].str, yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) { + yyerror("number expected"); + free(yystack.l_mark[-1].str); + free(yystack.l_mark[0].str); + } else { + if(!cfg_str2list_insert(&cfg_parser->cfg-> + ratelimit_below_domain, yystack.l_mark[-1].str, yystack.l_mark[0].str)) + fatal_exit("out of memory adding " + "ratelimit-below-domain"); + } + } +break; +case 444: +#line 2251 "./util/configparser.y" + { + OUTYY(("P(server_ip_ratelimit_factor:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->ip_ratelimit_factor = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 445: +#line 2260 "./util/configparser.y" + { + OUTYY(("P(server_ratelimit_factor:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->ratelimit_factor = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 446: +#line 2269 "./util/configparser.y" + { + OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); + free(yystack.l_mark[0].str); + } +break; +case 447: +#line 2275 "./util/configparser.y" + { + OUTYY(("P(server_fast_server_num:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) <= 0) + yyerror("number expected"); + else cfg_parser->cfg->fast_server_num = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 448: +#line 2284 "./util/configparser.y" + { + OUTYY(("P(server_fast_server_permil:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->fast_server_permil = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 449: +#line 2293 "./util/configparser.y" + { + OUTYY(("P(server_qname_minimisation:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->qname_minimisation = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 450: +#line 2303 "./util/configparser.y" + { + OUTYY(("P(server_qname_minimisation_strict:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->qname_minimisation_strict = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 451: +#line 2313 "./util/configparser.y" + { + OUTYY(("P(server_pad_responses:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->pad_responses = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 452: +#line 2323 "./util/configparser.y" + { + OUTYY(("P(server_pad_responses_block_size:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0) + yyerror("number expected"); + else cfg_parser->cfg->pad_responses_block_size = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 453: +#line 2332 "./util/configparser.y" + { + OUTYY(("P(server_pad_queries:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->pad_queries = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 454: +#line 2342 "./util/configparser.y" + { + OUTYY(("P(server_pad_queries_block_size:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0) + yyerror("number expected"); + else cfg_parser->cfg->pad_queries_block_size = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 455: +#line 2351 "./util/configparser.y" + { + #ifdef USE_IPSECMOD + OUTYY(("P(server_ipsecmod_enabled:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ipsecmod_enabled = (strcmp(yystack.l_mark[0].str, "yes")==0); + #else + OUTYY(("P(Compiled without IPsec module, ignoring)\n")); + #endif + free(yystack.l_mark[0].str); + } +break; +case 456: +#line 2364 "./util/configparser.y" + { + #ifdef USE_IPSECMOD + OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ipsecmod_ignore_bogus = (strcmp(yystack.l_mark[0].str, "yes")==0); + #else + OUTYY(("P(Compiled without IPsec module, ignoring)\n")); + #endif + free(yystack.l_mark[0].str); + } +break; +case 457: +#line 2377 "./util/configparser.y" + { + #ifdef USE_IPSECMOD + OUTYY(("P(server_ipsecmod_hook:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->ipsecmod_hook); + cfg_parser->cfg->ipsecmod_hook = yystack.l_mark[0].str; + #else + OUTYY(("P(Compiled without IPsec module, ignoring)\n")); + free(yystack.l_mark[0].str); + #endif + } +break; +case 458: +#line 2389 "./util/configparser.y" + { + #ifdef USE_IPSECMOD + OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->ipsecmod_max_ttl = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + #else + OUTYY(("P(Compiled without IPsec module, ignoring)\n")); + free(yystack.l_mark[0].str); + #endif + } +break; +case 459: +#line 2403 "./util/configparser.y" + { + #ifdef USE_IPSECMOD + OUTYY(("P(server_ipsecmod_whitelist:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->ipsecmod_whitelist, yystack.l_mark[0].str)) + yyerror("out of memory"); + #else + OUTYY(("P(Compiled without IPsec module, ignoring)\n")); + free(yystack.l_mark[0].str); + #endif + } +break; +case 460: +#line 2415 "./util/configparser.y" + { + #ifdef USE_IPSECMOD + OUTYY(("P(server_ipsecmod_strict:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ipsecmod_strict = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + #else + OUTYY(("P(Compiled without IPsec module, ignoring)\n")); + free(yystack.l_mark[0].str); + #endif + } +break; +case 461: +#line 2429 "./util/configparser.y" + { + OUTYY(("P(name:%s)\n", yystack.l_mark[0].str)); + if(cfg_parser->cfg->stubs->name) + yyerror("stub name override, there must be one name " + "for one stub-zone"); + free(cfg_parser->cfg->stubs->name); + cfg_parser->cfg->stubs->name = yystack.l_mark[0].str; + } +break; +case 462: +#line 2439 "./util/configparser.y" + { + OUTYY(("P(stub-host:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, yystack.l_mark[0].str)) + yyerror("out of memory"); + } +break; +case 463: +#line 2446 "./util/configparser.y" + { + OUTYY(("P(stub-addr:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, yystack.l_mark[0].str)) + yyerror("out of memory"); + } +break; +case 464: +#line 2453 "./util/configparser.y" + { + OUTYY(("P(stub-first:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->stubs->isfirst=(strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 465: +#line 2462 "./util/configparser.y" + { + OUTYY(("P(stub-no-cache:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->stubs->no_cache=(strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 466: +#line 2471 "./util/configparser.y" + { + OUTYY(("P(stub-ssl-upstream:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->stubs->ssl_upstream = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 467: +#line 2481 "./util/configparser.y" + { + OUTYY(("P(stub-prime:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->stubs->isprime = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 468: +#line 2491 "./util/configparser.y" + { + OUTYY(("P(name:%s)\n", yystack.l_mark[0].str)); + if(cfg_parser->cfg->forwards->name) + yyerror("forward name override, there must be one " + "name for one forward-zone"); + free(cfg_parser->cfg->forwards->name); + cfg_parser->cfg->forwards->name = yystack.l_mark[0].str; + } +break; +case 469: +#line 2501 "./util/configparser.y" + { + OUTYY(("P(forward-host:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, yystack.l_mark[0].str)) + yyerror("out of memory"); + } +break; +case 470: +#line 2508 "./util/configparser.y" + { + OUTYY(("P(forward-addr:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, yystack.l_mark[0].str)) + yyerror("out of memory"); + } +break; +case 471: +#line 2515 "./util/configparser.y" + { + OUTYY(("P(forward-first:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->forwards->isfirst=(strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 472: +#line 2524 "./util/configparser.y" + { + OUTYY(("P(forward-no-cache:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->forwards->no_cache=(strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 473: +#line 2533 "./util/configparser.y" + { + OUTYY(("P(forward-ssl-upstream:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->forwards->ssl_upstream = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 474: +#line 2543 "./util/configparser.y" + { + OUTYY(("P(name:%s)\n", yystack.l_mark[0].str)); + if(cfg_parser->cfg->auths->name) + yyerror("auth name override, there must be one name " + "for one auth-zone"); + free(cfg_parser->cfg->auths->name); + cfg_parser->cfg->auths->name = yystack.l_mark[0].str; + } +break; +case 475: +#line 2553 "./util/configparser.y" + { + OUTYY(("P(zonefile:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->auths->zonefile); + cfg_parser->cfg->auths->zonefile = yystack.l_mark[0].str; + } +break; +case 476: +#line 2560 "./util/configparser.y" + { + OUTYY(("P(master:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, yystack.l_mark[0].str)) + yyerror("out of memory"); + } +break; +case 477: +#line 2567 "./util/configparser.y" + { + OUTYY(("P(url:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, yystack.l_mark[0].str)) + yyerror("out of memory"); + } +break; +case 478: +#line 2574 "./util/configparser.y" + { + OUTYY(("P(allow-notify:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, + yystack.l_mark[0].str)) + yyerror("out of memory"); + } +break; +case 479: +#line 2582 "./util/configparser.y" + { + OUTYY(("P(for-downstream:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->auths->for_downstream = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 480: +#line 2592 "./util/configparser.y" + { + OUTYY(("P(for-upstream:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->auths->for_upstream = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 481: +#line 2602 "./util/configparser.y" + { + OUTYY(("P(fallback-enabled:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->auths->fallback_enabled = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 482: +#line 2612 "./util/configparser.y" + { + OUTYY(("P(name:%s)\n", yystack.l_mark[0].str)); + if(cfg_parser->cfg->views->name) + yyerror("view name override, there must be one " + "name for one view"); + free(cfg_parser->cfg->views->name); + cfg_parser->cfg->views->name = yystack.l_mark[0].str; + } +break; +case 483: +#line 2622 "./util/configparser.y" + { + OUTYY(("P(view_local_zone:%s %s)\n", yystack.l_mark[-1].str, yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "static")!=0 && strcmp(yystack.l_mark[0].str, "deny")!=0 && + strcmp(yystack.l_mark[0].str, "refuse")!=0 && strcmp(yystack.l_mark[0].str, "redirect")!=0 && + strcmp(yystack.l_mark[0].str, "transparent")!=0 && strcmp(yystack.l_mark[0].str, "nodefault")!=0 + && strcmp(yystack.l_mark[0].str, "typetransparent")!=0 + && strcmp(yystack.l_mark[0].str, "always_transparent")!=0 + && strcmp(yystack.l_mark[0].str, "always_refuse")!=0 + && strcmp(yystack.l_mark[0].str, "always_nxdomain")!=0 + && strcmp(yystack.l_mark[0].str, "noview")!=0 + && strcmp(yystack.l_mark[0].str, "inform")!=0 && strcmp(yystack.l_mark[0].str, "inform_deny")!=0) { + yyerror("local-zone type: expected static, deny, " + "refuse, redirect, transparent, " + "typetransparent, inform, inform_deny, " + "always_transparent, always_refuse, " + "always_nxdomain, noview or nodefault"); + free(yystack.l_mark[-1].str); + free(yystack.l_mark[0].str); + } else if(strcmp(yystack.l_mark[0].str, "nodefault")==0) { + if(!cfg_strlist_insert(&cfg_parser->cfg->views-> + local_zones_nodefault, yystack.l_mark[-1].str)) + fatal_exit("out of memory adding local-zone"); + free(yystack.l_mark[0].str); +#ifdef USE_IPSET + } else if(strcmp(yystack.l_mark[0].str, "ipset")==0) { + if(!cfg_strlist_insert(&cfg_parser->cfg->views-> + local_zones_ipset, yystack.l_mark[-1].str)) + fatal_exit("out of memory adding local-zone"); + free(yystack.l_mark[0].str); +#endif + } else { + if(!cfg_str2list_insert( + &cfg_parser->cfg->views->local_zones, + yystack.l_mark[-1].str, yystack.l_mark[0].str)) + fatal_exit("out of memory adding local-zone"); + } + } +break; +case 484: +#line 2661 "./util/configparser.y" + { + OUTYY(("P(view_response_ip:%s %s)\n", yystack.l_mark[-1].str, yystack.l_mark[0].str)); + validate_respip_action(yystack.l_mark[0].str); + if(!cfg_str2list_insert( + &cfg_parser->cfg->views->respip_actions, yystack.l_mark[-1].str, yystack.l_mark[0].str)) + fatal_exit("out of memory adding per-view " + "response-ip action"); + } +break; +case 485: +#line 2671 "./util/configparser.y" + { + OUTYY(("P(view_response_ip_data:%s)\n", yystack.l_mark[-1].str)); + if(!cfg_str2list_insert( + &cfg_parser->cfg->views->respip_data, yystack.l_mark[-1].str, yystack.l_mark[0].str)) + fatal_exit("out of memory adding response-ip-data"); + } +break; +case 486: +#line 2679 "./util/configparser.y" + { + OUTYY(("P(view_local_data:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, yystack.l_mark[0].str)) { + fatal_exit("out of memory adding local-data"); + } + } +break; +case 487: +#line 2687 "./util/configparser.y" + { + char* ptr; + OUTYY(("P(view_local_data_ptr:%s)\n", yystack.l_mark[0].str)); + ptr = cfg_ptr_reverse(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + if(ptr) { + if(!cfg_strlist_insert(&cfg_parser->cfg->views-> + local_data, ptr)) + fatal_exit("out of memory adding local-data"); + } else { + yyerror("local-data-ptr could not be reversed"); + } + } +break; +case 488: +#line 2702 "./util/configparser.y" + { + OUTYY(("P(view-first:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->views->isfirst=(strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 489: +#line 2711 "./util/configparser.y" + { + OUTYY(("\nP(remote-control:)\n")); + } +break; +case 500: +#line 2722 "./util/configparser.y" + { + OUTYY(("P(control_enable:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->remote_control_enable = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 501: +#line 2732 "./util/configparser.y" + { + OUTYY(("P(control_port:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0) + yyerror("control port number expected"); + else cfg_parser->cfg->control_port = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 502: +#line 2741 "./util/configparser.y" + { + OUTYY(("P(control_interface:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, yystack.l_mark[0].str)) + yyerror("out of memory"); + } +break; +case 503: +#line 2748 "./util/configparser.y" + { + OUTYY(("P(control_use_cert:%s)\n", yystack.l_mark[0].str)); + cfg_parser->cfg->control_use_cert = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 504: +#line 2755 "./util/configparser.y" + { + OUTYY(("P(rc_server_key_file:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->server_key_file); + cfg_parser->cfg->server_key_file = yystack.l_mark[0].str; + } +break; +case 505: +#line 2762 "./util/configparser.y" + { + OUTYY(("P(rc_server_cert_file:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->server_cert_file); + cfg_parser->cfg->server_cert_file = yystack.l_mark[0].str; + } +break; +case 506: +#line 2769 "./util/configparser.y" + { + OUTYY(("P(rc_control_key_file:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->control_key_file); + cfg_parser->cfg->control_key_file = yystack.l_mark[0].str; + } +break; +case 507: +#line 2776 "./util/configparser.y" + { + OUTYY(("P(rc_control_cert_file:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->control_cert_file); + cfg_parser->cfg->control_cert_file = yystack.l_mark[0].str; + } +break; +case 508: +#line 2783 "./util/configparser.y" + { + OUTYY(("\nP(dnstap:)\n")); + } +break; +case 529: +#line 2803 "./util/configparser.y" + { + OUTYY(("P(dt_dnstap_enable:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->dnstap = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 530: +#line 2812 "./util/configparser.y" + { + OUTYY(("P(dt_dnstap_socket_path:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->dnstap_socket_path); + cfg_parser->cfg->dnstap_socket_path = yystack.l_mark[0].str; + } +break; +case 531: +#line 2819 "./util/configparser.y" + { + OUTYY(("P(dt_dnstap_ip:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->dnstap_ip); + cfg_parser->cfg->dnstap_ip = yystack.l_mark[0].str; + } +break; +case 532: +#line 2826 "./util/configparser.y" + { + OUTYY(("P(dt_dnstap_tls:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->dnstap_tls = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 533: +#line 2835 "./util/configparser.y" + { + OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->dnstap_tls_server_name); + cfg_parser->cfg->dnstap_tls_server_name = yystack.l_mark[0].str; + } +break; +case 534: +#line 2842 "./util/configparser.y" + { + OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->dnstap_tls_cert_bundle); + cfg_parser->cfg->dnstap_tls_cert_bundle = yystack.l_mark[0].str; + } +break; +case 535: +#line 2849 "./util/configparser.y" + { + OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->dnstap_tls_client_key_file); + cfg_parser->cfg->dnstap_tls_client_key_file = yystack.l_mark[0].str; + } +break; +case 536: +#line 2856 "./util/configparser.y" + { + OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->dnstap_tls_client_cert_file); + cfg_parser->cfg->dnstap_tls_client_cert_file = yystack.l_mark[0].str; + } +break; +case 537: +#line 2863 "./util/configparser.y" + { + OUTYY(("P(dt_dnstap_send_identity:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->dnstap_send_identity = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 538: +#line 2872 "./util/configparser.y" + { + OUTYY(("P(dt_dnstap_send_version:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->dnstap_send_version = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 539: +#line 2881 "./util/configparser.y" + { + OUTYY(("P(dt_dnstap_identity:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->dnstap_identity); + cfg_parser->cfg->dnstap_identity = yystack.l_mark[0].str; + } +break; +case 540: +#line 2888 "./util/configparser.y" + { + OUTYY(("P(dt_dnstap_version:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->dnstap_version); + cfg_parser->cfg->dnstap_version = yystack.l_mark[0].str; + } +break; +case 541: +#line 2895 "./util/configparser.y" + { + OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->dnstap_log_resolver_query_messages = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 542: +#line 2905 "./util/configparser.y" + { + OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->dnstap_log_resolver_response_messages = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 543: +#line 2915 "./util/configparser.y" + { + OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->dnstap_log_client_query_messages = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 544: +#line 2925 "./util/configparser.y" + { + OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->dnstap_log_client_response_messages = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 545: +#line 2935 "./util/configparser.y" + { + OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->dnstap_log_forwarder_query_messages = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 546: +#line 2945 "./util/configparser.y" + { + OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->dnstap_log_forwarder_response_messages = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 547: +#line 2955 "./util/configparser.y" + { + OUTYY(("\nP(python:)\n")); + } +break; +case 551: +#line 2964 "./util/configparser.y" + { + OUTYY(("P(python-script:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, yystack.l_mark[0].str)) + yyerror("out of memory"); + } +break; +case 552: +#line 2970 "./util/configparser.y" + { + OUTYY(("P(disable_dnssec_lame_check:%s)\n", yystack.l_mark[0].str)); + if (strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->disable_dnssec_lame_check = + (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 553: +#line 2980 "./util/configparser.y" + { + OUTYY(("P(server_log_identity:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->log_identity); + cfg_parser->cfg->log_identity = yystack.l_mark[0].str; + } +break; +case 554: +#line 2987 "./util/configparser.y" + { + OUTYY(("P(server_response_ip:%s %s)\n", yystack.l_mark[-1].str, yystack.l_mark[0].str)); + validate_respip_action(yystack.l_mark[0].str); + if(!cfg_str2list_insert(&cfg_parser->cfg->respip_actions, + yystack.l_mark[-1].str, yystack.l_mark[0].str)) + fatal_exit("out of memory adding response-ip"); + } +break; +case 555: +#line 2996 "./util/configparser.y" + { + OUTYY(("P(server_response_ip_data:%s)\n", yystack.l_mark[-1].str)); + if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, + yystack.l_mark[-1].str, yystack.l_mark[0].str)) + fatal_exit("out of memory adding response-ip-data"); + } +break; +case 556: +#line 3004 "./util/configparser.y" + { + OUTYY(("\nP(dnscrypt:)\n")); + } +break; +case 569: +#line 3020 "./util/configparser.y" + { + OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", yystack.l_mark[0].str)); + if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->dnscrypt = (strcmp(yystack.l_mark[0].str, "yes")==0); + free(yystack.l_mark[0].str); + } +break; +case 570: +#line 3030 "./util/configparser.y" + { + OUTYY(("P(dnsc_dnscrypt_port:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0) + yyerror("port number expected"); + else cfg_parser->cfg->dnscrypt_port = atoi(yystack.l_mark[0].str); + free(yystack.l_mark[0].str); + } +break; +case 571: +#line 3039 "./util/configparser.y" + { + OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->dnscrypt_provider); + cfg_parser->cfg->dnscrypt_provider = yystack.l_mark[0].str; + } +break; +case 572: +#line 3046 "./util/configparser.y" + { + OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", yystack.l_mark[0].str)); + if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, yystack.l_mark[0].str)) + log_warn("dnscrypt-provider-cert %s is a duplicate", yystack.l_mark[0].str); + if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, yystack.l_mark[0].str)) + fatal_exit("out of memory adding dnscrypt-provider-cert"); + } +break; +case 573: +#line 3055 "./util/configparser.y" + { + OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", yystack.l_mark[0].str)); + if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, yystack.l_mark[0].str)) + fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); + } +break; +case 574: +#line 3062 "./util/configparser.y" + { + OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", yystack.l_mark[0].str)); + if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, yystack.l_mark[0].str)) + log_warn("dnscrypt-secret-key: %s is a duplicate", yystack.l_mark[0].str); + if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, yystack.l_mark[0].str)) + fatal_exit("out of memory adding dnscrypt-secret-key"); + } +break; +case 575: +#line 3071 "./util/configparser.y" + { + OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", yystack.l_mark[0].str)); + if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) + yyerror("memory size expected"); + free(yystack.l_mark[0].str); + } +break; +case 576: +#line 3079 "./util/configparser.y" + { + OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0) + yyerror("number expected"); + else { + cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs = atoi(yystack.l_mark[0].str); + if(!is_pow2(cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs)) + yyerror("must be a power of 2"); + } + free(yystack.l_mark[0].str); + } +break; +case 577: +#line 3092 "./util/configparser.y" + { + OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", yystack.l_mark[0].str)); + if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->dnscrypt_nonce_cache_size)) + yyerror("memory size expected"); + free(yystack.l_mark[0].str); + } +break; +case 578: +#line 3100 "./util/configparser.y" + { + OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0) + yyerror("number expected"); + else { + cfg_parser->cfg->dnscrypt_nonce_cache_slabs = atoi(yystack.l_mark[0].str); + if(!is_pow2(cfg_parser->cfg->dnscrypt_nonce_cache_slabs)) + yyerror("must be a power of 2"); + } + free(yystack.l_mark[0].str); + } +break; +case 579: +#line 3113 "./util/configparser.y" + { + OUTYY(("\nP(cachedb:)\n")); + } +break; +case 587: +#line 3123 "./util/configparser.y" + { + #ifdef USE_CACHEDB + OUTYY(("P(backend:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->cachedb_backend); + cfg_parser->cfg->cachedb_backend = yystack.l_mark[0].str; + #else + OUTYY(("P(Compiled without cachedb, ignoring)\n")); + free(yystack.l_mark[0].str); + #endif + } +break; +case 588: +#line 3135 "./util/configparser.y" + { + #ifdef USE_CACHEDB + OUTYY(("P(secret-seed:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->cachedb_secret); + cfg_parser->cfg->cachedb_secret = yystack.l_mark[0].str; + #else + OUTYY(("P(Compiled without cachedb, ignoring)\n")); + free(yystack.l_mark[0].str); + #endif + } +break; +case 589: +#line 3147 "./util/configparser.y" + { + #if defined(USE_CACHEDB) && defined(USE_REDIS) + OUTYY(("P(redis_server_host:%s)\n", yystack.l_mark[0].str)); + free(cfg_parser->cfg->redis_server_host); + cfg_parser->cfg->redis_server_host = yystack.l_mark[0].str; + #else + OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); + free(yystack.l_mark[0].str); + #endif + } +break; +case 590: +#line 3159 "./util/configparser.y" + { + #if defined(USE_CACHEDB) && defined(USE_REDIS) + int port; + OUTYY(("P(redis_server_port:%s)\n", yystack.l_mark[0].str)); + port = atoi(yystack.l_mark[0].str); + if(port == 0 || port < 0 || port > 65535) + yyerror("valid redis server port number expected"); + else cfg_parser->cfg->redis_server_port = port; + #else + OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); + #endif + free(yystack.l_mark[0].str); + } +break; +case 591: +#line 3174 "./util/configparser.y" + { + #if defined(USE_CACHEDB) && defined(USE_REDIS) + OUTYY(("P(redis_timeout:%s)\n", yystack.l_mark[0].str)); + if(atoi(yystack.l_mark[0].str) == 0) + yyerror("redis timeout value expected"); + else cfg_parser->cfg->redis_timeout = atoi(yystack.l_mark[0].str); + #else + OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); + #endif + free(yystack.l_mark[0].str); + } +break; +case 592: +#line 3187 "./util/configparser.y" + { + OUTYY(("P(server_tcp_connection_limit:%s %s)\n", yystack.l_mark[-1].str, yystack.l_mark[0].str)); + if (atoi(yystack.l_mark[0].str) < 0) + yyerror("positive number expected"); + else { + if(!cfg_str2list_insert(&cfg_parser->cfg->tcp_connection_limits, yystack.l_mark[-1].str, yystack.l_mark[0].str)) + fatal_exit("out of memory adding tcp connection limit"); + } + } +break; +case 593: +#line 3198 "./util/configparser.y" + { + OUTYY(("\nP(ipset:)\n")); + } +break; +case 598: +#line 3207 "./util/configparser.y" + { + #ifdef USE_IPSET + OUTYY(("P(name-v4:%s)\n", yystack.l_mark[0].str)); + if(cfg_parser->cfg->ipset_name_v4) + yyerror("ipset name v4 override, there must be one " + "name for ip v4"); + free(cfg_parser->cfg->ipset_name_v4); + cfg_parser->cfg->ipset_name_v4 = yystack.l_mark[0].str; + #else + OUTYY(("P(Compiled without ipset, ignoring)\n")); + free(yystack.l_mark[0].str); + #endif + } +break; +case 599: +#line 3222 "./util/configparser.y" + { + #ifdef USE_IPSET + OUTYY(("P(name-v6:%s)\n", yystack.l_mark[0].str)); + if(cfg_parser->cfg->ipset_name_v6) + yyerror("ipset name v6 override, there must be one " + "name for ip v6"); + free(cfg_parser->cfg->ipset_name_v6); + cfg_parser->cfg->ipset_name_v6 = yystack.l_mark[0].str; + #else + OUTYY(("P(Compiled without ipset, ignoring)\n")); + free(yystack.l_mark[0].str); + #endif + } +break; +#line 5180 "util/configparser.c" + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/util/configparser.h b/util/configparser.h index f5958de4b..0b383b6d1 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -1,643 +1,298 @@ -/* A Bison parser, made by GNU Bison 3.4.1. */ - -/* Bison interface for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, - Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -/* Undocumented macros, especially those whose name start with YY_, - are private implementation details. Do not rely on them. */ - -#ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED -# define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED -/* Debug traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 +#define SPACE 257 +#define LETTER 258 +#define NEWLINE 259 +#define COMMENT 260 +#define COLON 261 +#define ANY 262 +#define ZONESTR 263 +#define STRING_ARG 264 +#define VAR_SERVER 265 +#define VAR_VERBOSITY 266 +#define VAR_NUM_THREADS 267 +#define VAR_PORT 268 +#define VAR_OUTGOING_RANGE 269 +#define VAR_INTERFACE 270 +#define VAR_PREFER_IP4 271 +#define VAR_DO_IP4 272 +#define VAR_DO_IP6 273 +#define VAR_PREFER_IP6 274 +#define VAR_DO_UDP 275 +#define VAR_DO_TCP 276 +#define VAR_TCP_MSS 277 +#define VAR_OUTGOING_TCP_MSS 278 +#define VAR_TCP_IDLE_TIMEOUT 279 +#define VAR_EDNS_TCP_KEEPALIVE 280 +#define VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 281 +#define VAR_CHROOT 282 +#define VAR_USERNAME 283 +#define VAR_DIRECTORY 284 +#define VAR_LOGFILE 285 +#define VAR_PIDFILE 286 +#define VAR_MSG_CACHE_SIZE 287 +#define VAR_MSG_CACHE_SLABS 288 +#define VAR_NUM_QUERIES_PER_THREAD 289 +#define VAR_RRSET_CACHE_SIZE 290 +#define VAR_RRSET_CACHE_SLABS 291 +#define VAR_OUTGOING_NUM_TCP 292 +#define VAR_INFRA_HOST_TTL 293 +#define VAR_INFRA_LAME_TTL 294 +#define VAR_INFRA_CACHE_SLABS 295 +#define VAR_INFRA_CACHE_NUMHOSTS 296 +#define VAR_INFRA_CACHE_LAME_SIZE 297 +#define VAR_NAME 298 +#define VAR_STUB_ZONE 299 +#define VAR_STUB_HOST 300 +#define VAR_STUB_ADDR 301 +#define VAR_TARGET_FETCH_POLICY 302 +#define VAR_HARDEN_SHORT_BUFSIZE 303 +#define VAR_HARDEN_LARGE_QUERIES 304 +#define VAR_FORWARD_ZONE 305 +#define VAR_FORWARD_HOST 306 +#define VAR_FORWARD_ADDR 307 +#define VAR_DO_NOT_QUERY_ADDRESS 308 +#define VAR_HIDE_IDENTITY 309 +#define VAR_HIDE_VERSION 310 +#define VAR_IDENTITY 311 +#define VAR_VERSION 312 +#define VAR_HARDEN_GLUE 313 +#define VAR_MODULE_CONF 314 +#define VAR_TRUST_ANCHOR_FILE 315 +#define VAR_TRUST_ANCHOR 316 +#define VAR_VAL_OVERRIDE_DATE 317 +#define VAR_BOGUS_TTL 318 +#define VAR_VAL_CLEAN_ADDITIONAL 319 +#define VAR_VAL_PERMISSIVE_MODE 320 +#define VAR_INCOMING_NUM_TCP 321 +#define VAR_MSG_BUFFER_SIZE 322 +#define VAR_KEY_CACHE_SIZE 323 +#define VAR_KEY_CACHE_SLABS 324 +#define VAR_TRUSTED_KEYS_FILE 325 +#define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 326 +#define VAR_USE_SYSLOG 327 +#define VAR_OUTGOING_INTERFACE 328 +#define VAR_ROOT_HINTS 329 +#define VAR_DO_NOT_QUERY_LOCALHOST 330 +#define VAR_CACHE_MAX_TTL 331 +#define VAR_HARDEN_DNSSEC_STRIPPED 332 +#define VAR_ACCESS_CONTROL 333 +#define VAR_LOCAL_ZONE 334 +#define VAR_LOCAL_DATA 335 +#define VAR_INTERFACE_AUTOMATIC 336 +#define VAR_STATISTICS_INTERVAL 337 +#define VAR_DO_DAEMONIZE 338 +#define VAR_USE_CAPS_FOR_ID 339 +#define VAR_STATISTICS_CUMULATIVE 340 +#define VAR_OUTGOING_PORT_PERMIT 341 +#define VAR_OUTGOING_PORT_AVOID 342 +#define VAR_DLV_ANCHOR_FILE 343 +#define VAR_DLV_ANCHOR 344 +#define VAR_NEG_CACHE_SIZE 345 +#define VAR_HARDEN_REFERRAL_PATH 346 +#define VAR_PRIVATE_ADDRESS 347 +#define VAR_PRIVATE_DOMAIN 348 +#define VAR_REMOTE_CONTROL 349 +#define VAR_CONTROL_ENABLE 350 +#define VAR_CONTROL_INTERFACE 351 +#define VAR_CONTROL_PORT 352 +#define VAR_SERVER_KEY_FILE 353 +#define VAR_SERVER_CERT_FILE 354 +#define VAR_CONTROL_KEY_FILE 355 +#define VAR_CONTROL_CERT_FILE 356 +#define VAR_CONTROL_USE_CERT 357 +#define VAR_EXTENDED_STATISTICS 358 +#define VAR_LOCAL_DATA_PTR 359 +#define VAR_JOSTLE_TIMEOUT 360 +#define VAR_STUB_PRIME 361 +#define VAR_UNWANTED_REPLY_THRESHOLD 362 +#define VAR_LOG_TIME_ASCII 363 +#define VAR_DOMAIN_INSECURE 364 +#define VAR_PYTHON 365 +#define VAR_PYTHON_SCRIPT 366 +#define VAR_VAL_SIG_SKEW_MIN 367 +#define VAR_VAL_SIG_SKEW_MAX 368 +#define VAR_CACHE_MIN_TTL 369 +#define VAR_VAL_LOG_LEVEL 370 +#define VAR_AUTO_TRUST_ANCHOR_FILE 371 +#define VAR_KEEP_MISSING 372 +#define VAR_ADD_HOLDDOWN 373 +#define VAR_DEL_HOLDDOWN 374 +#define VAR_SO_RCVBUF 375 +#define VAR_EDNS_BUFFER_SIZE 376 +#define VAR_PREFETCH 377 +#define VAR_PREFETCH_KEY 378 +#define VAR_SO_SNDBUF 379 +#define VAR_SO_REUSEPORT 380 +#define VAR_HARDEN_BELOW_NXDOMAIN 381 +#define VAR_IGNORE_CD_FLAG 382 +#define VAR_LOG_QUERIES 383 +#define VAR_LOG_REPLIES 384 +#define VAR_LOG_LOCAL_ACTIONS 385 +#define VAR_TCP_UPSTREAM 386 +#define VAR_SSL_UPSTREAM 387 +#define VAR_SSL_SERVICE_KEY 388 +#define VAR_SSL_SERVICE_PEM 389 +#define VAR_SSL_PORT 390 +#define VAR_FORWARD_FIRST 391 +#define VAR_STUB_SSL_UPSTREAM 392 +#define VAR_FORWARD_SSL_UPSTREAM 393 +#define VAR_TLS_CERT_BUNDLE 394 +#define VAR_STUB_FIRST 395 +#define VAR_MINIMAL_RESPONSES 396 +#define VAR_RRSET_ROUNDROBIN 397 +#define VAR_MAX_UDP_SIZE 398 +#define VAR_DELAY_CLOSE 399 +#define VAR_UNBLOCK_LAN_ZONES 400 +#define VAR_INSECURE_LAN_ZONES 401 +#define VAR_INFRA_CACHE_MIN_RTT 402 +#define VAR_DNS64_PREFIX 403 +#define VAR_DNS64_SYNTHALL 404 +#define VAR_DNS64_IGNORE_AAAA 405 +#define VAR_DNSTAP 406 +#define VAR_DNSTAP_ENABLE 407 +#define VAR_DNSTAP_SOCKET_PATH 408 +#define VAR_DNSTAP_IP 409 +#define VAR_DNSTAP_TLS 410 +#define VAR_DNSTAP_TLS_SERVER_NAME 411 +#define VAR_DNSTAP_TLS_CERT_BUNDLE 412 +#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 413 +#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 414 +#define VAR_DNSTAP_SEND_IDENTITY 415 +#define VAR_DNSTAP_SEND_VERSION 416 +#define VAR_DNSTAP_IDENTITY 417 +#define VAR_DNSTAP_VERSION 418 +#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 419 +#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 420 +#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 421 +#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 422 +#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 423 +#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 424 +#define VAR_RESPONSE_IP_TAG 425 +#define VAR_RESPONSE_IP 426 +#define VAR_RESPONSE_IP_DATA 427 +#define VAR_HARDEN_ALGO_DOWNGRADE 428 +#define VAR_IP_TRANSPARENT 429 +#define VAR_IP_DSCP 430 +#define VAR_DISABLE_DNSSEC_LAME_CHECK 431 +#define VAR_IP_RATELIMIT 432 +#define VAR_IP_RATELIMIT_SLABS 433 +#define VAR_IP_RATELIMIT_SIZE 434 +#define VAR_RATELIMIT 435 +#define VAR_RATELIMIT_SLABS 436 +#define VAR_RATELIMIT_SIZE 437 +#define VAR_RATELIMIT_FOR_DOMAIN 438 +#define VAR_RATELIMIT_BELOW_DOMAIN 439 +#define VAR_IP_RATELIMIT_FACTOR 440 +#define VAR_RATELIMIT_FACTOR 441 +#define VAR_SEND_CLIENT_SUBNET 442 +#define VAR_CLIENT_SUBNET_ZONE 443 +#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 444 +#define VAR_CLIENT_SUBNET_OPCODE 445 +#define VAR_MAX_CLIENT_SUBNET_IPV4 446 +#define VAR_MAX_CLIENT_SUBNET_IPV6 447 +#define VAR_MIN_CLIENT_SUBNET_IPV4 448 +#define VAR_MIN_CLIENT_SUBNET_IPV6 449 +#define VAR_MAX_ECS_TREE_SIZE_IPV4 450 +#define VAR_MAX_ECS_TREE_SIZE_IPV6 451 +#define VAR_CAPS_WHITELIST 452 +#define VAR_CACHE_MAX_NEGATIVE_TTL 453 +#define VAR_PERMIT_SMALL_HOLDDOWN 454 +#define VAR_QNAME_MINIMISATION 455 +#define VAR_QNAME_MINIMISATION_STRICT 456 +#define VAR_IP_FREEBIND 457 +#define VAR_DEFINE_TAG 458 +#define VAR_LOCAL_ZONE_TAG 459 +#define VAR_ACCESS_CONTROL_TAG 460 +#define VAR_LOCAL_ZONE_OVERRIDE 461 +#define VAR_ACCESS_CONTROL_TAG_ACTION 462 +#define VAR_ACCESS_CONTROL_TAG_DATA 463 +#define VAR_VIEW 464 +#define VAR_ACCESS_CONTROL_VIEW 465 +#define VAR_VIEW_FIRST 466 +#define VAR_SERVE_EXPIRED 467 +#define VAR_SERVE_EXPIRED_TTL 468 +#define VAR_SERVE_EXPIRED_TTL_RESET 469 +#define VAR_SERVE_EXPIRED_REPLY_TTL 470 +#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 471 +#define VAR_FAKE_DSA 472 +#define VAR_FAKE_SHA1 473 +#define VAR_LOG_IDENTITY 474 +#define VAR_HIDE_TRUSTANCHOR 475 +#define VAR_TRUST_ANCHOR_SIGNALING 476 +#define VAR_AGGRESSIVE_NSEC 477 +#define VAR_USE_SYSTEMD 478 +#define VAR_SHM_ENABLE 479 +#define VAR_SHM_KEY 480 +#define VAR_ROOT_KEY_SENTINEL 481 +#define VAR_DNSCRYPT 482 +#define VAR_DNSCRYPT_ENABLE 483 +#define VAR_DNSCRYPT_PORT 484 +#define VAR_DNSCRYPT_PROVIDER 485 +#define VAR_DNSCRYPT_SECRET_KEY 486 +#define VAR_DNSCRYPT_PROVIDER_CERT 487 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 488 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 489 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 490 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 491 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 492 +#define VAR_PAD_RESPONSES 493 +#define VAR_PAD_RESPONSES_BLOCK_SIZE 494 +#define VAR_PAD_QUERIES 495 +#define VAR_PAD_QUERIES_BLOCK_SIZE 496 +#define VAR_IPSECMOD_ENABLED 497 +#define VAR_IPSECMOD_HOOK 498 +#define VAR_IPSECMOD_IGNORE_BOGUS 499 +#define VAR_IPSECMOD_MAX_TTL 500 +#define VAR_IPSECMOD_WHITELIST 501 +#define VAR_IPSECMOD_STRICT 502 +#define VAR_CACHEDB 503 +#define VAR_CACHEDB_BACKEND 504 +#define VAR_CACHEDB_SECRETSEED 505 +#define VAR_CACHEDB_REDISHOST 506 +#define VAR_CACHEDB_REDISPORT 507 +#define VAR_CACHEDB_REDISTIMEOUT 508 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 509 +#define VAR_FOR_UPSTREAM 510 +#define VAR_AUTH_ZONE 511 +#define VAR_ZONEFILE 512 +#define VAR_MASTER 513 +#define VAR_URL 514 +#define VAR_FOR_DOWNSTREAM 515 +#define VAR_FALLBACK_ENABLED 516 +#define VAR_TLS_ADDITIONAL_PORT 517 +#define VAR_LOW_RTT 518 +#define VAR_LOW_RTT_PERMIL 519 +#define VAR_FAST_SERVER_PERMIL 520 +#define VAR_FAST_SERVER_NUM 521 +#define VAR_ALLOW_NOTIFY 522 +#define VAR_TLS_WIN_CERT 523 +#define VAR_TCP_CONNECTION_LIMIT 524 +#define VAR_FORWARD_NO_CACHE 525 +#define VAR_STUB_NO_CACHE 526 +#define VAR_LOG_SERVFAIL 527 +#define VAR_DENY_ANY 528 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 529 +#define VAR_LOG_TAG_QUERYREPLY 530 +#define VAR_STREAM_WAIT_SIZE 531 +#define VAR_TLS_CIPHERS 532 +#define VAR_TLS_CIPHERSUITES 533 +#define VAR_IPSET 534 +#define VAR_IPSET_NAME_V4 535 +#define VAR_IPSET_NAME_V6 536 +#define VAR_TLS_SESSION_TICKET_KEYS 537 +#define VAR_RPZ 538 +#define VAR_TAGS 539 +#define VAR_RPZ_ACTION_OVERRIDE 540 +#define VAR_RPZ_CNAME_OVERRIDE 541 +#define VAR_RPZ_LOG 542 +#define VAR_RPZ_LOG_NAME 543 +#ifdef YYSTYPE +#undef YYSTYPE_IS_DECLARED +#define YYSTYPE_IS_DECLARED 1 #endif -#if YYDEBUG -extern int yydebug; -#endif - -/* Token type. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - enum yytokentype - { - SPACE = 258, - LETTER = 259, - NEWLINE = 260, - COMMENT = 261, - COLON = 262, - ANY = 263, - ZONESTR = 264, - STRING_ARG = 265, - VAR_SERVER = 266, - VAR_VERBOSITY = 267, - VAR_NUM_THREADS = 268, - VAR_PORT = 269, - VAR_OUTGOING_RANGE = 270, - VAR_INTERFACE = 271, - VAR_PREFER_IP4 = 272, - VAR_DO_IP4 = 273, - VAR_DO_IP6 = 274, - VAR_PREFER_IP6 = 275, - VAR_DO_UDP = 276, - VAR_DO_TCP = 277, - VAR_TCP_MSS = 278, - VAR_OUTGOING_TCP_MSS = 279, - VAR_TCP_IDLE_TIMEOUT = 280, - VAR_EDNS_TCP_KEEPALIVE = 281, - VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 282, - VAR_CHROOT = 283, - VAR_USERNAME = 284, - VAR_DIRECTORY = 285, - VAR_LOGFILE = 286, - VAR_PIDFILE = 287, - VAR_MSG_CACHE_SIZE = 288, - VAR_MSG_CACHE_SLABS = 289, - VAR_NUM_QUERIES_PER_THREAD = 290, - VAR_RRSET_CACHE_SIZE = 291, - VAR_RRSET_CACHE_SLABS = 292, - VAR_OUTGOING_NUM_TCP = 293, - VAR_INFRA_HOST_TTL = 294, - VAR_INFRA_LAME_TTL = 295, - VAR_INFRA_CACHE_SLABS = 296, - VAR_INFRA_CACHE_NUMHOSTS = 297, - VAR_INFRA_CACHE_LAME_SIZE = 298, - VAR_NAME = 299, - VAR_STUB_ZONE = 300, - VAR_STUB_HOST = 301, - VAR_STUB_ADDR = 302, - VAR_TARGET_FETCH_POLICY = 303, - VAR_HARDEN_SHORT_BUFSIZE = 304, - VAR_HARDEN_LARGE_QUERIES = 305, - VAR_FORWARD_ZONE = 306, - VAR_FORWARD_HOST = 307, - VAR_FORWARD_ADDR = 308, - VAR_DO_NOT_QUERY_ADDRESS = 309, - VAR_HIDE_IDENTITY = 310, - VAR_HIDE_VERSION = 311, - VAR_IDENTITY = 312, - VAR_VERSION = 313, - VAR_HARDEN_GLUE = 314, - VAR_MODULE_CONF = 315, - VAR_TRUST_ANCHOR_FILE = 316, - VAR_TRUST_ANCHOR = 317, - VAR_VAL_OVERRIDE_DATE = 318, - VAR_BOGUS_TTL = 319, - VAR_VAL_CLEAN_ADDITIONAL = 320, - VAR_VAL_PERMISSIVE_MODE = 321, - VAR_INCOMING_NUM_TCP = 322, - VAR_MSG_BUFFER_SIZE = 323, - VAR_KEY_CACHE_SIZE = 324, - VAR_KEY_CACHE_SLABS = 325, - VAR_TRUSTED_KEYS_FILE = 326, - VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 327, - VAR_USE_SYSLOG = 328, - VAR_OUTGOING_INTERFACE = 329, - VAR_ROOT_HINTS = 330, - VAR_DO_NOT_QUERY_LOCALHOST = 331, - VAR_CACHE_MAX_TTL = 332, - VAR_HARDEN_DNSSEC_STRIPPED = 333, - VAR_ACCESS_CONTROL = 334, - VAR_LOCAL_ZONE = 335, - VAR_LOCAL_DATA = 336, - VAR_INTERFACE_AUTOMATIC = 337, - VAR_STATISTICS_INTERVAL = 338, - VAR_DO_DAEMONIZE = 339, - VAR_USE_CAPS_FOR_ID = 340, - VAR_STATISTICS_CUMULATIVE = 341, - VAR_OUTGOING_PORT_PERMIT = 342, - VAR_OUTGOING_PORT_AVOID = 343, - VAR_DLV_ANCHOR_FILE = 344, - VAR_DLV_ANCHOR = 345, - VAR_NEG_CACHE_SIZE = 346, - VAR_HARDEN_REFERRAL_PATH = 347, - VAR_PRIVATE_ADDRESS = 348, - VAR_PRIVATE_DOMAIN = 349, - VAR_REMOTE_CONTROL = 350, - VAR_CONTROL_ENABLE = 351, - VAR_CONTROL_INTERFACE = 352, - VAR_CONTROL_PORT = 353, - VAR_SERVER_KEY_FILE = 354, - VAR_SERVER_CERT_FILE = 355, - VAR_CONTROL_KEY_FILE = 356, - VAR_CONTROL_CERT_FILE = 357, - VAR_CONTROL_USE_CERT = 358, - VAR_EXTENDED_STATISTICS = 359, - VAR_LOCAL_DATA_PTR = 360, - VAR_JOSTLE_TIMEOUT = 361, - VAR_STUB_PRIME = 362, - VAR_UNWANTED_REPLY_THRESHOLD = 363, - VAR_LOG_TIME_ASCII = 364, - VAR_DOMAIN_INSECURE = 365, - VAR_PYTHON = 366, - VAR_PYTHON_SCRIPT = 367, - VAR_VAL_SIG_SKEW_MIN = 368, - VAR_VAL_SIG_SKEW_MAX = 369, - VAR_CACHE_MIN_TTL = 370, - VAR_VAL_LOG_LEVEL = 371, - VAR_AUTO_TRUST_ANCHOR_FILE = 372, - VAR_KEEP_MISSING = 373, - VAR_ADD_HOLDDOWN = 374, - VAR_DEL_HOLDDOWN = 375, - VAR_SO_RCVBUF = 376, - VAR_EDNS_BUFFER_SIZE = 377, - VAR_PREFETCH = 378, - VAR_PREFETCH_KEY = 379, - VAR_SO_SNDBUF = 380, - VAR_SO_REUSEPORT = 381, - VAR_HARDEN_BELOW_NXDOMAIN = 382, - VAR_IGNORE_CD_FLAG = 383, - VAR_LOG_QUERIES = 384, - VAR_LOG_REPLIES = 385, - VAR_LOG_LOCAL_ACTIONS = 386, - VAR_TCP_UPSTREAM = 387, - VAR_SSL_UPSTREAM = 388, - VAR_SSL_SERVICE_KEY = 389, - VAR_SSL_SERVICE_PEM = 390, - VAR_SSL_PORT = 391, - VAR_FORWARD_FIRST = 392, - VAR_STUB_SSL_UPSTREAM = 393, - VAR_FORWARD_SSL_UPSTREAM = 394, - VAR_TLS_CERT_BUNDLE = 395, - VAR_STUB_FIRST = 396, - VAR_MINIMAL_RESPONSES = 397, - VAR_RRSET_ROUNDROBIN = 398, - VAR_MAX_UDP_SIZE = 399, - VAR_DELAY_CLOSE = 400, - VAR_UNBLOCK_LAN_ZONES = 401, - VAR_INSECURE_LAN_ZONES = 402, - VAR_INFRA_CACHE_MIN_RTT = 403, - VAR_DNS64_PREFIX = 404, - VAR_DNS64_SYNTHALL = 405, - VAR_DNS64_IGNORE_AAAA = 406, - VAR_DNSTAP = 407, - VAR_DNSTAP_ENABLE = 408, - VAR_DNSTAP_SOCKET_PATH = 409, - VAR_DNSTAP_IP = 410, - VAR_DNSTAP_TLS = 411, - VAR_DNSTAP_TLS_SERVER_NAME = 412, - VAR_DNSTAP_TLS_CERT_BUNDLE = 413, - VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 414, - VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 415, - VAR_DNSTAP_SEND_IDENTITY = 416, - VAR_DNSTAP_SEND_VERSION = 417, - VAR_DNSTAP_IDENTITY = 418, - VAR_DNSTAP_VERSION = 419, - VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 420, - VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 421, - VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 422, - VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 423, - VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 424, - VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 425, - VAR_RESPONSE_IP_TAG = 426, - VAR_RESPONSE_IP = 427, - VAR_RESPONSE_IP_DATA = 428, - VAR_HARDEN_ALGO_DOWNGRADE = 429, - VAR_IP_TRANSPARENT = 430, - VAR_IP_DSCP = 431, - VAR_DISABLE_DNSSEC_LAME_CHECK = 432, - VAR_IP_RATELIMIT = 433, - VAR_IP_RATELIMIT_SLABS = 434, - VAR_IP_RATELIMIT_SIZE = 435, - VAR_RATELIMIT = 436, - VAR_RATELIMIT_SLABS = 437, - VAR_RATELIMIT_SIZE = 438, - VAR_RATELIMIT_FOR_DOMAIN = 439, - VAR_RATELIMIT_BELOW_DOMAIN = 440, - VAR_IP_RATELIMIT_FACTOR = 441, - VAR_RATELIMIT_FACTOR = 442, - VAR_SEND_CLIENT_SUBNET = 443, - VAR_CLIENT_SUBNET_ZONE = 444, - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 445, - VAR_CLIENT_SUBNET_OPCODE = 446, - VAR_MAX_CLIENT_SUBNET_IPV4 = 447, - VAR_MAX_CLIENT_SUBNET_IPV6 = 448, - VAR_MIN_CLIENT_SUBNET_IPV4 = 449, - VAR_MIN_CLIENT_SUBNET_IPV6 = 450, - VAR_MAX_ECS_TREE_SIZE_IPV4 = 451, - VAR_MAX_ECS_TREE_SIZE_IPV6 = 452, - VAR_CAPS_WHITELIST = 453, - VAR_CACHE_MAX_NEGATIVE_TTL = 454, - VAR_PERMIT_SMALL_HOLDDOWN = 455, - VAR_QNAME_MINIMISATION = 456, - VAR_QNAME_MINIMISATION_STRICT = 457, - VAR_IP_FREEBIND = 458, - VAR_DEFINE_TAG = 459, - VAR_LOCAL_ZONE_TAG = 460, - VAR_ACCESS_CONTROL_TAG = 461, - VAR_LOCAL_ZONE_OVERRIDE = 462, - VAR_ACCESS_CONTROL_TAG_ACTION = 463, - VAR_ACCESS_CONTROL_TAG_DATA = 464, - VAR_VIEW = 465, - VAR_ACCESS_CONTROL_VIEW = 466, - VAR_VIEW_FIRST = 467, - VAR_SERVE_EXPIRED = 468, - VAR_SERVE_EXPIRED_TTL = 469, - VAR_SERVE_EXPIRED_TTL_RESET = 470, - VAR_SERVE_EXPIRED_REPLY_TTL = 471, - VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 472, - VAR_FAKE_DSA = 473, - VAR_FAKE_SHA1 = 474, - VAR_LOG_IDENTITY = 475, - VAR_HIDE_TRUSTANCHOR = 476, - VAR_TRUST_ANCHOR_SIGNALING = 477, - VAR_AGGRESSIVE_NSEC = 478, - VAR_USE_SYSTEMD = 479, - VAR_SHM_ENABLE = 480, - VAR_SHM_KEY = 481, - VAR_ROOT_KEY_SENTINEL = 482, - VAR_DNSCRYPT = 483, - VAR_DNSCRYPT_ENABLE = 484, - VAR_DNSCRYPT_PORT = 485, - VAR_DNSCRYPT_PROVIDER = 486, - VAR_DNSCRYPT_SECRET_KEY = 487, - VAR_DNSCRYPT_PROVIDER_CERT = 488, - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 489, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 490, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 491, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 492, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 493, - VAR_IPSECMOD_ENABLED = 494, - VAR_IPSECMOD_HOOK = 495, - VAR_IPSECMOD_IGNORE_BOGUS = 496, - VAR_IPSECMOD_MAX_TTL = 497, - VAR_IPSECMOD_WHITELIST = 498, - VAR_IPSECMOD_STRICT = 499, - VAR_CACHEDB = 500, - VAR_CACHEDB_BACKEND = 501, - VAR_CACHEDB_SECRETSEED = 502, - VAR_CACHEDB_REDISHOST = 503, - VAR_CACHEDB_REDISPORT = 504, - VAR_CACHEDB_REDISTIMEOUT = 505, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 506, - VAR_FOR_UPSTREAM = 507, - VAR_AUTH_ZONE = 508, - VAR_ZONEFILE = 509, - VAR_MASTER = 510, - VAR_URL = 511, - VAR_FOR_DOWNSTREAM = 512, - VAR_FALLBACK_ENABLED = 513, - VAR_TLS_ADDITIONAL_PORT = 514, - VAR_LOW_RTT = 515, - VAR_LOW_RTT_PERMIL = 516, - VAR_FAST_SERVER_PERMIL = 517, - VAR_FAST_SERVER_NUM = 518, - VAR_ALLOW_NOTIFY = 519, - VAR_TLS_WIN_CERT = 520, - VAR_TCP_CONNECTION_LIMIT = 521, - VAR_FORWARD_NO_CACHE = 522, - VAR_STUB_NO_CACHE = 523, - VAR_LOG_SERVFAIL = 524, - VAR_DENY_ANY = 525, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 526, - VAR_LOG_TAG_QUERYREPLY = 527, - VAR_STREAM_WAIT_SIZE = 528, - VAR_TLS_CIPHERS = 529, - VAR_TLS_CIPHERSUITES = 530, - VAR_IPSET = 531, - VAR_IPSET_NAME_V4 = 532, - VAR_IPSET_NAME_V6 = 533, - VAR_TLS_SESSION_TICKET_KEYS = 534, - VAR_RPZ = 535, - VAR_TAGS = 536, - VAR_RPZ_ACTION_OVERRIDE = 537, - VAR_RPZ_CNAME_OVERRIDE = 538, - VAR_RPZ_LOG = 539, - VAR_RPZ_LOG_NAME = 540 - }; -#endif -/* Tokens. */ -#define SPACE 258 -#define LETTER 259 -#define NEWLINE 260 -#define COMMENT 261 -#define COLON 262 -#define ANY 263 -#define ZONESTR 264 -#define STRING_ARG 265 -#define VAR_SERVER 266 -#define VAR_VERBOSITY 267 -#define VAR_NUM_THREADS 268 -#define VAR_PORT 269 -#define VAR_OUTGOING_RANGE 270 -#define VAR_INTERFACE 271 -#define VAR_PREFER_IP4 272 -#define VAR_DO_IP4 273 -#define VAR_DO_IP6 274 -#define VAR_PREFER_IP6 275 -#define VAR_DO_UDP 276 -#define VAR_DO_TCP 277 -#define VAR_TCP_MSS 278 -#define VAR_OUTGOING_TCP_MSS 279 -#define VAR_TCP_IDLE_TIMEOUT 280 -#define VAR_EDNS_TCP_KEEPALIVE 281 -#define VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 282 -#define VAR_CHROOT 283 -#define VAR_USERNAME 284 -#define VAR_DIRECTORY 285 -#define VAR_LOGFILE 286 -#define VAR_PIDFILE 287 -#define VAR_MSG_CACHE_SIZE 288 -#define VAR_MSG_CACHE_SLABS 289 -#define VAR_NUM_QUERIES_PER_THREAD 290 -#define VAR_RRSET_CACHE_SIZE 291 -#define VAR_RRSET_CACHE_SLABS 292 -#define VAR_OUTGOING_NUM_TCP 293 -#define VAR_INFRA_HOST_TTL 294 -#define VAR_INFRA_LAME_TTL 295 -#define VAR_INFRA_CACHE_SLABS 296 -#define VAR_INFRA_CACHE_NUMHOSTS 297 -#define VAR_INFRA_CACHE_LAME_SIZE 298 -#define VAR_NAME 299 -#define VAR_STUB_ZONE 300 -#define VAR_STUB_HOST 301 -#define VAR_STUB_ADDR 302 -#define VAR_TARGET_FETCH_POLICY 303 -#define VAR_HARDEN_SHORT_BUFSIZE 304 -#define VAR_HARDEN_LARGE_QUERIES 305 -#define VAR_FORWARD_ZONE 306 -#define VAR_FORWARD_HOST 307 -#define VAR_FORWARD_ADDR 308 -#define VAR_DO_NOT_QUERY_ADDRESS 309 -#define VAR_HIDE_IDENTITY 310 -#define VAR_HIDE_VERSION 311 -#define VAR_IDENTITY 312 -#define VAR_VERSION 313 -#define VAR_HARDEN_GLUE 314 -#define VAR_MODULE_CONF 315 -#define VAR_TRUST_ANCHOR_FILE 316 -#define VAR_TRUST_ANCHOR 317 -#define VAR_VAL_OVERRIDE_DATE 318 -#define VAR_BOGUS_TTL 319 -#define VAR_VAL_CLEAN_ADDITIONAL 320 -#define VAR_VAL_PERMISSIVE_MODE 321 -#define VAR_INCOMING_NUM_TCP 322 -#define VAR_MSG_BUFFER_SIZE 323 -#define VAR_KEY_CACHE_SIZE 324 -#define VAR_KEY_CACHE_SLABS 325 -#define VAR_TRUSTED_KEYS_FILE 326 -#define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 327 -#define VAR_USE_SYSLOG 328 -#define VAR_OUTGOING_INTERFACE 329 -#define VAR_ROOT_HINTS 330 -#define VAR_DO_NOT_QUERY_LOCALHOST 331 -#define VAR_CACHE_MAX_TTL 332 -#define VAR_HARDEN_DNSSEC_STRIPPED 333 -#define VAR_ACCESS_CONTROL 334 -#define VAR_LOCAL_ZONE 335 -#define VAR_LOCAL_DATA 336 -#define VAR_INTERFACE_AUTOMATIC 337 -#define VAR_STATISTICS_INTERVAL 338 -#define VAR_DO_DAEMONIZE 339 -#define VAR_USE_CAPS_FOR_ID 340 -#define VAR_STATISTICS_CUMULATIVE 341 -#define VAR_OUTGOING_PORT_PERMIT 342 -#define VAR_OUTGOING_PORT_AVOID 343 -#define VAR_DLV_ANCHOR_FILE 344 -#define VAR_DLV_ANCHOR 345 -#define VAR_NEG_CACHE_SIZE 346 -#define VAR_HARDEN_REFERRAL_PATH 347 -#define VAR_PRIVATE_ADDRESS 348 -#define VAR_PRIVATE_DOMAIN 349 -#define VAR_REMOTE_CONTROL 350 -#define VAR_CONTROL_ENABLE 351 -#define VAR_CONTROL_INTERFACE 352 -#define VAR_CONTROL_PORT 353 -#define VAR_SERVER_KEY_FILE 354 -#define VAR_SERVER_CERT_FILE 355 -#define VAR_CONTROL_KEY_FILE 356 -#define VAR_CONTROL_CERT_FILE 357 -#define VAR_CONTROL_USE_CERT 358 -#define VAR_EXTENDED_STATISTICS 359 -#define VAR_LOCAL_DATA_PTR 360 -#define VAR_JOSTLE_TIMEOUT 361 -#define VAR_STUB_PRIME 362 -#define VAR_UNWANTED_REPLY_THRESHOLD 363 -#define VAR_LOG_TIME_ASCII 364 -#define VAR_DOMAIN_INSECURE 365 -#define VAR_PYTHON 366 -#define VAR_PYTHON_SCRIPT 367 -#define VAR_VAL_SIG_SKEW_MIN 368 -#define VAR_VAL_SIG_SKEW_MAX 369 -#define VAR_CACHE_MIN_TTL 370 -#define VAR_VAL_LOG_LEVEL 371 -#define VAR_AUTO_TRUST_ANCHOR_FILE 372 -#define VAR_KEEP_MISSING 373 -#define VAR_ADD_HOLDDOWN 374 -#define VAR_DEL_HOLDDOWN 375 -#define VAR_SO_RCVBUF 376 -#define VAR_EDNS_BUFFER_SIZE 377 -#define VAR_PREFETCH 378 -#define VAR_PREFETCH_KEY 379 -#define VAR_SO_SNDBUF 380 -#define VAR_SO_REUSEPORT 381 -#define VAR_HARDEN_BELOW_NXDOMAIN 382 -#define VAR_IGNORE_CD_FLAG 383 -#define VAR_LOG_QUERIES 384 -#define VAR_LOG_REPLIES 385 -#define VAR_LOG_LOCAL_ACTIONS 386 -#define VAR_TCP_UPSTREAM 387 -#define VAR_SSL_UPSTREAM 388 -#define VAR_SSL_SERVICE_KEY 389 -#define VAR_SSL_SERVICE_PEM 390 -#define VAR_SSL_PORT 391 -#define VAR_FORWARD_FIRST 392 -#define VAR_STUB_SSL_UPSTREAM 393 -#define VAR_FORWARD_SSL_UPSTREAM 394 -#define VAR_TLS_CERT_BUNDLE 395 -#define VAR_STUB_FIRST 396 -#define VAR_MINIMAL_RESPONSES 397 -#define VAR_RRSET_ROUNDROBIN 398 -#define VAR_MAX_UDP_SIZE 399 -#define VAR_DELAY_CLOSE 400 -#define VAR_UNBLOCK_LAN_ZONES 401 -#define VAR_INSECURE_LAN_ZONES 402 -#define VAR_INFRA_CACHE_MIN_RTT 403 -#define VAR_DNS64_PREFIX 404 -#define VAR_DNS64_SYNTHALL 405 -#define VAR_DNS64_IGNORE_AAAA 406 -#define VAR_DNSTAP 407 -#define VAR_DNSTAP_ENABLE 408 -#define VAR_DNSTAP_SOCKET_PATH 409 -#define VAR_DNSTAP_IP 410 -#define VAR_DNSTAP_TLS 411 -#define VAR_DNSTAP_TLS_SERVER_NAME 412 -#define VAR_DNSTAP_TLS_CERT_BUNDLE 413 -#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 414 -#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 415 -#define VAR_DNSTAP_SEND_IDENTITY 416 -#define VAR_DNSTAP_SEND_VERSION 417 -#define VAR_DNSTAP_IDENTITY 418 -#define VAR_DNSTAP_VERSION 419 -#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 420 -#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 421 -#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 422 -#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 423 -#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 424 -#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 425 -#define VAR_RESPONSE_IP_TAG 426 -#define VAR_RESPONSE_IP 427 -#define VAR_RESPONSE_IP_DATA 428 -#define VAR_HARDEN_ALGO_DOWNGRADE 429 -#define VAR_IP_TRANSPARENT 430 -#define VAR_IP_DSCP 431 -#define VAR_DISABLE_DNSSEC_LAME_CHECK 432 -#define VAR_IP_RATELIMIT 433 -#define VAR_IP_RATELIMIT_SLABS 434 -#define VAR_IP_RATELIMIT_SIZE 435 -#define VAR_RATELIMIT 436 -#define VAR_RATELIMIT_SLABS 437 -#define VAR_RATELIMIT_SIZE 438 -#define VAR_RATELIMIT_FOR_DOMAIN 439 -#define VAR_RATELIMIT_BELOW_DOMAIN 440 -#define VAR_IP_RATELIMIT_FACTOR 441 -#define VAR_RATELIMIT_FACTOR 442 -#define VAR_SEND_CLIENT_SUBNET 443 -#define VAR_CLIENT_SUBNET_ZONE 444 -#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 445 -#define VAR_CLIENT_SUBNET_OPCODE 446 -#define VAR_MAX_CLIENT_SUBNET_IPV4 447 -#define VAR_MAX_CLIENT_SUBNET_IPV6 448 -#define VAR_MIN_CLIENT_SUBNET_IPV4 449 -#define VAR_MIN_CLIENT_SUBNET_IPV6 450 -#define VAR_MAX_ECS_TREE_SIZE_IPV4 451 -#define VAR_MAX_ECS_TREE_SIZE_IPV6 452 -#define VAR_CAPS_WHITELIST 453 -#define VAR_CACHE_MAX_NEGATIVE_TTL 454 -#define VAR_PERMIT_SMALL_HOLDDOWN 455 -#define VAR_QNAME_MINIMISATION 456 -#define VAR_QNAME_MINIMISATION_STRICT 457 -#define VAR_IP_FREEBIND 458 -#define VAR_DEFINE_TAG 459 -#define VAR_LOCAL_ZONE_TAG 460 -#define VAR_ACCESS_CONTROL_TAG 461 -#define VAR_LOCAL_ZONE_OVERRIDE 462 -#define VAR_ACCESS_CONTROL_TAG_ACTION 463 -#define VAR_ACCESS_CONTROL_TAG_DATA 464 -#define VAR_VIEW 465 -#define VAR_ACCESS_CONTROL_VIEW 466 -#define VAR_VIEW_FIRST 467 -#define VAR_SERVE_EXPIRED 468 -#define VAR_SERVE_EXPIRED_TTL 469 -#define VAR_SERVE_EXPIRED_TTL_RESET 470 -#define VAR_SERVE_EXPIRED_REPLY_TTL 471 -#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 472 -#define VAR_FAKE_DSA 473 -#define VAR_FAKE_SHA1 474 -#define VAR_LOG_IDENTITY 475 -#define VAR_HIDE_TRUSTANCHOR 476 -#define VAR_TRUST_ANCHOR_SIGNALING 477 -#define VAR_AGGRESSIVE_NSEC 478 -#define VAR_USE_SYSTEMD 479 -#define VAR_SHM_ENABLE 480 -#define VAR_SHM_KEY 481 -#define VAR_ROOT_KEY_SENTINEL 482 -#define VAR_DNSCRYPT 483 -#define VAR_DNSCRYPT_ENABLE 484 -#define VAR_DNSCRYPT_PORT 485 -#define VAR_DNSCRYPT_PROVIDER 486 -#define VAR_DNSCRYPT_SECRET_KEY 487 -#define VAR_DNSCRYPT_PROVIDER_CERT 488 -#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 489 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 490 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 491 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 492 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 493 -#define VAR_IPSECMOD_ENABLED 494 -#define VAR_IPSECMOD_HOOK 495 -#define VAR_IPSECMOD_IGNORE_BOGUS 496 -#define VAR_IPSECMOD_MAX_TTL 497 -#define VAR_IPSECMOD_WHITELIST 498 -#define VAR_IPSECMOD_STRICT 499 -#define VAR_CACHEDB 500 -#define VAR_CACHEDB_BACKEND 501 -#define VAR_CACHEDB_SECRETSEED 502 -#define VAR_CACHEDB_REDISHOST 503 -#define VAR_CACHEDB_REDISPORT 504 -#define VAR_CACHEDB_REDISTIMEOUT 505 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 506 -#define VAR_FOR_UPSTREAM 507 -#define VAR_AUTH_ZONE 508 -#define VAR_ZONEFILE 509 -#define VAR_MASTER 510 -#define VAR_URL 511 -#define VAR_FOR_DOWNSTREAM 512 -#define VAR_FALLBACK_ENABLED 513 -#define VAR_TLS_ADDITIONAL_PORT 514 -#define VAR_LOW_RTT 515 -#define VAR_LOW_RTT_PERMIL 516 -#define VAR_FAST_SERVER_PERMIL 517 -#define VAR_FAST_SERVER_NUM 518 -#define VAR_ALLOW_NOTIFY 519 -#define VAR_TLS_WIN_CERT 520 -#define VAR_TCP_CONNECTION_LIMIT 521 -#define VAR_FORWARD_NO_CACHE 522 -#define VAR_STUB_NO_CACHE 523 -#define VAR_LOG_SERVFAIL 524 -#define VAR_DENY_ANY 525 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 526 -#define VAR_LOG_TAG_QUERYREPLY 527 -#define VAR_STREAM_WAIT_SIZE 528 -#define VAR_TLS_CIPHERS 529 -#define VAR_TLS_CIPHERSUITES 530 -#define VAR_IPSET 531 -#define VAR_IPSET_NAME_V4 532 -#define VAR_IPSET_NAME_V6 533 -#define VAR_TLS_SESSION_TICKET_KEYS 534 -#define VAR_RPZ 535 -#define VAR_TAGS 536 -#define VAR_RPZ_ACTION_OVERRIDE 537 -#define VAR_RPZ_CNAME_OVERRIDE 538 -#define VAR_RPZ_LOG 539 -#define VAR_RPZ_LOG_NAME 540 - -/* Value type. */ -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -union YYSTYPE -{ -#line 66 "./util/configparser.y" - +#ifndef YYSTYPE_IS_DECLARED +#define YYSTYPE_IS_DECLARED 1 +typedef union { char* str; - -#line 631 "util/configparser.h" - -}; -typedef union YYSTYPE YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 -# define YYSTYPE_IS_DECLARED 1 -#endif - - +} YYSTYPE; +#endif /* !YYSTYPE_IS_DECLARED */ extern YYSTYPE yylval; - -int yyparse (void); - -#endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED */ diff --git a/util/configparser.y b/util/configparser.y index f7be1019c..bbefeb431 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -158,6 +158,8 @@ extern struct config_parser_state* cfg_parser; %token VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS %token VAR_DNSCRYPT_NONCE_CACHE_SIZE %token VAR_DNSCRYPT_NONCE_CACHE_SLABS +%token VAR_PAD_RESPONSES VAR_PAD_RESPONSES_BLOCK_SIZE +%token VAR_PAD_QUERIES VAR_PAD_QUERIES_BLOCK_SIZE %token VAR_IPSECMOD_ENABLED VAR_IPSECMOD_HOOK VAR_IPSECMOD_IGNORE_BOGUS %token VAR_IPSECMOD_MAX_TTL VAR_IPSECMOD_WHITELIST VAR_IPSECMOD_STRICT %token VAR_CACHEDB VAR_CACHEDB_BACKEND VAR_CACHEDB_SECRETSEED @@ -2307,6 +2309,44 @@ server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG free($2); } ; +server_pad_responses: VAR_PAD_RESPONSES STRING_ARG + { + OUTYY(("P(server_pad_responses:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->pad_responses = + (strcmp($2, "yes")==0); + free($2); + } + ; +server_pad_responses_block_size: VAR_PAD_RESPONSES_BLOCK_SIZE STRING_ARG + { + OUTYY(("P(server_pad_responses_block_size:%s)\n", $2)); + if(atoi($2) == 0) + yyerror("number expected"); + else cfg_parser->cfg->pad_responses_block_size = atoi($2); + free($2); + } + ; +server_pad_queries: VAR_PAD_QUERIES STRING_ARG + { + OUTYY(("P(server_pad_queries:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->pad_queries = + (strcmp($2, "yes")==0); + free($2); + } + ; +server_pad_queries_block_size: VAR_PAD_QUERIES_BLOCK_SIZE STRING_ARG + { + OUTYY(("P(server_pad_queries_block_size:%s)\n", $2)); + if(atoi($2) == 0) + yyerror("number expected"); + else cfg_parser->cfg->pad_queries_block_size = atoi($2); + free($2); + } + ; server_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG { #ifdef USE_IPSECMOD diff --git a/util/data/msgencode.c b/util/data/msgencode.c index be69f628a..debb9eed1 100644 --- a/util/data/msgencode.c +++ b/util/data/msgencode.c @@ -798,14 +798,14 @@ calc_edns_field_size(struct edns_data* edns) return 1 + 2 + 2 + 4 + 2 + rdatalen; } -void -attach_edns_record(sldns_buffer* pkt, struct edns_data* edns) +static void +attach_edns_record_max_msg_sz(sldns_buffer* pkt, struct edns_data* edns, + uint16_t max_msg_sz) { size_t len; size_t rdatapos; struct edns_option* opt; - if(!edns || !edns->edns_present) - return; + struct edns_option* padding_option = NULL; /* inc additional count */ sldns_buffer_write_u16_at(pkt, 10, sldns_buffer_read_u16_at(pkt, 10) + 1); @@ -823,17 +823,53 @@ attach_edns_record(sldns_buffer* pkt, struct edns_data* edns) sldns_buffer_write_u16(pkt, 0); /* rdatalen */ /* write rdata */ for(opt=edns->opt_list; opt; opt=opt->next) { + if (opt->opt_code == LDNS_EDNS_PADDING) { + padding_option = opt; + continue; + } sldns_buffer_write_u16(pkt, opt->opt_code); sldns_buffer_write_u16(pkt, opt->opt_len); if(opt->opt_len != 0) sldns_buffer_write(pkt, opt->opt_data, opt->opt_len); } + if (padding_option && edns->padding_block_size ) { + size_t pad_pos = sldns_buffer_position(pkt); + size_t msg_sz = ((pad_pos + 3) / edns->padding_block_size + 1) + * edns->padding_block_size; + size_t pad_sz; + + if (msg_sz > max_msg_sz) + msg_sz = max_msg_sz; + + /* By use of calc_edns_field_size, calling functions should + * have made sure that there is enough space for at least a + * zero sized padding option, but it cannot harm to leave it + * out if there isn't. + */ + log_assert(pad_pos + 4 <= msg_sz); + + pad_sz = msg_sz - pad_pos - 4; + sldns_buffer_write_u16(pkt, LDNS_EDNS_PADDING); + sldns_buffer_write_u16(pkt, pad_sz); + if (pad_sz) { + memset(sldns_buffer_current(pkt), 0, pad_sz); + sldns_buffer_skip(pkt, pad_sz); + } + } if(edns->opt_list) sldns_buffer_write_u16_at(pkt, rdatapos, sldns_buffer_position(pkt)-rdatapos-2); sldns_buffer_flip(pkt); } +void +attach_edns_record(sldns_buffer* pkt, struct edns_data* edns) +{ + if(!edns || !edns->edns_present) + return; + attach_edns_record_max_msg_sz(pkt, edns, edns->udp_size); +} + int reply_info_answer_encode(struct query_info* qinf, struct reply_info* rep, uint16_t id, uint16_t qflags, sldns_buffer* pkt, time_t timenow, @@ -882,7 +918,7 @@ reply_info_answer_encode(struct query_info* qinf, struct reply_info* rep, } if(attach_edns && sldns_buffer_capacity(pkt) >= sldns_buffer_limit(pkt)+attach_edns) - attach_edns_record(pkt, edns); + attach_edns_record_max_msg_sz(pkt, edns, udpsize+attach_edns); return 1; } diff --git a/util/data/msgparse.c b/util/data/msgparse.c index fb3123703..d553472bf 100644 --- a/util/data/msgparse.c +++ b/util/data/msgparse.c @@ -1016,6 +1016,7 @@ parse_extract_edns(struct msg_parse* msg, struct edns_data* edns, edns->bits = sldns_read_uint16(&found->rr_last->ttl_data[2]); edns->udp_size = ntohs(found->rrset_class); edns->opt_list = NULL; + edns->padding_block_size = 0; /* take the options */ rdata_len = found->rr_first->size-2; @@ -1089,6 +1090,7 @@ parse_edns_from_pkt(sldns_buffer* pkt, struct edns_data* edns, edns->edns_version = sldns_buffer_read_u8(pkt); edns->bits = sldns_buffer_read_u16(pkt); edns->opt_list = NULL; + edns->padding_block_size = 0; /* take the options */ rdata_len = sldns_buffer_read_u16(pkt); diff --git a/util/data/msgparse.h b/util/data/msgparse.h index fd04f9f6f..533130c79 100644 --- a/util/data/msgparse.h +++ b/util/data/msgparse.h @@ -225,6 +225,8 @@ struct edns_data { uint16_t udp_size; /** rdata element list, or NULL if none */ struct edns_option* opt_list; + /** block size to pad */ + uint16_t padding_block_size; }; /** diff --git a/util/edns.c b/util/edns.c index d19952df0..8376fb1c5 100644 --- a/util/edns.c +++ b/util/edns.c @@ -79,5 +79,15 @@ int apply_edns_options(struct edns_data* edns_out, struct edns_data* edns_in, !edns_keepalive(edns_out, edns_in, c, region)) return 0; + if(!cfg->pad_responses || c->type != comm_tcp || !c->ssl + || !edns_opt_list_find(edns_in->opt_list, LDNS_EDNS_PADDING)) + ; /* pass */ + + else if(!edns_opt_list_append(&edns_out->opt_list, LDNS_EDNS_PADDING + , 0, NULL, region)) + return 0; + else + edns_out->padding_block_size = cfg->pad_responses_block_size; + return 1; } diff --git a/validator/autotrust.c b/validator/autotrust.c index fd9fb3cf1..7ce07e0d8 100644 --- a/validator/autotrust.c +++ b/validator/autotrust.c @@ -2365,6 +2365,7 @@ probe_anchor(struct module_env* env, struct trust_anchor* tp) edns.edns_version = 0; edns.bits = EDNS_DO; edns.opt_list = NULL; + edns.padding_block_size = 0; if(sldns_buffer_capacity(buf) < 65535) edns.udp_size = (uint16_t)sldns_buffer_capacity(buf); else edns.udp_size = 65535; From 2c8a91c2f9de8a4bfde7ef0567c317ff1301b382 Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Tue, 14 Apr 2020 08:52:51 +0200 Subject: [PATCH 002/168] pad-queries default yes --- doc/example.conf.in | 2 +- doc/unbound.conf.5.in | 2 +- util/config_file.c | 2 +- util/data/msgencode.c | 3 +-- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/doc/example.conf.in b/doc/example.conf.in index ff68db014..ac282950f 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -771,7 +771,7 @@ server: # tls-win-cert: no # Pad queries over TLS upstreams - # pad-queries: no + # pad-queries: yes # Padded queries will be padded to the closest multiple of this size. # pad-queries-block-size: 128 diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 12c2b20f6..107ccb938 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -560,7 +560,7 @@ Default is 468. .B pad\-queries: \fI If enabled, all queries sent over TLS upstreams will be padded to the closest multiple of the size specified in \fBpad\-queries\-block\-size\fR. -Default is no. +Default is yes. .TP .B pad\-queries\-block\-size: \fI The block size with which to pad queries sent over TLS upstreams. diff --git a/util/config_file.c b/util/config_file.c index 7f7f2dc22..1071f9a7b 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -324,7 +324,7 @@ config_create(void) cfg->dnscrypt_nonce_cache_slabs = 4; cfg->pad_responses = 1; cfg->pad_responses_block_size = 468; /* from RFC8467 */ - cfg->pad_queries = 0; + cfg->pad_queries = 1; cfg->pad_queries_block_size = 128; /* from RFC8467 */ #ifdef USE_IPSECMOD cfg->ipsecmod_enabled = 1; diff --git a/util/data/msgencode.c b/util/data/msgencode.c index debb9eed1..49e48954b 100644 --- a/util/data/msgencode.c +++ b/util/data/msgencode.c @@ -843,8 +843,7 @@ attach_edns_record_max_msg_sz(sldns_buffer* pkt, struct edns_data* edns, /* By use of calc_edns_field_size, calling functions should * have made sure that there is enough space for at least a - * zero sized padding option, but it cannot harm to leave it - * out if there isn't. + * zero sized padding option. */ log_assert(pad_pos + 4 <= msg_sz); From b5b79e3a36d8983a6ce37fe08a01fb005215d066 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Wed, 15 Jul 2020 15:15:45 +0000 Subject: [PATCH 003/168] Add feature to serve original TTLs rather than decrementing ones --- cachedb/cachedb.c | 1 + doc/unbound.conf.5.in | 12 + services/cache/rrset.c | 2 + util/config_file.c | 4 + util/config_file.h | 2 + util/configlexer.c | 4057 +++++++++++++++++++------------------- util/configlexer.lex | 1 + util/configparser.c | 3187 +++++++++++++++--------------- util/configparser.h | 305 ++- util/configparser.y | 14 +- util/data/msgencode.c | 8 +- util/data/msgparse.h | 2 + util/data/msgreply.c | 3 + util/data/packed_rrset.c | 8 +- util/data/packed_rrset.h | 3 + 15 files changed, 3838 insertions(+), 3771 deletions(-) diff --git a/cachedb/cachedb.c b/cachedb/cachedb.c index eed4d5fd9..6a2b735aa 100644 --- a/cachedb/cachedb.c +++ b/cachedb/cachedb.c @@ -465,6 +465,7 @@ packed_rrset_ttl_subtract(struct packed_rrset_data* data, time_t subtract) data->rr_ttl[i] -= subtract; else data->rr_ttl[i] = 0; } + data->ttl_add = 0; } /* Adjust the TTL of a DNS message and its RRs by 'adjust'. If 'adjust' is diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index de5a333bd..5e826bbf6 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -1124,6 +1124,18 @@ responding with expired data. A recommended value per draft-ietf-dnsop-serve-stale-10 is 1800. Setting this to 0 will disable this behavior. Default is 0. .TP +.B serve\-original\-ttl: \fI +If enabled, unbound will always return the original TTL as received from +the upstream authoritative name server rather than the decrementing TTL as +stored in the cache. This feature may be useful if unbound serves as a +front-end to a hidden authoritative name server. Enabling this feature does +not impact cache expiry, it only changes the TTL unbound embeds in responses to +queries. Note that the returned TTL is still subject to the +configured maximum TTL as set using \fBcache\-max\-ttl\fR (defaults to +86400 seconds). If you wish to return higher original TTL values, you may +need to explicitly adjust the setting for \fBcache\-max\-ttl\fR. +Default is "no". +.TP .B val\-nsec3\-keysize\-iterations: \fI<"list of values"> List of keysize and iteration count values, separated by spaces, surrounded by quotes. Default is "1024 150 2048 500 4096 2500". This determines the diff --git a/services/cache/rrset.c b/services/cache/rrset.c index 8c0251bcb..4e3d08bda 100644 --- a/services/cache/rrset.c +++ b/services/cache/rrset.c @@ -45,6 +45,7 @@ #include "util/config_file.h" #include "util/data/packed_rrset.h" #include "util/data/msgreply.h" +#include "util/data/msgparse.h" #include "util/regional.h" #include "util/alloc.h" #include "util/net_help.h" @@ -396,6 +397,7 @@ rrset_update_sec_status(struct rrset_cache* r, cachedata->ttl = updata->ttl + now; for(i=0; icount+cachedata->rrsig_count; i++) cachedata->rr_ttl[i] = updata->rr_ttl[i]+now; + cachedata->ttl_add = now; } } lock_rw_unlock(&e->lock); diff --git a/util/config_file.c b/util/config_file.c index b1420d508..5e9e2fda2 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -250,6 +250,7 @@ config_create(void) cfg->serve_expired_ttl_reset = 0; cfg->serve_expired_reply_ttl = 30; cfg->serve_expired_client_timeout = 0; + cfg->serve_original_ttl = 0; cfg->add_holddown = 30*24*3600; cfg->del_holddown = 30*24*3600; cfg->keep_missing = 366*24*3600; /* one year plus a little leeway */ @@ -604,6 +605,7 @@ int config_set_option(struct config_file* cfg, const char* opt, else if(strcmp(opt, "serve-expired-reply-ttl:") == 0) { IS_NUMBER_OR_ZERO; cfg->serve_expired_reply_ttl = atoi(val); SERVE_EXPIRED_REPLY_TTL=(time_t)cfg->serve_expired_reply_ttl;} else S_NUMBER_OR_ZERO("serve-expired-client-timeout:", serve_expired_client_timeout) + else S_YNO("serve-original-ttl:", serve_original_ttl) else S_STR("val-nsec3-keysize-iterations:", val_nsec3_key_iterations) else S_UNSIGNED_OR_ZERO("add-holddown:", add_holddown) else S_UNSIGNED_OR_ZERO("del-holddown:", del_holddown) @@ -1008,6 +1010,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "serve-expired-ttl-reset", serve_expired_ttl_reset) else O_DEC(opt, "serve-expired-reply-ttl", serve_expired_reply_ttl) else O_DEC(opt, "serve-expired-client-timeout", serve_expired_client_timeout) + else O_YNO(opt, "serve-original-ttl", serve_original_ttl) else O_STR(opt, "val-nsec3-keysize-iterations",val_nsec3_key_iterations) else O_UNS(opt, "add-holddown", add_holddown) else O_UNS(opt, "del-holddown", del_holddown) @@ -2030,6 +2033,7 @@ config_apply(struct config_file* config) SERVE_EXPIRED = config->serve_expired; SERVE_EXPIRED_TTL = (time_t)config->serve_expired_ttl; SERVE_EXPIRED_REPLY_TTL = (time_t)config->serve_expired_reply_ttl; + SERVE_ORIGINAL_TTL = config->serve_original_ttl; MAX_NEG_TTL = (time_t)config->max_negative_ttl; RTT_MIN_TIMEOUT = config->infra_cache_min_rtt; EDNS_ADVERTISED_SIZE = (uint16_t)config->edns_buffer_size; diff --git a/util/config_file.h b/util/config_file.h index fa7e5c592..c7a028fba 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -373,6 +373,8 @@ struct config_file { /** serve expired entries only after trying to update the entries and this * timeout (in milliseconds) is reached */ int serve_expired_client_timeout; + /** serve original TTLs rather than decrementing ones */ + int serve_original_ttl; /** nsec3 maximum iterations per key size, string */ char* val_nsec3_key_iterations; /** autotrust add holddown time, in seconds */ diff --git a/util/configlexer.c b/util/configlexer.c index a4ac74066..b4013146d 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -1,7 +1,7 @@ #include "config.h" #include "util/configyyrename.h" -#line 2 "" +#line 3 "" #define YY_INT_ALIGNED short int @@ -354,8 +354,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 314 -#define YY_END_OF_BUFFER 315 +#define YY_NUM_RULES 315 +#define YY_END_OF_BUFFER 316 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,347 +363,349 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[3083] = +static const flex_int16_t yy_accept[3096] = { 0, - 1, 1, 296, 296, 300, 300, 304, 304, 308, 308, - 1, 1, 315, 312, 1, 294, 294, 313, 2, 313, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 296, 297, 297, 298, 313, 300, 301, 301, - 302, 313, 307, 304, 305, 305, 306, 313, 308, 309, - 309, 310, 313, 311, 295, 2, 299, 313, 311, 312, - 0, 1, 2, 2, 2, 2, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 1, 1, 297, 297, 301, 301, 305, 305, 309, 309, + 1, 1, 316, 313, 1, 295, 295, 314, 2, 314, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 297, 298, 298, 299, 314, 301, 302, 302, + 303, 314, 308, 305, 306, 306, 307, 314, 309, 310, + 310, 311, 314, 312, 296, 2, 300, 314, 312, 313, + 0, 1, 2, 2, 2, 2, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 296, 0, 300, 0, 307, 0, 304, 308, 0, - 311, 0, 2, 2, 311, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 297, 0, 301, 0, 308, 0, 305, 309, 0, + 312, 0, 2, 2, 312, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 311, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 312, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 115, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 123, - 312, 312, 312, 312, 312, 312, 312, 311, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 115, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 123, + 313, 313, 313, 313, 313, 313, 313, 312, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 99, 312, 312, 312, 312, 312, - 312, 8, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 116, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 99, 313, 313, 313, 313, 313, + 313, 8, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 116, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 128, 312, 311, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 289, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 128, 313, 312, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 290, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 311, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 57, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 227, 312, 14, 15, 312, 19, 18, 312, 312, 211, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 312, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 57, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 228, 313, 14, 15, 313, 19, 18, 313, 313, 212, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 122, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 209, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 3, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 122, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 210, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 3, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 311, 312, 312, - 312, 312, 312, 312, 312, 283, 312, 312, 282, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 303, 312, 312, 312, 312, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 312, 313, + 313, 313, 313, 313, 313, 313, 284, 313, 313, 283, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 304, 313, 313, 313, - 312, 312, 312, 56, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 60, 312, 257, 312, 312, 312, 312, 312, 312, 312, - 312, 290, 291, 312, 312, 312, 312, 312, 61, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 119, 312, 312, 312, 312, - 312, 312, 312, 312, 198, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 21, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 313, 313, 313, 313, 56, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 60, 313, 258, 313, 313, 313, 313, 313, 313, + 313, 313, 291, 292, 313, 313, 313, 313, 313, 61, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 119, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 199, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 21, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 147, 312, 312, 303, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 97, 312, - 312, 312, 312, 312, 312, 312, 265, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 170, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 146, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 147, 313, 313, 304, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 97, 313, 313, 313, 313, 313, 313, 313, 266, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 171, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 146, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 96, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 32, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 33, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 58, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 121, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 96, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 32, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 33, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 58, 313, 313, 313, 313, 313, 313, 313, - 312, 312, 312, 312, 312, 114, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 59, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 230, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 171, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 47, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 313, 313, 121, 313, 313, 313, 313, 313, 114, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 59, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 231, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 172, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 47, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 248, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 51, 312, 52, 312, 312, 312, 312, - 312, 100, 312, 101, 312, 312, 312, 312, 98, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 7, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 249, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 51, 313, 52, + 313, 313, 313, 313, 313, 100, 313, 101, 313, 313, + 313, 313, 98, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 7, 313, 313, 313, 313, 313, 313, 313, 313, - 312, 312, 312, 312, 312, 312, 220, 312, 312, 312, - 312, 149, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 231, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 48, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 190, 312, - 189, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 221, 313, 313, 313, 313, 149, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 232, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 48, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 191, 313, 190, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 312, 312, 312, 312, 312, 312, 312, 16, 17, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 62, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 197, 312, 312, 312, 312, 312, - 312, 103, 312, 102, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 181, 312, 312, 312, 312, - 312, 312, 312, 312, 129, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 81, 312, 312, 312, 312, 312, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 16, 17, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 62, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 198, + 313, 313, 313, 313, 313, 313, 103, 313, 102, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 182, 313, 313, 313, 313, 313, 313, 313, 313, 129, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 81, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 210, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 85, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 55, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 184, - 185, 312, 312, 312, 259, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 6, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 211, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 85, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 55, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 185, 186, 313, 313, 313, 260, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 6, 313, 313, 313, 313, 313, 313, 313, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 263, - 312, 312, 312, 312, 312, 312, 284, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 42, 312, 312, - 312, 312, 44, 312, 312, 312, 312, 312, 312, 312, - 312, 45, 312, 312, 312, 312, 312, 312, 312, 312, - 177, 312, 312, 312, 124, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 202, 312, 178, 312, 312, - 312, 217, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 264, 313, 313, 313, 313, 313, + 313, 285, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 42, 313, 313, 313, 313, 44, 313, + 313, 313, 313, 313, 313, 313, 313, 45, 313, 313, + 313, 313, 313, 313, 313, 313, 178, 313, 313, 313, + 124, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 203, 313, 179, 313, 313, 313, 218, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 312, 46, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 126, 108, 312, 109, 312, 312, 312, 107, 312, - 312, 312, 312, 312, 312, 312, 312, 144, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 247, - 312, 312, 312, 312, 312, 312, 312, 312, 179, 312, - 312, 312, 312, 312, 182, 312, 188, 312, 312, 312, - 312, 312, 216, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 95, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 120, 312, 312, 312, + 313, 313, 313, 313, 313, 313, 313, 46, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 126, 108, 313, + 109, 313, 313, 313, 107, 313, 313, 313, 313, 313, + 313, 313, 313, 144, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 248, 313, 313, 313, 313, + 313, 313, 313, 313, 180, 313, 313, 313, 313, 313, + 183, 313, 189, 313, 313, 313, 313, 313, 217, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 95, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 312, 312, 312, 53, 312, 312, 312, 26, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 20, 312, 312, - 312, 312, 312, 312, 27, 36, 312, 154, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 70, 72, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 267, 312, 312, 312, 228, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 110, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 143, 312, + 313, 313, 120, 313, 313, 313, 313, 313, 313, 313, + 53, 313, 313, 313, 26, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 20, 313, 313, 313, 313, 313, + 313, 27, 36, 313, 154, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 70, 72, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 268, + 313, 313, 313, 229, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 110, 313, 313, 313, 313, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 278, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 148, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 208, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 287, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 165, - 312, 312, 312, 312, 312, 312, 312, 312, 104, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 160, 312, + 313, 313, 313, 313, 313, 143, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 279, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 148, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 209, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 288, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 165, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 104, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 172, 312, 312, 312, 312, 312, 132, 312, 312, 312, - 312, 312, 91, 312, 312, 312, 312, 200, 312, 312, - 312, 312, 312, 312, 218, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 239, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 125, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 164, 312, 312, 312, 312, 312, 73, 74, 312, - 312, 312, 312, 312, 54, 312, 312, 312, 312, 312, - 80, 173, 312, 191, 312, 221, 312, 312, 183, 260, - 312, 312, 312, 312, 312, 66, 312, 175, 312, 312, + 313, 313, 313, 313, 313, 313, 160, 313, 173, 313, + 313, 313, 313, 313, 132, 313, 313, 313, 313, 313, + 91, 313, 313, 313, 313, 201, 313, 313, 313, 313, + 313, 313, 219, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 240, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 125, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 164, + 313, 313, 313, 313, 313, 73, 74, 313, 313, 313, + 313, 313, 54, 313, 313, 313, 313, 313, 80, 174, + 313, 192, 313, 222, 313, 313, 184, 261, 313, 313, - 312, 312, 312, 9, 312, 312, 312, 94, 312, 312, - 312, 312, 252, 312, 312, 312, 312, 199, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 163, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 150, 312, - 266, 312, 312, 312, 312, 238, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 212, 312, 312, + 313, 313, 313, 66, 313, 176, 313, 313, 313, 313, + 313, 9, 313, 313, 313, 94, 313, 313, 313, 313, + 253, 313, 313, 313, 313, 200, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 163, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 150, 313, 267, + 313, 313, 313, 313, 239, 313, 313, 313, 313, 313, - 312, 312, 258, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 281, 312, 174, - 312, 312, 312, 312, 312, 312, 312, 65, 67, 312, - 312, 312, 312, 312, 312, 312, 93, 312, 312, 312, - 312, 250, 312, 312, 312, 312, 262, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 204, 34, - 28, 30, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 35, 312, 29, 31, 312, 312, 312, 312, 312, - 312, 312, 312, 90, 312, 312, 312, 312, 312, 312, + 313, 313, 313, 313, 313, 313, 213, 313, 313, 313, + 313, 259, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 282, 313, 175, 313, + 313, 313, 313, 313, 313, 313, 65, 67, 313, 313, + 313, 313, 313, 313, 313, 93, 313, 313, 313, 313, + 251, 313, 313, 313, 313, 263, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 205, 34, + 28, 30, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 35, 313, 29, 31, 313, 313, 313, 313, 313, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 206, 203, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 64, 312, 312, 127, 312, 111, 312, 312, 312, 312, - 312, 312, 312, 312, 145, 13, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 276, 312, 279, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 12, 312, - 312, 22, 312, 312, 312, 256, 312, 312, 312, 312, - 264, 312, 312, 312, 68, 312, 214, 312, 312, 312, - 312, 205, 312, 312, 63, 312, 312, 312, 312, 23, + 313, 313, 313, 90, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 207, 204, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 64, 313, 313, 127, 313, 111, 313, 313, 313, 313, + 313, 313, 313, 313, 145, 13, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 277, 313, 280, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 12, 313, + 313, 22, 313, 313, 313, 257, 313, 313, 313, 313, + 265, 313, 313, 313, 68, 313, 215, 313, 313, 313, - 312, 43, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 159, 158, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 207, 201, 312, 219, 312, - 312, 268, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 75, - 312, 312, 312, 251, 312, 312, 312, 312, 187, 312, - 312, 312, 312, 213, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 285, 286, 156, 312, 312, 69, 312, - 312, 312, 312, 166, 312, 312, 105, 106, 312, 312, + 313, 313, 206, 313, 313, 63, 313, 313, 313, 313, + 23, 313, 43, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 159, 158, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 208, 202, 313, 220, + 313, 313, 269, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 75, 313, 313, 313, 252, 313, 313, 313, 313, 188, + 313, 313, 313, 313, 214, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 286, 287, 156, 313, 313, 69, - 312, 312, 151, 312, 153, 312, 192, 312, 312, 312, - 312, 157, 312, 312, 222, 312, 312, 312, 312, 312, - 312, 312, 134, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 229, 312, 312, 312, 312, 312, - 312, 312, 24, 312, 261, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 193, 312, 312, 249, - 312, 280, 312, 186, 312, 312, 312, 312, 49, 312, - 312, 312, 312, 4, 312, 312, 312, 312, 118, 133, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 225, 37, + 313, 313, 313, 313, 166, 313, 313, 313, 105, 106, + 313, 313, 313, 313, 151, 313, 153, 313, 193, 313, + 313, 313, 313, 157, 313, 313, 223, 313, 313, 313, + 313, 313, 313, 313, 134, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 230, 313, 313, 313, + 313, 313, 313, 313, 24, 313, 262, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 194, 313, + 313, 250, 313, 281, 313, 187, 313, 313, 313, 313, + 49, 313, 313, 313, 313, 4, 313, 313, 313, 313, + 118, 133, 313, 313, 313, 170, 313, 313, 313, 313, - 38, 312, 312, 312, 312, 312, 312, 312, 269, 312, - 312, 312, 312, 312, 312, 237, 312, 312, 312, 312, - 312, 312, 312, 196, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 78, 312, 50, 255, 312, 226, 312, - 312, 312, 312, 11, 312, 312, 312, 312, 312, 312, - 117, 312, 312, 312, 312, 194, 82, 312, 40, 312, - 312, 312, 312, 312, 312, 312, 312, 162, 312, 312, - 312, 312, 312, 136, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 236, 312, 312, 312, 312, 130, 312, - 312, 112, 113, 312, 312, 312, 84, 88, 83, 312, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 226, 37, 38, 313, 313, 313, 313, 313, 313, + 313, 270, 313, 313, 313, 313, 313, 313, 238, 313, + 313, 313, 313, 313, 313, 313, 197, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 78, 313, 50, 256, + 313, 227, 313, 313, 313, 313, 11, 313, 313, 313, + 313, 313, 313, 117, 313, 313, 313, 313, 195, 82, + 313, 40, 313, 313, 313, 313, 313, 313, 313, 313, + 162, 313, 313, 313, 313, 313, 136, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 237, 313, 313, 313, - 76, 312, 312, 312, 312, 312, 10, 312, 312, 312, - 253, 288, 312, 312, 312, 312, 293, 39, 312, 312, - 312, 312, 312, 161, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 89, 87, 312, 77, - 277, 312, 312, 312, 312, 312, 312, 312, 180, 312, - 312, 312, 312, 312, 195, 312, 312, 312, 312, 312, - 312, 312, 312, 152, 71, 312, 312, 312, 312, 312, - 270, 312, 312, 312, 312, 312, 312, 312, 233, 312, - 312, 232, 131, 312, 86, 137, 138, 141, 142, 139, + 313, 130, 313, 313, 112, 113, 313, 313, 313, 84, + 88, 83, 313, 76, 313, 313, 313, 313, 313, 10, + 313, 313, 313, 254, 289, 313, 313, 313, 313, 294, + 39, 313, 313, 313, 313, 313, 161, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 89, + 87, 313, 77, 278, 313, 313, 313, 313, 313, 313, + 313, 181, 313, 313, 313, 313, 313, 196, 313, 313, + 313, 313, 313, 313, 313, 313, 152, 71, 313, 313, + 313, 313, 313, 271, 313, 313, 313, 313, 313, 313, - 140, 79, 312, 254, 312, 312, 312, 312, 155, 312, - 312, 312, 312, 312, 224, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 168, 167, 41, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 92, - 312, 223, 312, 246, 274, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 5, 312, 312, - 215, 312, 312, 275, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 234, 25, 312, 312, 312, 312, 312, + 313, 234, 313, 313, 233, 131, 313, 86, 137, 138, + 141, 142, 139, 140, 79, 313, 255, 313, 313, 313, + 313, 155, 313, 313, 313, 313, 313, 225, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 168, 167, 41, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 92, 313, 224, 313, 247, 275, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 5, 313, 313, 216, 313, 313, 276, 313, 313, 313, + + 313, 313, 313, 313, 313, 313, 235, 25, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 236, 313, 313, 313, 135, 313, 313, 313, 313, 313, + 313, 313, 313, 169, 313, 177, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 272, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 293, 313, 313, 243, 313, 313, 313, + 313, 313, 273, 313, 313, 313, 313, 313, 313, 274, + 313, 313, 313, 241, 313, 244, 245, 313, 313, 313, + 313, 313, 242, 246, 0 - 312, 312, 312, 312, 312, 312, 312, 235, 312, 312, - 312, 135, 312, 312, 312, 312, 312, 312, 312, 312, - 169, 312, 176, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 271, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 292, 312, 312, 242, 312, 312, 312, 312, 312, 272, - 312, 312, 312, 312, 312, 312, 273, 312, 312, 312, - 240, 312, 243, 244, 312, 312, 312, 312, 312, 241, - 245, 0 } ; static const YY_CHAR yy_ec[256] = @@ -746,15 +748,15 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[3097] = +static const flex_int16_t yy_base[3110] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 1616, 1559, 81, 6016, 6016, 6016, 96, 52, + 90, 112, 1902, 1579, 81, 6033, 6033, 6033, 96, 52, 106, 63, 107, 128, 70, 116, 123, 134, 57, 88, 76, 145, 151, 114, 158, 97, 169, 181, 179, 188, - 194, 129, 1447, 6016, 6016, 6016, 135, 1315, 6016, 6016, - 6016, 146, 1142, 1110, 6016, 6016, 6016, 220, 1034, 6016, - 6016, 6016, 171, 903, 6016, 224, 6016, 228, 157, 818, + 194, 129, 1551, 6033, 6033, 6033, 135, 1315, 6033, 6033, + 6033, 146, 1142, 1110, 6033, 6033, 6033, 220, 1034, 6033, + 6033, 6033, 171, 903, 6033, 224, 6033, 228, 157, 818, 232, 167, 0, 239, 0, 0, 165, 205, 85, 166, 226, 190, 233, 234, 228, 240, 241, 242, 98, 130, 250, 243, 245, 248, 258, 256, 262, 267, 273, 251, @@ -783,9 +785,9 @@ static const flex_int16_t yy_base[3097] = 701, 703, 717, 705, 710, 718, 719, 727, 712, 720, 739, 744, 745, 733, 731, 747, 749, 752, 754, 760, - 755, 757, 763, 764, 765, 766, 773, 768, 6016, 772, + 755, 757, 763, 764, 765, 766, 773, 768, 6033, 772, 774, 782, 784, 786, 790, 787, 796, 794, 777, 804, - 806, 802, 810, 832, 788, 800, 809, 811, 814, 6016, + 806, 802, 810, 832, 788, 800, 809, 811, 814, 6033, 822, 816, 856, 827, 820, 840, 837, 836, 844, 845, 838, 846, 867, 850, 849, 852, 879, 854, 862, 864, 874, 880, 878, 887, 890, 886, 888, 894, 898, 895, @@ -795,648 +797,650 @@ static const flex_int16_t yy_base[3097] = 937, 943, 955, 950, 951, 959, 961, 960, 953, 966, 962, 969, 972, 970, 978, 980, 981, 976, 982, 984, 987, 993, 986, 988, 995, 997, 996, 1000, 1005, 1006, - 1010, 990, 1018, 1001, 6016, 1020, 1012, 1014, 1016, 1024, - 1026, 6016, 1027, 1028, 1029, 1036, 1031, 1041, 1032, 1039, + 1010, 990, 1018, 1001, 6033, 1020, 1012, 1014, 1016, 1024, + 1026, 6033, 1027, 1028, 1029, 1036, 1031, 1041, 1032, 1039, 1046, 1049, 1042, 1050, 1061, 1051, 1059, 1064, 1060, 1063, 1066, 1069, 1072, 1070, 1077, 1073, 1067, 935, 1080, 1094, - 6016, 1079, 1081, 1085, 1084, 1091, 1097, 1106, 1104, 1112, + 6033, 1079, 1081, 1085, 1084, 1091, 1097, 1106, 1104, 1112, 1105, 1109, 1122, 1123, 1125, 1126, 1130, 1086, 1129, 1131, 1133, 1134, 1136, 1137, 1135, 1138, 1144, 1140, 1145, 1141, - 6016, 1152, 1158, 1169, 1155, 1164, 1165, 1166, 1168, 1170, + 6033, 1152, 1158, 1169, 1155, 1164, 1165, 1166, 1168, 1170, 1171, 1172, 1174, 1173, 1178, 1192, 1182, 1193, 1189, 1195, 1190, 1191, 1197, 1196, 1200, 1205, 1213, 1210, 1215, 1218, 1226, 1225, 1228, 1235, 1237, 1211, 1230, 1203, 1222, 1234, 1240, 1239, 1238, 1245, 1246, 1253, 1248, 1249, 1251, 1254, 1263, 1255, 1258, 1265, 1262, 1269, 1266, 1259, 1271, 1278, - 1279, 1281, 6016, 1288, 1285, 1286, 1287, 1290, 1297, 1298, + 1279, 1281, 6033, 1288, 1285, 1286, 1287, 1290, 1297, 1298, 1292, 1299, 1302, 1301, 1305, 1304, 1307, 1311, 1312, 1316, 1318, 1321, 1325, 1322, 1323, 1337, 1336, 1338, 1329, 1330, 1346, 1345, 1348, 1349, 1351, 1359, 1341, 1355, 1357, 1366, 1361, 1363, 1364, 1365, 1370, 1367, 1375, 1379, 1382, 1381, - 1389, 1390, 1384, 1395, 1387, 1396, 1392, 1399, 1400, 1401, - 1402, 1411, 1403, 1404, 1408, 1412, 1414, 1415, 1416, 1421, - 1425, 1424, 1429, 1426, 1430, 1431, 1433, 1437, 1439, 1440, - 1442, 1443, 1446, 1454, 1452, 1444, 1462, 1450, 1465, 1466, - 1467, 1468, 1469, 1472, 1471, 1474, 1475, 1483, 1484, 1485, - 1488, 1487, 1492, 1490, 1497, 1489, 1498, 1499, 1503, 1505, - 1506, 1510, 1513, 1516, 1511, 6016, 1507, 1523, 1521, 1524, - 1525, 1529, 1530, 1538, 1531, 1533, 1534, 1535, 1536, 1561, - 6016, 1542, 6016, 6016, 1545, 6016, 6016, 1544, 1543, 6016, + 1389, 1390, 1384, 1395, 1387, 1398, 1392, 1399, 1401, 1402, + 1403, 1411, 1404, 1407, 1412, 1413, 1414, 1415, 1418, 1420, + 1431, 1422, 1426, 1424, 1429, 1433, 1439, 1440, 1441, 1442, + 1444, 1445, 1451, 1446, 1449, 1452, 1455, 1454, 1462, 1458, + 1464, 1469, 1470, 1473, 1472, 1475, 1476, 1484, 1485, 1486, + 1487, 1488, 1491, 1489, 1490, 1496, 1498, 1499, 1504, 1506, + 1505, 1510, 1513, 1516, 1518, 6033, 1511, 1523, 1521, 1524, + 1525, 1507, 1529, 1539, 1534, 1531, 1535, 1536, 1540, 1562, + 6033, 1543, 6033, 6033, 1546, 6033, 6033, 1545, 1544, 6033, - 1558, 1547, 1546, 1567, 1571, 1565, 1551, 1574, 1555, 1584, - 1589, 1577, 1579, 1585, 1586, 1592, 1598, 1587, 1604, 1599, - 1609, 1612, 1613, 1615, 1619, 1621, 1622, 1606, 1624, 1626, - 1629, 1627, 1630, 1632, 1636, 1637, 1633, 1640, 1639, 1649, - 1653, 1642, 1660, 6016, 1657, 1669, 1670, 1666, 1673, 1665, - 1672, 1674, 1645, 1656, 1675, 1676, 1679, 1680, 1677, 1686, - 1681, 1689, 1698, 1688, 6016, 1691, 1693, 1695, 1699, 1701, - 1703, 1708, 1709, 1705, 1711, 1712, 1722, 1714, 1717, 1718, - 1724, 1726, 1728, 6016, 1727, 1735, 1736, 1738, 1740, 1742, - 1744, 1741, 1745, 1746, 1747, 1748, 1749, 1753, 1760, 1759, + 1549, 1548, 1552, 1565, 1568, 1559, 1557, 1572, 1573, 1583, + 1594, 1580, 1576, 1587, 1578, 1588, 1590, 1592, 1607, 1600, + 1609, 1611, 1614, 1618, 1620, 1602, 1621, 1622, 1624, 1625, + 1627, 1626, 1629, 1632, 1635, 1636, 1638, 1631, 1639, 1648, + 1650, 1652, 1659, 6033, 1657, 1660, 1669, 1665, 1672, 1664, + 1668, 1671, 1676, 1678, 1673, 1680, 1682, 1683, 1684, 1686, + 1688, 1691, 1695, 1692, 6033, 1693, 1696, 1694, 1701, 1700, + 1704, 1708, 1710, 1712, 1714, 1715, 1722, 1719, 1717, 1725, + 1726, 1727, 1729, 1730, 6033, 1734, 1739, 1731, 1740, 1742, + 1746, 1748, 1743, 1749, 1750, 1753, 1640, 1754, 1755, 1762, - 1766, 1756, 1769, 1771, 1773, 1774, 1781, 1776, 1782, 1784, - 1785, 1786, 1788, 1789, 1792, 1800, 1801, 1797, 1805, 1798, - 1809, 1813, 1815, 1802, 1814, 1817, 1816, 1823, 1831, 1827, - 1820, 1828, 1835, 1832, 1840, 1833, 1842, 1844, 1845, 1846, - 1848, 1836, 1853, 1854, 1855, 6016, 1856, 1857, 6016, 1861, - 1862, 1884, 1863, 1865, 1867, 1876, 1866, 1868, 1870, 1878, - 1894, 1888, 1904, 1896, 1897, 1906, 1907, 1908, 1909, 1911, - 1915, 1916, 1877, 1917, 1924, 1932, 1928, 1934, 1937, 1919, - 1933, 1935, 1954, 1938, 1939, 1942, 1945, 1946, 1943, 1951, - 1949, 1958, 1964, 1966, 1967, 6016, 1975, 1976, 1970, 1972, + 1758, 1761, 1760, 1757, 1764, 1775, 1777, 1781, 1778, 1783, + 1784, 1785, 1786, 1787, 1788, 1790, 1797, 1800, 1799, 1801, + 1796, 1808, 1811, 1814, 1803, 1812, 1815, 1817, 1825, 1827, + 1828, 1819, 1823, 1835, 1830, 1834, 1839, 1840, 1842, 1843, + 1844, 1846, 1849, 1852, 1851, 1854, 6033, 1853, 1855, 6033, + 1859, 1860, 1882, 1861, 1863, 1865, 1875, 1864, 1866, 1868, + 1876, 1892, 1886, 1902, 1894, 1895, 1904, 1905, 1906, 1907, + 1909, 1913, 1914, 1915, 1878, 1922, 1927, 1926, 1935, 1937, + 1917, 1929, 1932, 1951, 1933, 1936, 1940, 1943, 1946, 1944, + 1953, 1942, 1960, 1962, 1964, 1968, 6033, 1973, 1966, 1974, - 1984, 1981, 1982, 6016, 1987, 1988, 1990, 1998, 1991, 1993, - 1994, 1995, 2002, 2003, 2005, 2004, 2009, 2008, 2007, 2025, - 6016, 2010, 6016, 2020, 2011, 2021, 2022, 2027, 2028, 2030, - 2032, 6016, 6016, 2033, 2039, 2041, 2050, 2046, 6016, 2047, - 2055, 2052, 2057, 2051, 2058, 2061, 2062, 2066, 2067, 2070, - 2068, 2075, 2071, 2076, 2073, 6016, 2089, 1940, 2085, 2091, - 2083, 2093, 2095, 2072, 6016, 2097, 2094, 2101, 2108, 2105, - 2106, 2109, 2111, 2112, 2116, 2117, 2118, 2119, 2120, 2129, - 2130, 2121, 2132, 2135, 2131, 6016, 2128, 2139, 2147, 2143, - 2145, 2142, 2149, 2150, 2152, 2153, 2154, 1879, 2155, 2160, + 1975, 1982, 1978, 1980, 6033, 1985, 1986, 1984, 1996, 1989, + 1987, 1992, 1938, 1991, 2001, 2002, 2003, 2004, 2009, 2007, + 2016, 6033, 2011, 6033, 2008, 2017, 2019, 2018, 2023, 2020, + 2025, 2026, 6033, 6033, 2028, 2034, 2039, 2042, 2044, 6033, + 2029, 2052, 2049, 2055, 2047, 2048, 2054, 2056, 2059, 2060, + 2069, 2062, 2071, 2064, 2073, 2066, 6033, 2081, 2067, 2085, + 2086, 2076, 2087, 2089, 2093, 2083, 6033, 2097, 2099, 2100, + 2107, 2105, 2102, 2108, 2109, 2113, 2110, 2116, 2117, 2118, + 2119, 2129, 2130, 2120, 2122, 2131, 2139, 6033, 2134, 2138, + 2146, 2142, 2144, 2141, 2145, 2148, 2149, 2153, 2157, 2151, - 2161, 2169, 2170, 2162, 2174, 2166, 2167, 2175, 2176, 2182, - 2181, 2183, 2184, 2185, 6016, 2187, 2191, 147, 2193, 2194, - 2196, 2195, 2202, 2198, 2201, 2218, 2219, 2215, 2214, 2217, - 2223, 2224, 2225, 2226, 2227, 1751, 2228, 2229, 6016, 2205, - 2231, 2232, 2234, 2233, 2235, 2242, 6016, 2251, 2254, 2263, - 2253, 2257, 2264, 2265, 2268, 2266, 2269, 2270, 2273, 2272, - 2276, 2278, 6016, 2280, 2283, 2290, 2281, 2291, 2236, 2293, - 2292, 2294, 2298, 2299, 2300, 2303, 2304, 2305, 2306, 2308, - 2312, 2313, 2314, 2319, 2320, 6016, 2331, 2321, 2322, 2323, - 2332, 2333, 2342, 2338, 2340, 2346, 2347, 2360, 2349, 2344, + 2155, 2159, 2161, 2169, 2170, 2167, 2172, 2175, 2165, 2176, + 2179, 2185, 2178, 2183, 2186, 2187, 6033, 2188, 2194, 147, + 2189, 2195, 2197, 2199, 2202, 2201, 2198, 2214, 2219, 2215, + 2221, 2217, 2216, 2224, 2226, 2225, 2227, 2228, 2229, 2232, + 6033, 2234, 2236, 2237, 2239, 2241, 2242, 2252, 6033, 2248, + 2253, 2260, 2256, 2261, 2264, 2265, 2269, 2270, 2272, 2273, + 2274, 2276, 2278, 2280, 6033, 2283, 2285, 2288, 2291, 2295, + 2294, 2296, 2297, 2301, 2302, 2303, 2304, 2306, 2308, 2307, + 2309, 2310, 2317, 2314, 2318, 2322, 2324, 6033, 2331, 2327, + 2332, 2334, 2339, 2335, 2349, 2336, 2337, 2345, 2352, 2359, - 2356, 2351, 2358, 2355, 2367, 2366, 2370, 2376, 2372, 2380, - 2382, 2374, 2378, 2386, 2384, 2392, 2388, 2389, 2405, 2406, - 2398, 2408, 2401, 2390, 2416, 2409, 6016, 2418, 2411, 2423, - 2424, 2431, 2427, 2428, 2429, 2432, 2435, 2437, 2438, 2439, - 2448, 2451, 2447, 2440, 2458, 2445, 2460, 2443, 2449, 2462, - 2465, 2466, 2471, 2473, 6016, 2476, 2472, 2468, 2480, 2483, - 2478, 2485, 2490, 2488, 2486, 2492, 2495, 2496, 2497, 2499, - 2501, 2502, 2503, 2504, 6016, 2509, 2508, 2510, 2514, 2520, - 2518, 2524, 2527, 2530, 2533, 2517, 2534, 2536, 2537, 6016, - 2545, 2547, 2544, 2548, 2546, 2551, 2552, 2554, 2556, 6016, + 2350, 2356, 2366, 2361, 2369, 2370, 2377, 2375, 2376, 2383, + 2373, 2385, 2387, 2388, 2389, 2391, 2393, 2396, 2395, 2397, + 2404, 2405, 2406, 2410, 2403, 2424, 2429, 2346, 6033, 2416, + 2418, 2422, 2428, 2436, 2432, 2431, 2434, 2438, 2442, 2443, + 2444, 2445, 2454, 2446, 2449, 2450, 2455, 2456, 2458, 2461, + 2465, 2466, 2469, 2472, 2473, 2476, 2243, 6033, 2477, 2479, + 2478, 2481, 2486, 2482, 2493, 2494, 2496, 2487, 2489, 2499, + 2500, 2503, 2504, 2507, 2505, 2509, 2513, 6033, 2515, 2517, + 2516, 2519, 2522, 2526, 2523, 2525, 2535, 2537, 2529, 2538, + 2539, 2540, 6033, 2549, 2551, 2550, 2554, 2552, 2541, 2556, - 2557, 2558, 2565, 2566, 2561, 6016, 2568, 2564, 2569, 2571, - 2572, 2573, 2574, 2579, 2580, 2582, 2585, 2588, 2592, 2593, - 6016, 2594, 2602, 2603, 2595, 2606, 2597, 2607, 2608, 2612, - 2616, 2610, 6016, 2625, 2627, 2628, 2635, 2630, 2632, 2633, - 2636, 2637, 2638, 2640, 2643, 6016, 2646, 2644, 2647, 2652, - 2650, 2648, 2655, 2667, 2657, 2659, 2668, 2664, 2670, 2671, - 2672, 2673, 2676, 2675, 2683, 2686, 2684, 2688, 2689, 2691, - 2701, 2703, 2704, 2706, 6016, 2709, 2698, 2711, 2700, 2712, - 2713, 2714, 2715, 2717, 2719, 2724, 2722, 2723, 2731, 2739, - 2732, 2734, 2740, 2741, 2744, 2743, 2745, 2746, 2747, 2755, + 2558, 2559, 6033, 2562, 2563, 2570, 2571, 2566, 6033, 2574, + 2569, 2573, 2575, 2576, 2577, 2580, 2578, 2584, 2585, 2591, + 2600, 2588, 2592, 6033, 2594, 2607, 2602, 2605, 2604, 2608, + 2610, 2615, 2616, 2617, 2618, 6033, 2629, 2627, 2626, 2640, + 2628, 2635, 2636, 2638, 2641, 2642, 2644, 2645, 6033, 2648, + 2650, 2651, 2652, 2655, 2656, 2657, 2664, 2663, 2666, 2667, + 2671, 2672, 2670, 2673, 2677, 2683, 2679, 2682, 2692, 2680, + 2690, 2694, 2698, 2705, 2706, 2701, 2707, 6033, 2710, 2712, + 2704, 2711, 2714, 2717, 2718, 2719, 2721, 2722, 2726, 2723, + 2724, 2739, 2746, 2727, 2734, 2736, 2742, 2744, 2749, 2748, - 2751, 2750, 2763, 2754, 2761, 2768, 2758, 2769, 2770, 2771, - 2772, 2774, 2778, 2779, 2781, 2775, 2783, 2792, 2794, 2796, - 2785, 2797, 2801, 2802, 6016, 2805, 2807, 2803, 2809, 2810, - 2816, 2817, 2819, 2820, 2811, 2825, 2827, 2828, 2833, 2834, - 2836, 2843, 2839, 6016, 2840, 6016, 2841, 2842, 2844, 2854, - 2846, 6016, 2850, 6016, 2857, 2864, 2851, 2855, 6016, 2865, - 2859, 2861, 2872, 2869, 2874, 2875, 2876, 2877, 2882, 2878, - 2880, 2885, 2886, 2888, 2890, 2892, 2896, 2893, 2903, 2905, - 2897, 2906, 2899, 2912, 2914, 2913, 2915, 6016, 2925, 2916, - 2919, 2922, 2926, 2927, 2928, 2930, 2931, 2936, 2937, 2938, + 2750, 2751, 2758, 2757, 2756, 2765, 2760, 2766, 2774, 2764, + 2771, 2773, 2775, 2763, 2776, 2778, 2780, 2784, 2786, 2789, + 2796, 2799, 2801, 2800, 2802, 2803, 2806, 6033, 2791, 2810, + 2807, 2814, 2817, 2819, 2821, 2829, 2820, 2824, 2827, 2836, + 2838, 2828, 2831, 2830, 2841, 2850, 2846, 6033, 2847, 6033, + 2843, 2851, 2852, 2860, 2855, 6033, 2858, 6033, 2859, 2867, + 2863, 2868, 6033, 2869, 2870, 2871, 2873, 2876, 2877, 2878, + 2881, 2882, 2887, 2883, 2885, 2889, 2893, 2894, 2899, 2901, + 2900, 2902, 2907, 2908, 2909, 2910, 2914, 2915, 2916, 2921, + 2922, 6033, 2924, 2925, 2928, 2930, 2931, 2932, 2933, 2939, - 2939, 2945, 2944, 2954, 2950, 2961, 6016, 2953, 2958, 2960, - 2962, 6016, 2964, 2963, 2965, 2971, 2974, 2973, 2975, 2977, - 2981, 2983, 2976, 2986, 2984, 2993, 2994, 6016, 2999, 3000, - 2985, 3003, 3002, 3015, 3007, 3016, 3018, 3020, 3021, 3011, - 3022, 3023, 3025, 3027, 3034, 3035, 3031, 3038, 3033, 3039, - 3047, 3043, 3037, 3041, 3049, 3050, 3051, 3054, 3057, 3058, - 3053, 3059, 3060, 3062, 6016, 3068, 3071, 3072, 3075, 3063, - 3080, 3081, 3082, 3084, 3086, 3085, 3087, 3088, 6016, 3095, - 6016, 3089, 3103, 3098, 3108, 3090, 3109, 3113, 3112, 3117, - 3118, 3119, 3120, 3121, 3122, 3123, 3126, 3134, 3133, 3135, + 2935, 2938, 2937, 2947, 2941, 2951, 2954, 2962, 2948, 2966, + 6033, 2963, 2965, 2967, 2969, 6033, 2971, 2970, 2972, 2978, + 2974, 2980, 2981, 2982, 2983, 2987, 2989, 2997, 3001, 3002, + 3005, 6033, 3004, 3006, 2991, 2990, 3018, 3020, 3021, 3022, + 3027, 3025, 3029, 3030, 2992, 3012, 3032, 3033, 3041, 3044, + 3037, 3045, 3040, 3046, 3048, 3049, 3050, 3053, 3055, 3056, + 3057, 3060, 3061, 3064, 3059, 3062, 3066, 3065, 6033, 3077, + 3067, 3078, 3084, 3081, 3088, 3069, 3089, 3090, 3091, 3094, + 3100, 3092, 6033, 3095, 6033, 3097, 3111, 3104, 3117, 3113, + 3105, 3118, 3120, 3124, 3126, 3127, 3128, 3129, 3130, 3131, - 3148, 3131, 3128, 3136, 3139, 3144, 3149, 6016, 6016, 3150, - 3152, 3155, 3157, 3158, 3159, 3162, 3169, 3166, 3165, 3168, - 3172, 3180, 6016, 3182, 3176, 3184, 3187, 3194, 3185, 3198, - 3199, 3195, 3207, 3202, 6016, 3204, 3205, 3215, 3210, 3211, - 3218, 6016, 3213, 6016, 3216, 3217, 3222, 3225, 3226, 3227, - 3228, 3229, 3232, 3244, 3247, 3233, 3249, 3237, 3245, 3250, - 3251, 3258, 3254, 3255, 3256, 6016, 3260, 3261, 3262, 3265, - 3267, 3268, 3275, 3277, 6016, 3278, 3280, 3282, 3283, 3285, - 3287, 3288, 3289, 3291, 3294, 3290, 3292, 3305, 3298, 3297, - 3307, 3317, 3308, 3319, 6016, 3320, 3314, 3327, 3329, 3322, + 3134, 3135, 3141, 3142, 3139, 3143, 3149, 3151, 3152, 3154, + 3155, 6033, 6033, 3156, 3157, 3158, 3160, 3164, 3172, 3178, + 3171, 3182, 3168, 3174, 3184, 3191, 6033, 3189, 3192, 3188, + 3194, 3204, 3196, 3201, 3211, 3208, 3206, 3215, 3212, 6033, + 3197, 3216, 3225, 3221, 3223, 3228, 6033, 3227, 6033, 3224, + 3229, 3231, 3233, 3236, 3237, 3238, 3240, 3245, 3247, 3257, + 3246, 3256, 3253, 3258, 3260, 3261, 3268, 3263, 3264, 3265, + 6033, 3270, 3267, 3161, 3272, 3281, 3284, 3282, 3271, 6033, + 3275, 3293, 3278, 3288, 3295, 3299, 3296, 3301, 3303, 3304, + 3302, 3305, 3312, 3307, 3309, 3311, 3323, 3326, 3331, 6033, - 3324, 3330, 3331, 3332, 3335, 3337, 3336, 3338, 3340, 3342, - 3339, 3349, 3343, 3356, 3345, 3359, 3365, 3366, 3346, 6016, - 3362, 3369, 3370, 3373, 3372, 3376, 3379, 3383, 3380, 3392, - 3393, 3384, 3387, 3396, 3397, 3404, 3399, 6016, 3409, 3389, - 3412, 3410, 3411, 3416, 3417, 3419, 3420, 3421, 3422, 3429, - 3424, 6016, 3431, 3426, 3436, 3437, 3428, 3451, 3446, 3427, - 3449, 3453, 3450, 3456, 3454, 3458, 3459, 3462, 3463, 6016, - 6016, 3465, 3466, 3468, 6016, 3469, 3467, 3479, 3472, 3475, - 3482, 3485, 3481, 3484, 3486, 3489, 3493, 6016, 3494, 3501, - 3498, 3500, 3508, 3511, 3504, 3512, 3513, 3506, 3514, 3516, + 3313, 3324, 3334, 3336, 3320, 3337, 3338, 3340, 3342, 3343, + 3344, 3345, 3346, 3347, 3348, 3349, 3356, 3351, 3367, 3352, + 3353, 3370, 3380, 3366, 6033, 3358, 3373, 3375, 3381, 3376, + 3384, 3394, 3397, 3382, 3399, 3400, 3386, 3388, 3404, 3406, + 3411, 3412, 6033, 3414, 3413, 3422, 3417, 3418, 3420, 3423, + 3432, 3425, 3427, 3428, 3435, 3430, 6033, 3446, 3441, 3434, + 3443, 3449, 3457, 3452, 3433, 3456, 3459, 3460, 3462, 3465, + 3466, 3467, 3470, 3471, 6033, 6033, 3473, 3474, 3475, 6033, + 3478, 3476, 3489, 3480, 3481, 3490, 3493, 3492, 3482, 3494, + 3496, 3498, 6033, 3504, 3512, 3503, 3510, 3513, 3521, 3519, - 3520, 3519, 3521, 3524, 3535, 3536, 3531, 3527, 3534, 6016, - 3532, 3539, 3540, 3544, 3541, 3548, 6016, 3546, 3549, 3550, - 3555, 3558, 3562, 3559, 3568, 3569, 3571, 3572, 3573, 3574, - 3576, 3583, 3580, 3579, 3582, 3586, 3588, 6016, 3589, 3593, - 3597, 3600, 6016, 3602, 3611, 3612, 3613, 3603, 3614, 3608, - 3621, 6016, 3616, 3618, 3623, 3624, 3631, 3626, 3633, 3630, - 6016, 3632, 3634, 3636, 6016, 3637, 3638, 3646, 3651, 3643, - 3658, 3654, 3656, 3659, 3655, 6016, 3657, 6016, 3666, 3667, - 3670, 6016, 3668, 3672, 3673, 3675, 3676, 3677, 3681, 3688, - 3683, 3689, 3690, 3691, 3692, 3694, 3701, 3693, 3697, 3700, + 3511, 3520, 3524, 3526, 3525, 3527, 3528, 3531, 3532, 3540, + 3541, 3536, 3538, 3539, 6033, 3542, 3547, 3549, 3551, 3548, + 3555, 6033, 3552, 3560, 3565, 3568, 3563, 3576, 3573, 3578, + 3580, 3561, 3581, 3583, 3585, 3584, 3586, 3593, 3588, 3591, + 3598, 3599, 3601, 6033, 3607, 3608, 3592, 3610, 6033, 3614, + 3621, 3617, 3628, 3618, 3625, 3623, 3632, 6033, 3627, 3629, + 3631, 3634, 3642, 3638, 3646, 3637, 6033, 3641, 3645, 3647, + 6033, 3648, 3654, 3657, 3662, 3650, 3669, 3665, 3667, 3668, + 3666, 6033, 3673, 6033, 3676, 3677, 3680, 6033, 3682, 3683, + 3685, 3687, 3684, 3691, 3692, 3699, 3688, 3700, 3701, 3702, - 3702, 6016, 3712, 3704, 3705, 3719, 3717, 3709, 3707, 3725, - 3723, 6016, 6016, 3732, 6016, 3734, 3727, 3729, 6016, 3733, - 3735, 3744, 3739, 3740, 3750, 3747, 3751, 6016, 3753, 3742, - 3754, 3757, 3758, 3761, 3763, 3764, 3765, 3767, 3768, 6016, - 3769, 3771, 3778, 3770, 3772, 3781, 3780, 3786, 6016, 3790, - 3794, 3793, 3797, 3798, 6016, 3799, 6016, 3800, 3801, 3803, - 3807, 3804, 6016, 3812, 3813, 3817, 3819, 3820, 3822, 3821, - 3828, 3829, 3830, 3837, 3834, 3835, 3832, 6016, 3836, 3838, - 3842, 3843, 3846, 3849, 3857, 3853, 3854, 3859, 3860, 3863, - 3866, 3864, 3870, 3872, 3874, 3867, 6016, 3875, 3880, 3873, + 3703, 3705, 3712, 3704, 3711, 3713, 3714, 6033, 3715, 3717, + 3723, 3724, 3729, 3718, 3726, 3734, 3733, 6033, 6033, 3737, + 6033, 3740, 3741, 3742, 6033, 3744, 3748, 3751, 3749, 3752, + 3754, 3761, 3755, 6033, 3764, 3750, 3767, 3765, 3769, 3772, + 3773, 3775, 3776, 3777, 3780, 6033, 3778, 3779, 3782, 3783, + 3788, 3793, 3789, 3795, 6033, 3800, 3804, 3803, 3807, 3809, + 6033, 3810, 6033, 3811, 3813, 3814, 3818, 3817, 6033, 3823, + 3824, 3828, 3830, 3832, 3831, 3834, 3835, 3841, 3842, 3849, + 3845, 3844, 3846, 6033, 3847, 3851, 3853, 3860, 3848, 3855, + 3864, 3867, 3868, 3869, 3873, 3877, 3871, 3878, 3884, 3882, - 3889, 3886, 3890, 6016, 3891, 3892, 3893, 6016, 3896, 3899, - 3901, 3905, 3900, 3906, 3907, 3908, 3911, 6016, 3913, 3915, - 3912, 3916, 3928, 3920, 6016, 6016, 3930, 6016, 3931, 3917, - 3935, 3934, 3914, 3938, 3942, 3944, 3946, 3943, 3951, 3954, - 3948, 3964, 3966, 3971, 3967, 3968, 3957, 6016, 6016, 3973, - 3974, 3969, 3980, 3981, 3983, 3984, 3991, 3987, 3993, 3997, - 3998, 4005, 6016, 3986, 3988, 4006, 6016, 4001, 4004, 4007, - 4012, 4011, 4013, 4017, 4014, 4015, 4018, 4022, 4019, 4024, - 4032, 4025, 4029, 4028, 4038, 4035, 4036, 4045, 6016, 4042, - 4046, 4049, 4052, 4053, 4055, 4057, 4058, 4059, 6016, 4056, + 3888, 3874, 6033, 3886, 3894, 3880, 3903, 3899, 3900, 3904, + 6033, 3905, 3907, 3908, 6033, 3906, 3890, 3914, 3921, 3915, + 3918, 3922, 3925, 3926, 6033, 3928, 3930, 3924, 3927, 3929, + 3937, 6033, 6033, 3943, 6033, 3945, 3931, 3935, 3947, 3948, + 3952, 3956, 3957, 3959, 3953, 3960, 3963, 3967, 3975, 3976, + 3977, 3978, 3979, 3982, 6033, 6033, 3984, 3985, 3988, 3990, + 3991, 3993, 3994, 4001, 3998, 4006, 4009, 3999, 4016, 6033, + 4013, 4014, 4015, 6033, 3996, 4018, 4020, 4022, 4024, 4026, + 4025, 4027, 4028, 4030, 4032, 4035, 4036, 4040, 4038, 4042, + 4046, 4048, 4049, 4050, 4056, 6033, 4058, 4057, 4059, 4060, - 4061, 4063, 4069, 4062, 4072, 4083, 4087, 4089, 4064, 4081, - 4090, 4092, 4096, 4093, 6016, 4097, 4099, 4100, 4103, 4106, - 4108, 4109, 4111, 4112, 4114, 4116, 4117, 4124, 4126, 4118, - 4127, 4121, 4129, 6016, 4133, 4140, 4134, 4142, 4137, 4067, - 4143, 4144, 4150, 4147, 4152, 4151, 4157, 6016, 4154, 4158, - 4161, 4159, 4165, 4168, 4172, 4169, 4171, 6016, 4179, 4162, - 4173, 4175, 4183, 4185, 4188, 4190, 4193, 4192, 4195, 6016, - 4196, 4199, 4200, 4197, 4206, 4207, 4211, 4209, 6016, 4212, - 4218, 4210, 4226, 4221, 4230, 4227, 4229, 4231, 4233, 4236, - 4238, 4240, 4241, 4243, 4237, 4254, 4259, 4257, 6016, 4244, + 4061, 4063, 4067, 4069, 4070, 6033, 4071, 4073, 4074, 4079, + 4075, 4080, 4094, 4097, 4099, 4087, 4090, 4100, 4104, 4106, + 4107, 6033, 4109, 4108, 4110, 4111, 4118, 4120, 4115, 4122, + 4124, 4126, 4129, 4127, 4136, 4138, 4131, 4139, 4133, 4140, + 6033, 4141, 4150, 4143, 4152, 4153, 4154, 4155, 4156, 4164, + 4161, 4166, 4165, 4168, 6033, 4169, 4170, 4173, 4174, 4176, + 4177, 4182, 4179, 4183, 6033, 4186, 4190, 4192, 4191, 4195, + 4197, 4200, 4201, 4203, 4204, 4211, 6033, 4222, 4207, 4218, + 4220, 4208, 4217, 4221, 4227, 4209, 6033, 4234, 4236, 4228, + 4244, 4224, 4246, 4247, 4248, 4237, 4250, 4251, 4249, 4255, - 6016, 4258, 4262, 4266, 4268, 4265, 6016, 4255, 4270, 4273, - 4274, 4275, 6016, 4276, 4278, 4280, 4279, 6016, 4290, 4292, - 4281, 4296, 4283, 4298, 6016, 4303, 4304, 4300, 4312, 4315, - 4311, 4313, 4316, 4314, 4318, 4319, 4320, 4328, 4323, 4324, - 6016, 4330, 4333, 4340, 4341, 4335, 4325, 4343, 4349, 4342, - 6016, 4351, 4350, 4352, 4353, 4354, 4357, 4359, 4366, 4362, - 4361, 6016, 4365, 4369, 4382, 4363, 4373, 6016, 6016, 4378, - 4383, 4385, 4380, 4386, 6016, 4389, 4396, 4391, 4395, 4398, - 6016, 6016, 4400, 6016, 4397, 6016, 4402, 4401, 6016, 6016, - 4404, 4405, 4408, 4414, 4411, 6016, 4421, 6016, 4418, 4422, + 4256, 4257, 4259, 4267, 4274, 4271, 6033, 4260, 6033, 4269, + 4276, 4285, 4281, 4272, 6033, 4270, 4283, 4288, 4289, 4284, + 6033, 4291, 4295, 4297, 4296, 6033, 4298, 4300, 4302, 4306, + 4310, 4313, 6033, 4316, 4317, 4319, 4327, 4329, 4326, 4328, + 4330, 4332, 4333, 4334, 4335, 4343, 4338, 4340, 6033, 4346, + 4348, 4355, 4356, 4349, 4339, 4360, 4363, 4357, 6033, 4366, + 4365, 4367, 4368, 4369, 4372, 4374, 4381, 4377, 4376, 6033, + 4380, 4384, 4397, 4378, 4388, 6033, 6033, 4393, 4398, 4400, + 4395, 4401, 6033, 4404, 4411, 4406, 4410, 4413, 6033, 6033, + 4415, 6033, 4412, 6033, 4417, 4416, 6033, 6033, 4419, 4420, - 4424, 4425, 4427, 6016, 4426, 4429, 4434, 6016, 4428, 4436, - 4435, 4439, 6016, 4443, 4446, 4438, 4444, 6016, 4450, 4456, - 4458, 4448, 4452, 4459, 4465, 4460, 4468, 4469, 4470, 4471, - 4472, 4479, 4484, 4486, 4488, 4480, 4476, 4490, 4496, 4498, - 4489, 4493, 4500, 4502, 4504, 4506, 4508, 4510, 4511, 4512, - 4514, 4515, 4513, 4523, 4516, 4517, 4530, 4526, 4519, 4531, - 4534, 4532, 4538, 4539, 4541, 4542, 4543, 6016, 4544, 4546, - 4548, 4560, 4553, 4549, 4559, 4566, 4570, 4572, 6016, 4574, - 6016, 4576, 4561, 4578, 4580, 6016, 4581, 4582, 4583, 4584, - 4585, 4586, 4588, 4587, 4591, 4592, 4595, 6016, 4598, 4593, + 4423, 4429, 4426, 6033, 4436, 6033, 4433, 4437, 4439, 4440, + 4442, 6033, 4441, 4444, 4449, 6033, 4443, 4451, 4450, 4454, + 6033, 4458, 4461, 4453, 4459, 6033, 4465, 4471, 4473, 4463, + 4467, 4474, 4480, 4475, 4483, 4484, 4485, 4486, 4487, 4488, + 4492, 4495, 4499, 4501, 4502, 4503, 4504, 4510, 4512, 4505, + 4508, 4515, 4516, 4519, 4522, 4524, 4526, 4527, 4528, 4529, + 4530, 4531, 4534, 4533, 4537, 4544, 4545, 4546, 4547, 4548, + 4549, 4550, 4555, 4559, 4560, 4562, 6033, 4552, 4558, 4563, + 4566, 4565, 4571, 4578, 4582, 4585, 4587, 6033, 4589, 6033, + 4591, 4593, 4594, 4595, 6033, 4596, 4597, 4598, 4599, 4600, - 4602, 4613, 6016, 4608, 4619, 4603, 4614, 4616, 4620, 4622, - 4624, 4625, 4626, 4628, 4630, 4637, 4633, 4634, 4636, 4638, - 4639, 4644, 4647, 4646, 4654, 4656, 4661, 6016, 4650, 6016, - 4657, 4662, 4663, 4665, 4667, 4668, 4670, 6016, 6016, 4671, - 4673, 4678, 4679, 4674, 4683, 4680, 6016, 4686, 4693, 4696, - 4687, 6016, 4690, 4698, 4699, 4703, 6016, 4704, 4706, 4707, - 4709, 4710, 4713, 4717, 4714, 4720, 4721, 4725, 6016, 6016, - 6016, 6016, 4726, 4728, 4731, 4732, 4734, 4735, 4737, 4739, - 4740, 6016, 4742, 6016, 6016, 4743, 4749, 4751, 4752, 4753, - 4756, 4758, 4760, 6016, 4759, 4764, 4766, 4762, 4773, 4779, + 4601, 4602, 4603, 4606, 4607, 4612, 6033, 4618, 4608, 4622, + 4627, 6033, 4628, 4633, 4629, 4634, 4635, 4636, 4638, 4639, + 4643, 4641, 4645, 4649, 4646, 4650, 4654, 4653, 4658, 4655, + 4661, 4662, 4664, 4671, 4674, 4678, 6033, 4665, 6033, 4673, + 4679, 4680, 4683, 4685, 4686, 4688, 6033, 6033, 4689, 4691, + 4696, 4687, 4693, 4700, 4697, 6033, 4704, 4708, 4714, 4705, + 6033, 4710, 4715, 4716, 4721, 6033, 4717, 4722, 4723, 4733, + 4724, 4738, 4734, 4740, 4726, 4741, 4728, 4745, 6033, 6033, + 6033, 6033, 4746, 4730, 4751, 4754, 4755, 4756, 4757, 4759, + 4760, 6033, 4762, 6033, 6033, 4764, 4771, 4763, 4773, 4772, - 4763, 4776, 4780, 4782, 4789, 4785, 4786, 4784, 4788, 4792, - 4795, 6016, 6016, 4796, 4802, 4803, 4811, 4807, 4808, 4820, - 4815, 4816, 4817, 4818, 4822, 4804, 4829, 4834, 4827, 4824, - 6016, 4835, 4838, 6016, 4831, 6016, 4837, 4839, 4845, 4846, - 4847, 4848, 4849, 4851, 6016, 6016, 4852, 4853, 4855, 4862, - 4858, 4866, 4854, 4865, 4867, 6016, 4868, 6016, 4870, 4872, - 4879, 4880, 4887, 4888, 4891, 4893, 4889, 4894, 6016, 4895, - 4896, 6016, 4898, 4900, 4901, 6016, 4906, 4903, 4911, 4913, - 6016, 4918, 4915, 4920, 6016, 4923, 6016, 4908, 4924, 4926, - 4933, 6016, 4930, 4934, 6016, 4937, 4940, 4941, 4942, 6016, + 4770, 4774, 4779, 6033, 4781, 4785, 4786, 4782, 4793, 4795, + 4798, 4799, 4784, 4788, 4807, 4803, 4809, 4800, 4811, 4813, + 4818, 6033, 6033, 4814, 4820, 4821, 4829, 4825, 4826, 4838, + 4833, 4834, 4835, 4836, 4840, 4822, 4847, 4852, 4845, 4842, + 6033, 4853, 4856, 6033, 4849, 6033, 4855, 4857, 4863, 4864, + 4865, 4866, 4867, 4869, 6033, 6033, 4870, 4871, 4873, 4880, + 4876, 4884, 4872, 4883, 4885, 6033, 4886, 6033, 4888, 4890, + 4897, 4898, 4905, 4906, 4909, 4911, 4907, 4912, 6033, 4913, + 4914, 6033, 4916, 4918, 4919, 6033, 4924, 4921, 4929, 4931, + 6033, 4936, 4933, 4938, 6033, 4941, 6033, 4926, 4942, 4944, - 4931, 6016, 4943, 4946, 4947, 4952, 4953, 4957, 4954, 4958, - 4959, 4966, 4962, 4965, 6016, 6016, 4978, 4964, 4970, 4971, - 4974, 4981, 4979, 4982, 4984, 6016, 6016, 4988, 6016, 4989, - 4992, 6016, 4985, 4996, 4994, 4998, 5000, 5001, 5002, 5006, - 5008, 5014, 5009, 5007, 5019, 5030, 5013, 5034, 5035, 5037, - 5039, 5041, 5015, 5043, 5044, 5020, 5045, 5047, 5049, 6016, - 5051, 5052, 5053, 6016, 5057, 5058, 5060, 5061, 6016, 5063, - 5068, 5070, 5072, 6016, 5073, 5075, 5076, 5078, 5082, 5089, - 5085, 5084, 5086, 6016, 6016, 6016, 5094, 5096, 6016, 5101, - 5092, 5102, 5103, 6016, 5104, 5105, 6016, 6016, 5107, 5109, + 4951, 4948, 6033, 4949, 4952, 6033, 4955, 4958, 4959, 4961, + 6033, 4963, 6033, 4964, 4966, 4967, 4971, 4972, 4976, 4973, + 4977, 4978, 4985, 4983, 4989, 6033, 6033, 4997, 4980, 4988, + 4990, 4994, 5004, 4999, 5001, 5007, 6033, 6033, 5009, 6033, + 5011, 5012, 6033, 5002, 5013, 5017, 5018, 5020, 5021, 5022, + 5026, 5028, 5029, 5030, 5031, 5037, 5049, 5033, 5047, 5053, + 5055, 5057, 5059, 5051, 5061, 5062, 5039, 5063, 5064, 5068, + 6033, 5070, 5071, 5073, 6033, 5076, 5078, 5080, 5081, 6033, + 5090, 5083, 5087, 5093, 6033, 5077, 5098, 5099, 5100, 5101, + 5111, 5094, 5104, 5108, 6033, 6033, 6033, 5114, 5118, 6033, - 5108, 5116, 6016, 5111, 6016, 5112, 6016, 5114, 5115, 5124, - 5122, 6016, 5129, 5135, 6016, 5138, 5141, 5143, 5144, 5126, - 5130, 5145, 6016, 5154, 5147, 5151, 5158, 5155, 5159, 5160, - 5161, 5168, 5163, 5167, 6016, 5170, 5164, 5171, 5177, 5172, - 5175, 5181, 6016, 5183, 6016, 5184, 5185, 5189, 5186, 5187, - 5192, 5194, 5199, 5196, 5206, 5200, 6016, 5208, 5210, 6016, - 5212, 6016, 5214, 6016, 5215, 5216, 5218, 5220, 6016, 5224, - 5217, 5221, 5226, 6016, 5227, 5229, 5230, 5236, 6016, 6016, - 5238, 5246, 5242, 5239, 5251, 5253, 5248, 5255, 5256, 5257, - 5259, 5269, 5241, 5264, 5262, 5271, 5272, 5277, 6016, 6016, + 5121, 5115, 5106, 5122, 6033, 5124, 5125, 5126, 6033, 6033, + 5127, 5128, 5130, 5139, 6033, 5132, 6033, 5135, 6033, 5136, + 5142, 5145, 5148, 6033, 5149, 5158, 6033, 5161, 5164, 5166, + 5167, 5151, 5153, 5168, 6033, 5175, 5174, 5177, 5181, 5170, + 5178, 5184, 5183, 5191, 5186, 5193, 6033, 5190, 5195, 5197, + 5203, 5187, 5198, 5196, 6033, 5208, 6033, 5205, 5209, 5210, + 5212, 5215, 5217, 5219, 5220, 5223, 5229, 5224, 6033, 5233, + 5235, 6033, 5226, 6033, 5238, 6033, 5230, 5239, 5240, 5245, + 6033, 5242, 5244, 5248, 5251, 6033, 5252, 5254, 5257, 5259, + 6033, 6033, 5260, 5267, 5269, 6033, 5262, 5266, 5273, 5263, - 6016, 5273, 5280, 5287, 5284, 5286, 5294, 5290, 6016, 5291, - 5292, 5293, 5301, 5298, 5303, 6016, 5299, 5304, 5305, 5306, - 5310, 5307, 5314, 6016, 5318, 5321, 5324, 5313, 5328, 5332, - 5335, 5337, 5338, 6016, 5340, 6016, 6016, 5325, 6016, 5341, - 5342, 5345, 5346, 6016, 5349, 5351, 5350, 5352, 5354, 5356, - 6016, 5366, 5357, 5359, 5368, 6016, 6016, 5372, 6016, 5375, - 5376, 5369, 5385, 5380, 5382, 5387, 5384, 6016, 5388, 5391, - 5393, 5394, 5395, 6016, 5396, 5397, 5399, 5400, 5403, 5402, - 5405, 5407, 5409, 6016, 5410, 5412, 5430, 5426, 6016, 5413, - 5425, 6016, 6016, 5435, 5437, 5358, 6016, 6016, 6016, 5440, + 5278, 5275, 5279, 5281, 5291, 5287, 5143, 5282, 5290, 5292, + 5293, 6033, 6033, 6033, 5296, 5298, 5305, 5304, 5307, 5315, + 5311, 6033, 5312, 5314, 5313, 5322, 5320, 5324, 6033, 5321, + 5325, 5326, 5327, 5331, 5328, 5335, 6033, 5342, 5346, 5334, + 5336, 5348, 5355, 5357, 5359, 5360, 6033, 5362, 6033, 6033, + 5349, 6033, 5352, 5363, 5364, 5366, 6033, 5370, 5373, 5371, + 5372, 5376, 5378, 6033, 5388, 5379, 5383, 5384, 6033, 6033, + 5393, 6033, 5395, 5396, 5390, 5403, 5398, 5400, 5406, 5407, + 6033, 5409, 5411, 5413, 5414, 5415, 6033, 5416, 5417, 5419, + 5420, 5423, 5422, 5425, 5427, 5428, 6033, 5430, 5432, 5450, - 6016, 5442, 5446, 5450, 5454, 5445, 6016, 5456, 5453, 5458, - 6016, 6016, 5457, 5459, 5460, 5462, 6016, 6016, 5463, 5466, - 5464, 5467, 5469, 6016, 5474, 5478, 5480, 5483, 5486, 5475, - 5489, 5491, 5499, 5501, 5496, 5497, 5502, 5504, 5505, 5506, - 5508, 5517, 5513, 5515, 5527, 5524, 6016, 6016, 5531, 6016, - 6016, 5533, 5535, 5537, 5539, 5541, 5543, 5545, 6016, 5546, - 5548, 5549, 5417, 5550, 6016, 5552, 5554, 5551, 5556, 5516, - 5559, 5557, 5562, 6016, 6016, 5563, 5564, 5565, 5573, 5568, - 6016, 5575, 5582, 5579, 5580, 5577, 5583, 5584, 6016, 5588, - 5589, 6016, 6016, 5587, 6016, 6016, 6016, 6016, 6016, 6016, + 5446, 6033, 5434, 5445, 6033, 6033, 5456, 5460, 5449, 6033, + 6033, 6033, 5462, 6033, 5464, 5468, 5472, 5476, 5467, 6033, + 5478, 5457, 5479, 6033, 6033, 5480, 5481, 5482, 5484, 6033, + 6033, 5485, 5488, 5486, 5489, 5491, 6033, 5494, 5496, 5502, + 5508, 5514, 5504, 5492, 5509, 5517, 5526, 5499, 5515, 5522, + 5523, 5527, 5525, 5534, 5535, 5531, 5539, 5541, 5542, 6033, + 6033, 5546, 6033, 6033, 5549, 5551, 5553, 5555, 5557, 5559, + 5561, 6033, 5562, 5564, 5565, 5566, 5567, 6033, 5569, 5573, + 5568, 5576, 5570, 5579, 5575, 5585, 6033, 6033, 5577, 5591, + 5581, 5592, 5586, 6033, 5596, 5603, 5598, 5600, 5601, 5606, - 6016, 6016, 5592, 6016, 5590, 5605, 5607, 5609, 6016, 5597, - 5610, 5518, 5611, 5599, 6016, 5612, 5614, 5616, 5615, 5618, - 5622, 5624, 5626, 5628, 5627, 5629, 5632, 5630, 5636, 5634, - 5638, 5644, 6016, 6016, 6016, 5642, 5640, 5651, 5652, 5663, - 5664, 5667, 5669, 5653, 5657, 5670, 5671, 5674, 5659, 5675, - 5686, 5678, 5681, 5682, 5683, 5689, 5685, 5691, 5695, 6016, - 5696, 6016, 5697, 6016, 6016, 5699, 5701, 5704, 5705, 5713, - 5714, 5706, 5709, 5716, 5718, 5726, 5728, 6016, 5717, 5719, - 6016, 5729, 5730, 6016, 5721, 5731, 5732, 5733, 5737, 5740, - 5742, 5744, 5753, 6016, 6016, 5745, 5748, 5754, 5756, 5757, + 5602, 6033, 5608, 5610, 6033, 6033, 5611, 6033, 6033, 6033, + 6033, 6033, 6033, 6033, 6033, 5613, 6033, 5609, 5628, 5630, + 5632, 6033, 5615, 5625, 5617, 5623, 5633, 6033, 5635, 5637, + 5636, 5640, 5639, 5644, 5646, 5649, 5651, 5650, 5652, 5655, + 5653, 5660, 5657, 5656, 5674, 6033, 6033, 6033, 5661, 5663, + 5665, 5671, 5682, 5684, 5687, 5689, 5673, 5690, 5691, 5693, + 5695, 5696, 5697, 5705, 5701, 5702, 5703, 5704, 5707, 5711, + 5709, 5717, 6033, 5718, 6033, 5713, 6033, 6033, 5720, 5722, + 5727, 5725, 5736, 5738, 5729, 5734, 5737, 5740, 5742, 5749, + 6033, 5739, 5746, 6033, 5750, 5751, 6033, 5752, 5753, 5754, - 5764, 5760, 5763, 5767, 5769, 5770, 5777, 6016, 5776, 5778, - 5780, 6016, 5781, 5782, 5784, 5786, 5787, 5794, 5790, 5795, - 6016, 5792, 6016, 5797, 5798, 5799, 5800, 5802, 5803, 5811, - 5813, 5814, 6016, 5815, 5822, 5817, 5824, 5828, 5826, 5830, - 5820, 5833, 5835, 5842, 5846, 5843, 5847, 5834, 5851, 5838, - 6016, 5849, 5852, 6016, 5855, 5858, 5859, 5861, 5864, 6016, - 5867, 5862, 5868, 5869, 5873, 5875, 6016, 5877, 5884, 5879, - 6016, 5885, 6016, 6016, 5888, 5889, 5891, 5895, 5897, 6016, - 6016, 6016, 5924, 5931, 5938, 5945, 5952, 88, 5959, 5966, - 5973, 5980, 5987, 5994, 6001, 6008 + 5757, 5761, 5759, 5762, 5763, 5776, 6033, 6033, 5765, 5769, + 5771, 5780, 5777, 5789, 5791, 5781, 5788, 5794, 5784, 5801, + 6033, 5797, 5800, 5807, 6033, 5798, 5804, 5808, 5809, 5810, + 5817, 5812, 5813, 6033, 5818, 6033, 5821, 5824, 5822, 5816, + 5825, 5830, 5837, 5834, 5832, 6033, 5814, 5841, 5846, 5847, + 5849, 5851, 5852, 5853, 5855, 5857, 5858, 5864, 5861, 5866, + 5867, 5869, 5870, 6033, 5876, 5871, 6033, 5877, 5878, 5879, + 5880, 5884, 6033, 5888, 5881, 5891, 5892, 5895, 5896, 6033, + 5902, 5905, 5906, 6033, 5907, 6033, 6033, 5909, 5897, 5908, + 5918, 5920, 6033, 6033, 6033, 5941, 5948, 5955, 5962, 5969, + 88, 5976, 5983, 5990, 5997, 6004, 6011, 6018, 6025 } ; -static const flex_int16_t yy_def[3097] = +static const flex_int16_t yy_def[3110] = { 0, - 3082, 1, 3083, 3083, 3084, 3084, 3085, 3085, 3086, 3086, - 3087, 3087, 3082, 3088, 3082, 3082, 3082, 3082, 3089, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3090, 3082, 3082, 3082, 3090, 3091, 3082, 3082, - 3082, 3091, 3092, 3082, 3082, 3082, 3082, 3092, 3093, 3082, - 3082, 3082, 3093, 3094, 3082, 3095, 3082, 3094, 3094, 3088, - 3088, 3082, 3096, 3089, 3096, 3089, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3095, 1, 3096, 3096, 3097, 3097, 3098, 3098, 3099, 3099, + 3100, 3100, 3095, 3101, 3095, 3095, 3095, 3095, 3102, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3103, 3095, 3095, 3095, 3103, 3104, 3095, 3095, + 3095, 3104, 3105, 3095, 3095, 3095, 3095, 3105, 3106, 3095, + 3095, 3095, 3106, 3107, 3095, 3108, 3095, 3107, 3107, 3101, + 3101, 3095, 3109, 3102, 3109, 3102, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3090, 3090, 3091, 3091, 3092, 3092, 3082, 3093, 3093, - 3094, 3094, 3095, 3095, 3094, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3103, 3103, 3104, 3104, 3105, 3105, 3095, 3106, 3106, + 3107, 3107, 3108, 3108, 3107, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3094, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3107, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3094, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3107, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, - 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3082, 3088, 3094, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3095, 3101, 3107, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3094, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3082, 3088, 3082, 3082, 3088, 3082, 3082, 3088, 3088, 3082, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3107, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3095, 3095, 3101, 3095, 3095, 3101, 3101, 3095, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3094, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3082, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3107, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3095, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, - 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3082, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3082, 3082, 3088, 3088, 3088, 3088, 3088, 3082, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3095, 3095, 3101, 3101, 3101, 3101, 3101, 3095, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3094, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3107, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3082, 3088, 3082, 3088, 3088, 3088, 3088, - 3088, 3082, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3095, + 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3095, 3101, 3101, + 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, - 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, - 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3095, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3082, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, - 3088, 3082, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, - 3082, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3095, 3101, 3101, 3101, 3095, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, - 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, - 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3082, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3082, 3088, 3088, - 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3101, 3095, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3082, 3082, 3088, 3082, 3088, 3088, 3088, 3082, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, - 3088, 3088, 3088, 3088, 3082, 3088, 3082, 3088, 3088, 3088, - 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3095, 3101, + 3095, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3082, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, - 3088, 3088, 3088, 3088, 3082, 3082, 3088, 3082, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3082, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3082, 3088, 3088, 3088, 3082, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3095, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, + 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3082, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, - 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, 3088, - 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3082, 3082, 3088, - 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, - 3082, 3082, 3088, 3082, 3088, 3082, 3088, 3088, 3082, 3082, - 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3082, 3088, 3088, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, + 3101, 3101, 3101, 3101, 3101, 3095, 3095, 3101, 3101, 3101, + 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3095, 3095, + 3101, 3095, 3101, 3095, 3101, 3101, 3095, 3095, 3101, 3101, - 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3082, 3088, 3088, - 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, - 3082, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3101, 3101, 3101, 3095, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3095, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3095, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, - 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3082, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3082, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, - 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3082, - 3082, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3082, 3088, 3082, 3082, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3095, + 3095, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3101, 3095, 3095, 3101, 3101, 3101, 3101, 3101, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3082, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3082, 3088, 3088, 3082, 3088, 3082, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3082, 3082, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3082, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, - 3088, 3082, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, - 3082, 3088, 3088, 3088, 3082, 3088, 3082, 3088, 3088, 3088, - 3088, 3082, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3082, + 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3095, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, + 3101, 3095, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3095, 3101, 3095, 3101, 3101, 3101, - 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3082, 3082, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3082, 3082, 3088, 3082, 3088, - 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, - 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, - 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3082, 3082, 3082, 3088, 3088, 3082, 3088, - 3088, 3088, 3088, 3082, 3088, 3088, 3082, 3082, 3088, 3088, + 3101, 3101, 3095, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3095, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3095, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3095, 3101, 3095, + 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3095, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3095, 3095, 3101, 3101, 3095, - 3088, 3088, 3082, 3088, 3082, 3088, 3082, 3088, 3088, 3088, - 3088, 3082, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3082, 3088, 3082, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3082, - 3088, 3082, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, - 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3082, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3082, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3095, 3095, + 3101, 3101, 3101, 3101, 3095, 3101, 3095, 3101, 3095, 3101, + 3101, 3101, 3101, 3095, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, + 3101, 3095, 3101, 3095, 3101, 3095, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3095, 3095, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, - 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, - 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3082, 3088, 3082, 3082, 3088, 3082, 3088, - 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, - 3082, 3088, 3088, 3088, 3088, 3082, 3082, 3088, 3082, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, - 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, - 3088, 3082, 3082, 3088, 3088, 3088, 3082, 3082, 3082, 3088, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3095, 3095, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3095, 3095, + 3101, 3095, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3095, 3095, + 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, - 3082, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, - 3082, 3082, 3088, 3088, 3088, 3088, 3082, 3082, 3088, 3088, - 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3082, 3088, 3082, - 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, - 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3082, 3082, 3088, 3088, 3088, 3088, 3088, - 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, - 3088, 3082, 3082, 3088, 3082, 3082, 3082, 3082, 3082, 3082, + 3101, 3095, 3101, 3101, 3095, 3095, 3101, 3101, 3101, 3095, + 3095, 3095, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3095, + 3101, 3101, 3101, 3095, 3095, 3101, 3101, 3101, 3101, 3095, + 3095, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, + 3095, 3101, 3095, 3095, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3095, 3101, 3101, + 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, - 3082, 3082, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, - 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3082, 3082, 3082, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, - 3088, 3082, 3088, 3082, 3082, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, - 3082, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3082, 3082, 3088, 3088, 3088, 3088, 3088, + 3101, 3095, 3101, 3101, 3095, 3095, 3101, 3095, 3095, 3095, + 3095, 3095, 3095, 3095, 3095, 3101, 3095, 3101, 3101, 3101, + 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3095, 3095, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3095, 3101, 3095, 3101, 3095, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3095, 3101, 3101, 3095, 3101, 3101, 3101, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, - 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3082, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3082, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3082, - 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, - 3082, 3088, 3082, 3082, 3088, 3088, 3088, 3088, 3088, 3082, - 3082, 0, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, - 3082, 3082, 3082, 3082, 3082, 3082 + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3095, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3095, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3095, + 3101, 3101, 3101, 3095, 3101, 3095, 3095, 3101, 3101, 3101, + 3101, 3101, 3095, 3095, 0, 3095, 3095, 3095, 3095, 3095, + 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095 } ; -static const flex_int16_t yy_nxt[6057] = +static const flex_int16_t yy_nxt[6074] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 26, @@ -1590,523 +1594,525 @@ static const flex_int16_t yy_nxt[6057] = 757, 71, 71, 760, 71, 762, 764, 766, 71, 763, 71, 765, 71, 771, 71, 768, 71, 71, 71, 71, 71, 767, 774, 71, 776, 773, 780, 777, 71, 769, - 770, 778, 71, 772, 71, 71, 783, 71, 775, 782, + 770, 778, 71, 772, 71, 71, 784, 71, 775, 782, - 71, 784, 71, 71, 785, 71, 779, 781, 71, 71, - 787, 789, 71, 71, 71, 71, 71, 71, 795, 788, - 796, 71, 786, 790, 71, 71, 797, 71, 71, 71, - 791, 792, 804, 793, 71, 794, 798, 71, 71, 71, - 799, 802, 71, 71, 71, 800, 71, 801, 809, 803, - 71, 805, 71, 71, 806, 71, 71, 71, 807, 71, - 143, 816, 808, 71, 810, 71, 811, 71, 818, 819, - 812, 813, 814, 817, 815, 71, 820, 822, 71, 71, - 71, 71, 71, 823, 71, 71, 821, 71, 71, 827, - 828, 829, 830, 831, 826, 824, 71, 71, 71, 825, + 71, 785, 71, 71, 786, 71, 779, 781, 71, 783, + 788, 71, 71, 790, 71, 71, 71, 71, 796, 789, + 71, 797, 787, 791, 71, 71, 71, 71, 71, 798, + 792, 71, 793, 71, 794, 71, 795, 71, 805, 71, + 799, 800, 71, 803, 71, 801, 71, 802, 804, 806, + 810, 807, 71, 71, 71, 71, 808, 71, 71, 71, + 819, 809, 71, 817, 71, 71, 820, 71, 71, 812, + 811, 71, 813, 814, 815, 71, 816, 71, 818, 822, + 824, 823, 71, 71, 821, 71, 71, 825, 71, 71, + 828, 829, 830, 831, 832, 827, 826, 71, 71, 71, - 71, 71, 71, 152, 833, 71, 840, 834, 838, 836, - 71, 71, 71, 839, 832, 835, 71, 837, 71, 71, - 71, 842, 846, 71, 71, 841, 71, 847, 849, 71, - 852, 843, 844, 850, 71, 848, 71, 71, 71, 851, - 845, 854, 71, 71, 71, 858, 71, 71, 71, 71, - 855, 71, 859, 860, 853, 71, 71, 71, 71, 71, - 71, 857, 873, 876, 71, 861, 872, 856, 71, 863, - 870, 71, 71, 862, 71, 871, 875, 874, 71, 864, - 71, 877, 880, 865, 71, 878, 866, 71, 882, 879, - 71, 883, 71, 867, 868, 891, 869, 71, 71, 71, + 71, 71, 152, 71, 71, 834, 840, 839, 835, 71, + 837, 71, 71, 841, 836, 833, 838, 71, 71, 71, + 71, 843, 847, 71, 71, 842, 71, 848, 850, 71, + 853, 71, 844, 845, 71, 849, 71, 71, 71, 846, + 851, 855, 71, 852, 71, 857, 859, 71, 71, 71, + 856, 861, 71, 71, 854, 860, 71, 71, 71, 71, + 858, 71, 71, 874, 143, 71, 862, 873, 875, 877, + 71, 871, 71, 864, 863, 71, 872, 876, 71, 878, + 865, 71, 879, 880, 866, 71, 71, 867, 881, 71, + 884, 71, 71, 71, 868, 869, 71, 870, 892, 882, - 71, 881, 71, 884, 885, 71, 886, 897, 895, 887, - 896, 71, 71, 892, 888, 3082, 893, 71, 898, 71, - 889, 890, 71, 900, 894, 71, 71, 899, 71, 902, - 901, 904, 71, 903, 71, 71, 905, 71, 907, 71, - 71, 908, 71, 71, 912, 71, 71, 906, 911, 71, - 71, 915, 71, 71, 921, 71, 919, 932, 71, 909, - 913, 910, 71, 914, 916, 917, 71, 922, 933, 71, - 71, 920, 923, 71, 918, 924, 925, 926, 71, 71, - 928, 929, 71, 71, 927, 71, 71, 71, 71, 71, - 71, 930, 71, 71, 71, 931, 934, 936, 939, 71, + 71, 71, 897, 71, 896, 71, 883, 71, 885, 886, + 893, 887, 898, 71, 888, 71, 895, 906, 894, 889, + 71, 899, 71, 901, 71, 890, 891, 71, 900, 902, + 903, 71, 905, 71, 71, 71, 904, 71, 71, 71, + 71, 909, 71, 913, 71, 71, 907, 912, 71, 71, + 916, 71, 71, 71, 908, 920, 918, 977, 910, 911, + 914, 71, 915, 71, 922, 71, 923, 926, 921, 917, + 71, 924, 71, 71, 919, 925, 927, 71, 71, 929, + 930, 71, 71, 928, 71, 71, 71, 931, 933, 71, + 934, 71, 932, 71, 935, 71, 71, 71, 940, 71, - 937, 71, 71, 940, 71, 942, 71, 935, 71, 938, - 941, 71, 71, 944, 71, 945, 71, 947, 71, 949, - 943, 71, 71, 948, 71, 71, 950, 71, 957, 955, - 71, 71, 946, 953, 956, 71, 951, 71, 954, 71, - 71, 71, 964, 952, 962, 958, 960, 965, 71, 71, - 959, 71, 963, 71, 71, 71, 967, 71, 71, 71, - 71, 71, 71, 961, 71, 975, 71, 978, 973, 71, - 966, 1218, 71, 71, 968, 969, 971, 970, 972, 71, - 976, 979, 71, 974, 71, 977, 71, 71, 981, 71, - 983, 980, 985, 986, 71, 71, 982, 71, 71, 71, + 937, 71, 943, 938, 71, 71, 71, 71, 71, 71, + 941, 936, 942, 71, 71, 945, 939, 71, 946, 948, + 950, 71, 949, 71, 944, 71, 951, 71, 71, 956, + 71, 947, 71, 958, 957, 71, 954, 952, 71, 71, + 71, 955, 71, 71, 71, 959, 964, 71, 961, 966, + 953, 967, 71, 71, 965, 71, 71, 960, 969, 71, + 963, 71, 71, 71, 962, 968, 71, 71, 71, 980, + 71, 71, 975, 71, 71, 71, 970, 71, 973, 971, + 981, 972, 974, 985, 984, 978, 982, 979, 71, 976, + 71, 71, 983, 988, 71, 987, 71, 71, 71, 71, - 984, 71, 71, 3082, 988, 71, 990, 995, 996, 987, - 71, 71, 998, 71, 71, 71, 1000, 989, 71, 991, - 1001, 993, 71, 992, 997, 994, 71, 71, 71, 71, - 71, 999, 1002, 71, 1003, 1006, 71, 1008, 1009, 1004, - 71, 71, 1013, 1010, 71, 71, 71, 1005, 71, 71, - 1007, 1011, 1015, 71, 1012, 71, 1018, 152, 71, 71, - 1017, 71, 1021, 1020, 1016, 1014, 71, 71, 71, 71, - 71, 1022, 1024, 1019, 71, 71, 71, 1036, 71, 71, - 71, 71, 1037, 71, 1027, 1041, 1023, 1025, 1039, 71, - 71, 71, 71, 1026, 1028, 1038, 1029, 71, 1042, 1059, + 71, 71, 986, 71, 997, 990, 992, 998, 1000, 71, + 71, 989, 71, 71, 71, 1002, 71, 991, 1003, 993, + 995, 71, 994, 996, 71, 71, 999, 71, 71, 1001, + 71, 1004, 71, 1008, 1011, 1005, 71, 1006, 71, 1010, + 71, 71, 1015, 71, 1012, 1007, 1017, 71, 71, 1014, + 1013, 1009, 71, 71, 1020, 152, 71, 71, 1019, 71, + 1023, 1022, 71, 1016, 71, 71, 71, 71, 71, 1026, + 1018, 1021, 71, 71, 71, 1038, 71, 71, 71, 71, + 1039, 71, 1029, 1043, 1024, 1025, 1027, 1041, 71, 71, + 1028, 71, 1030, 1040, 1031, 71, 1044, 1062, 1032, 71, - 1030, 71, 1031, 1182, 1040, 1043, 1032, 71, 1033, 71, - 71, 1046, 1044, 1034, 1049, 1045, 1047, 71, 1035, 71, - 71, 71, 71, 1048, 71, 1052, 1050, 1055, 71, 71, - 71, 1061, 71, 1054, 1051, 1053, 1060, 71, 1056, 1062, - 1063, 71, 1064, 1058, 1065, 71, 71, 71, 71, 1057, - 71, 71, 71, 71, 1066, 71, 71, 1077, 71, 71, - 1080, 1081, 71, 1076, 71, 1067, 1068, 71, 1069, 1078, - 1079, 71, 1082, 1070, 1144, 1071, 1083, 71, 1086, 71, - 71, 1072, 1088, 71, 1087, 71, 1073, 1074, 71, 71, - 1084, 1092, 1089, 1075, 71, 71, 1085, 71, 1091, 1093, + 1033, 3095, 1042, 1045, 1034, 71, 1035, 71, 71, 1048, + 1046, 1036, 1051, 1047, 1049, 71, 1037, 71, 71, 71, + 71, 1050, 71, 1054, 1052, 1057, 71, 71, 71, 1063, + 71, 1056, 1053, 1055, 1064, 71, 1058, 1061, 1065, 71, + 71, 1060, 71, 1066, 1067, 71, 71, 1059, 71, 71, + 71, 71, 1068, 71, 1079, 71, 71, 71, 1078, 71, + 1082, 1069, 1083, 1070, 71, 1071, 71, 1080, 1081, 1085, + 1072, 1104, 1073, 71, 1084, 71, 1088, 71, 1074, 71, + 1090, 71, 1091, 1075, 1076, 1089, 71, 71, 71, 1094, + 1077, 71, 1086, 71, 1087, 71, 1095, 71, 71, 71, - 71, 71, 1090, 71, 71, 1098, 71, 71, 71, 1095, - 1096, 71, 1101, 1099, 1094, 71, 71, 71, 71, 1097, - 71, 71, 71, 71, 71, 1100, 1106, 1108, 1102, 1103, - 1105, 1107, 1110, 71, 71, 71, 1104, 1109, 71, 1111, - 71, 71, 3082, 71, 1113, 71, 71, 1112, 1118, 1115, - 1119, 1120, 71, 1114, 71, 1122, 1117, 1123, 1116, 71, - 71, 1121, 1126, 71, 71, 71, 1128, 1127, 71, 1129, - 71, 71, 1124, 1130, 71, 71, 1125, 1137, 1131, 71, - 71, 71, 1139, 71, 71, 71, 71, 3082, 71, 71, - 1133, 1132, 1135, 1134, 1141, 1136, 71, 1150, 71, 1140, + 71, 1093, 71, 1100, 71, 71, 1092, 1097, 1098, 71, + 1103, 1101, 1096, 1099, 71, 71, 71, 71, 1105, 1102, + 71, 71, 71, 1112, 71, 1108, 1109, 1107, 1110, 71, + 71, 71, 71, 71, 1106, 1114, 71, 1111, 71, 71, + 1113, 71, 71, 1120, 1121, 1117, 1122, 71, 1119, 1125, + 1115, 1116, 71, 1124, 1118, 71, 1123, 71, 1127, 1128, + 71, 71, 71, 1130, 1129, 71, 1131, 71, 71, 71, + 1126, 1132, 71, 71, 1133, 71, 1139, 71, 1141, 71, + 71, 1134, 71, 1135, 71, 1137, 71, 1136, 1138, 71, + 3095, 1143, 1142, 1144, 71, 1140, 71, 1145, 71, 71, - 1142, 1138, 71, 1145, 71, 1143, 71, 71, 71, 1146, - 71, 1148, 1147, 1149, 71, 1154, 1151, 1155, 71, 71, - 1153, 71, 71, 1152, 71, 71, 1159, 1158, 1156, 71, - 71, 71, 71, 71, 71, 1163, 1165, 1166, 1170, 1167, - 1157, 71, 71, 71, 71, 71, 1164, 1160, 71, 1161, - 1168, 1162, 71, 1169, 1173, 71, 71, 1175, 71, 1171, - 71, 1174, 71, 71, 1176, 71, 71, 71, 71, 1180, - 1181, 1177, 1172, 71, 71, 71, 1186, 1187, 1190, 71, - 71, 1178, 71, 71, 1179, 1184, 1183, 71, 71, 71, - 1188, 1194, 1189, 1185, 71, 71, 71, 71, 71, 1191, + 71, 1146, 71, 1147, 1148, 1149, 71, 1151, 1153, 1150, + 71, 1152, 71, 71, 1157, 71, 1154, 1158, 71, 1156, + 71, 71, 71, 71, 1159, 1161, 71, 1162, 1155, 71, + 71, 71, 71, 71, 1166, 71, 1168, 1169, 1170, 1160, + 1171, 1163, 71, 71, 71, 1167, 1173, 71, 1164, 1172, + 1165, 71, 71, 1176, 71, 71, 1178, 71, 71, 71, + 1177, 71, 71, 1179, 71, 1174, 71, 1180, 71, 1183, + 71, 1175, 71, 1184, 71, 1185, 1189, 1190, 71, 1181, + 71, 1182, 71, 71, 1187, 71, 1186, 1193, 71, 71, + 1192, 71, 71, 1188, 1197, 1191, 71, 1194, 71, 71, - 71, 1193, 1192, 1200, 71, 1196, 71, 71, 71, 71, - 1206, 71, 1195, 1204, 71, 71, 1197, 1221, 71, 1199, - 1201, 1203, 1202, 1198, 1205, 1208, 1209, 71, 71, 1211, - 71, 71, 71, 1210, 1207, 1212, 71, 71, 71, 71, - 71, 71, 71, 1215, 71, 71, 71, 71, 71, 71, - 1213, 1214, 1225, 1251, 1216, 71, 1219, 3082, 1222, 1217, - 1227, 1220, 1224, 1223, 71, 1231, 71, 71, 1226, 1228, - 71, 1229, 1232, 1234, 1230, 1233, 71, 71, 71, 71, - 1236, 71, 71, 71, 1235, 71, 71, 1240, 1239, 71, - 1243, 71, 1246, 71, 71, 3082, 71, 1237, 1242, 1238, + 71, 71, 71, 1195, 1196, 1199, 1203, 71, 71, 1198, + 71, 71, 71, 1209, 71, 71, 1204, 1207, 1200, 3095, + 1202, 1211, 1206, 1205, 1208, 1201, 1212, 71, 71, 71, + 71, 1210, 71, 1213, 71, 1215, 1214, 71, 71, 71, + 71, 71, 71, 1216, 1218, 71, 1224, 71, 1221, 71, + 71, 1217, 71, 1219, 71, 71, 71, 1222, 1351, 1220, + 1228, 71, 1234, 1225, 1223, 71, 71, 1227, 1226, 71, + 1230, 1235, 1236, 71, 71, 1229, 1237, 71, 71, 1231, + 1239, 1232, 71, 71, 1233, 71, 71, 71, 1238, 71, + 1243, 71, 1242, 71, 1246, 1249, 71, 1240, 71, 1245, - 1244, 1247, 1241, 71, 71, 71, 71, 71, 1248, 1250, - 1245, 71, 71, 71, 1249, 1252, 71, 71, 71, 71, - 1253, 71, 1254, 1258, 1256, 71, 71, 71, 1257, 1259, - 1255, 1263, 71, 71, 71, 71, 71, 1260, 1268, 1262, - 1261, 1264, 1267, 1270, 71, 71, 71, 1265, 1269, 1274, - 1272, 71, 1266, 71, 1275, 71, 1271, 71, 1273, 71, - 71, 1279, 71, 1288, 71, 1289, 1287, 1277, 71, 71, - 1276, 71, 1278, 71, 1292, 1286, 1290, 1291, 1280, 71, - 71, 1281, 1282, 71, 1293, 71, 1283, 71, 1294, 71, - 1295, 71, 1284, 71, 1297, 71, 1285, 71, 1298, 71, + 1241, 71, 1247, 1250, 71, 1244, 1251, 71, 71, 71, + 71, 1254, 1248, 1253, 71, 71, 71, 71, 1255, 71, + 71, 71, 71, 71, 1252, 1256, 1261, 71, 1259, 1257, + 71, 71, 1260, 1262, 1258, 71, 1266, 71, 1271, 1263, + 71, 1265, 1267, 1264, 71, 71, 1270, 71, 71, 71, + 71, 1268, 71, 1273, 1272, 1269, 1277, 1275, 71, 71, + 1276, 1278, 71, 71, 1280, 71, 1282, 1274, 1279, 71, + 1322, 1281, 71, 1291, 71, 1292, 1289, 1283, 1290, 71, + 1284, 1285, 71, 71, 1295, 1286, 71, 1293, 71, 71, + 71, 1287, 1294, 1296, 1297, 1288, 71, 1298, 71, 1300, - 1299, 71, 71, 71, 1316, 71, 1296, 1300, 1302, 1301, - 1304, 71, 1307, 1308, 71, 1305, 1309, 1303, 71, 71, - 1306, 71, 71, 1311, 71, 1310, 1317, 1318, 1312, 71, - 1313, 71, 1314, 1319, 1315, 1320, 71, 71, 1324, 1321, - 71, 71, 71, 1325, 71, 71, 1323, 1328, 71, 1326, - 71, 71, 71, 71, 1322, 1334, 71, 1330, 71, 1329, - 71, 71, 71, 1327, 71, 1335, 1333, 1337, 1336, 1331, - 1332, 71, 1339, 71, 1341, 71, 1338, 1344, 71, 71, - 1343, 71, 1340, 1346, 71, 71, 71, 1342, 1347, 71, - 1349, 71, 1348, 71, 1345, 1352, 71, 1354, 71, 71, + 71, 71, 71, 1301, 71, 1302, 71, 1299, 71, 71, + 71, 1310, 1311, 1305, 1307, 3095, 71, 71, 71, 71, + 1304, 1303, 1308, 71, 1312, 1314, 1306, 1313, 1309, 71, + 1315, 71, 1316, 1323, 1317, 71, 1318, 71, 1319, 1320, + 1321, 71, 71, 1327, 71, 71, 1324, 71, 1328, 71, + 1326, 71, 1331, 1325, 1329, 71, 71, 71, 71, 71, + 1338, 1337, 71, 71, 1333, 1332, 1330, 71, 71, 71, + 1339, 71, 1336, 1341, 71, 1334, 1335, 1340, 71, 71, + 1343, 1344, 71, 1342, 1348, 71, 71, 1347, 1350, 71, + 71, 71, 71, 1352, 71, 71, 1345, 1353, 1356, 71, - 1350, 71, 1351, 71, 1355, 71, 1356, 1359, 71, 71, - 71, 1353, 71, 1361, 71, 71, 71, 71, 1365, 1363, - 1357, 71, 71, 71, 1364, 1367, 1358, 71, 1369, 1360, - 71, 71, 1362, 71, 3082, 1366, 1368, 71, 1371, 1372, - 71, 1370, 1373, 71, 1375, 1374, 71, 71, 1377, 71, - 71, 1376, 1381, 1378, 1382, 1384, 1379, 71, 71, 71, - 71, 71, 1383, 1380, 71, 71, 1388, 71, 1385, 71, - 71, 71, 1392, 1393, 71, 1395, 1387, 71, 71, 71, - 1394, 71, 71, 1386, 71, 71, 71, 71, 1402, 1389, - 1390, 1396, 71, 71, 1391, 71, 1399, 1397, 71, 1400, + 71, 1349, 71, 1355, 1346, 1358, 71, 71, 1359, 71, + 1354, 1363, 71, 71, 1360, 1357, 71, 71, 71, 1365, + 71, 1361, 71, 1362, 1369, 1367, 71, 1368, 71, 71, + 71, 1371, 71, 1364, 1373, 71, 71, 1366, 71, 71, + 1375, 1377, 71, 1378, 1370, 1372, 1374, 1376, 71, 1379, + 71, 71, 71, 71, 71, 1380, 1385, 1382, 1386, 1383, + 1381, 1388, 71, 71, 71, 71, 1384, 71, 1387, 71, + 1392, 71, 71, 1390, 1389, 71, 71, 1396, 1397, 71, + 1391, 1399, 71, 71, 71, 1398, 71, 71, 71, 71, + 71, 71, 1393, 71, 1406, 1394, 1400, 71, 71, 1395, - 1407, 71, 1398, 1406, 1401, 71, 71, 71, 71, 1411, - 71, 1409, 1403, 1405, 1412, 71, 71, 1414, 1404, 71, - 71, 71, 3082, 71, 1416, 71, 1410, 1415, 1408, 71, - 1420, 1422, 1424, 1421, 1413, 1417, 1418, 1423, 71, 1419, - 71, 71, 1427, 71, 1425, 71, 71, 1428, 71, 71, - 71, 71, 1426, 71, 1432, 1433, 71, 71, 1435, 71, - 71, 71, 1429, 71, 1431, 71, 1440, 1441, 71, 1434, - 71, 1430, 71, 1437, 1444, 1438, 1436, 71, 1439, 1442, - 71, 71, 1445, 71, 71, 71, 71, 1443, 71, 71, - 1451, 1446, 1448, 1452, 1453, 1447, 71, 71, 1449, 71, + 1403, 71, 1401, 1404, 71, 71, 1402, 71, 1405, 1410, + 1413, 1407, 1411, 71, 1415, 71, 1409, 71, 71, 1416, + 71, 71, 1408, 71, 1412, 1419, 1414, 1418, 71, 71, + 71, 71, 1426, 1417, 1424, 1420, 1428, 1425, 1421, 71, + 71, 71, 71, 1422, 1429, 1427, 1423, 1431, 71, 71, + 1430, 71, 1432, 71, 71, 71, 1436, 71, 71, 1437, + 1433, 71, 1439, 71, 71, 71, 1444, 1435, 71, 71, + 71, 1448, 1445, 1438, 1434, 1441, 71, 71, 1440, 71, + 71, 1442, 1443, 71, 71, 71, 71, 1446, 1449, 1447, + 71, 1455, 71, 71, 1451, 71, 71, 1456, 1450, 1452, - 1456, 71, 71, 1450, 71, 1455, 1454, 1458, 1461, 1460, - 1462, 71, 1457, 71, 71, 1466, 71, 71, 1463, 71, - 1464, 1465, 71, 1459, 71, 71, 71, 71, 71, 1472, - 71, 1468, 71, 1467, 1471, 71, 71, 71, 1478, 1469, - 1474, 1470, 1475, 1479, 71, 71, 1480, 71, 1483, 1476, - 1473, 1481, 71, 71, 71, 1477, 71, 71, 71, 71, - 71, 1487, 1491, 71, 71, 1482, 1486, 71, 71, 1492, - 1494, 71, 1484, 1485, 71, 1497, 71, 1488, 1490, 1489, - 1496, 71, 71, 71, 71, 71, 1495, 71, 71, 1493, - 1498, 71, 71, 1505, 71, 1508, 71, 1506, 71, 1502, + 1453, 1457, 1454, 71, 1459, 71, 1460, 71, 1461, 1462, + 1458, 71, 1465, 1466, 71, 1467, 1464, 71, 71, 71, + 71, 1468, 1469, 71, 71, 71, 1471, 71, 1463, 1470, + 71, 71, 71, 1476, 71, 71, 71, 71, 1475, 71, + 71, 1473, 1472, 1478, 1479, 1474, 1482, 71, 1487, 71, + 1480, 1483, 71, 1484, 1477, 71, 1481, 71, 1485, 71, + 1486, 71, 71, 71, 71, 1495, 1490, 1491, 1488, 71, + 71, 71, 1498, 71, 1489, 1496, 71, 71, 71, 71, + 1492, 1501, 1494, 1493, 71, 1500, 71, 71, 71, 71, + 1506, 71, 1499, 71, 1509, 1497, 1502, 71, 3095, 71, - 1507, 1499, 1500, 1501, 1509, 71, 1504, 71, 1503, 71, - 71, 1512, 1510, 1511, 71, 71, 71, 1515, 71, 1513, - 71, 1516, 71, 71, 71, 1519, 1525, 1514, 1523, 71, - 71, 1520, 71, 71, 1517, 1524, 1518, 1527, 71, 1522, - 71, 71, 1521, 1528, 1529, 1530, 71, 71, 1526, 71, - 1534, 1535, 71, 71, 71, 71, 71, 71, 1539, 71, - 1538, 1540, 1542, 71, 71, 1532, 1531, 71, 71, 1533, - 71, 1536, 71, 1543, 71, 1537, 1544, 71, 71, 1541, - 1545, 1547, 71, 1549, 1546, 71, 1550, 71, 71, 71, - 71, 71, 1548, 71, 1554, 71, 1556, 1551, 71, 71, + 1510, 1512, 71, 1503, 71, 1504, 1508, 1505, 1513, 71, + 1507, 1511, 71, 71, 71, 71, 71, 1514, 1515, 71, + 71, 1519, 1522, 71, 1517, 1520, 1516, 71, 1523, 1518, + 71, 1527, 71, 71, 71, 1524, 1529, 71, 1521, 1528, + 71, 71, 71, 71, 71, 1532, 1526, 1525, 1530, 71, + 1531, 71, 1537, 1533, 71, 1534, 71, 1539, 1540, 71, + 71, 1535, 1536, 71, 71, 71, 1544, 1545, 71, 1543, + 1547, 71, 71, 71, 1538, 1548, 71, 1542, 1541, 1549, + 71, 71, 71, 71, 71, 1552, 71, 1555, 1546, 71, + 71, 71, 1550, 1554, 71, 71, 71, 1551, 71, 1559, - 1557, 71, 1561, 71, 1555, 71, 71, 1553, 1552, 71, - 71, 1558, 71, 1559, 1564, 1566, 71, 1562, 71, 71, - 1569, 1565, 1567, 1563, 1560, 71, 71, 71, 71, 71, - 1568, 1572, 71, 1574, 1570, 71, 1571, 1575, 71, 71, - 71, 71, 1582, 71, 71, 1573, 1577, 1576, 1583, 71, - 71, 71, 71, 1580, 1578, 1579, 1587, 71, 71, 1586, - 1589, 1591, 1590, 71, 1584, 1581, 71, 71, 1593, 1585, - 1595, 71, 1588, 71, 71, 71, 71, 71, 71, 1600, - 1594, 1597, 1598, 1592, 71, 1601, 71, 71, 71, 71, - 71, 1612, 1596, 1605, 71, 1606, 71, 71, 71, 71, + 71, 1561, 71, 1553, 1556, 1562, 71, 71, 1566, 1560, + 1558, 1557, 71, 71, 71, 71, 1563, 1564, 1569, 1571, + 71, 71, 71, 71, 1574, 1572, 1567, 71, 71, 71, + 1570, 1565, 1568, 1577, 71, 71, 1580, 71, 71, 1576, + 1579, 71, 1573, 71, 71, 71, 71, 1587, 71, 1575, + 71, 71, 71, 1578, 71, 1582, 1581, 1588, 1585, 1591, + 71, 71, 1583, 1584, 71, 1592, 1594, 71, 1589, 1596, + 1586, 1590, 1595, 1598, 1593, 71, 71, 1600, 71, 71, + 71, 1597, 71, 71, 71, 71, 1605, 71, 1602, 1603, + 1599, 71, 1606, 71, 71, 71, 71, 1611, 1610, 1601, - 1599, 1602, 1609, 1604, 1603, 1610, 71, 71, 1607, 1608, - 1614, 1613, 71, 71, 1620, 71, 71, 1611, 1617, 1619, - 71, 1616, 1621, 1618, 71, 1622, 1615, 1625, 71, 71, - 1623, 71, 1624, 71, 71, 71, 71, 1627, 71, 1626, - 71, 1632, 1633, 1631, 71, 1635, 71, 71, 71, 1634, - 71, 71, 71, 1628, 71, 1629, 71, 1637, 1630, 1638, - 71, 1639, 71, 71, 71, 1647, 71, 71, 1640, 1636, - 71, 71, 71, 71, 1641, 71, 71, 1643, 1644, 1645, - 1652, 71, 1642, 1646, 71, 71, 1648, 1650, 71, 1655, - 1654, 1656, 1649, 71, 71, 71, 1651, 71, 71, 71, + 71, 1607, 71, 71, 71, 71, 1624, 1604, 1617, 1609, + 71, 1608, 1612, 1614, 71, 71, 1615, 71, 71, 71, + 1618, 1619, 1613, 1633, 1622, 71, 1621, 1626, 1616, 1623, + 1625, 71, 1630, 71, 71, 71, 1628, 1620, 71, 1627, + 71, 1629, 71, 71, 1634, 71, 71, 1631, 1637, 1636, + 71, 1638, 1640, 71, 71, 1639, 1632, 71, 71, 71, + 1643, 71, 71, 71, 1642, 1635, 71, 1644, 71, 71, + 71, 1652, 71, 71, 71, 71, 1641, 71, 71, 71, + 71, 1645, 71, 1648, 1649, 1650, 1646, 1651, 1647, 1657, + 71, 71, 1653, 1655, 71, 1654, 1659, 71, 1660, 1656, - 71, 71, 71, 71, 1653, 1662, 1660, 1657, 71, 1663, - 1670, 71, 1664, 1659, 1661, 1672, 71, 1665, 1658, 1669, - 1671, 71, 71, 1666, 1675, 71, 71, 1668, 1667, 1674, - 71, 71, 71, 71, 71, 71, 71, 1678, 1679, 71, - 1673, 71, 1687, 1676, 71, 1682, 71, 71, 71, 71, - 1677, 1681, 71, 1680, 1690, 1686, 1684, 71, 1683, 1685, - 1688, 71, 71, 71, 1689, 71, 1692, 1691, 71, 1697, - 71, 71, 71, 1693, 1694, 71, 1701, 1700, 71, 71, - 1699, 71, 71, 1696, 1705, 71, 1698, 1709, 1695, 71, - 1702, 1703, 1710, 71, 1704, 71, 1706, 71, 71, 3082, + 1658, 71, 71, 71, 71, 71, 1663, 71, 71, 1661, + 71, 3095, 1665, 71, 1667, 1662, 1675, 71, 71, 1666, + 1664, 1670, 1668, 1671, 71, 1669, 71, 1674, 1672, 1676, + 71, 71, 1680, 71, 1679, 1673, 1678, 71, 1677, 71, + 71, 71, 71, 71, 71, 1683, 1684, 71, 71, 1692, + 1681, 1693, 71, 1687, 71, 71, 71, 1689, 1682, 1686, + 1690, 1685, 71, 1691, 71, 71, 1688, 71, 71, 71, + 71, 71, 1702, 71, 71, 1695, 1694, 71, 1760, 1697, + 1699, 71, 1696, 1698, 71, 71, 1704, 71, 1701, 1703, + 1705, 71, 1706, 1708, 1700, 71, 1709, 71, 1714, 1711, - 71, 1715, 1707, 1708, 1712, 1714, 1718, 71, 71, 1711, - 1717, 71, 71, 1719, 1720, 71, 1716, 71, 71, 1713, - 71, 1721, 1724, 71, 71, 1728, 71, 1726, 71, 71, - 71, 71, 1723, 1727, 1729, 71, 1725, 1722, 71, 71, - 71, 71, 71, 1732, 1738, 71, 71, 1733, 1730, 1731, - 71, 1740, 1734, 1735, 1741, 1736, 1737, 71, 71, 1742, - 71, 1743, 71, 71, 71, 1748, 1739, 71, 71, 71, - 1744, 71, 1752, 71, 71, 71, 1745, 1747, 71, 1754, - 71, 71, 1746, 1755, 1750, 1756, 1757, 1751, 71, 1749, - 71, 71, 1761, 71, 1753, 71, 71, 1758, 71, 1765, + 1710, 71, 71, 1715, 71, 71, 1707, 71, 1712, 71, + 71, 1720, 1719, 1722, 71, 1713, 1716, 71, 1723, 71, + 1717, 71, 1726, 1718, 71, 71, 1724, 1721, 71, 71, + 1728, 1727, 1730, 1725, 71, 1734, 71, 71, 71, 1732, + 71, 71, 71, 1729, 71, 1733, 71, 1731, 1735, 71, + 71, 71, 1738, 71, 1746, 1739, 1736, 1744, 71, 71, + 71, 1737, 1740, 1741, 1747, 1742, 71, 1743, 1749, 71, + 71, 71, 1748, 71, 71, 1754, 71, 71, 71, 1745, + 71, 71, 1758, 71, 71, 71, 1750, 1753, 71, 1751, + 1761, 71, 1752, 1756, 71, 71, 1757, 71, 1755, 1762, - 71, 71, 71, 71, 71, 71, 1760, 71, 1763, 1767, - 71, 71, 1772, 1759, 1762, 1766, 1768, 1764, 71, 1769, - 71, 71, 1770, 1773, 1777, 1771, 1775, 71, 1774, 1776, - 71, 1778, 71, 71, 1781, 71, 1780, 71, 1779, 1784, - 71, 1782, 71, 71, 71, 71, 1785, 1783, 71, 71, - 71, 71, 71, 71, 1790, 71, 71, 1794, 71, 71, - 1791, 3082, 71, 1800, 1786, 1792, 1788, 1787, 1789, 71, - 1793, 1795, 71, 1803, 1798, 71, 1797, 1802, 71, 71, - 1804, 1799, 71, 71, 1796, 71, 71, 1801, 1808, 71, - 1811, 1812, 71, 71, 1805, 1813, 71, 71, 1806, 1809, + 1759, 71, 1763, 1766, 1764, 1767, 71, 1765, 71, 71, + 1768, 1771, 71, 1769, 71, 71, 71, 71, 71, 1778, + 71, 1773, 71, 1772, 71, 71, 71, 1770, 1774, 1775, + 1781, 1785, 1779, 71, 1776, 1782, 71, 71, 1777, 71, + 1780, 1787, 1783, 1784, 71, 1789, 1786, 71, 1788, 71, + 71, 71, 1790, 71, 1791, 71, 71, 71, 71, 71, + 71, 71, 71, 1796, 71, 71, 71, 1800, 1797, 71, + 1806, 71, 1798, 1792, 1794, 1795, 1799, 1793, 1801, 71, + 71, 1807, 1808, 71, 1803, 1804, 71, 1809, 71, 71, + 1811, 1802, 1805, 71, 71, 71, 1814, 71, 1817, 71, - 71, 1810, 71, 1807, 1815, 71, 71, 1816, 1819, 71, - 71, 1821, 71, 1814, 1820, 1822, 1823, 71, 1817, 1825, - 1824, 1818, 71, 71, 71, 71, 1830, 1827, 1828, 71, - 71, 1829, 71, 71, 71, 71, 1837, 71, 1839, 71, - 71, 71, 71, 1840, 71, 1831, 1832, 1833, 1826, 71, - 71, 1842, 1834, 1841, 1835, 1836, 1844, 1838, 1845, 71, - 1847, 1843, 71, 71, 71, 1849, 71, 71, 1846, 71, - 1851, 71, 71, 1854, 1855, 71, 71, 1857, 71, 71, - 71, 71, 71, 1848, 1863, 71, 1862, 1852, 71, 1850, - 1859, 1860, 71, 1853, 71, 71, 1856, 71, 71, 71, + 1810, 71, 1812, 1815, 3095, 1816, 1818, 71, 1813, 1819, + 71, 1821, 71, 71, 1822, 1820, 1825, 71, 1827, 71, + 1823, 1829, 1824, 1826, 71, 71, 71, 71, 1828, 1831, + 71, 71, 1834, 71, 1833, 71, 71, 1835, 71, 1836, + 71, 71, 1843, 71, 1830, 71, 71, 71, 71, 1848, + 1837, 1838, 1839, 1845, 71, 1832, 71, 1840, 1846, 71, + 1841, 1842, 71, 1844, 1851, 71, 1853, 1849, 1847, 71, + 71, 1855, 71, 71, 1852, 71, 1857, 1850, 71, 71, + 71, 1860, 1861, 71, 71, 1863, 71, 71, 71, 71, + 1854, 71, 1869, 71, 71, 71, 1868, 1865, 1858, 1856, - 1869, 1861, 71, 1867, 1858, 1866, 71, 71, 1873, 1864, - 1865, 71, 1872, 71, 71, 1876, 1878, 71, 1877, 71, - 1875, 71, 1871, 1868, 71, 71, 71, 71, 1870, 71, - 1879, 1874, 71, 71, 71, 1880, 1884, 71, 1887, 1881, - 71, 1883, 1888, 1889, 71, 71, 1882, 71, 71, 71, - 1885, 1892, 71, 71, 71, 1891, 1897, 71, 1896, 71, - 1886, 71, 71, 71, 1890, 1894, 1901, 1893, 71, 1902, - 1904, 71, 71, 1898, 1895, 71, 1899, 1903, 1900, 1905, - 1908, 71, 71, 1906, 71, 71, 71, 71, 1907, 71, - 1915, 1912, 71, 71, 1918, 71, 71, 1917, 1910, 71, + 1866, 1859, 71, 71, 1862, 71, 71, 71, 1875, 71, + 1867, 71, 1864, 1872, 1873, 1870, 71, 71, 1871, 1879, + 1882, 1874, 1878, 71, 71, 71, 71, 1877, 1883, 1885, + 1881, 1884, 71, 71, 71, 1876, 1880, 71, 71, 71, + 71, 71, 1886, 1890, 71, 71, 1893, 1894, 1895, 71, + 1889, 71, 71, 71, 71, 71, 1898, 1887, 1888, 1891, + 71, 71, 71, 1903, 71, 71, 1897, 1902, 71, 1896, + 1892, 3095, 1899, 71, 71, 1900, 71, 1907, 71, 1908, + 1904, 71, 1901, 1905, 1906, 1910, 71, 1909, 1911, 71, + 1912, 71, 1915, 71, 71, 1916, 71, 71, 71, 71, - 1919, 71, 71, 1909, 1911, 1920, 71, 1913, 1916, 1914, - 71, 1921, 1925, 71, 1926, 71, 71, 1922, 1927, 1929, - 1930, 71, 1923, 1928, 71, 71, 71, 71, 1934, 71, - 1924, 71, 1932, 1933, 71, 1936, 71, 71, 1939, 71, - 1941, 1935, 1931, 71, 71, 71, 71, 71, 1937, 71, - 71, 71, 1947, 1946, 1945, 1942, 71, 1943, 1948, 71, - 3082, 1940, 1938, 1949, 71, 1951, 1944, 71, 71, 71, - 71, 71, 71, 1952, 1953, 1956, 1950, 1955, 1954, 71, - 71, 71, 1957, 71, 1959, 71, 71, 1963, 71, 71, - 71, 1962, 1958, 1960, 71, 1965, 71, 1961, 1964, 1966, + 1922, 71, 1913, 1919, 71, 71, 71, 1914, 1917, 1924, + 1925, 71, 71, 1926, 71, 1918, 1923, 1920, 1927, 1921, + 71, 71, 1932, 71, 1936, 1931, 1933, 71, 1934, 1928, + 71, 71, 1929, 1935, 71, 1937, 71, 1930, 71, 1941, + 71, 71, 71, 1939, 71, 71, 1943, 71, 1940, 1946, + 71, 71, 1942, 1948, 71, 71, 1944, 1938, 71, 71, + 71, 71, 1949, 71, 1953, 1952, 1950, 71, 1954, 1955, + 71, 3095, 1945, 1947, 1956, 71, 1958, 1951, 71, 71, + 71, 71, 71, 1957, 1959, 1960, 71, 1961, 1962, 71, + 71, 1963, 1964, 71, 1966, 71, 71, 71, 71, 1970, - 1967, 71, 71, 71, 71, 71, 71, 71, 1974, 1972, - 71, 1969, 1973, 71, 71, 71, 1968, 71, 71, 1976, - 71, 1970, 71, 1971, 1975, 71, 1979, 1982, 3082, 1978, - 71, 1977, 71, 1983, 1985, 1981, 71, 1980, 71, 1984, - 71, 1986, 71, 1987, 1989, 71, 71, 71, 71, 1988, - 1990, 1995, 71, 71, 1997, 71, 1991, 71, 1992, 1999, - 71, 1993, 1994, 71, 71, 1998, 71, 71, 2003, 1996, - 71, 71, 2000, 2001, 71, 2002, 71, 71, 71, 2004, - 71, 71, 71, 71, 71, 71, 2006, 2011, 2007, 2008, - 2015, 71, 2005, 71, 71, 2010, 2014, 2018, 2019, 71, + 71, 71, 1965, 1969, 71, 71, 1971, 1967, 1968, 1972, + 1973, 1974, 71, 71, 71, 71, 71, 71, 71, 1981, + 1979, 1975, 1976, 1980, 71, 71, 71, 71, 71, 1986, + 71, 71, 1977, 1983, 1978, 1982, 71, 71, 1990, 71, + 1987, 1985, 71, 1992, 1984, 1989, 71, 71, 1988, 1996, + 71, 1991, 1994, 71, 71, 71, 1997, 71, 2002, 1995, + 1993, 71, 71, 71, 71, 71, 2004, 71, 71, 2005, + 1998, 1999, 2000, 2006, 71, 2001, 2007, 71, 71, 2003, + 71, 2010, 71, 2009, 2008, 71, 71, 2011, 71, 71, + 71, 71, 71, 71, 2022, 71, 71, 2013, 2014, 2018, - 2012, 2016, 2013, 71, 2009, 2017, 71, 71, 2021, 2022, - 71, 71, 71, 71, 71, 2024, 71, 71, 2025, 2020, - 71, 2026, 2030, 2028, 2023, 71, 71, 2032, 2029, 2034, - 71, 2027, 71, 71, 71, 71, 2031, 2037, 2036, 2038, - 2033, 71, 71, 71, 2042, 71, 2039, 71, 71, 71, - 71, 71, 2043, 2045, 2048, 71, 71, 2049, 2035, 71, - 2040, 2044, 71, 2041, 2052, 2047, 71, 71, 2046, 2054, - 71, 2053, 71, 71, 2050, 2058, 71, 71, 2060, 71, - 71, 2056, 2051, 71, 2061, 71, 71, 71, 71, 2057, - 2055, 2059, 2063, 71, 2062, 2067, 2069, 2065, 2064, 71, + 2015, 71, 71, 2012, 2021, 2017, 71, 2026, 71, 2025, + 3095, 2020, 2019, 71, 2023, 2016, 71, 71, 2028, 2029, + 71, 2024, 71, 71, 71, 2031, 71, 71, 2027, 2032, + 71, 71, 2033, 2037, 2030, 2035, 71, 71, 2039, 2036, + 2041, 71, 2034, 71, 71, 71, 2044, 71, 71, 2038, + 2043, 2040, 2045, 2046, 71, 71, 2049, 71, 71, 71, + 71, 71, 71, 2050, 71, 2055, 71, 2052, 71, 2042, + 2051, 2059, 2047, 71, 2056, 2048, 2057, 71, 2054, 2053, + 71, 71, 71, 2061, 71, 2060, 71, 71, 2058, 2065, + 71, 71, 2067, 71, 2063, 71, 2066, 71, 2068, 71, - 2066, 2070, 71, 71, 71, 71, 71, 2068, 2071, 71, - 2074, 2075, 71, 71, 71, 2072, 2073, 2079, 71, 71, - 71, 71, 2076, 2078, 71, 71, 71, 71, 71, 71, - 71, 2080, 2077, 71, 2088, 2083, 2082, 2081, 2085, 2084, - 2086, 71, 2090, 71, 71, 2087, 2089, 71, 71, 2091, - 2093, 71, 2097, 2094, 2099, 71, 71, 71, 2101, 71, - 2098, 71, 2092, 2095, 71, 2096, 2100, 71, 2103, 3082, - 71, 2106, 2104, 2108, 2105, 2102, 2107, 71, 2109, 71, - 71, 71, 71, 2110, 71, 2113, 71, 71, 2114, 2111, - 2112, 2117, 2118, 71, 71, 2119, 71, 71, 2122, 71, + 2062, 71, 2064, 71, 2069, 2071, 2070, 71, 2072, 2074, + 2076, 2073, 71, 71, 2075, 2077, 71, 71, 71, 71, + 71, 71, 2079, 2085, 2078, 2082, 2083, 71, 71, 2080, + 2081, 71, 2084, 2087, 71, 71, 2086, 71, 71, 71, + 71, 71, 71, 71, 71, 2096, 2088, 2097, 71, 2089, + 71, 2090, 2091, 2093, 2092, 2094, 71, 2095, 71, 2098, + 71, 71, 2099, 2103, 2101, 71, 71, 2102, 2107, 71, + 71, 2109, 71, 71, 2106, 2100, 71, 2111, 2104, 2108, + 71, 2112, 2114, 2116, 2117, 2110, 2105, 2115, 71, 71, + 71, 71, 71, 2113, 2118, 71, 2121, 71, 71, 2122, - 71, 71, 2115, 2128, 71, 2123, 71, 2124, 2120, 2125, - 71, 71, 2127, 2116, 71, 2121, 2126, 71, 71, 71, - 71, 2129, 2132, 2130, 71, 71, 71, 71, 71, 2135, - 71, 71, 71, 2139, 2141, 71, 2142, 71, 71, 2131, - 2134, 71, 71, 2133, 2136, 71, 2137, 2138, 71, 71, - 2144, 71, 2143, 2140, 2146, 71, 2148, 2151, 71, 71, - 2147, 2149, 71, 2152, 2145, 71, 71, 2150, 71, 71, - 71, 71, 71, 2162, 71, 71, 71, 71, 2153, 2163, - 71, 2154, 71, 2159, 2161, 71, 2200, 2157, 2155, 2165, - 2156, 2158, 2170, 2160, 71, 2164, 71, 2167, 2166, 2168, + 2119, 71, 2126, 71, 71, 2127, 71, 71, 2130, 71, + 2125, 71, 71, 2123, 71, 2120, 2131, 2134, 2128, 71, + 2132, 2133, 71, 2135, 2124, 2129, 71, 71, 71, 71, + 2136, 71, 2138, 71, 2139, 71, 2140, 71, 71, 71, + 71, 71, 2143, 71, 2149, 71, 2147, 2137, 71, 71, + 2142, 71, 2150, 71, 2145, 71, 2141, 2144, 2152, 71, + 2146, 71, 71, 71, 2151, 2148, 2156, 2154, 2159, 71, + 71, 71, 71, 71, 71, 2157, 71, 2153, 2155, 2160, + 71, 2158, 71, 71, 71, 2170, 71, 71, 71, 2161, + 2171, 2162, 71, 71, 2167, 2165, 2163, 3095, 2164, 2169, - 71, 2169, 71, 71, 2172, 71, 71, 2171, 2175, 71, - 71, 2176, 71, 71, 2173, 2177, 71, 2174, 2181, 71, - 2182, 71, 71, 2184, 71, 71, 2186, 71, 2180, 71, - 71, 71, 2178, 2179, 71, 2188, 2189, 71, 2190, 71, - 71, 2183, 71, 2185, 2187, 2191, 71, 71, 2193, 2192, - 71, 2195, 2196, 71, 2198, 71, 71, 71, 2202, 2201, - 71, 2194, 2204, 71, 71, 71, 2197, 71, 2199, 2208, - 71, 71, 71, 2203, 71, 71, 2212, 2213, 71, 2205, - 2206, 71, 71, 2207, 71, 71, 71, 2209, 71, 2211, - 2215, 2218, 71, 2220, 2210, 2219, 71, 2216, 71, 2217, + 71, 2166, 2173, 71, 2168, 2172, 2174, 71, 2175, 2176, + 71, 2177, 71, 71, 2180, 2178, 2179, 71, 2183, 71, + 71, 71, 71, 71, 71, 2184, 2181, 2185, 71, 2182, + 2189, 71, 2190, 71, 2192, 71, 2188, 71, 2194, 71, + 71, 2186, 71, 2187, 71, 2196, 71, 2191, 2197, 71, + 2198, 71, 71, 71, 71, 2193, 71, 2195, 2199, 2203, + 2201, 2200, 2204, 71, 2206, 71, 71, 71, 71, 71, + 2210, 2209, 2202, 2208, 71, 2205, 2212, 71, 71, 71, + 2216, 71, 71, 71, 2207, 2211, 71, 71, 2221, 71, + 71, 2220, 71, 2213, 2214, 71, 71, 2215, 2226, 71, - 2214, 71, 2221, 71, 2225, 71, 71, 2227, 71, 71, - 71, 2228, 71, 71, 2222, 2226, 2223, 2232, 2233, 71, - 71, 2231, 71, 71, 71, 71, 2229, 2224, 2230, 2237, - 2239, 71, 2235, 2242, 71, 2234, 2240, 2244, 2241, 71, - 71, 2236, 71, 71, 71, 2245, 71, 2246, 2238, 71, - 71, 71, 2249, 71, 71, 2243, 71, 71, 3082, 2248, - 2250, 2255, 2251, 2252, 2254, 2253, 2256, 71, 71, 2247, - 71, 71, 71, 2261, 2257, 71, 2260, 2258, 71, 71, - 2259, 71, 2262, 71, 2266, 2268, 71, 71, 71, 71, - 2263, 71, 71, 71, 71, 2279, 71, 2270, 2264, 2267, + 2223, 2219, 2217, 71, 71, 71, 2218, 2224, 71, 2222, + 71, 2225, 2228, 71, 71, 2233, 71, 71, 2229, 2235, + 71, 71, 71, 2227, 71, 2234, 2230, 2236, 2231, 2239, + 71, 71, 2240, 71, 71, 71, 2241, 71, 2242, 2232, + 71, 71, 2237, 2244, 2238, 2246, 2243, 71, 2247, 71, + 71, 2251, 2248, 2253, 2249, 2245, 2250, 71, 2252, 71, + 71, 71, 71, 71, 71, 2254, 2255, 2258, 71, 71, + 71, 2259, 71, 71, 2264, 2256, 2257, 2260, 2261, 2262, + 71, 2265, 71, 71, 71, 71, 2263, 71, 2266, 71, + 2269, 2268, 2270, 2267, 71, 2271, 71, 71, 71, 2275, - 2265, 2271, 2269, 71, 2274, 71, 2275, 2272, 2273, 71, - 2276, 71, 2280, 71, 2277, 2281, 71, 71, 2283, 2284, - 2282, 2278, 2285, 2286, 71, 71, 71, 71, 71, 71, - 2288, 71, 71, 71, 2292, 2293, 71, 71, 71, 2289, - 2287, 71, 2295, 71, 3082, 2290, 71, 2296, 71, 2297, - 2294, 2291, 2298, 71, 71, 71, 71, 2300, 2301, 2299, - 2302, 2303, 71, 71, 71, 71, 71, 71, 2304, 2305, - 71, 2309, 71, 2312, 71, 71, 71, 2311, 71, 71, - 2308, 2313, 71, 2306, 2318, 2307, 71, 2316, 2319, 2317, - 2310, 71, 2314, 71, 2315, 71, 71, 2321, 71, 71, + 2277, 71, 71, 2272, 71, 2273, 2279, 2274, 71, 71, + 71, 71, 2276, 71, 2284, 71, 2280, 2278, 2285, 71, + 3095, 2283, 2288, 71, 2281, 2282, 71, 2289, 2290, 71, + 71, 2287, 71, 2291, 2293, 2286, 2294, 2292, 2295, 71, + 71, 71, 71, 71, 2297, 71, 71, 71, 71, 2301, + 2302, 71, 71, 71, 3095, 2296, 71, 2298, 2304, 71, + 2299, 71, 71, 2305, 2306, 2303, 2300, 2307, 71, 71, + 71, 2309, 2310, 71, 2308, 2312, 71, 2311, 71, 71, + 71, 71, 71, 2313, 2314, 71, 2318, 71, 2321, 71, + 71, 71, 2320, 71, 71, 2317, 2322, 71, 2315, 2327, - 2324, 2322, 71, 2326, 71, 2320, 2325, 2328, 71, 71, - 71, 71, 2330, 71, 71, 71, 2327, 71, 71, 2323, - 2329, 71, 2334, 2338, 71, 2340, 2336, 71, 2331, 2332, - 2333, 71, 2337, 2339, 71, 71, 2341, 71, 71, 71, - 71, 71, 71, 2349, 2335, 2344, 2347, 71, 71, 71, - 2348, 71, 71, 2342, 2346, 2352, 71, 71, 2345, 71, - 2343, 71, 2353, 71, 2356, 71, 2350, 2351, 2357, 71, - 2354, 71, 71, 71, 2360, 2355, 2358, 2361, 71, 2359, - 2362, 71, 71, 71, 71, 71, 3082, 2363, 2366, 71, - 2368, 2369, 71, 71, 2365, 2364, 2370, 71, 2371, 71, + 2316, 71, 2325, 2328, 2326, 2319, 71, 2323, 71, 2324, + 71, 71, 2330, 71, 71, 2333, 2331, 71, 2335, 71, + 2329, 2334, 2337, 71, 71, 71, 71, 2339, 71, 71, + 71, 2336, 71, 71, 2332, 2338, 71, 2343, 2347, 71, + 2349, 2345, 71, 2340, 2341, 2342, 71, 2346, 2348, 71, + 71, 2350, 71, 71, 71, 71, 71, 71, 2358, 2344, + 2353, 2356, 71, 71, 71, 2357, 71, 71, 2351, 2355, + 2361, 71, 71, 2354, 71, 2352, 71, 2362, 71, 2365, + 71, 2359, 2360, 2366, 71, 2363, 71, 71, 71, 2369, + 2364, 2367, 2370, 71, 2368, 2371, 71, 71, 71, 71, - 2372, 71, 71, 71, 2367, 2373, 71, 2374, 2375, 71, - 2376, 71, 2377, 71, 2378, 71, 2382, 71, 2379, 71, - 2384, 71, 2385, 71, 71, 71, 71, 71, 71, 71, - 71, 2381, 71, 2380, 2388, 2386, 71, 2387, 2383, 71, - 2389, 2391, 2394, 71, 71, 71, 2390, 71, 2395, 2392, - 2393, 71, 71, 2401, 71, 71, 71, 71, 2396, 71, - 2398, 71, 71, 2402, 2397, 2400, 71, 2410, 3082, 2399, - 2403, 2404, 71, 71, 71, 2405, 2408, 2411, 2412, 71, - 2409, 2406, 2413, 71, 2407, 71, 2414, 71, 2415, 71, - 2416, 71, 2417, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 2372, 2375, 2379, 71, 2378, 2380, 71, 2374, + 2373, 2381, 71, 2382, 71, 71, 71, 71, 71, 2376, + 2377, 71, 2385, 71, 2386, 71, 2387, 2383, 71, 71, + 2388, 2392, 71, 2389, 2384, 71, 2394, 71, 2395, 71, + 71, 71, 71, 71, 71, 2391, 71, 71, 2390, 2398, + 71, 2396, 2401, 2397, 2393, 2399, 2404, 71, 71, 71, + 71, 71, 71, 71, 2400, 71, 2402, 2405, 71, 2411, + 2403, 71, 71, 71, 2408, 71, 71, 2410, 71, 71, + 2407, 2412, 2418, 2415, 71, 2406, 2409, 3095, 2413, 2420, + 2414, 71, 2419, 2416, 2422, 71, 2421, 2423, 71, 2417, - 71, 71, 2418, 2426, 71, 71, 71, 2424, 71, 2430, - 2431, 71, 2419, 2421, 2420, 71, 71, 2423, 2422, 2425, - 2427, 71, 2428, 2429, 2433, 2434, 71, 71, 2432, 71, - 2435, 2436, 71, 71, 2437, 71, 2439, 71, 71, 71, - 2445, 71, 2446, 71, 2447, 2438, 71, 71, 2440, 71, - 71, 71, 71, 2441, 2443, 2442, 2451, 71, 2444, 71, - 71, 2455, 2449, 71, 2448, 2454, 2456, 71, 2450, 71, - 71, 2457, 2452, 2458, 71, 71, 71, 2453, 71, 2460, - 71, 71, 2459, 71, 71, 2464, 71, 71, 2462, 2468, - 2469, 71, 71, 71, 2461, 2472, 71, 2473, 2463, 71, + 71, 2424, 71, 2425, 71, 2426, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 2436, 2428, 71, + 71, 71, 2434, 3095, 2427, 71, 2440, 2429, 2431, 2430, + 2441, 71, 2433, 2432, 2435, 71, 2437, 2438, 2439, 2444, + 71, 71, 71, 2442, 2443, 2446, 71, 71, 71, 71, + 2445, 71, 71, 2457, 71, 2449, 71, 2455, 71, 71, + 2447, 2456, 71, 71, 2450, 2448, 71, 71, 71, 2451, + 2452, 71, 2453, 2454, 71, 71, 2461, 71, 71, 2465, + 2464, 2458, 2459, 2466, 71, 2460, 71, 71, 2462, 2467, + 2468, 71, 71, 71, 2463, 2470, 71, 2469, 71, 71, - 71, 2465, 2466, 71, 2467, 2471, 71, 2470, 2476, 71, - 2475, 71, 71, 2477, 2474, 2481, 71, 71, 2478, 71, - 71, 2485, 71, 71, 2484, 2487, 71, 71, 2483, 2482, - 71, 2479, 2480, 71, 71, 2488, 2489, 2492, 71, 71, - 2493, 71, 2486, 2495, 71, 71, 2491, 71, 71, 2490, - 71, 2500, 71, 71, 2502, 71, 71, 2498, 2496, 2499, - 2497, 2503, 71, 2494, 71, 71, 71, 2504, 2501, 71, - 2506, 71, 71, 71, 2507, 71, 71, 71, 2505, 71, - 2509, 2510, 2512, 2517, 2513, 2515, 71, 2511, 2508, 71, - 2514, 2516, 71, 71, 2518, 71, 2521, 71, 71, 71, + 71, 71, 71, 2474, 71, 2472, 71, 2478, 2479, 71, + 71, 2471, 2482, 71, 2483, 2480, 2473, 71, 71, 2475, + 2476, 71, 2477, 71, 2481, 2485, 2486, 71, 71, 71, + 71, 2487, 2484, 2491, 71, 71, 71, 71, 2488, 71, + 2494, 71, 2492, 71, 2493, 2495, 71, 71, 2489, 2490, + 2497, 71, 2498, 71, 71, 2500, 2496, 2503, 71, 71, + 2504, 2502, 2499, 2506, 71, 2505, 2501, 71, 71, 71, + 71, 2511, 71, 71, 2513, 71, 71, 71, 2509, 2510, + 2507, 2508, 2514, 71, 71, 71, 71, 71, 2512, 2515, + 2516, 2517, 71, 2518, 71, 71, 2520, 71, 71, 71, - 2523, 71, 71, 2522, 2526, 71, 2525, 2527, 71, 71, - 3082, 2519, 2524, 2520, 2529, 71, 71, 71, 2531, 2530, - 71, 71, 2528, 2532, 71, 2533, 2534, 2535, 71, 71, - 71, 71, 2536, 71, 2537, 71, 2542, 71, 2541, 2538, - 71, 2543, 71, 2540, 71, 2544, 2539, 71, 71, 2545, - 71, 71, 71, 2546, 2547, 2549, 2548, 2550, 71, 71, - 71, 71, 71, 2555, 71, 71, 71, 71, 71, 2553, - 2554, 71, 2552, 2556, 2560, 71, 2551, 2564, 71, 71, - 71, 71, 2563, 71, 2557, 71, 2558, 2559, 2562, 2568, - 2561, 2569, 71, 71, 2571, 2572, 2566, 3082, 2573, 2565, + 2521, 71, 2519, 2523, 2524, 2526, 71, 2527, 71, 2522, + 2525, 71, 71, 71, 2532, 2530, 71, 2529, 2528, 2531, + 71, 2533, 71, 2534, 71, 2537, 71, 71, 2535, 2536, + 2538, 71, 2540, 71, 71, 71, 2542, 2541, 71, 71, + 2539, 2543, 71, 2544, 2545, 2546, 71, 71, 71, 71, + 2547, 71, 2548, 71, 2553, 71, 2552, 2549, 71, 2554, + 71, 2551, 71, 2555, 2550, 71, 71, 2556, 71, 71, + 71, 2557, 2558, 2560, 2559, 2561, 71, 71, 71, 71, + 71, 2566, 71, 71, 71, 71, 71, 2564, 2565, 71, + 2563, 2567, 2571, 71, 2562, 2575, 71, 71, 71, 71, - 71, 71, 71, 2567, 71, 2574, 71, 71, 71, 71, - 2575, 71, 2576, 71, 71, 2579, 71, 2577, 2570, 71, - 2582, 71, 2578, 2584, 71, 2585, 71, 2580, 71, 2581, - 2586, 71, 2587, 71, 2583, 2589, 71, 71, 2588, 71, - 2593, 2590, 2591, 71, 71, 2594, 71, 71, 2596, 2597, - 71, 2592, 2598, 71, 71, 71, 71, 2599, 2603, 71, - 71, 2604, 2601, 2595, 2605, 71, 71, 71, 2600, 2607, - 71, 71, 71, 2611, 2612, 71, 2602, 71, 71, 71, - 2608, 2606, 2613, 71, 71, 2614, 2610, 71, 2620, 2609, - 2615, 71, 71, 2619, 71, 71, 2623, 71, 71, 2622, + 2574, 71, 2568, 71, 2569, 2570, 2573, 2579, 2572, 2580, + 71, 71, 2582, 2583, 2577, 3095, 2584, 2576, 71, 71, + 71, 2578, 71, 2585, 71, 71, 71, 71, 2586, 71, + 2587, 71, 71, 2590, 71, 2588, 2581, 71, 2593, 71, + 2589, 2595, 71, 2596, 71, 2591, 71, 2592, 2597, 71, + 2598, 71, 2594, 2600, 71, 71, 2599, 71, 2604, 2601, + 2602, 71, 71, 2605, 71, 71, 2608, 2609, 71, 2603, + 2610, 71, 71, 2606, 71, 2611, 71, 71, 2615, 71, + 71, 2616, 2607, 2617, 71, 71, 71, 2612, 2619, 71, + 71, 71, 2623, 71, 2613, 2624, 71, 2614, 71, 2620, - 2616, 71, 71, 2617, 2618, 71, 2624, 71, 2626, 71, - 2625, 71, 2628, 71, 71, 71, 2631, 2621, 2635, 71, - 71, 71, 71, 2627, 2629, 2630, 71, 71, 71, 2634, - 2637, 2632, 71, 71, 2633, 2636, 2639, 2642, 2638, 2640, - 2641, 3082, 2643, 71, 2650, 2644, 2645, 71, 71, 2646, - 71, 2647, 71, 2648, 71, 2649, 71, 71, 71, 2653, - 71, 2651, 71, 2657, 71, 71, 71, 2654, 2658, 2660, - 71, 71, 2662, 71, 71, 2664, 71, 2652, 2661, 2663, - 2655, 71, 2656, 71, 2659, 71, 71, 2669, 71, 71, - 2665, 71, 2666, 2670, 2667, 71, 2673, 71, 71, 71, + 2618, 71, 71, 71, 2626, 2622, 2625, 71, 2621, 2627, + 71, 2632, 71, 2631, 71, 71, 2628, 71, 2634, 2635, + 71, 2629, 71, 2630, 71, 71, 71, 2636, 2638, 2640, + 71, 71, 2637, 71, 71, 71, 2643, 2633, 2647, 71, + 2639, 71, 71, 71, 71, 2649, 71, 2641, 2642, 2646, + 71, 2644, 71, 2650, 2645, 2648, 2654, 2651, 2653, 2657, + 71, 2655, 71, 2652, 71, 2656, 71, 2658, 71, 2659, + 71, 2660, 71, 2661, 71, 71, 71, 71, 2665, 2663, + 2662, 71, 2669, 71, 71, 2666, 71, 2670, 2672, 71, + 71, 71, 2674, 71, 71, 2664, 71, 2667, 2673, 2675, - 2671, 2674, 71, 2677, 2668, 71, 2676, 71, 2679, 71, - 2672, 2675, 2678, 2680, 71, 71, 71, 71, 71, 2681, - 71, 71, 71, 2689, 71, 71, 2684, 71, 71, 71, - 2685, 2687, 2692, 2693, 2683, 71, 2690, 71, 2694, 71, - 2682, 2688, 71, 71, 2695, 2686, 2691, 2696, 71, 2697, - 2699, 71, 2698, 2700, 71, 2701, 71, 71, 71, 2703, - 71, 2706, 2704, 2705, 71, 2707, 2702, 71, 71, 2708, - 2709, 71, 71, 71, 71, 2714, 71, 71, 2712, 2716, - 71, 71, 2718, 71, 71, 71, 2710, 2717, 71, 2719, - 71, 2720, 2713, 2711, 71, 2724, 71, 71, 71, 71, + 71, 2668, 2676, 71, 2671, 2677, 71, 71, 2680, 2678, + 2681, 71, 71, 71, 71, 2679, 2682, 71, 2685, 71, + 2687, 71, 2683, 2686, 71, 2689, 2688, 71, 71, 2684, + 2691, 71, 2690, 2692, 71, 71, 2696, 71, 71, 71, + 71, 71, 2693, 71, 2694, 71, 2702, 2697, 71, 71, + 2700, 2698, 71, 2695, 2705, 71, 71, 2703, 71, 2707, + 2706, 71, 71, 2701, 71, 2699, 71, 2709, 2779, 2704, + 2708, 71, 2710, 2712, 71, 2711, 2713, 71, 2714, 71, + 71, 71, 2719, 71, 2716, 2717, 2718, 71, 71, 2715, + 71, 71, 2720, 2722, 71, 2721, 71, 71, 2727, 71, - 71, 2715, 71, 2722, 2721, 71, 2727, 71, 2728, 71, - 2725, 2726, 71, 71, 2723, 2731, 2729, 2732, 2734, 71, - 2736, 71, 2737, 71, 2730, 71, 2739, 71, 71, 71, - 71, 71, 2735, 71, 71, 2733, 2744, 71, 2743, 71, - 71, 2748, 71, 71, 2740, 2741, 2738, 2742, 2751, 71, - 2745, 71, 71, 2753, 71, 71, 2749, 2746, 2747, 71, - 2754, 71, 2750, 2756, 71, 2757, 71, 2759, 71, 71, - 71, 2752, 71, 2765, 2755, 71, 2764, 71, 3082, 2762, - 2761, 2758, 71, 2768, 71, 71, 71, 2760, 2769, 2766, - 71, 2770, 2763, 71, 2773, 2767, 2774, 71, 2771, 71, + 71, 2723, 2725, 71, 71, 2729, 71, 2730, 71, 71, + 71, 71, 2724, 2731, 2726, 2732, 71, 2733, 71, 2734, + 2737, 71, 71, 71, 2728, 71, 2735, 2740, 71, 2736, + 71, 2738, 71, 71, 2741, 2739, 71, 71, 2745, 71, + 2744, 2747, 71, 71, 2742, 2749, 71, 2750, 71, 2743, + 2752, 71, 71, 71, 2757, 71, 2748, 71, 71, 2753, + 2751, 71, 2746, 2756, 71, 71, 2761, 71, 2754, 2755, + 71, 2764, 71, 71, 2766, 71, 71, 2758, 2769, 71, + 71, 2762, 71, 2760, 2759, 2770, 71, 2767, 71, 2763, + 2772, 71, 71, 2765, 71, 71, 2771, 2768, 2777, 2774, - 71, 2776, 2775, 71, 71, 71, 71, 71, 2781, 2778, - 2779, 71, 71, 2772, 71, 2784, 71, 71, 71, 71, - 71, 2777, 2789, 71, 2785, 2780, 71, 71, 2782, 2783, - 2792, 71, 2788, 2793, 71, 2786, 2791, 71, 71, 2790, - 2795, 71, 2794, 2787, 2797, 71, 2796, 2798, 71, 2799, - 71, 71, 2801, 71, 71, 71, 2800, 2802, 71, 71, - 2806, 2807, 71, 71, 71, 71, 2811, 71, 2812, 71, - 71, 71, 71, 2813, 2810, 2849, 2803, 2804, 2808, 71, - 2805, 71, 71, 2809, 2817, 71, 2816, 2818, 71, 71, - 2814, 2815, 2821, 71, 2819, 71, 2820, 71, 71, 2824, + 71, 2775, 2781, 71, 71, 71, 71, 2783, 2782, 71, + 2773, 71, 2786, 3095, 2776, 2780, 2787, 71, 71, 2778, + 71, 2784, 2789, 2788, 71, 71, 71, 71, 71, 2794, + 2791, 2785, 2792, 71, 71, 71, 2797, 71, 71, 71, + 71, 71, 2790, 2802, 71, 2793, 2798, 71, 71, 71, + 2795, 2796, 2807, 2801, 2805, 71, 2799, 2804, 2806, 71, + 2803, 71, 71, 2808, 2800, 71, 2809, 2810, 71, 2811, + 71, 2812, 71, 71, 2814, 71, 71, 71, 2813, 71, + 2819, 2815, 2820, 71, 71, 71, 71, 2816, 2824, 71, + 2825, 71, 71, 3095, 2823, 2826, 71, 71, 2817, 2818, - 71, 71, 2825, 2823, 71, 2822, 71, 71, 71, 71, - 71, 2828, 71, 71, 2830, 71, 71, 2831, 71, 2829, - 71, 2826, 71, 71, 2827, 71, 71, 2840, 2841, 2832, - 71, 2836, 2833, 2834, 2835, 2837, 2838, 2843, 71, 71, - 3082, 2839, 2906, 71, 2844, 2842, 2845, 2847, 71, 2848, - 71, 2846, 2850, 71, 2851, 71, 2852, 2853, 71, 71, - 2854, 2855, 2858, 71, 2856, 2857, 71, 71, 2859, 71, - 71, 71, 71, 71, 2865, 71, 71, 71, 2864, 71, - 71, 2868, 71, 3082, 2860, 2861, 2867, 71, 71, 2869, - 2862, 71, 2863, 71, 2873, 2874, 71, 2870, 2875, 71, + 2821, 71, 2829, 71, 2822, 2830, 71, 2831, 71, 71, + 2834, 71, 2827, 71, 2832, 2828, 71, 2833, 2837, 71, + 71, 2836, 71, 2835, 71, 2838, 71, 71, 71, 71, + 71, 2841, 71, 71, 2843, 71, 71, 2844, 71, 2842, + 71, 71, 2839, 71, 2840, 71, 2853, 71, 2854, 2845, + 3095, 2849, 2846, 2847, 2848, 2850, 2851, 2856, 71, 71, + 3095, 2852, 71, 71, 2857, 2855, 2862, 2858, 2860, 71, + 71, 2859, 2861, 71, 2863, 71, 2864, 71, 2865, 2866, + 71, 71, 2867, 2868, 2871, 71, 2869, 2870, 2873, 71, + 2872, 71, 71, 71, 71, 71, 2878, 71, 71, 71, - 2872, 2866, 71, 2876, 71, 2871, 2880, 2877, 2882, 71, - 71, 2881, 71, 2878, 71, 71, 2879, 71, 71, 71, - 2889, 71, 2886, 2887, 2890, 2884, 71, 2892, 71, 71, - 71, 71, 2891, 3082, 2883, 2938, 2885, 71, 2888, 2893, - 71, 2912, 2894, 2895, 71, 2896, 71, 2897, 71, 2898, - 71, 2899, 71, 2900, 71, 2901, 71, 2902, 71, 71, - 2904, 71, 71, 71, 71, 71, 2909, 71, 2903, 71, - 71, 2905, 71, 2913, 2915, 71, 71, 71, 71, 2910, - 2917, 71, 2911, 2907, 2908, 2914, 71, 2919, 71, 2922, - 71, 2921, 71, 71, 2916, 71, 71, 71, 2924, 2920, + 2877, 71, 71, 2881, 71, 71, 2874, 71, 2880, 71, + 2890, 2882, 71, 2875, 2876, 71, 2886, 71, 2885, 2883, + 2887, 71, 71, 2879, 2893, 2884, 2888, 71, 71, 2894, + 71, 2891, 2889, 2895, 2892, 71, 71, 2896, 71, 71, + 71, 2899, 2903, 2897, 71, 2900, 2902, 71, 71, 3095, + 2904, 2905, 71, 2906, 71, 71, 2898, 2901, 2908, 71, + 2907, 2909, 71, 2910, 71, 2911, 71, 2912, 71, 2913, + 71, 2914, 71, 2915, 71, 71, 2917, 71, 71, 71, + 71, 71, 71, 71, 2916, 2922, 71, 2918, 71, 71, + 71, 2919, 71, 2926, 71, 2925, 2923, 2928, 71, 71, - 71, 71, 71, 71, 2918, 71, 2923, 2928, 2931, 2925, - 71, 2929, 71, 2927, 2926, 2930, 2932, 2933, 71, 2934, - 71, 2935, 71, 71, 71, 71, 2940, 71, 71, 71, - 2944, 71, 2937, 2936, 2943, 71, 2946, 71, 2942, 71, - 71, 71, 71, 71, 2939, 71, 2945, 71, 2941, 71, - 2947, 71, 2953, 71, 3082, 71, 2950, 71, 2948, 2949, - 2952, 2954, 2957, 2960, 71, 71, 71, 2951, 2955, 2958, - 71, 2956, 71, 2959, 2961, 2962, 71, 71, 2963, 2964, - 71, 2965, 71, 71, 71, 2966, 2968, 71, 71, 2969, - 2967, 71, 2970, 2973, 71, 71, 71, 2971, 71, 71, + 2920, 2921, 2924, 2927, 71, 71, 2932, 2930, 2929, 71, + 2935, 71, 2934, 71, 71, 71, 71, 2933, 2937, 71, + 2931, 71, 71, 71, 71, 2936, 71, 2941, 71, 2944, + 71, 2940, 2942, 2938, 2951, 2945, 71, 2939, 71, 2943, + 2946, 71, 2947, 71, 2948, 71, 71, 2950, 71, 71, + 71, 2949, 71, 71, 2956, 2957, 2952, 71, 2959, 71, + 2953, 2955, 71, 71, 71, 71, 71, 2958, 71, 71, + 71, 2954, 2960, 71, 71, 2966, 71, 2973, 71, 2963, + 3095, 2961, 2962, 2965, 71, 2967, 71, 71, 2971, 2969, + 2964, 2968, 2970, 2974, 2975, 71, 2972, 71, 2976, 2977, - 2976, 2978, 71, 2972, 71, 2974, 2975, 2981, 71, 71, - 71, 2984, 71, 2979, 71, 2985, 2977, 71, 71, 71, - 2988, 2989, 71, 2980, 2982, 2986, 71, 71, 2983, 71, - 71, 71, 71, 2990, 71, 2991, 2993, 2987, 2994, 71, - 2995, 71, 71, 71, 71, 71, 71, 2999, 2992, 3001, - 71, 2996, 2997, 71, 3000, 71, 2998, 71, 71, 3003, - 3006, 71, 3007, 3004, 3002, 3008, 71, 71, 3012, 71, - 71, 3014, 3005, 71, 3015, 3013, 71, 71, 3009, 3010, - 71, 3016, 71, 71, 3020, 3017, 3011, 3018, 3021, 71, - 71, 71, 3023, 71, 71, 71, 3022, 71, 3024, 71, + 71, 2978, 71, 71, 71, 2979, 71, 2981, 71, 71, + 71, 2982, 2986, 2983, 71, 71, 71, 71, 71, 2991, + 71, 2989, 71, 2980, 71, 2985, 71, 2988, 2987, 2994, + 71, 71, 2997, 71, 2984, 71, 2998, 2990, 71, 2992, + 71, 2993, 71, 3001, 2996, 3002, 2995, 71, 2999, 71, + 71, 71, 71, 71, 3007, 71, 3003, 3000, 3006, 71, + 3004, 3008, 71, 71, 71, 71, 71, 71, 3012, 3005, + 71, 3014, 71, 3009, 71, 71, 71, 3011, 71, 3010, + 3019, 3020, 71, 3016, 71, 3013, 3015, 3017, 3021, 71, + 71, 3018, 3025, 71, 71, 3026, 3027, 71, 3022, 3029, - 71, 3029, 3019, 71, 3026, 71, 3032, 71, 71, 3033, - 71, 71, 71, 71, 3025, 71, 71, 3036, 3027, 3028, - 3034, 3031, 3030, 3035, 71, 3040, 71, 71, 71, 3039, - 71, 3041, 3037, 71, 3038, 71, 3044, 71, 3046, 71, - 3042, 71, 3047, 71, 3048, 3051, 71, 71, 71, 3045, - 3049, 71, 3050, 3052, 3043, 71, 71, 3053, 3054, 71, - 71, 3060, 71, 3055, 71, 71, 3057, 3056, 71, 3058, - 3059, 71, 71, 3062, 71, 71, 3063, 71, 3066, 3067, - 71, 71, 71, 3070, 3061, 3071, 71, 3082, 71, 3073, - 71, 3064, 71, 3065, 3068, 3072, 3074, 71, 71, 3075, + 3023, 71, 71, 3024, 71, 3028, 3030, 71, 3033, 3034, + 71, 71, 3031, 71, 71, 3037, 3032, 71, 3035, 3036, + 71, 71, 71, 71, 3042, 71, 71, 71, 3039, 71, + 71, 71, 3045, 3046, 71, 71, 3038, 71, 71, 3044, + 3049, 3040, 3041, 71, 3043, 71, 3047, 71, 3050, 3048, + 71, 3053, 3054, 3056, 71, 3057, 3052, 3051, 3055, 71, + 71, 3059, 71, 3060, 71, 71, 71, 3064, 71, 3061, + 71, 71, 3062, 3066, 71, 3065, 3067, 71, 3058, 71, + 71, 3068, 71, 71, 71, 3063, 3069, 3071, 3073, 71, + 71, 71, 71, 71, 71, 3075, 3076, 71, 3079, 3070, - 3069, 71, 71, 3076, 71, 3082, 3077, 3080, 71, 3081, - 71, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, - 3082, 3078, 3082, 3079, 43, 43, 43, 43, 43, 43, - 43, 48, 48, 48, 48, 48, 48, 48, 53, 53, - 53, 53, 53, 53, 53, 59, 59, 59, 59, 59, - 59, 59, 64, 64, 64, 64, 64, 64, 64, 74, - 74, 3082, 74, 74, 74, 74, 142, 142, 3082, 3082, - 3082, 142, 142, 144, 144, 3082, 3082, 144, 3082, 144, - 146, 3082, 3082, 3082, 3082, 3082, 146, 149, 149, 3082, - 3082, 3082, 149, 149, 151, 3082, 3082, 3082, 3082, 3082, + 3080, 71, 3072, 3074, 71, 71, 3083, 3084, 71, 71, + 71, 3077, 3078, 3081, 3086, 71, 3085, 3087, 71, 71, + 71, 71, 71, 3082, 3095, 3089, 3088, 3090, 3095, 3091, + 3093, 71, 3094, 71, 3095, 3095, 3095, 3095, 3095, 3095, + 3092, 43, 43, 43, 43, 43, 43, 43, 48, 48, + 48, 48, 48, 48, 48, 53, 53, 53, 53, 53, + 53, 53, 59, 59, 59, 59, 59, 59, 59, 64, + 64, 64, 64, 64, 64, 64, 74, 74, 3095, 74, + 74, 74, 74, 142, 142, 3095, 3095, 3095, 142, 142, + 144, 144, 3095, 3095, 144, 3095, 144, 146, 3095, 3095, - 151, 153, 153, 3082, 153, 153, 153, 153, 75, 75, - 3082, 75, 75, 75, 75, 13, 3082, 3082, 3082, 3082, - 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, - 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, - 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, - 3082, 3082, 3082, 3082, 3082, 3082 + 3095, 3095, 3095, 146, 149, 149, 3095, 3095, 3095, 149, + 149, 151, 3095, 3095, 3095, 3095, 3095, 151, 153, 153, + 3095, 153, 153, 153, 153, 75, 75, 3095, 75, 75, + 75, 75, 13, 3095, 3095, 3095, 3095, 3095, 3095, 3095, + 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, + 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, + 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, + 3095, 3095, 3095 } ; -static const flex_int16_t yy_chk[6057] = +static const flex_int16_t yy_chk[6074] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2116,7 +2122,7 @@ static const flex_int16_t yy_chk[6057] = 5, 3, 6, 20, 4, 20, 20, 5, 20, 6, 7, 7, 7, 7, 20, 7, 8, 8, 8, 8, 29, 8, 7, 9, 9, 9, 22, 22, 8, 10, - 10, 10, 15, 25, 9, 29, 15, 25, 3088, 31, + 10, 10, 15, 25, 9, 29, 15, 25, 3101, 31, 10, 11, 11, 11, 11, 11, 11, 19, 79, 19, 19, 30, 19, 11, 31, 79, 30, 25, 19, 19, @@ -2125,7 +2131,7 @@ static const flex_int16_t yy_chk[6057] = 26, 21, 23, 89, 12, 23, 27, 27, 47, 47, 21, 24, 42, 90, 26, 27, 24, 28, 34, 52, 24, 28, 52, 24, 28, 24, 24, 42, 32, 32, - 1018, 28, 90, 28, 33, 33, 24, 32, 72, 33, + 1020, 28, 90, 28, 33, 33, 24, 32, 72, 33, 69, 35, 72, 32, 63, 63, 35, 32, 77, 80, 35, 77, 37, 37, 69, 33, 35, 37, 230, 35, 230, 80, 39, 39, 38, 39, 35, 37, 37, 38, @@ -2262,518 +2268,520 @@ static const flex_int16_t yy_chk[6057] = 606, 598, 603, 605, 605, 602, 608, 606, 607, 599, 599, 607, 608, 601, 610, 609, 611, 613, 604, 610, - 615, 611, 611, 612, 612, 617, 607, 609, 614, 616, - 614, 616, 618, 619, 620, 621, 623, 624, 622, 615, - 623, 625, 613, 617, 622, 626, 624, 627, 628, 629, - 618, 619, 631, 620, 630, 621, 625, 632, 631, 634, - 626, 629, 633, 635, 636, 627, 637, 628, 636, 630, - 638, 632, 639, 640, 633, 641, 642, 646, 634, 643, - 43, 642, 635, 648, 637, 645, 638, 644, 644, 645, - 639, 640, 640, 643, 641, 647, 646, 648, 649, 650, - 651, 652, 653, 649, 655, 654, 647, 656, 657, 653, - 654, 655, 656, 657, 652, 650, 658, 659, 660, 651, + 615, 611, 611, 612, 612, 617, 607, 609, 614, 610, + 614, 616, 618, 616, 619, 620, 621, 623, 622, 615, + 624, 623, 613, 617, 622, 625, 626, 627, 628, 624, + 618, 629, 619, 630, 620, 632, 621, 634, 631, 633, + 625, 626, 635, 629, 631, 627, 636, 628, 630, 632, + 636, 633, 637, 638, 639, 640, 634, 641, 642, 644, + 644, 635, 645, 642, 643, 646, 645, 648, 647, 638, + 637, 650, 639, 640, 640, 649, 641, 651, 643, 647, + 649, 648, 652, 653, 646, 655, 654, 650, 656, 657, + 653, 654, 655, 656, 657, 652, 651, 658, 659, 660, - 662, 661, 666, 664, 659, 663, 666, 660, 664, 662, - 665, 667, 668, 665, 658, 661, 669, 663, 670, 671, - 677, 668, 672, 672, 675, 667, 673, 673, 674, 674, - 678, 669, 670, 675, 679, 673, 678, 680, 681, 677, - 671, 680, 682, 683, 685, 684, 686, 687, 688, 689, - 681, 684, 685, 686, 679, 692, 699, 698, 695, 703, - 702, 683, 699, 703, 707, 687, 698, 682, 709, 689, - 692, 701, 14, 688, 690, 695, 702, 701, 706, 690, - 704, 704, 707, 690, 705, 705, 690, 708, 709, 706, - 712, 710, 713, 690, 690, 712, 690, 710, 714, 715, + 661, 662, 664, 665, 663, 659, 665, 664, 660, 666, + 662, 667, 668, 666, 661, 658, 663, 669, 671, 670, + 682, 668, 672, 672, 677, 667, 673, 673, 674, 674, + 678, 675, 669, 670, 679, 673, 678, 680, 681, 671, + 675, 680, 683, 677, 686, 682, 684, 685, 687, 688, + 681, 686, 684, 689, 679, 685, 692, 699, 698, 695, + 683, 702, 701, 699, 43, 703, 687, 698, 701, 703, + 707, 692, 706, 689, 688, 690, 695, 702, 704, 704, + 690, 705, 705, 706, 690, 708, 709, 690, 707, 713, + 710, 715, 14, 712, 690, 690, 710, 690, 712, 708, - 718, 708, 711, 711, 711, 716, 711, 718, 716, 711, - 717, 717, 720, 713, 711, 13, 714, 719, 719, 728, - 711, 711, 721, 721, 715, 722, 723, 720, 724, 723, - 722, 725, 725, 724, 726, 727, 726, 729, 728, 730, - 732, 729, 731, 733, 733, 734, 737, 727, 732, 735, - 736, 736, 739, 738, 742, 742, 740, 753, 753, 730, - 734, 731, 740, 735, 737, 738, 741, 743, 754, 754, - 745, 741, 743, 743, 739, 745, 746, 747, 750, 748, - 749, 750, 746, 747, 748, 751, 749, 752, 755, 756, - 759, 751, 757, 758, 761, 752, 755, 757, 760, 760, + 714, 716, 717, 717, 716, 718, 709, 711, 711, 711, + 713, 711, 718, 720, 711, 726, 715, 726, 714, 711, + 719, 719, 721, 721, 722, 711, 711, 723, 720, 722, + 723, 724, 725, 725, 727, 728, 724, 729, 730, 732, + 731, 729, 733, 733, 738, 734, 727, 732, 735, 736, + 736, 737, 739, 797, 728, 740, 738, 797, 730, 731, + 734, 740, 735, 741, 742, 742, 743, 746, 741, 737, + 745, 743, 743, 746, 739, 745, 747, 750, 748, 749, + 750, 751, 747, 748, 752, 749, 755, 751, 753, 753, + 754, 754, 752, 756, 755, 757, 758, 759, 760, 760, - 758, 764, 762, 761, 766, 763, 767, 756, 768, 759, - 762, 763, 769, 766, 770, 767, 771, 769, 774, 771, - 764, 772, 773, 770, 775, 776, 772, 778, 778, 777, - 779, 780, 768, 775, 777, 777, 773, 781, 776, 782, - 785, 783, 785, 774, 783, 779, 781, 786, 786, 787, - 780, 788, 783, 789, 792, 790, 788, 791, 793, 794, - 795, 796, 797, 782, 1036, 796, 798, 799, 794, 802, - 787, 1036, 800, 799, 789, 790, 792, 791, 793, 801, - 797, 800, 803, 795, 804, 798, 805, 806, 802, 808, - 804, 801, 806, 807, 807, 809, 803, 810, 811, 812, + 757, 761, 763, 758, 762, 764, 766, 768, 763, 767, + 761, 756, 762, 770, 769, 766, 759, 771, 767, 769, + 771, 772, 770, 773, 764, 774, 772, 775, 776, 777, + 779, 768, 778, 778, 777, 777, 775, 773, 780, 781, + 782, 776, 783, 784, 788, 779, 784, 786, 781, 786, + 774, 787, 787, 789, 784, 790, 793, 780, 789, 791, + 783, 792, 794, 795, 782, 788, 796, 798, 799, 800, + 804, 801, 795, 803, 802, 800, 790, 805, 793, 791, + 801, 792, 794, 805, 804, 798, 802, 799, 806, 796, + 807, 809, 803, 808, 808, 807, 810, 811, 812, 813, - 805, 813, 814, 0, 809, 815, 811, 816, 817, 808, - 818, 820, 819, 816, 817, 824, 821, 810, 819, 812, - 822, 814, 821, 813, 818, 815, 822, 825, 823, 827, - 826, 820, 823, 831, 824, 826, 828, 828, 829, 825, - 830, 832, 833, 830, 829, 834, 836, 825, 833, 842, - 827, 831, 835, 835, 832, 837, 838, 838, 839, 840, - 837, 841, 841, 840, 836, 834, 843, 844, 845, 847, - 848, 842, 844, 839, 850, 851, 853, 853, 854, 857, - 855, 858, 854, 859, 848, 858, 843, 845, 856, 856, - 873, 860, 998, 847, 850, 855, 851, 852, 859, 873, + 814, 815, 806, 816, 817, 810, 812, 818, 820, 821, + 817, 809, 819, 818, 820, 822, 825, 811, 823, 813, + 815, 822, 814, 816, 823, 826, 819, 824, 827, 821, + 828, 824, 832, 827, 830, 825, 833, 826, 829, 829, + 830, 831, 834, 835, 831, 826, 836, 836, 834, 833, + 832, 828, 837, 838, 839, 839, 840, 841, 838, 842, + 842, 841, 843, 835, 845, 844, 848, 846, 849, 845, + 837, 840, 851, 852, 854, 854, 855, 858, 856, 859, + 855, 860, 849, 859, 843, 844, 846, 857, 857, 861, + 848, 875, 851, 856, 852, 853, 860, 875, 853, 863, - 852, 862, 852, 998, 857, 860, 852, 861, 852, 864, - 865, 863, 861, 852, 865, 862, 863, 863, 852, 866, - 867, 868, 869, 864, 870, 867, 865, 869, 871, 872, - 874, 875, 880, 868, 866, 867, 874, 875, 870, 876, - 877, 877, 878, 872, 879, 876, 881, 878, 882, 871, - 879, 884, 885, 958, 880, 886, 889, 885, 887, 888, - 888, 889, 891, 884, 890, 881, 882, 883, 883, 886, - 887, 892, 890, 883, 958, 883, 891, 893, 894, 894, - 895, 883, 897, 899, 895, 900, 883, 883, 897, 898, - 892, 901, 898, 883, 902, 903, 893, 901, 900, 902, + 853, 13, 858, 861, 853, 862, 853, 865, 866, 864, + 862, 853, 866, 863, 864, 864, 853, 867, 868, 869, + 870, 865, 871, 868, 866, 870, 872, 873, 874, 876, + 881, 869, 867, 868, 877, 876, 871, 874, 878, 878, + 877, 873, 882, 879, 880, 883, 885, 872, 879, 886, + 880, 913, 881, 887, 886, 892, 888, 890, 885, 889, + 889, 882, 890, 883, 884, 884, 891, 887, 888, 892, + 884, 913, 884, 893, 891, 894, 895, 895, 884, 899, + 898, 896, 899, 884, 884, 896, 898, 900, 901, 902, + 884, 903, 893, 904, 894, 902, 903, 908, 906, 907, - 905, 906, 899, 907, 909, 908, 910, 911, 912, 905, - 906, 908, 911, 909, 903, 913, 914, 916, 915, 907, - 919, 918, 917, 922, 925, 910, 916, 918, 912, 913, - 915, 917, 920, 924, 926, 927, 914, 919, 920, 922, - 928, 929, 0, 930, 925, 931, 934, 924, 930, 927, - 931, 934, 935, 926, 936, 936, 929, 937, 928, 938, - 940, 935, 941, 937, 944, 942, 942, 941, 941, 942, - 943, 945, 938, 943, 946, 947, 940, 950, 944, 948, - 949, 951, 952, 950, 953, 964, 955, 0, 952, 954, - 946, 945, 948, 947, 954, 949, 961, 964, 959, 953, + 911, 901, 910, 909, 914, 912, 900, 906, 907, 909, + 912, 910, 904, 908, 915, 916, 917, 918, 914, 911, + 920, 925, 919, 921, 923, 917, 918, 916, 919, 921, + 926, 928, 927, 930, 915, 925, 929, 920, 931, 932, + 923, 935, 941, 931, 932, 928, 935, 936, 930, 938, + 926, 927, 937, 937, 929, 938, 936, 939, 941, 942, + 945, 946, 943, 943, 942, 942, 943, 947, 944, 948, + 939, 944, 949, 950, 945, 952, 951, 954, 953, 956, + 959, 946, 951, 947, 953, 949, 955, 948, 950, 962, + 0, 955, 954, 956, 958, 952, 966, 958, 960, 961, - 955, 951, 957, 959, 960, 957, 962, 967, 963, 960, - 966, 962, 961, 963, 968, 969, 966, 970, 970, 971, - 968, 969, 972, 967, 973, 974, 974, 973, 971, 975, - 976, 977, 978, 979, 982, 978, 980, 981, 985, 982, - 972, 987, 980, 981, 985, 983, 979, 975, 984, 976, - 983, 977, 988, 984, 989, 992, 990, 991, 991, 987, - 989, 990, 993, 994, 992, 995, 996, 997, 999, 996, - 997, 993, 988, 1000, 1001, 1004, 1002, 1003, 1006, 1006, - 1007, 994, 1002, 1003, 995, 1000, 999, 1005, 1008, 1009, - 1004, 1010, 1005, 1001, 1011, 1010, 1012, 1013, 1014, 1007, + 963, 959, 964, 960, 961, 962, 965, 964, 966, 963, + 968, 965, 969, 970, 971, 973, 968, 972, 972, 970, + 971, 974, 975, 977, 973, 975, 976, 976, 969, 978, + 979, 980, 981, 984, 980, 985, 982, 983, 984, 974, + 985, 977, 982, 983, 986, 981, 987, 989, 978, 986, + 979, 990, 987, 991, 994, 992, 993, 993, 995, 991, + 992, 996, 997, 994, 1000, 989, 998, 995, 1001, 998, + 999, 990, 1002, 999, 1003, 1000, 1004, 1005, 1009, 996, + 1006, 997, 1004, 1005, 1002, 1007, 1001, 1008, 1008, 1010, + 1007, 1013, 1011, 1003, 1012, 1006, 1014, 1009, 1012, 1015, - 1016, 1009, 1008, 1017, 1017, 1012, 1019, 1020, 1022, 1021, - 1024, 1024, 1011, 1022, 1025, 1023, 1013, 1040, 1040, 1016, - 1019, 1021, 1020, 1014, 1023, 1026, 1027, 1029, 1028, 1029, - 1030, 1026, 1027, 1028, 1025, 1030, 1031, 1032, 1033, 1034, - 1035, 1037, 1038, 1033, 1041, 1042, 1044, 1043, 1045, 1069, - 1031, 1032, 1044, 1069, 1034, 1046, 1037, 0, 1041, 1035, - 1046, 1038, 1043, 1042, 1048, 1048, 1051, 1049, 1045, 1046, - 1052, 1046, 1049, 1051, 1046, 1050, 1050, 1053, 1054, 1056, - 1053, 1055, 1057, 1058, 1052, 1060, 1059, 1057, 1056, 1061, - 1060, 1062, 1064, 1064, 1067, 0, 1065, 1054, 1059, 1055, + 1016, 1018, 1021, 1010, 1011, 1014, 1019, 1019, 1022, 1013, + 1023, 1027, 1024, 1026, 1026, 1025, 1021, 1024, 1015, 0, + 1018, 1028, 1023, 1022, 1025, 1016, 1029, 1028, 1030, 1033, + 1032, 1027, 1029, 1030, 1031, 1032, 1031, 1034, 1036, 1035, + 1037, 1038, 1039, 1033, 1035, 1040, 1042, 1042, 1038, 1043, + 1044, 1034, 1045, 1036, 1046, 1047, 1157, 1039, 1157, 1037, + 1046, 1050, 1050, 1043, 1040, 1048, 1051, 1045, 1044, 1053, + 1048, 1051, 1052, 1052, 1054, 1047, 1053, 1055, 1056, 1048, + 1055, 1048, 1057, 1058, 1048, 1059, 1060, 1061, 1054, 1062, + 1059, 1063, 1058, 1064, 1062, 1066, 1066, 1056, 1067, 1061, - 1061, 1065, 1058, 1066, 1068, 1071, 1070, 1072, 1066, 1068, - 1062, 1073, 1074, 1075, 1067, 1070, 1076, 1077, 1078, 1079, - 1071, 1080, 1072, 1076, 1074, 1081, 1082, 1083, 1075, 1077, - 1073, 1081, 1084, 1085, 1088, 1089, 1090, 1078, 1087, 1080, - 1079, 1082, 1085, 1089, 1087, 1091, 1092, 1083, 1088, 1093, - 1091, 1094, 1084, 1095, 1093, 1093, 1090, 1100, 1092, 1096, - 1097, 1097, 1099, 1101, 1102, 1102, 1100, 1095, 1104, 1101, - 1094, 1103, 1096, 1098, 1105, 1099, 1103, 1104, 1098, 1106, - 1105, 1098, 1098, 1107, 1106, 1109, 1098, 1112, 1107, 1108, - 1108, 1113, 1098, 1110, 1110, 1111, 1098, 1115, 1111, 1114, + 1057, 1068, 1063, 1067, 1069, 1060, 1068, 1071, 1070, 1072, + 1073, 1071, 1064, 1070, 1074, 1075, 1076, 1077, 1072, 1078, + 1080, 1079, 1081, 1082, 1069, 1073, 1078, 1084, 1076, 1074, + 1083, 1085, 1077, 1079, 1075, 1086, 1083, 1087, 1089, 1080, + 1090, 1082, 1084, 1081, 1089, 1091, 1087, 1092, 1094, 1096, + 1097, 1085, 1093, 1091, 1090, 1086, 1095, 1093, 1098, 1128, + 1094, 1095, 1095, 1101, 1097, 1099, 1099, 1092, 1096, 1102, + 1128, 1098, 1100, 1103, 1104, 1104, 1101, 1100, 1102, 1103, + 1100, 1100, 1105, 1106, 1107, 1100, 1111, 1105, 1108, 1109, + 1107, 1100, 1106, 1108, 1109, 1100, 1110, 1110, 1112, 1112, - 1111, 1117, 1118, 1124, 1124, 1116, 1109, 1112, 1114, 1113, - 1116, 1121, 1119, 1120, 1123, 1117, 1121, 1115, 1119, 1120, - 1118, 1122, 1126, 1123, 1129, 1122, 1125, 1125, 1123, 1125, - 1123, 1128, 1123, 1126, 1123, 1128, 1130, 1131, 1132, 1129, - 1133, 1134, 1135, 1132, 1132, 1136, 1131, 1135, 1137, 1133, - 1138, 1139, 1140, 1144, 1130, 1141, 1148, 1137, 1146, 1136, - 1143, 1141, 1149, 1134, 1142, 1142, 1140, 1144, 1143, 1138, - 1139, 1145, 1146, 1147, 1148, 1150, 1145, 1151, 1151, 1152, - 1150, 1158, 1147, 1153, 1153, 1157, 1154, 1149, 1154, 1156, - 1157, 1161, 1156, 1159, 1152, 1160, 1160, 1162, 1162, 1165, + 1113, 1114, 1115, 1113, 1116, 1113, 1117, 1111, 1119, 1118, + 1120, 1121, 1122, 1116, 1118, 0, 1125, 1121, 1122, 1123, + 1115, 1114, 1119, 1124, 1123, 1125, 1117, 1124, 1120, 1130, + 1125, 1131, 1125, 1130, 1125, 1132, 1125, 1126, 1126, 1127, + 1127, 1133, 1127, 1134, 1136, 1135, 1131, 1137, 1134, 1134, + 1133, 1138, 1137, 1132, 1135, 1139, 1140, 1141, 1142, 1144, + 1144, 1143, 1145, 1146, 1139, 1138, 1136, 1143, 1147, 1148, + 1145, 1149, 1142, 1147, 1150, 1140, 1141, 1146, 1151, 1152, + 1149, 1150, 1153, 1148, 1154, 1154, 1155, 1153, 1156, 1156, + 1159, 1161, 1160, 1159, 1162, 1164, 1151, 1160, 1163, 1163, - 1158, 1164, 1159, 1163, 1163, 1166, 1164, 1167, 1167, 1168, - 1169, 1161, 1170, 1169, 1171, 1172, 1173, 1174, 1173, 1171, - 1165, 1177, 1176, 1178, 1172, 1176, 1166, 1179, 1178, 1168, - 1186, 1181, 1170, 1180, 0, 1174, 1177, 1182, 1180, 1181, - 1183, 1179, 1182, 1184, 1184, 1183, 1185, 1187, 1186, 1188, - 1189, 1185, 1191, 1187, 1192, 1194, 1188, 1193, 1191, 1195, - 1192, 1194, 1193, 1189, 1196, 1197, 1198, 1198, 1195, 1199, - 1201, 1202, 1203, 1204, 1205, 1207, 1197, 1208, 1203, 1204, - 1205, 1207, 1209, 1196, 1210, 1211, 1212, 1213, 1213, 1199, - 1201, 1208, 1214, 1215, 1202, 1216, 1210, 1208, 1217, 1211, + 1168, 1155, 1169, 1162, 1152, 1165, 1165, 1166, 1166, 1167, + 1161, 1170, 1170, 1171, 1167, 1164, 1172, 1173, 1175, 1172, + 1174, 1168, 1176, 1169, 1176, 1174, 1177, 1175, 1179, 1181, + 1180, 1179, 1182, 1171, 1181, 1183, 1185, 1173, 1186, 1184, + 1183, 1185, 1189, 1186, 1177, 1180, 1182, 1184, 1187, 1187, + 1188, 1190, 1191, 1192, 1199, 1188, 1194, 1190, 1195, 1191, + 1189, 1197, 1194, 1196, 1195, 1198, 1192, 1197, 1196, 1200, + 1201, 1201, 1202, 1199, 1198, 1204, 1205, 1206, 1207, 1208, + 1200, 1210, 1211, 1206, 1207, 1208, 1212, 1210, 1213, 1214, + 1215, 1217, 1202, 1216, 1216, 1204, 1211, 1218, 1219, 1205, - 1218, 1218, 1209, 1217, 1212, 1219, 1220, 1222, 1225, 1223, - 1227, 1220, 1214, 1216, 1223, 1223, 1224, 1225, 1215, 1226, - 1228, 1229, 0, 1232, 1227, 1230, 1222, 1226, 1219, 1231, - 1230, 1231, 1234, 1230, 1224, 1228, 1229, 1232, 1234, 1229, - 1235, 1236, 1237, 1238, 1235, 1239, 1240, 1237, 1237, 1241, - 1242, 1243, 1236, 1244, 1241, 1242, 1245, 1248, 1244, 1247, - 1249, 1252, 1238, 1251, 1240, 1250, 1250, 1251, 1253, 1243, - 1255, 1239, 1256, 1247, 1254, 1248, 1245, 1258, 1249, 1252, - 1254, 1257, 1255, 1259, 1260, 1261, 1262, 1253, 1264, 1263, - 1261, 1256, 1258, 1262, 1263, 1257, 1265, 1267, 1259, 1266, + 1213, 1222, 1211, 1214, 1220, 1223, 1212, 1225, 1215, 1220, + 1223, 1217, 1221, 1221, 1226, 1227, 1219, 1229, 1228, 1226, + 1226, 1230, 1218, 1231, 1222, 1229, 1225, 1228, 1232, 1233, + 1234, 1235, 1234, 1227, 1233, 1230, 1237, 1233, 1231, 1239, + 1238, 1241, 1237, 1232, 1238, 1235, 1232, 1240, 1242, 1243, + 1239, 1244, 1240, 1240, 1245, 1246, 1244, 1247, 1248, 1245, + 1241, 1250, 1247, 1251, 1252, 1253, 1253, 1243, 1254, 1255, + 1256, 1257, 1254, 1246, 1242, 1250, 1258, 1257, 1248, 1259, + 1260, 1251, 1252, 1263, 1261, 1262, 1264, 1255, 1258, 1256, + 1265, 1264, 1267, 1270, 1260, 1268, 1266, 1265, 1259, 1261, - 1266, 1268, 1269, 1260, 1270, 1265, 1264, 1268, 1271, 1270, - 1272, 1277, 1267, 1279, 1271, 1277, 1272, 1273, 1273, 1274, - 1274, 1276, 1276, 1269, 1278, 1280, 1281, 1282, 1283, 1283, - 1284, 1279, 1285, 1278, 1282, 1287, 1288, 1286, 1289, 1280, - 1285, 1281, 1286, 1289, 1289, 1291, 1290, 1292, 1292, 1287, - 1284, 1290, 1290, 1293, 1294, 1288, 1296, 1295, 1297, 1298, - 1299, 1296, 1300, 1302, 1301, 1291, 1295, 1304, 1300, 1301, - 1303, 1307, 1293, 1294, 1305, 1306, 1303, 1297, 1299, 1298, - 1305, 1306, 1308, 1309, 1310, 1311, 1304, 1312, 1316, 1302, - 1307, 1313, 1314, 1314, 1315, 1317, 1317, 1315, 1321, 1311, + 1262, 1266, 1263, 1271, 1268, 1269, 1269, 1272, 1270, 1271, + 1267, 1273, 1274, 1275, 1276, 1276, 1273, 1281, 1274, 1275, + 1277, 1277, 1279, 1279, 1282, 1280, 1281, 1283, 1272, 1280, + 1284, 1285, 1286, 1286, 1287, 1288, 1290, 1291, 1285, 1289, + 1294, 1283, 1282, 1288, 1289, 1284, 1292, 1295, 1295, 1296, + 1290, 1292, 1292, 1293, 1287, 1297, 1291, 1298, 1293, 1293, + 1294, 1300, 1299, 1301, 1302, 1303, 1298, 1299, 1296, 1305, + 1304, 1303, 1306, 1307, 1297, 1304, 1314, 1310, 1306, 1308, + 1300, 1309, 1302, 1301, 1311, 1308, 1312, 1309, 1313, 1315, + 1314, 1316, 1307, 1317, 1317, 1305, 1310, 1318, 0, 1319, - 1316, 1308, 1309, 1310, 1318, 1318, 1313, 1319, 1312, 1320, - 1322, 1321, 1319, 1320, 1323, 1324, 1328, 1324, 1326, 1322, - 1327, 1324, 1329, 1330, 1335, 1327, 1333, 1323, 1331, 1331, - 1332, 1328, 1333, 1334, 1324, 1332, 1326, 1335, 1336, 1330, - 1337, 1338, 1329, 1336, 1337, 1338, 1339, 1340, 1334, 1341, - 1342, 1343, 1343, 1345, 1347, 1348, 1342, 1349, 1349, 1351, - 1348, 1350, 1353, 1353, 1357, 1340, 1339, 1350, 1358, 1341, - 1355, 1345, 1361, 1355, 1362, 1347, 1356, 1356, 1360, 1351, - 1357, 1360, 1364, 1362, 1358, 1363, 1363, 1365, 1366, 1367, - 1368, 1370, 1361, 1371, 1367, 1369, 1369, 1364, 1372, 1373, + 1318, 1320, 1320, 1311, 1329, 1312, 1316, 1313, 1321, 1321, + 1315, 1319, 1322, 1324, 1323, 1325, 1326, 1322, 1323, 1327, + 1331, 1327, 1329, 1330, 1325, 1327, 1324, 1332, 1330, 1326, + 1333, 1334, 1334, 1337, 1335, 1331, 1336, 1338, 1327, 1335, + 1339, 1342, 1336, 1344, 1343, 1339, 1333, 1332, 1337, 1340, + 1338, 1341, 1344, 1340, 1345, 1341, 1351, 1346, 1347, 1347, + 1349, 1342, 1343, 1346, 1352, 1353, 1353, 1354, 1355, 1352, + 1357, 1357, 1359, 1354, 1345, 1359, 1361, 1351, 1349, 1360, + 1360, 1362, 1364, 1365, 1366, 1364, 1367, 1367, 1355, 1368, + 1369, 1370, 1361, 1366, 1371, 1372, 1374, 1362, 1375, 1371, - 1370, 1374, 1374, 1375, 1368, 1376, 1378, 1366, 1365, 1377, - 1381, 1371, 1383, 1372, 1377, 1379, 1379, 1375, 1380, 1382, - 1382, 1378, 1380, 1376, 1373, 1384, 1386, 1385, 1387, 1390, - 1381, 1385, 1391, 1387, 1383, 1392, 1384, 1389, 1389, 1393, - 1394, 1395, 1395, 1396, 1397, 1386, 1391, 1390, 1396, 1398, - 1399, 1400, 1401, 1393, 1392, 1392, 1400, 1403, 1402, 1399, - 1402, 1404, 1403, 1405, 1397, 1394, 1408, 1404, 1406, 1398, - 1409, 1409, 1401, 1410, 1406, 1411, 1414, 1413, 1415, 1415, - 1408, 1411, 1413, 1405, 1416, 1416, 1418, 1417, 1419, 1423, - 1420, 1425, 1410, 1420, 1421, 1421, 1422, 1425, 1431, 1424, + 1373, 1373, 1376, 1365, 1368, 1374, 1377, 1378, 1378, 1372, + 1370, 1369, 1379, 1381, 1380, 1382, 1375, 1376, 1381, 1383, + 1383, 1384, 1385, 1386, 1386, 1384, 1379, 1387, 1388, 1389, + 1382, 1377, 1380, 1389, 1390, 1391, 1393, 1393, 1394, 1388, + 1391, 1395, 1385, 1396, 1397, 1398, 1399, 1399, 1401, 1387, + 1403, 1402, 1400, 1390, 1405, 1395, 1394, 1400, 1397, 1403, + 1404, 1409, 1396, 1396, 1406, 1404, 1406, 1407, 1401, 1408, + 1398, 1402, 1407, 1410, 1405, 1408, 1412, 1413, 1413, 1410, + 1414, 1409, 1415, 1418, 1417, 1419, 1419, 1421, 1415, 1417, + 1412, 1420, 1420, 1422, 1423, 1424, 1425, 1425, 1424, 1414, - 1414, 1417, 1424, 1419, 1418, 1424, 1426, 1427, 1422, 1423, - 1427, 1426, 1429, 1430, 1433, 1433, 1432, 1424, 1430, 1432, - 1435, 1429, 1434, 1431, 1440, 1435, 1427, 1438, 1434, 1436, - 1436, 1437, 1437, 1438, 1439, 1441, 1442, 1440, 1443, 1439, - 1444, 1445, 1446, 1444, 1447, 1448, 1449, 1445, 1446, 1447, - 1453, 1448, 1450, 1441, 1454, 1442, 1452, 1450, 1443, 1451, - 1451, 1452, 1455, 1456, 1457, 1460, 1461, 1458, 1453, 1449, - 1459, 1460, 1462, 1463, 1454, 1464, 1470, 1456, 1457, 1458, - 1466, 1466, 1455, 1459, 1467, 1468, 1461, 1463, 1469, 1469, - 1468, 1470, 1462, 1471, 1472, 1473, 1464, 1474, 1476, 1475, + 1426, 1421, 1427, 1436, 1435, 1445, 1436, 1418, 1429, 1423, + 1428, 1422, 1426, 1428, 1429, 1430, 1428, 1433, 1431, 1434, + 1430, 1431, 1427, 1445, 1434, 1446, 1433, 1438, 1428, 1435, + 1437, 1437, 1442, 1438, 1439, 1440, 1440, 1431, 1442, 1439, + 1441, 1441, 1443, 1444, 1446, 1447, 1448, 1443, 1449, 1448, + 1451, 1450, 1452, 1453, 1449, 1451, 1444, 1450, 1452, 1454, + 1455, 1455, 1456, 1457, 1454, 1447, 1458, 1456, 1459, 1460, + 1461, 1464, 1465, 1462, 1463, 1466, 1453, 1464, 1468, 1467, + 1471, 1457, 1476, 1460, 1461, 1462, 1458, 1463, 1459, 1470, + 1470, 1472, 1465, 1467, 1474, 1466, 1472, 1473, 1473, 1468, - 1477, 1478, 1482, 1486, 1467, 1476, 1474, 1471, 1480, 1477, - 1484, 1484, 1477, 1473, 1475, 1486, 1483, 1478, 1472, 1483, - 1485, 1485, 1487, 1480, 1489, 1489, 1488, 1482, 1480, 1488, - 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1492, 1493, 1497, - 1487, 1503, 1500, 1490, 1502, 1496, 1499, 1498, 1500, 1504, - 1491, 1495, 1505, 1494, 1503, 1499, 1498, 1506, 1497, 1498, - 1501, 1501, 1507, 1510, 1502, 1511, 1505, 1504, 1512, 1512, - 1513, 1514, 1515, 1506, 1507, 1516, 1516, 1515, 1519, 1518, - 1514, 1520, 1517, 1511, 1518, 1521, 1513, 1522, 1510, 1525, - 1516, 1517, 1522, 1522, 1517, 1524, 1519, 1526, 1529, 0, + 1471, 1475, 1477, 1478, 1479, 1482, 1476, 1480, 1484, 1474, + 1486, 0, 1478, 1481, 1480, 1475, 1488, 1488, 1491, 1479, + 1477, 1482, 1481, 1484, 1487, 1481, 1490, 1487, 1484, 1489, + 1489, 1492, 1493, 1493, 1492, 1486, 1491, 1494, 1490, 1495, + 1496, 1497, 1498, 1499, 1500, 1496, 1497, 1501, 1502, 1504, + 1494, 1505, 1505, 1500, 1503, 1504, 1506, 1502, 1495, 1499, + 1502, 1498, 1507, 1503, 1508, 1509, 1501, 1510, 1511, 1514, + 1515, 1516, 1516, 1517, 1574, 1507, 1506, 1518, 1574, 1509, + 1511, 1523, 1508, 1510, 1521, 1519, 1518, 1524, 1515, 1517, + 1519, 1520, 1520, 1521, 1514, 1522, 1521, 1525, 1526, 1523, - 1527, 1528, 1520, 1521, 1525, 1527, 1531, 1528, 1532, 1524, - 1530, 1530, 1531, 1532, 1533, 1534, 1529, 1536, 1537, 1526, - 1533, 1534, 1538, 1539, 1540, 1541, 1543, 1540, 1538, 1545, - 1546, 1541, 1537, 1540, 1543, 1547, 1539, 1536, 1548, 1549, - 1550, 1551, 1552, 1547, 1553, 1553, 1556, 1548, 1545, 1546, - 1558, 1554, 1549, 1550, 1555, 1551, 1552, 1554, 1559, 1556, - 1555, 1557, 1557, 1560, 1561, 1562, 1553, 1563, 1564, 1565, - 1558, 1562, 1567, 1567, 1568, 1569, 1559, 1561, 1570, 1569, - 1571, 1572, 1560, 1570, 1564, 1571, 1572, 1565, 1573, 1563, - 1574, 1576, 1577, 1577, 1568, 1578, 1579, 1573, 1580, 1581, + 1522, 1530, 1528, 1526, 1526, 1529, 1520, 1531, 1524, 1533, + 1541, 1532, 1531, 1534, 1534, 1525, 1528, 1532, 1535, 1537, + 1529, 1536, 1538, 1530, 1535, 1539, 1536, 1533, 1538, 1542, + 1541, 1539, 1543, 1537, 1544, 1546, 1545, 1550, 1543, 1545, + 1548, 1546, 1551, 1542, 1552, 1545, 1553, 1544, 1548, 1554, + 1555, 1556, 1552, 1557, 1559, 1553, 1550, 1558, 1558, 1561, + 1559, 1551, 1554, 1555, 1560, 1556, 1563, 1557, 1562, 1562, + 1560, 1564, 1561, 1565, 1566, 1567, 1568, 1569, 1570, 1558, + 1573, 1567, 1572, 1572, 1579, 1575, 1563, 1566, 1581, 1564, + 1575, 1583, 1565, 1569, 1576, 1578, 1570, 1577, 1568, 1576, - 1581, 1582, 1583, 1586, 1584, 1587, 1576, 1585, 1579, 1583, - 1590, 1589, 1588, 1574, 1578, 1582, 1584, 1580, 1588, 1585, - 1591, 1593, 1586, 1589, 1593, 1587, 1591, 1597, 1590, 1592, - 1592, 1594, 1594, 1596, 1598, 1600, 1597, 1601, 1596, 1601, - 1598, 1599, 1599, 1602, 1603, 1604, 1602, 1600, 1605, 1607, - 1606, 1608, 1611, 1609, 1607, 1610, 1613, 1611, 1615, 1619, - 1608, 0, 1612, 1615, 1603, 1609, 1605, 1604, 1606, 1614, - 1610, 1612, 1616, 1618, 1614, 1621, 1613, 1617, 1617, 1618, - 1619, 1614, 1622, 1623, 1612, 1625, 1624, 1616, 1624, 1626, - 1626, 1627, 1627, 1629, 1621, 1628, 1628, 1632, 1622, 1625, + 1573, 1584, 1577, 1581, 1578, 1582, 1582, 1579, 1585, 1587, + 1583, 1586, 1586, 1584, 1588, 1591, 1589, 1590, 1592, 1593, + 1594, 1588, 1595, 1587, 1596, 1593, 1601, 1585, 1589, 1590, + 1596, 1601, 1594, 1605, 1591, 1597, 1597, 1602, 1592, 1598, + 1595, 1603, 1598, 1599, 1599, 1605, 1602, 1603, 1604, 1604, + 1606, 1607, 1606, 1608, 1607, 1609, 1610, 1611, 1612, 1613, + 1614, 1615, 1616, 1612, 1618, 1620, 1621, 1616, 1613, 1617, + 1620, 1626, 1614, 1608, 1610, 1611, 1615, 1609, 1617, 1624, + 1619, 1621, 1622, 1622, 1618, 1619, 1627, 1623, 1628, 1630, + 1626, 1617, 1619, 1623, 1629, 1634, 1629, 1631, 1631, 1637, - 1633, 1625, 1640, 1623, 1630, 1630, 1631, 1631, 1634, 1634, - 1635, 1636, 1637, 1629, 1635, 1637, 1639, 1636, 1632, 1641, - 1640, 1633, 1639, 1642, 1643, 1641, 1646, 1643, 1644, 1644, - 1645, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1653, 1654, - 1660, 1657, 1650, 1653, 1653, 1647, 1647, 1647, 1642, 1655, - 1656, 1655, 1647, 1654, 1648, 1649, 1657, 1651, 1658, 1659, - 1660, 1656, 1661, 1663, 1658, 1662, 1662, 1665, 1659, 1664, - 1664, 1666, 1667, 1667, 1668, 1668, 1669, 1672, 1672, 1673, - 1677, 1674, 1676, 1661, 1679, 1679, 1678, 1665, 1680, 1663, - 1674, 1676, 1678, 1666, 1683, 1681, 1669, 1684, 1682, 1685, + 1624, 1638, 1627, 1630, 0, 1630, 1632, 1632, 1628, 1633, + 1633, 1635, 1635, 1636, 1636, 1634, 1639, 1639, 1641, 1640, + 1637, 1644, 1638, 1640, 1641, 1642, 1645, 1644, 1642, 1646, + 1647, 1648, 1649, 1649, 1648, 1646, 1650, 1650, 1652, 1651, + 1653, 1654, 1655, 1656, 1645, 1651, 1665, 1660, 1655, 1660, + 1652, 1652, 1652, 1658, 1659, 1647, 1661, 1652, 1658, 1658, + 1653, 1654, 1662, 1656, 1663, 1664, 1665, 1661, 1659, 1666, + 1663, 1667, 1667, 1668, 1664, 1669, 1669, 1662, 1670, 1671, + 1672, 1672, 1673, 1673, 1674, 1677, 1677, 1678, 1679, 1682, + 1666, 1681, 1684, 1684, 1685, 1689, 1683, 1679, 1670, 1668, - 1685, 1677, 1686, 1683, 1673, 1682, 1687, 1689, 1690, 1680, - 1681, 1691, 1689, 1692, 1690, 1693, 1695, 1695, 1694, 1698, - 1692, 1693, 1687, 1684, 1694, 1696, 1697, 1699, 1686, 1700, - 1696, 1691, 1702, 1701, 1703, 1697, 1701, 1704, 1704, 1698, - 1708, 1700, 1705, 1706, 1707, 1711, 1699, 1709, 1705, 1706, - 1702, 1709, 1712, 1713, 1715, 1708, 1714, 1714, 1713, 1718, - 1703, 1716, 1719, 1720, 1707, 1711, 1719, 1709, 1721, 1720, - 1722, 1722, 1724, 1715, 1712, 1723, 1716, 1721, 1718, 1723, - 1725, 1725, 1726, 1724, 1727, 1728, 1729, 1730, 1724, 1731, - 1732, 1729, 1734, 1733, 1735, 1735, 1732, 1734, 1727, 1736, + 1681, 1671, 1683, 1686, 1674, 1688, 1687, 1690, 1690, 1691, + 1682, 1692, 1678, 1687, 1688, 1685, 1696, 1694, 1686, 1695, + 1698, 1689, 1694, 1697, 1701, 1695, 1698, 1692, 1699, 1701, + 1697, 1700, 1700, 1702, 1699, 1691, 1696, 1703, 1705, 1704, + 1706, 1707, 1702, 1706, 1708, 1709, 1709, 1710, 1711, 1712, + 1705, 1713, 1714, 1710, 1711, 1716, 1714, 1703, 1704, 1707, + 1717, 1720, 1718, 1719, 1719, 1723, 1713, 1718, 1721, 1712, + 1708, 0, 1714, 1724, 1732, 1716, 1727, 1724, 1725, 1725, + 1720, 1726, 1717, 1721, 1723, 1727, 1729, 1726, 1728, 1728, + 1729, 1730, 1731, 1731, 1733, 1732, 1734, 1736, 1735, 1737, - 1736, 1737, 1739, 1726, 1728, 1737, 1740, 1730, 1733, 1731, - 1741, 1739, 1742, 1742, 1744, 1744, 1748, 1740, 1745, 1746, - 1747, 1750, 1740, 1745, 1745, 1746, 1747, 1749, 1751, 1753, - 1741, 1754, 1749, 1750, 1751, 1754, 1755, 1756, 1757, 1758, - 1759, 1753, 1748, 1760, 1757, 1762, 1759, 1763, 1755, 1764, - 1766, 1767, 1767, 1766, 1764, 1760, 1770, 1762, 1768, 1768, - 0, 1758, 1756, 1769, 1769, 1771, 1763, 1772, 1775, 1773, - 1777, 1771, 1774, 1772, 1773, 1777, 1770, 1775, 1774, 1779, - 1780, 1783, 1779, 1781, 1781, 1784, 1785, 1786, 1786, 1787, - 1788, 1785, 1780, 1783, 1789, 1788, 1791, 1784, 1787, 1789, + 1738, 1739, 1730, 1735, 1740, 1747, 1738, 1730, 1733, 1740, + 1741, 1741, 1742, 1742, 1743, 1734, 1739, 1736, 1743, 1737, + 1745, 1746, 1748, 1748, 1752, 1747, 1750, 1750, 1751, 1745, + 1752, 1754, 1746, 1751, 1751, 1753, 1756, 1746, 1755, 1757, + 1759, 1753, 1760, 1755, 1761, 1757, 1760, 1762, 1756, 1763, + 1766, 1764, 1759, 1765, 1768, 1763, 1761, 1754, 1769, 1765, + 1770, 1772, 1766, 1776, 1772, 1770, 1768, 1773, 1773, 1774, + 1774, 0, 1762, 1764, 1775, 1775, 1777, 1769, 1778, 1781, + 1779, 1780, 1777, 1776, 1778, 1779, 1783, 1780, 1781, 1785, + 1786, 1783, 1785, 1787, 1787, 1789, 1790, 1793, 1791, 1792, - 1790, 1790, 1792, 1793, 1794, 1795, 1798, 1796, 1797, 1795, - 1799, 1792, 1796, 1800, 1797, 1801, 1791, 1804, 1805, 1799, - 1809, 1793, 1808, 1794, 1798, 1803, 1803, 1805, 0, 1801, - 1807, 1800, 1806, 1806, 1808, 1804, 1811, 1803, 1810, 1807, - 1817, 1809, 1818, 1810, 1814, 1814, 1820, 1816, 1821, 1811, - 1816, 1822, 1823, 1824, 1824, 1830, 1817, 1822, 1818, 1826, - 1826, 1820, 1821, 1825, 1827, 1825, 1829, 1831, 1831, 1823, - 1832, 1833, 1827, 1829, 1834, 1830, 1835, 1836, 1837, 1832, - 1838, 1839, 1841, 1844, 1842, 1845, 1834, 1839, 1835, 1836, - 1843, 1843, 1833, 1847, 1846, 1838, 1842, 1846, 1847, 1848, + 1792, 1797, 1786, 1791, 1794, 1795, 1793, 1789, 1790, 1794, + 1795, 1796, 1796, 1798, 1799, 1800, 1801, 1804, 1802, 1803, + 1801, 1797, 1798, 1802, 1805, 1803, 1806, 1807, 1809, 1809, + 1810, 1814, 1799, 1805, 1800, 1804, 1811, 1812, 1812, 1815, + 1809, 1807, 1813, 1814, 1806, 1811, 1817, 1816, 1810, 1820, + 1820, 1813, 1816, 1822, 1823, 1824, 1822, 1826, 1828, 1817, + 1815, 1827, 1829, 1836, 1828, 1830, 1830, 1831, 1833, 1831, + 1823, 1824, 1826, 1832, 1832, 1827, 1833, 1835, 1838, 1829, + 1837, 1837, 1839, 1836, 1835, 1840, 1841, 1838, 1842, 1843, + 1844, 1847, 1848, 1845, 1849, 1849, 1850, 1840, 1841, 1845, - 1839, 1844, 1841, 1850, 1837, 1845, 1852, 1851, 1850, 1851, - 1853, 1854, 1856, 1858, 1859, 1853, 1860, 1862, 1854, 1848, - 1861, 1856, 1861, 1859, 1852, 1864, 1865, 1864, 1860, 1866, - 1866, 1858, 1867, 1868, 1870, 1869, 1862, 1869, 1868, 1870, - 1865, 1871, 1872, 1873, 1874, 1877, 1871, 1875, 1876, 1879, - 1874, 1880, 1875, 1877, 1881, 1881, 1882, 1882, 1867, 1883, - 1872, 1876, 1884, 1873, 1885, 1880, 1886, 1887, 1879, 1887, - 1885, 1886, 1888, 1889, 1883, 1890, 1890, 1892, 1892, 1891, - 1896, 1889, 1884, 1893, 1893, 1894, 1900, 1895, 1898, 1889, - 1888, 1891, 1895, 1899, 1894, 1899, 1901, 1898, 1896, 1902, + 1842, 1851, 1853, 1839, 1848, 1844, 1852, 1853, 1854, 1852, + 0, 1847, 1845, 1856, 1850, 1843, 1858, 1857, 1856, 1857, + 1859, 1851, 1860, 1862, 1864, 1859, 1865, 1866, 1854, 1860, + 1868, 1867, 1862, 1867, 1858, 1865, 1870, 1871, 1870, 1866, + 1872, 1872, 1864, 1873, 1875, 1874, 1875, 1876, 1877, 1868, + 1874, 1871, 1876, 1877, 1878, 1879, 1880, 1882, 1881, 1883, + 1885, 1889, 1880, 1881, 1886, 1887, 1887, 1883, 1890, 1873, + 1882, 1891, 1878, 1888, 1888, 1879, 1889, 1891, 1886, 1885, + 1892, 1893, 1894, 1893, 1897, 1892, 1895, 1902, 1890, 1896, + 1896, 1898, 1898, 1906, 1895, 1900, 1897, 1899, 1899, 1904, - 1898, 1901, 1901, 1903, 1905, 1906, 1907, 1900, 1902, 1909, - 1906, 1907, 1910, 1913, 1911, 1903, 1905, 1912, 1912, 1914, - 1915, 1916, 1909, 1911, 1917, 1921, 1919, 1933, 1920, 1922, - 1930, 1913, 1910, 1924, 1922, 1916, 1915, 1914, 1919, 1917, - 1920, 1923, 1924, 1927, 1929, 1921, 1923, 1932, 1931, 1927, - 1929, 1934, 1933, 1930, 1935, 1935, 1938, 1936, 1937, 1937, - 1934, 1941, 1927, 1931, 1939, 1932, 1936, 1940, 1939, 0, - 1947, 1942, 1940, 1943, 1941, 1938, 1942, 1942, 1944, 1943, - 1945, 1946, 1952, 1945, 1944, 1950, 1950, 1951, 1951, 1946, - 1947, 1952, 1953, 1953, 1954, 1954, 1955, 1956, 1957, 1964, + 1894, 1901, 1895, 1917, 1900, 1902, 1901, 1905, 1904, 1905, + 1907, 1904, 1908, 1909, 1906, 1907, 1907, 1910, 1912, 1916, + 1913, 1914, 1909, 1917, 1908, 1913, 1914, 1918, 1920, 1910, + 1912, 1921, 1916, 1919, 1919, 1922, 1918, 1928, 1923, 1924, + 1929, 1926, 1930, 1927, 1937, 1929, 1920, 1930, 1938, 1921, + 1931, 1922, 1923, 1926, 1924, 1927, 1934, 1928, 1936, 1931, + 1939, 1940, 1934, 1938, 1936, 1941, 1945, 1937, 1942, 1942, + 1943, 1944, 1944, 1946, 1941, 1934, 1947, 1946, 1939, 1943, + 1948, 1947, 1949, 1950, 1951, 1945, 1940, 1949, 1949, 1950, + 1951, 1952, 1953, 1948, 1952, 1954, 1957, 1957, 1958, 1958, - 1958, 1965, 1951, 1964, 1957, 1958, 1959, 1959, 1955, 1960, - 1960, 1961, 1962, 1951, 1968, 1956, 1961, 1969, 1962, 1966, - 1970, 1965, 1969, 1966, 1972, 1971, 1973, 1975, 1976, 1972, - 1974, 1977, 1979, 1976, 1978, 1978, 1979, 1980, 1982, 1968, - 1971, 1984, 1983, 1970, 1973, 1981, 1974, 1975, 1986, 1987, - 1981, 1985, 1980, 1977, 1983, 1990, 1985, 1988, 1988, 1991, - 1984, 1986, 1992, 1990, 1982, 1993, 1994, 1987, 1995, 2000, - 1996, 1997, 1998, 2001, 2001, 2004, 2002, 2009, 1991, 2002, - 2040, 1992, 2003, 1997, 2000, 2005, 2040, 1995, 1993, 2004, - 1994, 1996, 2009, 1998, 2010, 2003, 2006, 2006, 2005, 2007, + 1953, 1959, 1960, 1960, 1961, 1961, 1962, 1963, 1964, 1975, + 1959, 1965, 1968, 1958, 1964, 1954, 1965, 1968, 1962, 1966, + 1966, 1967, 1967, 1969, 1958, 1963, 1971, 1972, 1973, 1969, + 1971, 1976, 1973, 1977, 1975, 1978, 1976, 1979, 1981, 1980, + 1982, 1983, 1979, 1984, 1985, 1985, 1983, 1972, 1986, 1987, + 1978, 1989, 1986, 1988, 1981, 1990, 1977, 1980, 1988, 1991, + 1982, 1992, 1993, 1994, 1987, 1984, 1992, 1990, 1995, 1995, + 1998, 1997, 1999, 2000, 2001, 1993, 2002, 1989, 1991, 1997, + 2003, 1994, 2004, 2005, 2007, 2008, 2008, 2009, 2011, 1998, + 2009, 1999, 2010, 2012, 2004, 2002, 2000, 0, 2001, 2007, - 2007, 2008, 2008, 2011, 2011, 2012, 2014, 2010, 2013, 2013, - 2016, 2014, 2017, 2018, 2012, 2016, 2019, 2012, 2020, 2020, - 2021, 2021, 2022, 2023, 2023, 2024, 2025, 2025, 2019, 2026, - 2027, 2030, 2017, 2018, 2032, 2027, 2028, 2028, 2029, 2029, - 2031, 2022, 2033, 2024, 2026, 2030, 2035, 2037, 2032, 2031, - 2039, 2035, 2036, 2036, 2038, 2038, 2041, 2042, 2042, 2041, - 2044, 2033, 2043, 2043, 2046, 2045, 2037, 2049, 2039, 2047, - 2047, 2050, 2052, 2042, 2051, 2060, 2052, 2053, 2053, 2044, - 2045, 2054, 2056, 2046, 2057, 2055, 2061, 2049, 2062, 2051, - 2055, 2059, 2059, 2061, 2050, 2060, 2063, 2056, 2064, 2057, + 2016, 2003, 2011, 2017, 2005, 2010, 2012, 2013, 2013, 2014, + 2014, 2015, 2015, 2018, 2018, 2016, 2017, 2019, 2020, 2020, + 2021, 2024, 2023, 2025, 2026, 2021, 2019, 2023, 2029, 2019, + 2027, 2027, 2028, 2028, 2030, 2030, 2026, 2031, 2032, 2032, + 2034, 2024, 2033, 2025, 2037, 2034, 2039, 2029, 2035, 2035, + 2036, 2036, 2038, 2040, 2042, 2031, 2044, 2033, 2037, 2042, + 2039, 2038, 2043, 2043, 2045, 2045, 2046, 2047, 2048, 2049, + 2049, 2048, 2040, 2047, 2051, 2044, 2050, 2050, 2053, 2052, + 2054, 2054, 2056, 2057, 2046, 2049, 2058, 2059, 2060, 2060, + 2061, 2059, 2063, 2051, 2052, 2062, 2064, 2053, 2066, 2066, - 2054, 2065, 2062, 2066, 2066, 2068, 2067, 2068, 2069, 2071, - 2074, 2069, 2072, 2073, 2063, 2067, 2064, 2072, 2073, 2075, - 2076, 2071, 2078, 2082, 2077, 2080, 2069, 2065, 2069, 2077, - 2080, 2081, 2075, 2083, 2084, 2074, 2081, 2085, 2082, 2083, - 2086, 2076, 2087, 2085, 2088, 2086, 2089, 2087, 2078, 2090, - 2095, 2091, 2090, 2092, 2093, 2084, 2094, 2100, 0, 2089, - 2091, 2096, 2092, 2093, 2095, 2094, 2097, 2096, 2108, 2088, - 2098, 2102, 2097, 2104, 2098, 2103, 2103, 2100, 2106, 2104, - 2102, 2105, 2105, 2109, 2108, 2110, 2110, 2111, 2112, 2114, - 2105, 2115, 2117, 2116, 2121, 2123, 2123, 2112, 2106, 2109, + 2062, 2058, 2056, 2067, 2069, 2068, 2057, 2063, 2070, 2061, + 2071, 2064, 2068, 2072, 2073, 2073, 2074, 2075, 2069, 2075, + 2079, 2082, 2086, 2067, 2076, 2074, 2070, 2076, 2071, 2078, + 2083, 2080, 2079, 2081, 2084, 2078, 2080, 2092, 2081, 2072, + 2085, 2090, 2076, 2083, 2076, 2085, 2082, 2088, 2086, 2089, + 2096, 2091, 2088, 2093, 2089, 2084, 2090, 2091, 2092, 2093, + 2094, 2095, 2099, 2097, 2098, 2094, 2095, 2098, 2100, 2101, + 2102, 2099, 2103, 2108, 2104, 2096, 2097, 2100, 2101, 2102, + 2104, 2105, 2110, 2116, 2106, 2114, 2103, 2105, 2106, 2111, + 2111, 2110, 2112, 2108, 2113, 2113, 2117, 2120, 2112, 2116, - 2106, 2114, 2111, 2119, 2117, 2120, 2119, 2115, 2116, 2122, - 2120, 2124, 2124, 2128, 2121, 2126, 2126, 2127, 2128, 2129, - 2127, 2122, 2130, 2131, 2131, 2129, 2132, 2134, 2130, 2133, - 2133, 2135, 2136, 2137, 2137, 2138, 2139, 2140, 2147, 2134, - 2132, 2138, 2140, 2142, 0, 2135, 2143, 2142, 2146, 2143, - 2139, 2136, 2144, 2144, 2145, 2150, 2148, 2146, 2147, 2145, - 2148, 2149, 2149, 2153, 2152, 2154, 2155, 2156, 2150, 2152, - 2157, 2156, 2158, 2159, 2161, 2160, 2166, 2158, 2163, 2159, - 2155, 2160, 2164, 2153, 2166, 2154, 2167, 2164, 2167, 2165, - 2157, 2170, 2161, 2173, 2163, 2165, 2171, 2171, 2172, 2174, + 2118, 2118, 2119, 2113, 2122, 2114, 2120, 2114, 2123, 2125, + 2124, 2127, 2117, 2128, 2127, 2129, 2122, 2119, 2128, 2130, + 0, 2125, 2131, 2131, 2123, 2124, 2132, 2132, 2134, 2134, + 2135, 2130, 2136, 2135, 2137, 2129, 2138, 2136, 2139, 2139, + 2137, 2140, 2138, 2141, 2141, 2142, 2143, 2144, 2145, 2145, + 2146, 2147, 2155, 2148, 0, 2140, 2146, 2142, 2148, 2150, + 2143, 2151, 2154, 2150, 2151, 2147, 2144, 2152, 2152, 2153, + 2158, 2154, 2155, 2156, 2153, 2157, 2157, 2156, 2161, 2160, + 2162, 2163, 2164, 2158, 2160, 2165, 2164, 2166, 2167, 2169, + 2168, 2174, 2166, 2171, 2167, 2163, 2168, 2172, 2161, 2174, - 2174, 2172, 2176, 2177, 2178, 2170, 2176, 2179, 2179, 2177, - 2185, 2180, 2183, 2183, 2188, 2187, 2178, 2191, 2192, 2173, - 2180, 2193, 2191, 2195, 2195, 2199, 2193, 2194, 2185, 2187, - 2188, 2199, 2194, 2197, 2197, 2200, 2200, 2201, 2202, 2205, - 2203, 2209, 2206, 2210, 2192, 2203, 2207, 2207, 2211, 2210, - 2209, 2216, 2212, 2201, 2206, 2214, 2214, 2217, 2205, 2215, - 2202, 2222, 2215, 2219, 2219, 2223, 2211, 2212, 2220, 2220, - 2216, 2221, 2224, 2226, 2223, 2217, 2221, 2224, 2225, 2222, - 2225, 2227, 2228, 2229, 2230, 2231, 0, 2226, 2229, 2237, - 2231, 2232, 2232, 2236, 2228, 2227, 2233, 2233, 2234, 2234, + 2162, 2175, 2172, 2175, 2173, 2165, 2178, 2169, 2181, 2171, + 2173, 2179, 2179, 2180, 2182, 2182, 2180, 2184, 2185, 2186, + 2178, 2184, 2187, 2187, 2185, 2193, 2188, 2191, 2191, 2196, + 2195, 2186, 2199, 2200, 2181, 2188, 2201, 2199, 2203, 2203, + 2207, 2201, 2202, 2193, 2195, 2196, 2207, 2202, 2205, 2205, + 2208, 2208, 2209, 2210, 2213, 2211, 2217, 2214, 2218, 2200, + 2211, 2215, 2215, 2219, 2218, 2217, 2224, 2220, 2209, 2214, + 2222, 2222, 2225, 2213, 2223, 2210, 2230, 2223, 2227, 2227, + 2231, 2219, 2220, 2228, 2228, 2224, 2229, 2232, 2234, 2231, + 2225, 2229, 2232, 2233, 2230, 2233, 2235, 2236, 2237, 2238, - 2235, 2235, 2241, 2238, 2230, 2236, 2242, 2237, 2238, 2239, - 2239, 2240, 2240, 2243, 2241, 2244, 2245, 2245, 2242, 2246, - 2247, 2247, 2248, 2248, 2249, 2250, 2253, 2251, 2252, 2255, - 2256, 2244, 2259, 2243, 2251, 2249, 2254, 2250, 2246, 2258, - 2252, 2254, 2257, 2257, 2260, 2262, 2253, 2261, 2258, 2255, - 2256, 2263, 2264, 2264, 2265, 2266, 2267, 2269, 2259, 2270, - 2261, 2271, 2274, 2265, 2260, 2263, 2273, 2274, 0, 2262, - 2266, 2267, 2275, 2272, 2283, 2269, 2272, 2275, 2276, 2276, - 2273, 2270, 2277, 2277, 2271, 2278, 2278, 2280, 2280, 2282, - 2282, 2284, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, + 2239, 2240, 2234, 2237, 2241, 2241, 2240, 2242, 2242, 2236, + 2235, 2243, 2243, 2244, 2244, 2245, 2246, 2247, 2250, 2238, + 2239, 2251, 2247, 2248, 2248, 2249, 2249, 2245, 2252, 2253, + 2250, 2254, 2254, 2251, 2246, 2255, 2256, 2256, 2257, 2257, + 2258, 2259, 2260, 2261, 2262, 2253, 2264, 2263, 2252, 2260, + 2265, 2258, 2263, 2259, 2255, 2261, 2266, 2266, 2267, 2268, + 2269, 2270, 2271, 2272, 2262, 2278, 2264, 2267, 2273, 2273, + 2265, 2279, 2274, 2275, 2270, 2276, 2280, 2272, 2282, 2281, + 2269, 2274, 2281, 2278, 2283, 2268, 2271, 0, 2275, 2283, + 2276, 2284, 2282, 2279, 2285, 2285, 2284, 2286, 2286, 2280, - 2294, 2293, 2284, 2293, 2295, 2296, 2300, 2291, 2297, 2297, - 2299, 2299, 2285, 2288, 2287, 2301, 2306, 2290, 2289, 2292, - 2294, 2304, 2295, 2296, 2301, 2302, 2302, 2307, 2300, 2308, - 2304, 2305, 2305, 2309, 2306, 2310, 2308, 2311, 2312, 2313, - 2314, 2314, 2315, 2315, 2316, 2307, 2317, 2318, 2309, 2319, - 2316, 2320, 2321, 2310, 2312, 2311, 2320, 2322, 2313, 2324, - 2323, 2324, 2318, 2329, 2317, 2323, 2325, 2325, 2319, 2326, - 2331, 2326, 2321, 2327, 2327, 2332, 2333, 2322, 2334, 2331, - 2335, 2336, 2329, 2337, 2340, 2335, 2341, 2344, 2333, 2341, - 2342, 2342, 2343, 2346, 2332, 2345, 2345, 2346, 2334, 2348, + 2287, 2287, 2289, 2289, 2291, 2291, 2292, 2293, 2294, 2296, + 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2302, 2293, 2304, + 2305, 2309, 2300, 0, 2292, 2306, 2306, 2294, 2297, 2296, + 2308, 2308, 2299, 2298, 2301, 2310, 2303, 2304, 2305, 2311, + 2311, 2313, 2315, 2309, 2310, 2314, 2314, 2316, 2317, 2318, + 2313, 2319, 2320, 2325, 2322, 2317, 2321, 2323, 2323, 2325, + 2315, 2324, 2324, 2326, 2318, 2316, 2328, 2327, 2330, 2319, + 2320, 2329, 2321, 2322, 2331, 2332, 2329, 2333, 2338, 2333, + 2332, 2326, 2327, 2334, 2334, 2328, 2340, 2335, 2330, 2335, + 2336, 2336, 2341, 2342, 2331, 2340, 2343, 2338, 2344, 2345, - 2351, 2336, 2337, 2353, 2340, 2344, 2349, 2343, 2350, 2350, - 2349, 2354, 2355, 2351, 2348, 2356, 2356, 2358, 2353, 2359, - 2360, 2361, 2361, 2362, 2360, 2363, 2363, 2365, 2359, 2358, - 2364, 2354, 2355, 2366, 2367, 2364, 2365, 2368, 2368, 2373, - 2373, 2374, 2362, 2375, 2375, 2376, 2367, 2377, 2378, 2366, - 2379, 2380, 2380, 2381, 2383, 2383, 2386, 2378, 2376, 2379, - 2377, 2386, 2387, 2374, 2388, 2389, 2390, 2387, 2381, 2391, - 2389, 2392, 2395, 2393, 2390, 2398, 2401, 2396, 2388, 2397, - 2392, 2393, 2396, 2401, 2397, 2399, 2399, 2395, 2391, 2402, - 2398, 2400, 2400, 2403, 2402, 2404, 2405, 2408, 2406, 2407, + 2352, 2346, 2349, 2344, 2350, 2342, 2353, 2350, 2351, 2351, + 2355, 2341, 2354, 2354, 2355, 2352, 2343, 2357, 2360, 2345, + 2346, 2358, 2349, 2362, 2353, 2358, 2359, 2359, 2363, 2364, + 2367, 2360, 2357, 2365, 2365, 2368, 2369, 2371, 2362, 2375, + 2369, 2377, 2367, 2384, 2368, 2370, 2370, 2373, 2363, 2364, + 2372, 2372, 2373, 2374, 2376, 2375, 2371, 2378, 2378, 2383, + 2383, 2377, 2374, 2385, 2385, 2384, 2376, 2386, 2387, 2388, + 2389, 2390, 2390, 2391, 2393, 2393, 2398, 2396, 2388, 2389, + 2386, 2387, 2396, 2401, 2397, 2400, 2399, 2402, 2391, 2397, + 2398, 2399, 2403, 2400, 2405, 2408, 2402, 2413, 2406, 2407, - 2407, 2409, 2405, 2406, 2410, 2410, 2409, 2411, 2411, 2414, - 0, 2403, 2408, 2404, 2415, 2415, 2416, 2426, 2417, 2416, - 2418, 2419, 2414, 2417, 2417, 2418, 2419, 2420, 2421, 2422, - 2423, 2424, 2421, 2420, 2422, 2425, 2427, 2430, 2426, 2423, - 2429, 2428, 2427, 2425, 2435, 2429, 2424, 2428, 2432, 2430, - 2437, 2433, 2438, 2432, 2433, 2437, 2435, 2438, 2439, 2440, - 2441, 2442, 2443, 2443, 2444, 2447, 2448, 2453, 2449, 2441, - 2442, 2451, 2440, 2444, 2450, 2450, 2439, 2454, 2454, 2452, - 2455, 2457, 2453, 2459, 2447, 2460, 2448, 2449, 2452, 2460, - 2451, 2461, 2461, 2462, 2463, 2464, 2457, 0, 2465, 2455, + 2403, 2414, 2401, 2406, 2407, 2409, 2409, 2410, 2410, 2405, + 2408, 2411, 2412, 2418, 2415, 2413, 2416, 2412, 2411, 2414, + 2415, 2416, 2417, 2417, 2419, 2420, 2420, 2424, 2418, 2419, + 2421, 2421, 2425, 2425, 2426, 2436, 2427, 2426, 2428, 2429, + 2424, 2427, 2427, 2428, 2429, 2430, 2431, 2432, 2433, 2434, + 2431, 2430, 2432, 2435, 2437, 2440, 2436, 2433, 2439, 2438, + 2437, 2435, 2445, 2439, 2434, 2438, 2442, 2440, 2447, 2443, + 2448, 2442, 2443, 2447, 2445, 2448, 2449, 2450, 2451, 2452, + 2453, 2453, 2454, 2457, 2458, 2463, 2459, 2451, 2452, 2461, + 2450, 2454, 2460, 2460, 2449, 2464, 2464, 2462, 2465, 2467, - 2463, 2464, 2467, 2459, 2465, 2466, 2466, 2468, 2470, 2471, - 2467, 2473, 2468, 2474, 2475, 2473, 2478, 2470, 2462, 2477, - 2477, 2488, 2471, 2479, 2479, 2480, 2480, 2474, 2483, 2475, - 2482, 2482, 2483, 2484, 2478, 2486, 2486, 2489, 2484, 2490, - 2491, 2488, 2489, 2493, 2501, 2491, 2491, 2494, 2494, 2496, - 2496, 2490, 2497, 2497, 2498, 2499, 2503, 2498, 2504, 2504, - 2505, 2505, 2501, 2493, 2506, 2506, 2507, 2509, 2499, 2508, - 2508, 2510, 2511, 2512, 2513, 2513, 2503, 2518, 2514, 2512, - 2509, 2507, 2514, 2519, 2520, 2517, 2511, 2521, 2522, 2510, - 2517, 2517, 2523, 2521, 2522, 2524, 2525, 2525, 2533, 2524, + 2463, 2469, 2457, 2470, 2458, 2459, 2462, 2470, 2461, 2471, + 2471, 2472, 2473, 2474, 2467, 0, 2475, 2465, 2473, 2474, + 2477, 2469, 2475, 2476, 2476, 2478, 2480, 2481, 2477, 2483, + 2478, 2484, 2485, 2483, 2488, 2480, 2472, 2487, 2487, 2498, + 2481, 2489, 2489, 2490, 2490, 2484, 2493, 2485, 2492, 2492, + 2493, 2494, 2488, 2496, 2496, 2499, 2494, 2500, 2501, 2498, + 2499, 2502, 2504, 2501, 2501, 2505, 2505, 2507, 2507, 2500, + 2508, 2508, 2509, 2502, 2510, 2509, 2512, 2514, 2515, 2515, + 2516, 2516, 2504, 2517, 2517, 2518, 2520, 2510, 2519, 2519, + 2521, 2522, 2523, 2529, 2512, 2524, 2524, 2514, 2523, 2520, - 2518, 2528, 2530, 2519, 2520, 2531, 2528, 2535, 2531, 2534, - 2530, 2536, 2534, 2537, 2538, 2539, 2536, 2523, 2540, 2540, - 2544, 2541, 2543, 2533, 2535, 2535, 2547, 2542, 2553, 2539, - 2542, 2537, 2545, 2556, 2538, 2541, 2543, 2546, 2542, 2544, - 2545, 0, 2546, 2546, 2553, 2547, 2548, 2548, 2549, 2549, - 2550, 2550, 2551, 2551, 2552, 2552, 2554, 2555, 2557, 2556, - 2558, 2554, 2559, 2561, 2561, 2562, 2563, 2557, 2562, 2565, - 2565, 2566, 2567, 2567, 2568, 2570, 2570, 2555, 2566, 2568, - 2558, 2571, 2559, 2572, 2563, 2573, 2575, 2576, 2576, 2577, - 2571, 2578, 2572, 2577, 2573, 2579, 2580, 2582, 2581, 2583, + 2518, 2530, 2525, 2531, 2528, 2522, 2525, 2532, 2521, 2528, + 2528, 2533, 2534, 2532, 2535, 2544, 2529, 2533, 2535, 2536, + 2536, 2530, 2539, 2531, 2541, 2542, 2545, 2539, 2542, 2545, + 2546, 2547, 2541, 2548, 2549, 2550, 2547, 2534, 2551, 2551, + 2544, 2552, 2553, 2554, 2555, 2553, 2558, 2546, 2546, 2550, + 2556, 2548, 2567, 2553, 2549, 2552, 2557, 2554, 2556, 2559, + 2559, 2557, 2557, 2555, 2564, 2558, 2560, 2560, 2561, 2561, + 2562, 2562, 2563, 2563, 2565, 2566, 2568, 2569, 2567, 2565, + 2564, 2570, 2572, 2572, 2573, 2568, 2574, 2573, 2576, 2576, + 2586, 2577, 2578, 2578, 2579, 2566, 2582, 2569, 2577, 2579, - 2578, 2580, 2580, 2583, 2575, 2591, 2582, 2587, 2588, 2588, - 2579, 2581, 2587, 2590, 2590, 2592, 2593, 2595, 2596, 2591, - 2599, 2601, 2600, 2602, 2604, 2606, 2595, 2608, 2609, 2602, - 2596, 2600, 2608, 2609, 2593, 2611, 2604, 2610, 2610, 2620, - 2592, 2601, 2613, 2621, 2611, 2599, 2606, 2613, 2614, 2614, - 2616, 2616, 2614, 2617, 2617, 2618, 2618, 2619, 2622, 2620, - 2625, 2624, 2621, 2622, 2626, 2625, 2619, 2624, 2628, 2626, - 2627, 2627, 2629, 2630, 2631, 2632, 2633, 2637, 2630, 2634, - 2634, 2632, 2637, 2636, 2638, 2640, 2628, 2636, 2641, 2638, - 2639, 2639, 2631, 2629, 2642, 2644, 2644, 2646, 2647, 2649, + 2583, 2570, 2581, 2581, 2574, 2582, 2584, 2592, 2586, 2583, + 2587, 2587, 2588, 2589, 2590, 2584, 2588, 2593, 2591, 2603, + 2592, 2594, 2589, 2591, 2591, 2594, 2593, 2598, 2602, 2590, + 2599, 2599, 2598, 2601, 2601, 2604, 2606, 2606, 2607, 2608, + 2611, 2612, 2602, 2613, 2603, 2616, 2614, 2607, 2618, 2620, + 2612, 2608, 2614, 2604, 2620, 2621, 2707, 2616, 2622, 2622, + 2621, 2623, 2625, 2613, 2632, 2611, 2633, 2625, 2707, 2618, + 2623, 2626, 2626, 2628, 2628, 2626, 2629, 2629, 2630, 2630, + 2631, 2634, 2636, 2640, 2632, 2633, 2634, 2637, 2636, 2631, + 2638, 2641, 2637, 2639, 2639, 2638, 2643, 2642, 2644, 2645, - 2650, 2633, 2648, 2641, 2640, 2651, 2648, 2652, 2649, 2654, - 2646, 2647, 2653, 2656, 2642, 2652, 2650, 2653, 2655, 2655, - 2658, 2658, 2659, 2659, 2651, 2661, 2663, 2663, 2665, 2666, - 2671, 2667, 2656, 2668, 2672, 2654, 2670, 2670, 2668, 2673, - 2675, 2675, 2676, 2677, 2665, 2666, 2661, 2667, 2678, 2678, - 2671, 2681, 2684, 2682, 2693, 2683, 2676, 2672, 2673, 2682, - 2683, 2687, 2677, 2685, 2685, 2686, 2686, 2688, 2688, 2689, - 2690, 2681, 2691, 2693, 2684, 2695, 2692, 2694, 0, 2690, - 2689, 2687, 2692, 2696, 2696, 2697, 2702, 2688, 2697, 2694, - 2698, 2698, 2691, 2703, 2704, 2695, 2705, 2705, 2702, 2706, + 2652, 2640, 2642, 2648, 2644, 2646, 2646, 2648, 2649, 2654, + 2650, 2653, 2641, 2649, 2643, 2650, 2651, 2651, 2658, 2652, + 2656, 2656, 2659, 2660, 2645, 2661, 2653, 2660, 2662, 2654, + 2663, 2658, 2664, 2665, 2661, 2659, 2666, 2668, 2665, 2673, + 2664, 2667, 2667, 2677, 2662, 2670, 2670, 2671, 2671, 2663, + 2675, 2675, 2678, 2679, 2682, 2682, 2668, 2683, 2680, 2677, + 2673, 2684, 2666, 2680, 2685, 2687, 2687, 2688, 2678, 2679, + 2689, 2690, 2690, 2693, 2694, 2697, 2700, 2683, 2698, 2698, + 2694, 2688, 2695, 2685, 2684, 2699, 2699, 2695, 2702, 2689, + 2701, 2701, 2703, 2693, 2704, 2708, 2700, 2697, 2705, 2702, - 2704, 2707, 2706, 2708, 2710, 2711, 2712, 2707, 2713, 2710, - 2711, 2714, 2717, 2703, 2713, 2715, 2715, 2718, 2719, 2720, - 2722, 2708, 2721, 2721, 2717, 2712, 2728, 2723, 2714, 2714, - 2725, 2725, 2720, 2726, 2726, 2718, 2723, 2727, 2738, 2722, - 2728, 2729, 2727, 2719, 2730, 2730, 2729, 2731, 2731, 2732, - 2732, 2733, 2735, 2735, 2740, 2741, 2733, 2738, 2742, 2743, - 2743, 2745, 2745, 2747, 2746, 2748, 2749, 2749, 2750, 2750, - 2753, 2796, 2754, 2752, 2748, 2796, 2740, 2741, 2746, 2752, - 2742, 2755, 2762, 2747, 2758, 2758, 2755, 2760, 2760, 2761, - 2753, 2754, 2763, 2764, 2761, 2765, 2762, 2767, 2763, 2766, + 2706, 2703, 2709, 2709, 2705, 2710, 2711, 2711, 2710, 2715, + 2701, 2716, 2717, 0, 2704, 2708, 2718, 2718, 2717, 2706, + 2719, 2715, 2720, 2719, 2721, 2723, 2725, 2724, 2720, 2726, + 2723, 2716, 2724, 2727, 2730, 2726, 2728, 2728, 2731, 2732, + 2733, 2735, 2721, 2734, 2734, 2725, 2730, 2740, 2736, 2741, + 2727, 2727, 2740, 2733, 2738, 2738, 2731, 2736, 2739, 2739, + 2735, 2742, 2751, 2741, 2732, 2753, 2742, 2743, 2743, 2744, + 2744, 2745, 2745, 2746, 2748, 2748, 2754, 2755, 2746, 2756, + 2756, 2751, 2758, 2758, 2760, 2761, 2759, 2753, 2762, 2762, + 2763, 2763, 2766, 0, 2761, 2765, 2767, 2768, 2754, 2755, - 2766, 2769, 2767, 2765, 2770, 2764, 2771, 2772, 2773, 2775, - 2776, 2771, 2777, 2778, 2773, 2780, 2779, 2775, 2781, 2772, - 2782, 2769, 2783, 2785, 2770, 2786, 2790, 2783, 2785, 2776, - 2863, 2780, 2777, 2778, 2779, 2781, 2781, 2787, 2791, 2788, - 0, 2782, 2863, 2787, 2788, 2786, 2790, 2794, 2794, 2795, - 2795, 2791, 2800, 2800, 2802, 2802, 2803, 2803, 2806, 2803, - 2804, 2804, 2806, 2804, 2805, 2805, 2809, 2805, 2808, 2808, - 2813, 2810, 2814, 2815, 2816, 2816, 2819, 2821, 2815, 2820, - 2822, 2821, 2823, 0, 2809, 2810, 2820, 2825, 2830, 2822, - 2813, 2826, 2814, 2827, 2827, 2828, 2828, 2823, 2829, 2829, + 2759, 2765, 2768, 2775, 2760, 2771, 2771, 2773, 2773, 2774, + 2776, 2777, 2766, 2778, 2774, 2767, 2776, 2775, 2779, 2779, + 2780, 2778, 2782, 2777, 2783, 2780, 2784, 2785, 2786, 2788, + 2789, 2784, 2790, 2791, 2786, 2793, 2792, 2788, 2794, 2785, + 2795, 2796, 2782, 2798, 2783, 2799, 2796, 2803, 2798, 2789, + 0, 2793, 2790, 2791, 2792, 2794, 2794, 2800, 2804, 2801, + 0, 2795, 2809, 2800, 2801, 2799, 2809, 2803, 2807, 2807, + 2822, 2804, 2808, 2808, 2813, 2813, 2815, 2815, 2816, 2816, + 2819, 2816, 2817, 2817, 2819, 2817, 2818, 2818, 2822, 2818, + 2821, 2821, 2823, 2826, 2827, 2828, 2829, 2829, 2832, 2834, - 2826, 2819, 2831, 2830, 2832, 2825, 2833, 2831, 2834, 2835, - 2836, 2833, 2833, 2832, 2834, 2837, 2832, 2838, 2839, 2840, - 2841, 2841, 2838, 2839, 2842, 2836, 2843, 2844, 2844, 2870, - 2842, 2912, 2843, 0, 2835, 2912, 2837, 2846, 2840, 2845, - 2845, 2870, 2846, 2849, 2849, 2852, 2852, 2853, 2853, 2854, - 2854, 2855, 2855, 2856, 2856, 2857, 2857, 2858, 2858, 2860, - 2861, 2861, 2862, 2864, 2868, 2866, 2867, 2867, 2860, 2869, - 2872, 2862, 2871, 2871, 2873, 2873, 2876, 2877, 2878, 2868, - 2877, 2880, 2869, 2864, 2866, 2872, 2879, 2879, 2882, 2883, - 2886, 2882, 2884, 2885, 2876, 2883, 2887, 2888, 2885, 2880, + 2828, 2833, 2835, 2834, 2836, 2844, 2823, 2838, 2833, 2839, + 2844, 2835, 2848, 2826, 2827, 2840, 2840, 2843, 2839, 2836, + 2841, 2841, 2845, 2832, 2846, 2838, 2842, 2842, 2849, 2846, + 2846, 2845, 2843, 2847, 2845, 2850, 2851, 2848, 2853, 2847, + 2852, 2851, 2855, 2849, 2856, 2852, 2854, 2854, 2855, 0, + 2856, 2857, 2857, 2858, 2858, 2859, 2850, 2853, 2862, 2862, + 2859, 2865, 2865, 2866, 2866, 2867, 2867, 2868, 2868, 2869, + 2869, 2870, 2870, 2871, 2871, 2873, 2874, 2874, 2875, 2876, + 2877, 2881, 2879, 2883, 2873, 2880, 2880, 2875, 2885, 2882, + 2889, 2876, 2884, 2884, 2891, 2883, 2881, 2886, 2886, 2893, - 2894, 2890, 2891, 2905, 2878, 2903, 2884, 2890, 2903, 2886, - 2910, 2891, 2914, 2888, 2887, 2894, 2905, 2906, 2906, 2907, - 2907, 2908, 2908, 2911, 2913, 2916, 2914, 2917, 2919, 2918, - 2919, 2920, 2911, 2910, 2918, 2921, 2921, 2922, 2917, 2923, - 2925, 2924, 2926, 2928, 2913, 2927, 2920, 2930, 2916, 2929, - 2922, 2931, 2928, 2937, 0, 2936, 2925, 2932, 2923, 2924, - 2927, 2929, 2932, 2938, 2938, 2939, 2944, 2926, 2930, 2936, - 2945, 2931, 2949, 2937, 2939, 2940, 2940, 2941, 2941, 2942, - 2942, 2943, 2943, 2946, 2947, 2944, 2946, 2948, 2950, 2947, - 2945, 2952, 2948, 2951, 2953, 2954, 2955, 2949, 2957, 2951, + 2877, 2879, 2882, 2885, 2890, 2892, 2892, 2890, 2889, 2895, + 2896, 2897, 2895, 2898, 2899, 2901, 2896, 2893, 2898, 2900, + 2891, 2903, 2918, 2904, 2907, 2897, 2916, 2903, 2923, 2916, + 2925, 2901, 2904, 2899, 2925, 2918, 2926, 2900, 2924, 2907, + 2919, 2919, 2920, 2920, 2921, 2921, 2927, 2924, 2929, 2931, + 2930, 2923, 2933, 2932, 2931, 2932, 2926, 2934, 2934, 2935, + 2927, 2930, 2936, 2938, 2937, 2939, 2941, 2933, 2940, 2944, + 2943, 2929, 2935, 2942, 2949, 2941, 2950, 2951, 2951, 2938, + 0, 2936, 2937, 2940, 2952, 2942, 2957, 2945, 2949, 2944, + 2939, 2943, 2945, 2952, 2953, 2953, 2950, 2954, 2954, 2955, - 2954, 2956, 2956, 2950, 2958, 2952, 2953, 2959, 2959, 2961, - 2963, 2966, 2966, 2957, 2967, 2967, 2955, 2968, 2969, 2972, - 2970, 2971, 2973, 2958, 2961, 2968, 2970, 2971, 2963, 2974, - 2979, 2975, 2980, 2972, 2985, 2973, 2975, 2969, 2976, 2976, - 2977, 2977, 2982, 2983, 2986, 2987, 2988, 2983, 2974, 2986, - 2989, 2979, 2980, 2990, 2985, 2991, 2982, 2992, 2996, 2988, - 2991, 2997, 2992, 2989, 2987, 2993, 2993, 2998, 2999, 2999, - 3000, 3001, 2990, 3002, 3002, 3000, 3003, 3001, 2996, 2997, - 3004, 3003, 3005, 3006, 3007, 3004, 2998, 3005, 3009, 3009, - 3007, 3010, 3011, 3011, 3013, 3014, 3010, 3015, 3013, 3016, + 2955, 2956, 2956, 2958, 2959, 2957, 2960, 2959, 2961, 2962, + 2963, 2960, 2964, 2961, 2965, 2966, 2967, 2968, 2964, 2969, + 2969, 2967, 2971, 2958, 2970, 2963, 2976, 2966, 2965, 2972, + 2972, 2974, 2979, 2979, 2962, 2980, 2980, 2968, 2982, 2970, + 2981, 2971, 2985, 2983, 2976, 2984, 2974, 2986, 2981, 2983, + 2987, 2984, 2992, 2988, 2989, 2989, 2985, 2982, 2988, 2993, + 2986, 2990, 2990, 2995, 2996, 2998, 2999, 3000, 2996, 2987, + 3001, 2999, 3003, 2992, 3002, 3004, 3005, 2995, 3009, 2993, + 3004, 3005, 3010, 3001, 3011, 2998, 3000, 3002, 3006, 3006, + 3013, 3003, 3012, 3012, 3016, 3013, 3014, 3019, 3009, 3016, - 3017, 3018, 3006, 3019, 3015, 3022, 3022, 3018, 3020, 3024, - 3024, 3025, 3026, 3027, 3014, 3028, 3029, 3026, 3016, 3017, - 3025, 3020, 3019, 3025, 3030, 3030, 3031, 3032, 3034, 3029, - 3036, 3031, 3027, 3041, 3028, 3035, 3035, 3037, 3037, 3039, - 3032, 3038, 3038, 3040, 3039, 3042, 3042, 3048, 3043, 3036, - 3040, 3050, 3041, 3043, 3034, 3044, 3046, 3044, 3045, 3045, - 3047, 3052, 3052, 3046, 3049, 3053, 3048, 3047, 3055, 3049, - 3050, 3056, 3057, 3055, 3058, 3062, 3056, 3059, 3059, 3061, - 3061, 3063, 3064, 3064, 3053, 3065, 3065, 0, 3066, 3068, - 3068, 3057, 3070, 3058, 3062, 3066, 3069, 3069, 3072, 3070, + 3010, 3017, 3014, 3011, 3015, 3015, 3017, 3018, 3020, 3022, + 3022, 3026, 3018, 3023, 3020, 3026, 3019, 3027, 3023, 3024, + 3024, 3028, 3029, 3030, 3031, 3032, 3033, 3047, 3028, 3040, + 3031, 3035, 3035, 3037, 3037, 3039, 3027, 3038, 3041, 3033, + 3039, 3029, 3030, 3042, 3032, 3045, 3038, 3044, 3040, 3038, + 3043, 3043, 3044, 3047, 3048, 3048, 3042, 3041, 3045, 3049, + 3050, 3050, 3051, 3051, 3052, 3053, 3054, 3055, 3055, 3052, + 3056, 3057, 3053, 3057, 3059, 3056, 3058, 3058, 3049, 3060, + 3061, 3059, 3062, 3063, 3066, 3054, 3060, 3062, 3065, 3065, + 3068, 3069, 3070, 3071, 3075, 3068, 3069, 3072, 3072, 3061, - 3063, 3075, 3076, 3072, 3077, 0, 3075, 3078, 3078, 3079, - 3079, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3076, 0, 3077, 3083, 3083, 3083, 3083, 3083, 3083, - 3083, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3085, 3085, - 3085, 3085, 3085, 3085, 3085, 3086, 3086, 3086, 3086, 3086, - 3086, 3086, 3087, 3087, 3087, 3087, 3087, 3087, 3087, 3089, - 3089, 0, 3089, 3089, 3089, 3089, 3090, 3090, 0, 0, - 0, 3090, 3090, 3091, 3091, 0, 0, 3091, 0, 3091, - 3092, 0, 0, 0, 0, 0, 3092, 3093, 3093, 0, - 0, 0, 3093, 3093, 3094, 0, 0, 0, 0, 0, + 3074, 3074, 3063, 3066, 3076, 3077, 3077, 3078, 3078, 3079, + 3089, 3070, 3071, 3075, 3081, 3081, 3079, 3082, 3082, 3083, + 3085, 3090, 3088, 3076, 0, 3085, 3083, 3088, 0, 3089, + 3091, 3091, 3092, 3092, 0, 0, 0, 0, 0, 0, + 3090, 3096, 3096, 3096, 3096, 3096, 3096, 3096, 3097, 3097, + 3097, 3097, 3097, 3097, 3097, 3098, 3098, 3098, 3098, 3098, + 3098, 3098, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3100, + 3100, 3100, 3100, 3100, 3100, 3100, 3102, 3102, 0, 3102, + 3102, 3102, 3102, 3103, 3103, 0, 0, 0, 3103, 3103, + 3104, 3104, 0, 0, 3104, 0, 3104, 3105, 0, 0, - 3094, 3095, 3095, 0, 3095, 3095, 3095, 3095, 3096, 3096, - 0, 3096, 3096, 3096, 3096, 3082, 3082, 3082, 3082, 3082, - 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, - 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, - 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, - 3082, 3082, 3082, 3082, 3082, 3082 + 0, 0, 0, 3105, 3106, 3106, 0, 0, 0, 3106, + 3106, 3107, 0, 0, 0, 0, 0, 3107, 3108, 3108, + 0, 3108, 3108, 3108, 3108, 3109, 3109, 0, 3109, 3109, + 3109, 3109, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, + 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, + 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, + 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, + 3095, 3095, 3095 } ; static yy_state_type yy_last_accepting_state; @@ -2972,7 +2980,7 @@ static void config_end_include(void) } #endif -#line 2973 "" +#line 2982 "" #define YY_NO_INPUT 1 #line 184 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -2981,9 +2989,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 2982 "" +#line 2991 "" -#line 2984 "" +#line 2993 "" #define INITIAL 0 #define quotedstring 1 @@ -3205,7 +3213,7 @@ YY_DECL { #line 204 "./util/configlexer.lex" -#line 3206 "" +#line 3215 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3238,13 +3246,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3083 ) + if ( yy_current_state >= 3096 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 6016 ); + while ( yy_base[yy_current_state] != 6033 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -4119,461 +4127,461 @@ YY_RULE_SETUP case 170: YY_RULE_SETUP #line 377 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_SERVE_ORIGINAL_TTL) } YY_BREAK case 171: YY_RULE_SETUP #line 378 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 172: YY_RULE_SETUP #line 379 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 173: YY_RULE_SETUP #line 380 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 174: YY_RULE_SETUP #line 381 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 175: YY_RULE_SETUP #line 382 "./util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 176: YY_RULE_SETUP #line 383 "./util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 177: YY_RULE_SETUP -#line 385 "./util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +#line 384 "./util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 178: YY_RULE_SETUP #line 386 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 179: YY_RULE_SETUP #line 387 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 180: YY_RULE_SETUP #line 388 "./util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 181: YY_RULE_SETUP #line 389 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 182: YY_RULE_SETUP #line 390 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 183: YY_RULE_SETUP #line 391 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 184: YY_RULE_SETUP #line 392 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 185: YY_RULE_SETUP #line 393 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 186: YY_RULE_SETUP #line 394 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 187: YY_RULE_SETUP #line 395 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } +{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 188: YY_RULE_SETUP #line 396 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_SERVFAIL) } +{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 189: YY_RULE_SETUP #line 397 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 190: YY_RULE_SETUP #line 398 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 191: YY_RULE_SETUP #line 399 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 192: YY_RULE_SETUP #line 400 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 193: YY_RULE_SETUP #line 401 "./util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 194: YY_RULE_SETUP #line 402 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 195: YY_RULE_SETUP #line 403 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 196: YY_RULE_SETUP #line 404 "./util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 197: YY_RULE_SETUP #line 405 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 198: YY_RULE_SETUP #line 406 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 199: YY_RULE_SETUP #line 407 "./util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 200: YY_RULE_SETUP #line 408 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 201: YY_RULE_SETUP #line 409 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 202: YY_RULE_SETUP #line 410 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 203: YY_RULE_SETUP #line 411 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 204: YY_RULE_SETUP #line 412 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 205: YY_RULE_SETUP #line 413 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 206: YY_RULE_SETUP #line 414 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 207: YY_RULE_SETUP #line 415 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 208: YY_RULE_SETUP #line 416 "./util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 209: YY_RULE_SETUP #line 417 "./util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 210: YY_RULE_SETUP #line 418 "./util/configlexer.lex" -{ YDVAR(1, VAR_DYNLIB_FILE) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 211: YY_RULE_SETUP #line 419 "./util/configlexer.lex" -{ YDVAR(0, VAR_DYNLIB) } +{ YDVAR(1, VAR_DYNLIB_FILE) } YY_BREAK case 212: YY_RULE_SETUP #line 420 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(0, VAR_DYNLIB) } YY_BREAK case 213: YY_RULE_SETUP #line 421 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 214: YY_RULE_SETUP #line 422 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 215: YY_RULE_SETUP #line 423 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 216: YY_RULE_SETUP #line 424 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 217: YY_RULE_SETUP #line 425 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 218: YY_RULE_SETUP #line 426 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 219: YY_RULE_SETUP #line 427 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 220: YY_RULE_SETUP #line 428 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 221: YY_RULE_SETUP #line 429 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 222: YY_RULE_SETUP #line 430 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 223: YY_RULE_SETUP #line 431 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 224: YY_RULE_SETUP #line 432 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 225: YY_RULE_SETUP #line 433 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 226: YY_RULE_SETUP #line 434 "./util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 227: YY_RULE_SETUP #line 435 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 228: YY_RULE_SETUP #line 436 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 229: YY_RULE_SETUP #line 437 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 230: YY_RULE_SETUP #line 438 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IP) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 231: YY_RULE_SETUP #line 439 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS) } +{ YDVAR(1, VAR_DNSTAP_IP) } YY_BREAK case 232: YY_RULE_SETUP #line 440 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } +{ YDVAR(1, VAR_DNSTAP_TLS) } YY_BREAK case 233: YY_RULE_SETUP #line 441 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } +{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } YY_BREAK case 234: YY_RULE_SETUP #line 442 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } +{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } YY_BREAK case 235: YY_RULE_SETUP -#line 444 "./util/configlexer.lex" +#line 443 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } YY_BREAK case 236: YY_RULE_SETUP -#line 446 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +#line 445 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } YY_BREAK case 237: YY_RULE_SETUP #line 447 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 238: YY_RULE_SETUP #line 448 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 239: YY_RULE_SETUP #line 449 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 240: YY_RULE_SETUP #line 450 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 241: YY_RULE_SETUP -#line 452 "./util/configlexer.lex" +#line 451 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 242: YY_RULE_SETUP -#line 454 "./util/configlexer.lex" +#line 453 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 243: YY_RULE_SETUP -#line 456 "./util/configlexer.lex" +#line 455 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 244: YY_RULE_SETUP -#line 458 "./util/configlexer.lex" +#line 457 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 245: YY_RULE_SETUP -#line 460 "./util/configlexer.lex" +#line 459 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 246: YY_RULE_SETUP -#line 462 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 461 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 247: YY_RULE_SETUP #line 463 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 248: YY_RULE_SETUP #line 464 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 249: YY_RULE_SETUP #line 465 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 250: YY_RULE_SETUP #line 466 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 251: YY_RULE_SETUP #line 467 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 252: YY_RULE_SETUP #line 468 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 253: YY_RULE_SETUP #line 469 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 254: YY_RULE_SETUP #line 470 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 255: YY_RULE_SETUP #line 471 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 256: YY_RULE_SETUP #line 472 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 257: YY_RULE_SETUP #line 473 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 258: YY_RULE_SETUP #line 474 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 259: YY_RULE_SETUP #line 475 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 260: YY_RULE_SETUP @@ -4588,200 +4596,205 @@ YY_RULE_SETUP case 262: YY_RULE_SETUP #line 478 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 263: YY_RULE_SETUP #line 479 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 264: YY_RULE_SETUP #line 480 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 265: YY_RULE_SETUP #line 481 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 266: YY_RULE_SETUP #line 482 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 267: YY_RULE_SETUP #line 483 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 268: YY_RULE_SETUP #line 484 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 269: YY_RULE_SETUP #line 485 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 270: YY_RULE_SETUP #line 486 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 271: YY_RULE_SETUP #line 487 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 272: YY_RULE_SETUP #line 488 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 273: YY_RULE_SETUP -#line 490 "./util/configlexer.lex" +#line 489 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 274: YY_RULE_SETUP -#line 492 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 491 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 275: YY_RULE_SETUP #line 493 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 276: YY_RULE_SETUP #line 494 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 277: YY_RULE_SETUP #line 495 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 278: YY_RULE_SETUP #line 496 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 279: YY_RULE_SETUP #line 497 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 280: YY_RULE_SETUP #line 498 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 281: YY_RULE_SETUP #line 499 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 282: YY_RULE_SETUP #line 500 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 283: YY_RULE_SETUP #line 501 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 284: YY_RULE_SETUP #line 502 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 285: YY_RULE_SETUP #line 503 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 286: YY_RULE_SETUP #line 504 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 287: YY_RULE_SETUP #line 505 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 288: YY_RULE_SETUP #line 506 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 289: YY_RULE_SETUP #line 507 "./util/configlexer.lex" -{ YDVAR(0, VAR_IPSET) } +{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } YY_BREAK case 290: YY_RULE_SETUP #line 508 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V4) } +{ YDVAR(0, VAR_IPSET) } YY_BREAK case 291: YY_RULE_SETUP #line 509 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V6) } +{ YDVAR(1, VAR_IPSET_NAME_V4) } YY_BREAK case 292: YY_RULE_SETUP #line 510 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_IPSET_NAME_V6) } YY_BREAK case 293: YY_RULE_SETUP #line 511 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } YY_BREAK case 294: -/* rule 294 can match eol */ YY_RULE_SETUP #line 512 "./util/configlexer.lex" +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } + YY_BREAK +case 295: +/* rule 295 can match eol */ +YY_RULE_SETUP +#line 513 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 295: +case 296: YY_RULE_SETUP -#line 515 "./util/configlexer.lex" +#line 516 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 516 "./util/configlexer.lex" +#line 517 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 296: -YY_RULE_SETUP -#line 521 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 297: -/* rule 297 can match eol */ YY_RULE_SETUP #line 522 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 298: +/* rule 298 can match eol */ +YY_RULE_SETUP +#line 523 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 298: +case 299: YY_RULE_SETUP -#line 524 "./util/configlexer.lex" +#line 525 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4794,34 +4807,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 299: +case 300: YY_RULE_SETUP -#line 536 "./util/configlexer.lex" +#line 537 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 537 "./util/configlexer.lex" +#line 538 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 300: -YY_RULE_SETUP -#line 542 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 301: -/* rule 301 can match eol */ YY_RULE_SETUP #line 543 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 302: +/* rule 302 can match eol */ +YY_RULE_SETUP +#line 544 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 302: +case 303: YY_RULE_SETUP -#line 545 "./util/configlexer.lex" +#line 546 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4834,38 +4847,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 303: +case 304: YY_RULE_SETUP -#line 557 "./util/configlexer.lex" +#line 558 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 559 "./util/configlexer.lex" +#line 560 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 304: -YY_RULE_SETUP -#line 563 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK case 305: -/* rule 305 can match eol */ YY_RULE_SETUP #line 564 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 306: +/* rule 306 can match eol */ YY_RULE_SETUP #line 565 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK case 307: YY_RULE_SETUP #line 566 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 308: +YY_RULE_SETUP +#line 567 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4873,27 +4886,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 571 "./util/configlexer.lex" +#line 572 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 308: -YY_RULE_SETUP -#line 575 "./util/configlexer.lex" -{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } - YY_BREAK case 309: -/* rule 309 can match eol */ YY_RULE_SETUP #line 576 "./util/configlexer.lex" +{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } + YY_BREAK +case 310: +/* rule 310 can match eol */ +YY_RULE_SETUP +#line 577 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 310: +case 311: YY_RULE_SETUP -#line 578 "./util/configlexer.lex" +#line 579 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4903,7 +4916,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 584 "./util/configlexer.lex" +#line 585 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4915,33 +4928,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 311: +case 312: YY_RULE_SETUP -#line 595 "./util/configlexer.lex" +#line 596 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 312: +case 313: YY_RULE_SETUP -#line 599 "./util/configlexer.lex" +#line 600 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 313: +case 314: YY_RULE_SETUP -#line 603 "./util/configlexer.lex" +#line 604 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 314: +case 315: YY_RULE_SETUP -#line 607 "./util/configlexer.lex" +#line 608 "./util/configlexer.lex" ECHO; YY_BREAK -#line 4942 "" +#line 4956 "" case YY_END_OF_BUFFER: { @@ -5236,7 +5249,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3083 ) + if ( yy_current_state >= 3096 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5264,11 +5277,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3083 ) + if ( yy_current_state >= 3096 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 3082); + yy_is_jam = (yy_current_state == 3095); return yy_is_jam ? 0 : yy_current_state; } @@ -5907,6 +5920,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 607 "./util/configlexer.lex" +#line 608 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index d7c61c05b..74e5d767c 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -374,6 +374,7 @@ serve-expired-ttl{COLON} { YDVAR(1, VAR_SERVE_EXPIRED_TTL) } serve-expired-ttl-reset{COLON} { YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } serve-expired-reply-ttl{COLON} { YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } serve-expired-client-timeout{COLON} { YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } +serve-original-ttl{COLON} { YDVAR(1, VAR_SERVE_ORIGINAL_TTL) } fake-dsa{COLON} { YDVAR(1, VAR_FAKE_DSA) } fake-sha1{COLON} { YDVAR(1, VAR_FAKE_SHA1) } val-log-level{COLON} { YDVAR(1, VAR_VAL_LOG_LEVEL) } diff --git a/util/configparser.c b/util/configparser.c index 2c9b0a5c4..3538b1937 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -1,9 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.4.1. */ +/* A Bison parser, made by GNU Bison 3.0.4. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, - Inc. + Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -41,14 +40,11 @@ define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ -/* Undocumented macros, especially those whose name start with YY_, - are private implementation details. Do not rely on them. */ - /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.4.1" +#define YYBISON_VERSION "3.0.4" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -65,8 +61,8 @@ -/* First part of user prologue. */ -#line 38 "./util/configparser.y" +/* Copy the first part of user declarations. */ +#line 38 "./util/configparser.y" /* yacc.c:339 */ #include "config.h" @@ -95,17 +91,13 @@ extern struct config_parser_state* cfg_parser; #endif -#line 99 "util/configparser.c" +#line 95 "util/configparser.c" /* yacc.c:339 */ # ifndef YY_NULLPTR -# if defined __cplusplus -# if 201103L <= __cplusplus -# define YY_NULLPTR nullptr -# else -# define YY_NULLPTR 0 -# endif +# if defined __cplusplus && 201103L <= __cplusplus +# define YY_NULLPTR nullptr # else -# define YY_NULLPTR ((void*)0) +# define YY_NULLPTR 0 # endif # endif @@ -117,8 +109,8 @@ extern struct config_parser_state* cfg_parser; # define YYERROR_VERBOSE 0 #endif -/* Use api.header.include to #include this header - instead of duplicating it here. */ +/* In a future release of Bison, this section will be replaced + by #include "configparser.h". */ #ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED # define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED /* Debug traces. */ @@ -349,78 +341,79 @@ extern int yydebug; VAR_SERVE_EXPIRED_TTL_RESET = 470, VAR_SERVE_EXPIRED_REPLY_TTL = 471, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 472, - VAR_FAKE_DSA = 473, - VAR_FAKE_SHA1 = 474, - VAR_LOG_IDENTITY = 475, - VAR_HIDE_TRUSTANCHOR = 476, - VAR_TRUST_ANCHOR_SIGNALING = 477, - VAR_AGGRESSIVE_NSEC = 478, - VAR_USE_SYSTEMD = 479, - VAR_SHM_ENABLE = 480, - VAR_SHM_KEY = 481, - VAR_ROOT_KEY_SENTINEL = 482, - VAR_DNSCRYPT = 483, - VAR_DNSCRYPT_ENABLE = 484, - VAR_DNSCRYPT_PORT = 485, - VAR_DNSCRYPT_PROVIDER = 486, - VAR_DNSCRYPT_SECRET_KEY = 487, - VAR_DNSCRYPT_PROVIDER_CERT = 488, - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 489, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 490, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 491, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 492, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 493, - VAR_IPSECMOD_ENABLED = 494, - VAR_IPSECMOD_HOOK = 495, - VAR_IPSECMOD_IGNORE_BOGUS = 496, - VAR_IPSECMOD_MAX_TTL = 497, - VAR_IPSECMOD_WHITELIST = 498, - VAR_IPSECMOD_STRICT = 499, - VAR_CACHEDB = 500, - VAR_CACHEDB_BACKEND = 501, - VAR_CACHEDB_SECRETSEED = 502, - VAR_CACHEDB_REDISHOST = 503, - VAR_CACHEDB_REDISPORT = 504, - VAR_CACHEDB_REDISTIMEOUT = 505, - VAR_CACHEDB_REDISEXPIRERECORDS = 506, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 507, - VAR_FOR_UPSTREAM = 508, - VAR_AUTH_ZONE = 509, - VAR_ZONEFILE = 510, - VAR_MASTER = 511, - VAR_URL = 512, - VAR_FOR_DOWNSTREAM = 513, - VAR_FALLBACK_ENABLED = 514, - VAR_TLS_ADDITIONAL_PORT = 515, - VAR_LOW_RTT = 516, - VAR_LOW_RTT_PERMIL = 517, - VAR_FAST_SERVER_PERMIL = 518, - VAR_FAST_SERVER_NUM = 519, - VAR_ALLOW_NOTIFY = 520, - VAR_TLS_WIN_CERT = 521, - VAR_TCP_CONNECTION_LIMIT = 522, - VAR_FORWARD_NO_CACHE = 523, - VAR_STUB_NO_CACHE = 524, - VAR_LOG_SERVFAIL = 525, - VAR_DENY_ANY = 526, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 527, - VAR_LOG_TAG_QUERYREPLY = 528, - VAR_STREAM_WAIT_SIZE = 529, - VAR_TLS_CIPHERS = 530, - VAR_TLS_CIPHERSUITES = 531, - VAR_TLS_USE_SNI = 532, - VAR_IPSET = 533, - VAR_IPSET_NAME_V4 = 534, - VAR_IPSET_NAME_V6 = 535, - VAR_TLS_SESSION_TICKET_KEYS = 536, - VAR_RPZ = 537, - VAR_TAGS = 538, - VAR_RPZ_ACTION_OVERRIDE = 539, - VAR_RPZ_CNAME_OVERRIDE = 540, - VAR_RPZ_LOG = 541, - VAR_RPZ_LOG_NAME = 542, - VAR_DYNLIB = 543, - VAR_DYNLIB_FILE = 544 + VAR_SERVE_ORIGINAL_TTL = 473, + VAR_FAKE_DSA = 474, + VAR_FAKE_SHA1 = 475, + VAR_LOG_IDENTITY = 476, + VAR_HIDE_TRUSTANCHOR = 477, + VAR_TRUST_ANCHOR_SIGNALING = 478, + VAR_AGGRESSIVE_NSEC = 479, + VAR_USE_SYSTEMD = 480, + VAR_SHM_ENABLE = 481, + VAR_SHM_KEY = 482, + VAR_ROOT_KEY_SENTINEL = 483, + VAR_DNSCRYPT = 484, + VAR_DNSCRYPT_ENABLE = 485, + VAR_DNSCRYPT_PORT = 486, + VAR_DNSCRYPT_PROVIDER = 487, + VAR_DNSCRYPT_SECRET_KEY = 488, + VAR_DNSCRYPT_PROVIDER_CERT = 489, + VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 490, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 491, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 492, + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 493, + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 494, + VAR_IPSECMOD_ENABLED = 495, + VAR_IPSECMOD_HOOK = 496, + VAR_IPSECMOD_IGNORE_BOGUS = 497, + VAR_IPSECMOD_MAX_TTL = 498, + VAR_IPSECMOD_WHITELIST = 499, + VAR_IPSECMOD_STRICT = 500, + VAR_CACHEDB = 501, + VAR_CACHEDB_BACKEND = 502, + VAR_CACHEDB_SECRETSEED = 503, + VAR_CACHEDB_REDISHOST = 504, + VAR_CACHEDB_REDISPORT = 505, + VAR_CACHEDB_REDISTIMEOUT = 506, + VAR_CACHEDB_REDISEXPIRERECORDS = 507, + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 508, + VAR_FOR_UPSTREAM = 509, + VAR_AUTH_ZONE = 510, + VAR_ZONEFILE = 511, + VAR_MASTER = 512, + VAR_URL = 513, + VAR_FOR_DOWNSTREAM = 514, + VAR_FALLBACK_ENABLED = 515, + VAR_TLS_ADDITIONAL_PORT = 516, + VAR_LOW_RTT = 517, + VAR_LOW_RTT_PERMIL = 518, + VAR_FAST_SERVER_PERMIL = 519, + VAR_FAST_SERVER_NUM = 520, + VAR_ALLOW_NOTIFY = 521, + VAR_TLS_WIN_CERT = 522, + VAR_TCP_CONNECTION_LIMIT = 523, + VAR_FORWARD_NO_CACHE = 524, + VAR_STUB_NO_CACHE = 525, + VAR_LOG_SERVFAIL = 526, + VAR_DENY_ANY = 527, + VAR_UNKNOWN_SERVER_TIME_LIMIT = 528, + VAR_LOG_TAG_QUERYREPLY = 529, + VAR_STREAM_WAIT_SIZE = 530, + VAR_TLS_CIPHERS = 531, + VAR_TLS_CIPHERSUITES = 532, + VAR_TLS_USE_SNI = 533, + VAR_IPSET = 534, + VAR_IPSET_NAME_V4 = 535, + VAR_IPSET_NAME_V6 = 536, + VAR_TLS_SESSION_TICKET_KEYS = 537, + VAR_RPZ = 538, + VAR_TAGS = 539, + VAR_RPZ_ACTION_OVERRIDE = 540, + VAR_RPZ_CNAME_OVERRIDE = 541, + VAR_RPZ_LOG = 542, + VAR_RPZ_LOG_NAME = 543, + VAR_DYNLIB = 544, + VAR_DYNLIB_FILE = 545 }; #endif /* Tokens. */ @@ -639,90 +632,92 @@ extern int yydebug; #define VAR_SERVE_EXPIRED_TTL_RESET 470 #define VAR_SERVE_EXPIRED_REPLY_TTL 471 #define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 472 -#define VAR_FAKE_DSA 473 -#define VAR_FAKE_SHA1 474 -#define VAR_LOG_IDENTITY 475 -#define VAR_HIDE_TRUSTANCHOR 476 -#define VAR_TRUST_ANCHOR_SIGNALING 477 -#define VAR_AGGRESSIVE_NSEC 478 -#define VAR_USE_SYSTEMD 479 -#define VAR_SHM_ENABLE 480 -#define VAR_SHM_KEY 481 -#define VAR_ROOT_KEY_SENTINEL 482 -#define VAR_DNSCRYPT 483 -#define VAR_DNSCRYPT_ENABLE 484 -#define VAR_DNSCRYPT_PORT 485 -#define VAR_DNSCRYPT_PROVIDER 486 -#define VAR_DNSCRYPT_SECRET_KEY 487 -#define VAR_DNSCRYPT_PROVIDER_CERT 488 -#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 489 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 490 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 491 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 492 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 493 -#define VAR_IPSECMOD_ENABLED 494 -#define VAR_IPSECMOD_HOOK 495 -#define VAR_IPSECMOD_IGNORE_BOGUS 496 -#define VAR_IPSECMOD_MAX_TTL 497 -#define VAR_IPSECMOD_WHITELIST 498 -#define VAR_IPSECMOD_STRICT 499 -#define VAR_CACHEDB 500 -#define VAR_CACHEDB_BACKEND 501 -#define VAR_CACHEDB_SECRETSEED 502 -#define VAR_CACHEDB_REDISHOST 503 -#define VAR_CACHEDB_REDISPORT 504 -#define VAR_CACHEDB_REDISTIMEOUT 505 -#define VAR_CACHEDB_REDISEXPIRERECORDS 506 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 507 -#define VAR_FOR_UPSTREAM 508 -#define VAR_AUTH_ZONE 509 -#define VAR_ZONEFILE 510 -#define VAR_MASTER 511 -#define VAR_URL 512 -#define VAR_FOR_DOWNSTREAM 513 -#define VAR_FALLBACK_ENABLED 514 -#define VAR_TLS_ADDITIONAL_PORT 515 -#define VAR_LOW_RTT 516 -#define VAR_LOW_RTT_PERMIL 517 -#define VAR_FAST_SERVER_PERMIL 518 -#define VAR_FAST_SERVER_NUM 519 -#define VAR_ALLOW_NOTIFY 520 -#define VAR_TLS_WIN_CERT 521 -#define VAR_TCP_CONNECTION_LIMIT 522 -#define VAR_FORWARD_NO_CACHE 523 -#define VAR_STUB_NO_CACHE 524 -#define VAR_LOG_SERVFAIL 525 -#define VAR_DENY_ANY 526 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 527 -#define VAR_LOG_TAG_QUERYREPLY 528 -#define VAR_STREAM_WAIT_SIZE 529 -#define VAR_TLS_CIPHERS 530 -#define VAR_TLS_CIPHERSUITES 531 -#define VAR_TLS_USE_SNI 532 -#define VAR_IPSET 533 -#define VAR_IPSET_NAME_V4 534 -#define VAR_IPSET_NAME_V6 535 -#define VAR_TLS_SESSION_TICKET_KEYS 536 -#define VAR_RPZ 537 -#define VAR_TAGS 538 -#define VAR_RPZ_ACTION_OVERRIDE 539 -#define VAR_RPZ_CNAME_OVERRIDE 540 -#define VAR_RPZ_LOG 541 -#define VAR_RPZ_LOG_NAME 542 -#define VAR_DYNLIB 543 -#define VAR_DYNLIB_FILE 544 +#define VAR_SERVE_ORIGINAL_TTL 473 +#define VAR_FAKE_DSA 474 +#define VAR_FAKE_SHA1 475 +#define VAR_LOG_IDENTITY 476 +#define VAR_HIDE_TRUSTANCHOR 477 +#define VAR_TRUST_ANCHOR_SIGNALING 478 +#define VAR_AGGRESSIVE_NSEC 479 +#define VAR_USE_SYSTEMD 480 +#define VAR_SHM_ENABLE 481 +#define VAR_SHM_KEY 482 +#define VAR_ROOT_KEY_SENTINEL 483 +#define VAR_DNSCRYPT 484 +#define VAR_DNSCRYPT_ENABLE 485 +#define VAR_DNSCRYPT_PORT 486 +#define VAR_DNSCRYPT_PROVIDER 487 +#define VAR_DNSCRYPT_SECRET_KEY 488 +#define VAR_DNSCRYPT_PROVIDER_CERT 489 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 490 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 491 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 492 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 493 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 494 +#define VAR_IPSECMOD_ENABLED 495 +#define VAR_IPSECMOD_HOOK 496 +#define VAR_IPSECMOD_IGNORE_BOGUS 497 +#define VAR_IPSECMOD_MAX_TTL 498 +#define VAR_IPSECMOD_WHITELIST 499 +#define VAR_IPSECMOD_STRICT 500 +#define VAR_CACHEDB 501 +#define VAR_CACHEDB_BACKEND 502 +#define VAR_CACHEDB_SECRETSEED 503 +#define VAR_CACHEDB_REDISHOST 504 +#define VAR_CACHEDB_REDISPORT 505 +#define VAR_CACHEDB_REDISTIMEOUT 506 +#define VAR_CACHEDB_REDISEXPIRERECORDS 507 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 508 +#define VAR_FOR_UPSTREAM 509 +#define VAR_AUTH_ZONE 510 +#define VAR_ZONEFILE 511 +#define VAR_MASTER 512 +#define VAR_URL 513 +#define VAR_FOR_DOWNSTREAM 514 +#define VAR_FALLBACK_ENABLED 515 +#define VAR_TLS_ADDITIONAL_PORT 516 +#define VAR_LOW_RTT 517 +#define VAR_LOW_RTT_PERMIL 518 +#define VAR_FAST_SERVER_PERMIL 519 +#define VAR_FAST_SERVER_NUM 520 +#define VAR_ALLOW_NOTIFY 521 +#define VAR_TLS_WIN_CERT 522 +#define VAR_TCP_CONNECTION_LIMIT 523 +#define VAR_FORWARD_NO_CACHE 524 +#define VAR_STUB_NO_CACHE 525 +#define VAR_LOG_SERVFAIL 526 +#define VAR_DENY_ANY 527 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 528 +#define VAR_LOG_TAG_QUERYREPLY 529 +#define VAR_STREAM_WAIT_SIZE 530 +#define VAR_TLS_CIPHERS 531 +#define VAR_TLS_CIPHERSUITES 532 +#define VAR_TLS_USE_SNI 533 +#define VAR_IPSET 534 +#define VAR_IPSET_NAME_V4 535 +#define VAR_IPSET_NAME_V6 536 +#define VAR_TLS_SESSION_TICKET_KEYS 537 +#define VAR_RPZ 538 +#define VAR_TAGS 539 +#define VAR_RPZ_ACTION_OVERRIDE 540 +#define VAR_RPZ_CNAME_OVERRIDE 541 +#define VAR_RPZ_LOG 542 +#define VAR_RPZ_LOG_NAME 543 +#define VAR_DYNLIB 544 +#define VAR_DYNLIB_FILE 545 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED + union YYSTYPE { -#line 66 "./util/configparser.y" +#line 66 "./util/configparser.y" /* yacc.c:355 */ char* str; -#line 724 "util/configparser.c" - +#line 719 "util/configparser.c" /* yacc.c:355 */ }; + typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -735,7 +730,9 @@ int yyparse (void); #endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED */ +/* Copy the second part of user declarations. */ +#line 736 "util/configparser.c" /* yacc.c:358 */ #ifdef short # undef short @@ -756,13 +753,13 @@ typedef signed char yytype_int8; #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else -typedef unsigned short yytype_uint16; +typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else -typedef short yytype_int16; +typedef short int yytype_int16; #endif #ifndef YYSIZE_T @@ -774,7 +771,7 @@ typedef short yytype_int16; # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else -# define YYSIZE_T unsigned +# define YYSIZE_T unsigned int # endif #endif @@ -810,6 +807,15 @@ typedef short yytype_int16; # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) #endif +#if !defined _Noreturn \ + && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) +# if defined _MSC_VER && 1200 <= _MSC_VER +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) +# endif +#endif + /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(E) ((void) (E)) @@ -817,7 +823,7 @@ typedef short yytype_int16; # define YYUSE(E) /* empty */ #endif -#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ @@ -837,8 +843,6 @@ typedef short yytype_int16; #endif -#define YY_ASSERT(E) ((void) (0 && (E))) - #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ @@ -970,27 +974,27 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 615 +#define YYLAST 617 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 290 +#define YYNTOKENS 291 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 315 +#define YYNNTS 316 /* YYNRULES -- Number of rules. */ -#define YYNRULES 606 +#define YYNRULES 608 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 900 +#define YYNSTATES 903 +/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned + by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 544 +#define YYMAXUTOK 545 -/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ - ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex. */ + as returned by yylex, without out-of-bounds checking. */ static const yytype_uint16 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -1047,7 +1051,7 @@ static const yytype_uint16 yytranslate[] = 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289 + 285, 286, 287, 288, 289, 290 }; #if YYDEBUG @@ -1072,49 +1076,49 @@ static const yytype_uint16 yyrline[] = 253, 253, 254, 255, 255, 256, 256, 257, 257, 258, 258, 259, 259, 260, 260, 260, 261, 261, 262, 262, 263, 263, 264, 264, 265, 265, 266, 266, 267, 267, - 267, 268, 268, 268, 269, 269, 269, 270, 270, 271, - 272, 272, 273, 273, 274, 274, 275, 275, 276, 276, - 276, 277, 277, 277, 278, 278, 278, 279, 279, 280, - 280, 281, 281, 282, 284, 296, 297, 298, 298, 298, - 298, 298, 299, 299, 301, 313, 314, 315, 315, 315, - 315, 316, 316, 318, 332, 333, 334, 334, 334, 334, - 335, 335, 335, 337, 354, 355, 356, 356, 356, 356, - 357, 357, 357, 358, 361, 380, 397, 405, 415, 423, - 440, 441, 442, 442, 442, 442, 442, 443, 443, 443, - 444, 444, 446, 455, 464, 475, 484, 493, 502, 513, - 522, 534, 548, 563, 574, 591, 608, 625, 642, 657, - 672, 685, 700, 709, 718, 727, 736, 745, 754, 763, - 772, 781, 790, 799, 808, 817, 826, 839, 848, 861, - 870, 879, 888, 895, 902, 911, 918, 927, 935, 942, - 949, 957, 966, 975, 984, 998, 1007, 1016, 1025, 1034, - 1043, 1052, 1059, 1066, 1092, 1100, 1107, 1114, 1121, 1128, - 1136, 1144, 1152, 1159, 1170, 1181, 1188, 1197, 1206, 1215, - 1222, 1229, 1237, 1245, 1255, 1265, 1275, 1289, 1297, 1310, - 1321, 1329, 1342, 1351, 1360, 1369, 1379, 1389, 1397, 1410, - 1419, 1427, 1436, 1444, 1457, 1466, 1473, 1483, 1493, 1503, - 1513, 1523, 1533, 1543, 1553, 1560, 1567, 1574, 1583, 1592, - 1601, 1610, 1617, 1627, 1647, 1654, 1672, 1685, 1698, 1707, - 1716, 1725, 1734, 1744, 1754, 1765, 1774, 1783, 1792, 1801, - 1810, 1819, 1832, 1845, 1854, 1861, 1870, 1879, 1888, 1897, - 1905, 1918, 1926, 1967, 1974, 1989, 1999, 2009, 2016, 2023, - 2030, 2039, 2047, 2061, 2082, 2103, 2115, 2127, 2139, 2148, - 2169, 2179, 2188, 2196, 2204, 2217, 2230, 2245, 2260, 2269, - 2278, 2284, 2293, 2302, 2312, 2322, 2335, 2348, 2360, 2374, - 2386, 2400, 2410, 2417, 2424, 2433, 2442, 2452, 2462, 2472, - 2479, 2486, 2495, 2504, 2514, 2524, 2531, 2538, 2545, 2553, - 2563, 2573, 2583, 2593, 2632, 2642, 2650, 2658, 2673, 2682, - 2687, 2688, 2689, 2689, 2689, 2690, 2690, 2690, 2691, 2691, - 2693, 2703, 2712, 2719, 2726, 2733, 2740, 2747, 2754, 2759, - 2760, 2761, 2761, 2762, 2762, 2762, 2763, 2764, 2764, 2765, - 2765, 2766, 2766, 2767, 2768, 2769, 2770, 2771, 2772, 2774, - 2783, 2790, 2797, 2806, 2813, 2820, 2827, 2834, 2843, 2852, - 2859, 2866, 2876, 2886, 2896, 2906, 2916, 2926, 2931, 2932, - 2933, 2935, 2941, 2946, 2947, 2948, 2950, 2956, 2966, 2973, - 2982, 2990, 2995, 2996, 2998, 2998, 2998, 2999, 2999, 3000, - 3001, 3002, 3003, 3004, 3006, 3016, 3025, 3032, 3041, 3048, - 3057, 3065, 3078, 3086, 3099, 3104, 3105, 3106, 3106, 3107, - 3107, 3107, 3108, 3110, 3122, 3134, 3146, 3161, 3174, 3187, - 3198, 3203, 3204, 3205, 3205, 3207, 3222 + 268, 268, 269, 269, 269, 270, 270, 270, 271, 271, + 272, 273, 273, 274, 274, 275, 275, 276, 276, 277, + 277, 277, 278, 278, 278, 279, 279, 279, 280, 280, + 281, 281, 282, 282, 283, 285, 297, 298, 299, 299, + 299, 299, 299, 300, 300, 302, 314, 315, 316, 316, + 316, 316, 317, 317, 319, 333, 334, 335, 335, 335, + 335, 336, 336, 336, 338, 355, 356, 357, 357, 357, + 357, 358, 358, 358, 359, 362, 381, 398, 406, 416, + 424, 441, 442, 443, 443, 443, 443, 443, 444, 444, + 444, 445, 445, 447, 456, 465, 476, 485, 494, 503, + 514, 523, 535, 549, 564, 575, 592, 609, 626, 643, + 658, 673, 686, 701, 710, 719, 728, 737, 746, 755, + 764, 773, 782, 791, 800, 809, 818, 827, 840, 849, + 862, 871, 880, 889, 896, 903, 912, 919, 928, 936, + 943, 950, 958, 967, 976, 985, 999, 1008, 1017, 1026, + 1035, 1044, 1053, 1060, 1067, 1093, 1101, 1108, 1115, 1122, + 1129, 1137, 1145, 1153, 1160, 1171, 1182, 1189, 1198, 1207, + 1216, 1223, 1230, 1238, 1246, 1256, 1266, 1276, 1290, 1298, + 1311, 1322, 1330, 1343, 1352, 1361, 1370, 1380, 1390, 1398, + 1411, 1420, 1428, 1437, 1445, 1458, 1467, 1474, 1484, 1494, + 1504, 1514, 1524, 1534, 1544, 1554, 1561, 1568, 1575, 1584, + 1593, 1602, 1611, 1618, 1628, 1648, 1655, 1673, 1686, 1699, + 1708, 1717, 1726, 1735, 1745, 1755, 1766, 1775, 1784, 1793, + 1802, 1811, 1820, 1829, 1842, 1855, 1864, 1871, 1880, 1889, + 1898, 1907, 1915, 1928, 1936, 1977, 1984, 1999, 2009, 2019, + 2026, 2033, 2040, 2049, 2057, 2071, 2092, 2113, 2125, 2137, + 2149, 2158, 2179, 2189, 2198, 2206, 2214, 2227, 2240, 2255, + 2270, 2279, 2288, 2294, 2303, 2312, 2322, 2332, 2345, 2358, + 2370, 2384, 2396, 2410, 2420, 2427, 2434, 2443, 2452, 2462, + 2472, 2482, 2489, 2496, 2505, 2514, 2524, 2534, 2541, 2548, + 2555, 2563, 2573, 2583, 2593, 2603, 2642, 2652, 2660, 2668, + 2683, 2692, 2697, 2698, 2699, 2699, 2699, 2700, 2700, 2700, + 2701, 2701, 2703, 2713, 2722, 2729, 2736, 2743, 2750, 2757, + 2764, 2769, 2770, 2771, 2771, 2772, 2772, 2772, 2773, 2774, + 2774, 2775, 2775, 2776, 2776, 2777, 2778, 2779, 2780, 2781, + 2782, 2784, 2793, 2800, 2807, 2816, 2823, 2830, 2837, 2844, + 2853, 2862, 2869, 2876, 2886, 2896, 2906, 2916, 2926, 2936, + 2941, 2942, 2943, 2945, 2951, 2956, 2957, 2958, 2960, 2966, + 2976, 2983, 2992, 3000, 3005, 3006, 3008, 3008, 3008, 3009, + 3009, 3010, 3011, 3012, 3013, 3014, 3016, 3026, 3035, 3042, + 3051, 3058, 3067, 3075, 3088, 3096, 3109, 3114, 3115, 3116, + 3116, 3117, 3117, 3117, 3118, 3120, 3132, 3144, 3156, 3171, + 3184, 3197, 3208, 3213, 3214, 3215, 3215, 3217, 3232 }; #endif @@ -1202,8 +1206,9 @@ static const char *const yytname[] = "VAR_ACCESS_CONTROL_TAG_DATA", "VAR_VIEW", "VAR_ACCESS_CONTROL_VIEW", "VAR_VIEW_FIRST", "VAR_SERVE_EXPIRED", "VAR_SERVE_EXPIRED_TTL", "VAR_SERVE_EXPIRED_TTL_RESET", "VAR_SERVE_EXPIRED_REPLY_TTL", - "VAR_SERVE_EXPIRED_CLIENT_TIMEOUT", "VAR_FAKE_DSA", "VAR_FAKE_SHA1", - "VAR_LOG_IDENTITY", "VAR_HIDE_TRUSTANCHOR", "VAR_TRUST_ANCHOR_SIGNALING", + "VAR_SERVE_EXPIRED_CLIENT_TIMEOUT", "VAR_SERVE_ORIGINAL_TTL", + "VAR_FAKE_DSA", "VAR_FAKE_SHA1", "VAR_LOG_IDENTITY", + "VAR_HIDE_TRUSTANCHOR", "VAR_TRUST_ANCHOR_SIGNALING", "VAR_AGGRESSIVE_NSEC", "VAR_USE_SYSTEMD", "VAR_SHM_ENABLE", "VAR_SHM_KEY", "VAR_ROOT_KEY_SENTINEL", "VAR_DNSCRYPT", "VAR_DNSCRYPT_ENABLE", "VAR_DNSCRYPT_PORT", "VAR_DNSCRYPT_PROVIDER", @@ -1296,8 +1301,8 @@ static const char *const yytname[] = "server_aggressive_nsec", "server_ignore_cd_flag", "server_serve_expired", "server_serve_expired_ttl", "server_serve_expired_ttl_reset", "server_serve_expired_reply_ttl", - "server_serve_expired_client_timeout", "server_fake_dsa", - "server_fake_sha1", "server_val_log_level", + "server_serve_expired_client_timeout", "server_serve_original_ttl", + "server_fake_dsa", "server_fake_sha1", "server_val_log_level", "server_val_nsec3_keysize_iterations", "server_add_holddown", "server_del_holddown", "server_keep_missing", "server_permit_small_holddown", "server_key_cache_size", @@ -1391,14 +1396,15 @@ static const yytype_uint16 yytoknum[] = 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544 + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545 }; # endif -#define YYPACT_NINF -280 +#define YYPACT_NINF -281 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-280))) + (!!((Yystate) == (-281))) #define YYTABLE_NINF -1 @@ -1409,11 +1415,11 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -280, 0, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - 277, -42, -37, -41, -7, -43, -30, -136, -106, -279, - -177, -172, -271, 2, 3, 4, 25, 26, 28, 31, + -281, 0, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + 278, -42, -37, -41, -7, -43, -30, -136, -106, -280, + -178, -173, -272, 2, 3, 4, 25, 26, 28, 31, 32, 33, 34, 36, 37, 38, 39, 40, 52, 53, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 87, 88, 91, 93, 94, @@ -1427,78 +1433,79 @@ static const yytype_int16 yypact[] = 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 201, 205, 206, 207, 208, 209, 210, 211, 213, 214, - 215, 216, 219, 220, 222, 223, 224, 225, 226, 227, - 228, 229, 237, 243, 245, 246, 247, 249, 250, 251, + 201, 202, 206, 207, 208, 209, 210, 211, 212, 214, + 215, 216, 217, 220, 221, 223, 224, 225, 226, 227, + 228, 229, 230, 238, 244, 246, 247, 248, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 269, 270, 271, 273, - 274, 275, 276, 311, 312, 313, 314, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, 318, 319, 320, 362, 363, 364, 365, -280, - -280, -280, -280, -280, -280, -280, -280, 366, 367, 368, - 369, 370, 374, -280, -280, -280, -280, -280, -280, -280, - 378, 379, 404, 405, 406, 408, 419, -280, -280, -280, - -280, -280, -280, -280, -280, 420, 421, 422, 423, 424, - 425, 426, 427, -280, -280, -280, -280, -280, -280, -280, - -280, -280, 428, 429, 430, 431, 432, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, 433, 434, - 435, 436, 437, 477, 479, 495, -280, -280, -280, -280, - -280, -280, -280, -280, -280, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 512, 513, 514, 515, 516, - 517, 518, 520, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, 521, -280, -280, 522, -280, -280, 523, 524, - 525, 526, 529, 532, 535, 536, 545, 546, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, 547, - 549, 550, 551, 552, 553, -280, -280, -280, -280, -280, - -280, -280, 554, 555, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, 556, 557, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, 558, 559, 560, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, 561, 562, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, 563, 564, - 565, 566, 567, 568, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, 569, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, 570, -280, -280, 571, 572, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, 573, - 574, 575, -280, -280, -280, -280, -280, -280, -280, -280 + 262, 263, 264, 265, 266, 267, 268, 270, 271, 272, + 274, 275, 276, 277, 312, 313, 314, 315, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, 319, 320, 321, 363, 364, 365, + 366, -281, -281, -281, -281, -281, -281, -281, -281, 367, + 368, 369, 370, 371, 375, -281, -281, -281, -281, -281, + -281, -281, 379, 380, 405, 406, 407, 409, 420, -281, + -281, -281, -281, -281, -281, -281, -281, 421, 422, 423, + 424, 425, 426, 427, 428, -281, -281, -281, -281, -281, + -281, -281, -281, -281, 429, 430, 431, 432, 433, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + 434, 435, 436, 437, 438, 478, 480, 497, -281, -281, + -281, -281, -281, -281, -281, -281, -281, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 514, 515, 516, + 517, 518, 519, 520, 522, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, 523, -281, -281, 524, -281, -281, + 525, 526, 527, 528, 531, 534, 537, 538, 547, 548, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, 549, 551, 552, 553, 554, 555, -281, -281, -281, + -281, -281, -281, -281, 556, 557, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, 558, + 559, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, 560, 561, 562, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, 563, + 564, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + 565, 566, 567, 568, 569, 570, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, 571, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, 572, -281, + -281, 573, 574, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, 575, 576, 577, -281, -281, -281, -281, -281, + -281, -281, -281 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1506,9 +1513,9 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 17, 214, 224, 489, 547, 508, 233, - 561, 584, 243, 600, 259, 552, 3, 19, 216, 226, - 235, 245, 261, 491, 510, 549, 554, 563, 586, 602, + 2, 0, 1, 17, 215, 225, 491, 549, 510, 234, + 563, 586, 244, 602, 260, 554, 3, 19, 217, 227, + 236, 246, 262, 493, 512, 551, 556, 565, 588, 604, 4, 5, 6, 10, 14, 15, 8, 9, 7, 16, 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1529,147 +1536,148 @@ static const yytype_uint16 yydefact[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 18, 20, 21, - 84, 87, 96, 184, 185, 22, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 35, 75, 23, 88, - 89, 46, 68, 83, 24, 25, 28, 29, 26, 27, - 30, 31, 32, 33, 34, 119, 196, 120, 122, 123, - 124, 198, 203, 199, 210, 211, 212, 213, 180, 85, - 74, 100, 117, 118, 208, 205, 121, 36, 37, 38, - 39, 40, 76, 90, 91, 106, 62, 72, 63, 188, - 189, 101, 56, 57, 187, 58, 59, 110, 114, 128, - 137, 163, 140, 209, 111, 69, 41, 42, 43, 98, - 129, 130, 131, 44, 45, 47, 48, 50, 51, 49, - 135, 52, 53, 54, 60, 79, 115, 93, 136, 86, - 159, 94, 95, 112, 113, 206, 99, 55, 77, 80, - 61, 64, 102, 103, 78, 160, 104, 65, 66, 67, - 197, 116, 173, 174, 175, 176, 177, 178, 186, 105, - 73, 107, 108, 109, 161, 70, 71, 92, 81, 82, - 97, 125, 126, 207, 127, 132, 133, 134, 164, 165, - 167, 169, 170, 168, 171, 181, 138, 139, 143, 144, - 141, 142, 145, 146, 148, 147, 200, 202, 201, 162, - 172, 190, 192, 191, 193, 194, 195, 166, 179, 182, - 183, 204, 0, 0, 0, 0, 0, 0, 0, 215, - 217, 218, 219, 221, 222, 223, 220, 0, 0, 0, - 0, 0, 0, 225, 227, 228, 229, 230, 231, 232, - 0, 0, 0, 0, 0, 0, 0, 234, 236, 237, - 240, 241, 238, 242, 239, 0, 0, 0, 0, 0, - 0, 0, 0, 244, 246, 247, 248, 249, 253, 250, - 251, 252, 0, 0, 0, 0, 0, 264, 268, 269, - 270, 271, 260, 262, 263, 265, 266, 267, 0, 0, - 0, 0, 0, 0, 0, 0, 490, 492, 494, 493, - 499, 495, 496, 497, 498, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 18, 20, + 21, 84, 87, 96, 185, 186, 22, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 35, 75, 23, + 88, 89, 46, 68, 83, 24, 25, 28, 29, 26, + 27, 30, 31, 32, 33, 34, 119, 197, 120, 122, + 123, 124, 199, 204, 200, 211, 212, 213, 214, 181, + 85, 74, 100, 117, 118, 209, 206, 121, 36, 37, + 38, 39, 40, 76, 90, 91, 106, 62, 72, 63, + 189, 190, 101, 56, 57, 188, 58, 59, 110, 114, + 128, 137, 163, 140, 210, 111, 69, 41, 42, 43, + 98, 129, 130, 131, 44, 45, 47, 48, 50, 51, + 49, 135, 52, 53, 54, 60, 79, 115, 93, 136, + 86, 159, 94, 95, 112, 113, 207, 99, 55, 77, + 80, 61, 64, 102, 103, 78, 160, 104, 65, 66, + 67, 198, 116, 173, 174, 175, 176, 177, 178, 179, + 187, 105, 73, 107, 108, 109, 161, 70, 71, 92, + 81, 82, 97, 125, 126, 208, 127, 132, 133, 134, + 164, 165, 167, 169, 170, 168, 171, 182, 138, 139, + 143, 144, 141, 142, 145, 146, 148, 147, 201, 203, + 202, 162, 172, 191, 193, 192, 194, 195, 196, 166, + 180, 183, 184, 205, 0, 0, 0, 0, 0, 0, + 0, 216, 218, 219, 220, 222, 223, 224, 221, 0, + 0, 0, 0, 0, 0, 226, 228, 229, 230, 231, + 232, 233, 0, 0, 0, 0, 0, 0, 0, 235, + 237, 238, 241, 242, 239, 243, 240, 0, 0, 0, + 0, 0, 0, 0, 0, 245, 247, 248, 249, 250, + 254, 251, 252, 253, 0, 0, 0, 0, 0, 265, + 269, 270, 271, 272, 261, 263, 264, 266, 267, 268, + 0, 0, 0, 0, 0, 0, 0, 0, 492, 494, + 496, 495, 501, 497, 498, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 509, 511, 512, 513, 514, 515, 516, + 0, 0, 0, 0, 0, 511, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, - 527, 528, 0, 548, 550, 0, 553, 555, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 562, 564, - 565, 566, 568, 569, 567, 570, 571, 572, 573, 0, - 0, 0, 0, 0, 0, 585, 587, 588, 589, 590, - 591, 592, 0, 0, 601, 603, 604, 273, 272, 279, - 292, 290, 302, 298, 299, 303, 300, 301, 304, 305, - 306, 307, 308, 331, 332, 333, 334, 335, 360, 361, - 362, 367, 368, 295, 369, 370, 373, 371, 372, 375, - 376, 377, 391, 346, 347, 349, 350, 378, 394, 340, - 342, 395, 401, 402, 403, 296, 359, 419, 420, 341, - 414, 324, 291, 336, 392, 398, 379, 0, 0, 423, - 297, 274, 323, 383, 275, 293, 294, 337, 338, 421, - 381, 385, 386, 276, 424, 363, 390, 325, 345, 396, - 397, 400, 413, 339, 417, 415, 416, 351, 358, 387, - 388, 352, 353, 380, 405, 326, 327, 330, 309, 311, - 312, 313, 314, 315, 425, 426, 428, 364, 365, 366, - 374, 429, 430, 431, 0, 0, 0, 382, 354, 356, - 557, 440, 444, 442, 441, 445, 443, 0, 0, 448, - 449, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 384, 399, 418, 453, 454, 355, 432, 0, 0, - 0, 0, 0, 0, 406, 407, 408, 409, 410, 411, - 412, 558, 348, 343, 404, 322, 277, 278, 344, 455, - 457, 456, 458, 459, 460, 310, 317, 450, 452, 451, - 316, 0, 329, 389, 427, 328, 357, 318, 319, 321, - 320, 461, 462, 463, 467, 466, 464, 465, 468, 469, - 470, 471, 473, 472, 482, 0, 486, 487, 0, 0, - 488, 474, 480, 475, 476, 477, 479, 481, 478, 254, - 255, 256, 257, 258, 500, 502, 501, 504, 505, 506, - 507, 503, 529, 530, 531, 532, 533, 534, 535, 536, - 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, - 551, 556, 574, 575, 576, 579, 577, 578, 580, 581, - 582, 583, 593, 594, 595, 596, 597, 598, 605, 606, - 393, 422, 439, 559, 560, 446, 447, 433, 434, 0, - 0, 0, 438, 599, 483, 484, 485, 437, 435, 436 + 527, 528, 529, 530, 0, 550, 552, 0, 555, 557, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 564, 566, 567, 568, 570, 571, 569, 572, 573, 574, + 575, 0, 0, 0, 0, 0, 0, 587, 589, 590, + 591, 592, 593, 594, 0, 0, 603, 605, 606, 274, + 273, 280, 293, 291, 303, 299, 300, 304, 301, 302, + 305, 306, 307, 308, 309, 332, 333, 334, 335, 336, + 361, 362, 363, 368, 369, 296, 370, 371, 374, 372, + 373, 376, 377, 378, 392, 347, 348, 350, 351, 379, + 395, 341, 343, 396, 402, 403, 404, 297, 360, 421, + 422, 342, 416, 325, 292, 337, 393, 399, 380, 0, + 0, 425, 298, 275, 324, 384, 276, 294, 295, 338, + 339, 423, 382, 386, 387, 277, 426, 364, 391, 326, + 346, 397, 398, 401, 415, 340, 419, 417, 418, 352, + 359, 388, 389, 353, 354, 381, 406, 327, 328, 331, + 310, 312, 313, 314, 315, 316, 427, 428, 430, 365, + 366, 367, 375, 431, 432, 433, 0, 0, 0, 383, + 355, 357, 559, 442, 446, 444, 443, 447, 445, 0, + 0, 450, 451, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 385, 400, 420, 455, 456, 356, 434, + 0, 0, 0, 0, 0, 0, 407, 408, 409, 410, + 411, 412, 413, 414, 560, 349, 344, 405, 323, 278, + 279, 345, 457, 459, 458, 460, 461, 462, 311, 318, + 452, 454, 453, 317, 0, 330, 390, 429, 329, 358, + 319, 320, 322, 321, 463, 464, 465, 469, 468, 466, + 467, 470, 471, 472, 473, 475, 474, 484, 0, 488, + 489, 0, 0, 490, 476, 482, 477, 478, 479, 481, + 483, 480, 255, 256, 257, 258, 259, 502, 504, 503, + 506, 507, 508, 509, 505, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 547, 548, 553, 558, 576, 577, 578, 581, 579, + 580, 582, 583, 584, 585, 595, 596, 597, 598, 599, + 600, 607, 608, 394, 424, 441, 561, 562, 448, 449, + 435, 436, 0, 0, 0, 440, 601, 485, 486, 487, + 439, 437, 438 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, 576, 577, - 578, 579, 580, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280 + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, 578, + 579, 580, 581, 582, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 16, 17, 30, 237, 18, 31, 439, 19, - 32, 453, 20, 33, 467, 21, 34, 483, 497, 498, - 499, 500, 501, 22, 35, 502, 238, 239, 240, 241, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 426, 440, 441, 442, 443, 444, - 445, 446, 454, 455, 456, 457, 458, 459, 484, 485, - 486, 487, 488, 489, 490, 491, 468, 469, 470, 471, - 472, 473, 474, 23, 36, 516, 517, 518, 519, 520, - 521, 522, 523, 524, 24, 37, 543, 544, 545, 546, - 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, - 557, 558, 559, 560, 561, 25, 38, 563, 564, 26, - 39, 566, 567, 427, 428, 429, 430, 27, 40, 578, - 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, - 28, 41, 595, 596, 597, 598, 599, 600, 601, 431, - 29, 42, 604, 605, 606 + -1, 1, 16, 17, 30, 238, 18, 31, 441, 19, + 32, 455, 20, 33, 469, 21, 34, 485, 499, 500, + 501, 502, 503, 22, 35, 504, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 442, 443, 444, 445, + 446, 447, 448, 456, 457, 458, 459, 460, 461, 486, + 487, 488, 489, 490, 491, 492, 493, 470, 471, 472, + 473, 474, 475, 476, 23, 36, 518, 519, 520, 521, + 522, 523, 524, 525, 526, 24, 37, 545, 546, 547, + 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 25, 38, 565, 566, + 26, 39, 568, 569, 429, 430, 431, 432, 27, 40, + 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 28, 41, 597, 598, 599, 600, 601, 602, 603, + 433, 29, 42, 606, 607, 608 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1677,80 +1685,80 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint16 yytable[] = { - 2, 475, 432, 460, 433, 434, 562, 447, 602, 603, - 565, 3, 607, 608, 609, 448, 449, 525, 526, 527, - 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, - 538, 539, 540, 541, 542, 610, 611, 475, 612, 461, - 462, 613, 614, 615, 616, 4, 617, 618, 619, 620, - 621, 5, 568, 569, 570, 571, 572, 573, 574, 575, - 576, 577, 622, 623, 463, 435, 508, 509, 510, 511, - 512, 513, 514, 515, 589, 590, 591, 592, 593, 594, - 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, - 634, 635, 636, 637, 638, 6, 436, 639, 640, 437, - 450, 641, 451, 642, 643, 644, 645, 646, 647, 648, - 649, 7, 650, 651, 652, 653, 654, 655, 656, 657, - 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, - 668, 464, 465, 669, 670, 671, 672, 673, 674, 675, - 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, - 686, 687, 8, 688, 689, 690, 691, 692, 693, 694, - 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, - 705, 466, 706, 707, 708, 709, 710, 711, 712, 713, - 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, - 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, - 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, - 9, 744, 477, 478, 479, 745, 746, 747, 748, 749, - 750, 751, 482, 752, 753, 754, 755, 438, 10, 756, - 757, 452, 758, 759, 760, 761, 762, 763, 764, 765, - 492, 493, 494, 495, 496, 11, 476, 766, 477, 478, - 479, 480, 481, 767, 12, 768, 769, 770, 482, 771, - 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, - 782, 783, 784, 785, 786, 787, 788, 789, 13, 790, - 791, 792, 14, 793, 794, 795, 796, 0, 15, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 797, 798, 799, 800, 75, 76, 77, 801, 802, - 803, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, - 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 804, 805, 806, 807, 808, 809, 810, 811, - 812, 119, 120, 121, 813, 122, 123, 124, 814, 815, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 816, 817, 818, 149, 819, 150, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 820, - 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, - 831, 832, 833, 834, 835, 836, 837, 838, 160, 161, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 839, 199, 840, - 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 210, 211, 212, 213, 214, 841, 842, 843, 844, 845, - 846, 847, 848, 849, 850, 851, 215, 216, 217, 218, - 219, 220, 852, 853, 854, 855, 856, 857, 858, 221, - 859, 860, 861, 862, 863, 864, 865, 222, 223, 866, - 224, 225, 867, 226, 227, 868, 869, 228, 229, 230, - 231, 232, 233, 234, 235, 870, 871, 872, 236, 873, - 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, - 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, - 894, 895, 896, 897, 898, 899, 0, 0, 0, 0, + 2, 477, 434, 462, 435, 436, 564, 449, 604, 605, + 567, 3, 609, 610, 611, 450, 451, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 612, 613, 477, 614, 463, + 464, 615, 616, 617, 618, 4, 619, 620, 621, 622, + 623, 5, 570, 571, 572, 573, 574, 575, 576, 577, + 578, 579, 624, 625, 465, 437, 510, 511, 512, 513, + 514, 515, 516, 517, 591, 592, 593, 594, 595, 596, + 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 6, 438, 641, 642, 439, + 452, 643, 453, 644, 645, 646, 647, 648, 649, 650, + 651, 7, 652, 653, 654, 655, 656, 657, 658, 659, + 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, + 670, 466, 467, 671, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 8, 690, 691, 692, 693, 694, 695, 696, + 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 468, 708, 709, 710, 711, 712, 713, 714, 715, + 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, + 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, + 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 9, 746, 747, 479, 480, 481, 748, 749, 750, 751, + 752, 753, 754, 484, 755, 756, 757, 758, 440, 10, + 759, 760, 454, 761, 762, 763, 764, 765, 766, 767, + 768, 494, 495, 496, 497, 498, 11, 478, 769, 479, + 480, 481, 482, 483, 770, 12, 771, 772, 773, 484, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, + 784, 785, 786, 787, 788, 789, 790, 791, 792, 13, + 793, 794, 795, 14, 796, 797, 798, 799, 0, 15, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 800, 801, 802, 803, 75, 76, 77, 804, + 805, 806, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 807, 808, 809, 810, 811, 812, 813, + 814, 815, 119, 120, 121, 816, 122, 123, 124, 817, + 818, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 819, 820, 821, 149, 822, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 838, 839, 840, 841, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 842, 199, + 843, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 844, 845, 846, + 847, 848, 849, 850, 851, 852, 853, 854, 216, 217, + 218, 219, 220, 221, 855, 856, 857, 858, 859, 860, + 861, 222, 862, 863, 864, 865, 866, 867, 868, 223, + 224, 869, 225, 226, 870, 227, 228, 871, 872, 229, + 230, 231, 232, 233, 234, 235, 236, 873, 874, 875, + 237, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, + 895, 896, 897, 898, 899, 900, 901, 902, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 503, 504, 505, 506, 507 + 0, 0, 0, 505, 506, 507, 508, 509 }; static const yytype_int16 yycheck[] = { - 0, 44, 44, 44, 46, 47, 112, 44, 279, 280, - 289, 11, 10, 10, 10, 52, 53, 153, 154, 155, + 0, 44, 44, 44, 46, 47, 112, 44, 280, 281, + 290, 11, 10, 10, 10, 52, 53, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 10, 10, 44, 10, 80, 81, 10, 10, 10, 10, 45, 10, 10, 10, 10, - 10, 51, 229, 230, 231, 232, 233, 234, 235, 236, - 237, 238, 10, 10, 105, 107, 96, 97, 98, 99, - 100, 101, 102, 103, 246, 247, 248, 249, 250, 251, + 10, 51, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 10, 10, 105, 107, 96, 97, 98, 99, + 100, 101, 102, 103, 247, 248, 249, 250, 251, 252, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 95, 138, 10, 10, 141, 137, 10, 139, 10, 10, 10, 10, 10, 10, 10, @@ -1764,58 +1772,58 @@ static const yytype_int16 yycheck[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 210, 10, 255, 256, 257, 10, 10, 10, 10, 10, - 10, 10, 265, 10, 10, 10, 10, 269, 228, 10, - 10, 268, 10, 10, 10, 10, 10, 10, 10, 10, - 283, 284, 285, 286, 287, 245, 253, 10, 255, 256, - 257, 258, 259, 10, 254, 10, 10, 10, 265, 10, + 210, 10, 10, 256, 257, 258, 10, 10, 10, 10, + 10, 10, 10, 266, 10, 10, 10, 10, 270, 229, + 10, 10, 269, 10, 10, 10, 10, 10, 10, 10, + 10, 284, 285, 286, 287, 288, 246, 254, 10, 256, + 257, 258, 259, 260, 10, 255, 10, 10, 10, 266, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 278, 10, - 10, 10, 282, 10, 10, 10, 10, -1, 288, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 10, 10, 10, 10, 48, 49, 50, 10, 10, - 10, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 104, 105, 106, 10, 108, 109, 110, 10, 10, - 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 134, 135, 136, 10, 10, 10, 140, 10, 142, - 143, 144, 145, 146, 147, 148, 149, 150, 151, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 279, + 10, 10, 10, 283, 10, 10, 10, 10, -1, 289, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 10, 10, 10, 10, 48, 49, 50, 10, + 10, 10, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 104, 105, 106, 10, 108, 109, 110, 10, + 10, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 10, 10, 10, 140, 10, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 171, 172, - 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 208, 209, 10, 211, 10, - 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 239, 240, 241, 242, - 243, 244, 10, 10, 10, 10, 10, 10, 10, 252, - 10, 10, 10, 10, 10, 10, 10, 260, 261, 10, - 263, 264, 10, 266, 267, 10, 10, 270, 271, 272, - 273, 274, 275, 276, 277, 10, 10, 10, 281, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 171, + 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 10, 211, + 10, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 240, 241, + 242, 243, 244, 245, 10, 10, 10, 10, 10, 10, + 10, 253, 10, 10, 10, 10, 10, 10, 10, 261, + 262, 10, 264, 265, 10, 267, 268, 10, 10, 271, + 272, 273, 274, 275, 276, 277, 278, 10, 10, 10, + 282, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, -1, -1, -1, -1, + 10, 10, 10, 10, 10, 10, 10, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 35, 35, 35, 35, 35 + -1, -1, -1, 35, 35, 35, 35, 35 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 291, 0, 11, 45, 51, 95, 111, 152, 210, - 228, 245, 254, 278, 282, 288, 292, 293, 296, 299, - 302, 305, 313, 533, 544, 565, 569, 577, 590, 600, - 294, 297, 300, 303, 306, 314, 534, 545, 566, 570, - 578, 591, 601, 12, 13, 14, 15, 16, 17, 18, + 0, 292, 0, 11, 45, 51, 95, 111, 152, 210, + 229, 246, 255, 279, 283, 289, 293, 294, 297, 300, + 303, 306, 314, 535, 546, 567, 571, 579, 592, 602, + 295, 298, 301, 304, 307, 315, 536, 547, 568, 572, + 580, 593, 603, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 48, 49, 50, 54, 55, @@ -1832,9 +1840,9 @@ static const yytype_uint16 yystos[] = 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 211, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 239, 240, 241, 242, 243, - 244, 252, 260, 261, 263, 264, 266, 267, 270, 271, - 272, 273, 274, 275, 276, 277, 281, 295, 316, 317, + 223, 224, 225, 226, 227, 228, 240, 241, 242, 243, + 244, 245, 253, 261, 262, 264, 265, 267, 268, 271, + 272, 273, 274, 275, 276, 277, 278, 282, 296, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, @@ -1853,25 +1861,25 @@ static const yytype_uint16 yystos[] = 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 498, 499, 500, 501, 502, 503, 504, 573, 574, 575, - 576, 599, 44, 46, 47, 107, 138, 141, 269, 298, - 505, 506, 507, 508, 509, 510, 511, 44, 52, 53, - 137, 139, 268, 301, 512, 513, 514, 515, 516, 517, - 44, 80, 81, 105, 172, 173, 212, 304, 526, 527, - 528, 529, 530, 531, 532, 44, 253, 255, 256, 257, - 258, 259, 265, 307, 518, 519, 520, 521, 522, 523, - 524, 525, 283, 284, 285, 286, 287, 308, 309, 310, - 311, 312, 315, 518, 519, 520, 521, 522, 96, 97, - 98, 99, 100, 101, 102, 103, 535, 536, 537, 538, - 539, 540, 541, 542, 543, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 546, 547, 548, 549, 550, 551, 552, + 498, 499, 500, 501, 502, 503, 504, 505, 506, 575, + 576, 577, 578, 601, 44, 46, 47, 107, 138, 141, + 270, 299, 507, 508, 509, 510, 511, 512, 513, 44, + 52, 53, 137, 139, 269, 302, 514, 515, 516, 517, + 518, 519, 44, 80, 81, 105, 172, 173, 212, 305, + 528, 529, 530, 531, 532, 533, 534, 44, 254, 256, + 257, 258, 259, 260, 266, 308, 520, 521, 522, 523, + 524, 525, 526, 527, 284, 285, 286, 287, 288, 309, + 310, 311, 312, 313, 316, 520, 521, 522, 523, 524, + 96, 97, 98, 99, 100, 101, 102, 103, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, - 563, 564, 112, 567, 568, 289, 571, 572, 229, 230, - 231, 232, 233, 234, 235, 236, 237, 238, 579, 580, - 581, 582, 583, 584, 585, 586, 587, 588, 589, 246, - 247, 248, 249, 250, 251, 592, 593, 594, 595, 596, - 597, 598, 279, 280, 602, 603, 604, 10, 10, 10, + 563, 564, 565, 566, 112, 569, 570, 290, 573, 574, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, + 591, 247, 248, 249, 250, 251, 252, 594, 595, 596, + 597, 598, 599, 600, 280, 281, 604, 605, 606, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1900,40 +1908,41 @@ static const yytype_uint16 yystos[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 290, 291, 291, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 293, 294, 294, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 296, 297, 297, 298, 298, 298, - 298, 298, 298, 298, 299, 300, 300, 301, 301, 301, - 301, 301, 301, 302, 303, 303, 304, 304, 304, 304, - 304, 304, 304, 305, 306, 306, 307, 307, 307, 307, - 307, 307, 307, 307, 308, 309, 310, 311, 312, 313, - 314, 314, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 0, 291, 292, 292, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 294, 295, 295, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 297, 298, 298, 299, 299, + 299, 299, 299, 299, 299, 300, 301, 301, 302, 302, + 302, 302, 302, 302, 303, 304, 304, 305, 305, 305, + 305, 305, 305, 305, 306, 307, 307, 308, 308, 308, + 308, 308, 308, 308, 308, 309, 310, 311, 312, 313, + 314, 315, 315, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, @@ -1955,18 +1964,18 @@ static const yytype_uint16 yyr1[] = 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, - 534, 534, 535, 535, 535, 535, 535, 535, 535, 535, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 545, 546, 546, 546, 546, 546, 546, 546, 546, 546, - 546, 546, 546, 546, 546, 546, 546, 546, 546, 547, + 534, 535, 536, 536, 537, 537, 537, 537, 537, 537, + 537, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 547, 547, 548, 548, 548, 548, 548, 548, 548, + 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, - 558, 559, 560, 561, 562, 563, 564, 565, 566, 566, - 567, 568, 569, 570, 570, 571, 572, 573, 574, 575, - 576, 577, 578, 578, 579, 579, 579, 579, 579, 579, - 579, 579, 579, 579, 580, 581, 582, 583, 584, 585, - 586, 587, 588, 589, 590, 591, 591, 592, 592, 592, - 592, 592, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 601, 602, 602, 603, 604 + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, + 568, 568, 569, 570, 571, 572, 572, 573, 574, 575, + 576, 577, 578, 579, 580, 580, 581, 581, 581, 581, + 581, 581, 581, 581, 581, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 592, 593, 593, 594, + 594, 594, 594, 594, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 603, 604, 604, 605, 606 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1993,46 +2002,46 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, - 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, - 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, + 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 3, 3, 4, 4, 4, + 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 3, 3, 3, 2, 2, + 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 3, 3, 4, 4, 4, 3, 3, - 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 3, 3, 3, 2, 2, 2, 1, - 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, - 1, 2, 1, 2, 0, 1, 2, 2, 2, 3, - 3, 1, 2, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, - 1, 2, 0, 1, 1, 2, 2 + 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, + 2, 0, 1, 2, 1, 2, 0, 1, 2, 2, + 2, 3, 3, 1, 2, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, + 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, + 2, 3, 1, 2, 0, 1, 1, 2, 2 }; @@ -2048,22 +2057,22 @@ static const yytype_uint8 yyr2[] = #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ - do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ - while (0) +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (0) /* Error token number */ #define YYTERROR 1 @@ -2103,37 +2112,37 @@ do { \ } while (0) -/*-----------------------------------. -| Print this symbol's value on YYO. | -`-----------------------------------*/ +/*----------------------------------------. +| Print this symbol's value on YYOUTPUT. | +`----------------------------------------*/ static void -yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) { - FILE *yyoutput = yyo; - YYUSE (yyoutput); + FILE *yyo = yyoutput; + YYUSE (yyo); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) - YYPRINT (yyo, yytoknum[yytype], *yyvaluep); + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # endif YYUSE (yytype); } -/*---------------------------. -| Print this symbol on YYO. | -`---------------------------*/ +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ static void -yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) { - YYFPRINTF (yyo, "%s %s (", + YYFPRINTF (yyoutput, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); - yy_symbol_value_print (yyo, yytype, yyvaluep); - YYFPRINTF (yyo, ")"); + yy_symbol_value_print (yyoutput, yytype, yyvaluep); + YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. @@ -2167,7 +2176,7 @@ do { \ static void yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) { - unsigned long yylno = yyrline[yyrule]; + unsigned long int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", @@ -2178,7 +2187,7 @@ yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yystos[yyssp[yyi + 1 - yynrhs]], - &yyvsp[(yyi + 1) - (yynrhs)] + &(yyvsp[(yyi + 1) - (yynrhs)]) ); YYFPRINTF (stderr, "\n"); } @@ -2282,10 +2291,7 @@ yytnamerr (char *yyres, const char *yystr) case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; - else - goto append; - - append: + /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; @@ -2303,7 +2309,7 @@ yytnamerr (char *yyres, const char *yystr) if (! yyres) return yystrlen (yystr); - return (YYSIZE_T) (yystpcpy (yyres, yystr) - yyres); + return yystpcpy (yyres, yystr) - yyres; } # endif @@ -2381,10 +2387,10 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yyarg[yycount++] = yytname[yyx]; { YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); - if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) - yysize = yysize1; - else + if (! (yysize <= yysize1 + && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; + yysize = yysize1; } } } @@ -2396,7 +2402,6 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, case N: \ yyformat = S; \ break - default: /* Avoid compiler warnings. */ YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); @@ -2408,10 +2413,9 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, { YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) - yysize = yysize1; - else + if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; + yysize = yysize1; } if (*yymsg_alloc < yysize) @@ -2537,33 +2541,23 @@ yyparse (void) yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; - /*------------------------------------------------------------. -| yynewstate -- push a new state, which is found in yystate. | +| yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ -yynewstate: + yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; - -/*--------------------------------------------------------------------. -| yynewstate -- set current state (the top of the stack) to yystate. | -`--------------------------------------------------------------------*/ -yysetstate: - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - YY_ASSERT (0 <= yystate && yystate < YYNSTATES); - *yyssp = (yytype_int16) yystate; + yysetstate: + *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) -#if !defined yyoverflow && !defined YYSTACK_RELOCATE - goto yyexhaustedlab; -#else { /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1); + YYSIZE_T yysize = yyssp - yyss + 1; -# if defined yyoverflow +#ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into @@ -2579,10 +2573,14 @@ yysetstate: &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); + yyss = yyss1; yyvs = yyvs1; } -# else /* defined YYSTACK_RELOCATE */ +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; @@ -2598,33 +2596,35 @@ yysetstate: goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); -# undef YYSTACK_RELOCATE +# undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif +#endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long) yystacksize)); + (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } -#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); if (yystate == YYFINAL) YYACCEPT; goto yybackup; - /*-----------. | yybackup. | `-----------*/ yybackup: + /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ @@ -2682,6 +2682,7 @@ yybackup: YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END + goto yynewstate; @@ -2696,7 +2697,7 @@ yydefault: /*-----------------------------. -| yyreduce -- do a reduction. | +| yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ @@ -2716,16 +2717,16 @@ yyreduce: YY_REDUCE_PRINT (yyn); switch (yyn) { - case 17: -#line 191 "./util/configparser.y" + case 17: +#line 191 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(server:)\n")); } -#line 2725 "util/configparser.c" +#line 2726 "util/configparser.c" /* yacc.c:1646 */ break; - case 214: -#line 285 "./util/configparser.y" + case 215: +#line 286 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2736,11 +2737,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2740 "util/configparser.c" +#line 2741 "util/configparser.c" /* yacc.c:1646 */ break; - case 224: -#line 302 "./util/configparser.y" + case 225: +#line 303 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2751,11 +2752,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2755 "util/configparser.c" +#line 2756 "util/configparser.c" /* yacc.c:1646 */ break; - case 233: -#line 319 "./util/configparser.y" + case 234: +#line 320 "./util/configparser.y" /* yacc.c:1646 */ { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2768,11 +2769,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2772 "util/configparser.c" +#line 2773 "util/configparser.c" /* yacc.c:1646 */ break; - case 243: -#line 338 "./util/configparser.y" + case 244: +#line 339 "./util/configparser.y" /* yacc.c:1646 */ { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -2788,11 +2789,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2792 "util/configparser.c" +#line 2793 "util/configparser.c" /* yacc.c:1646 */ break; - case 254: -#line 362 "./util/configparser.y" + case 255: +#line 363 "./util/configparser.y" /* yacc.c:1646 */ { uint8_t* bitlist; size_t len = 0; @@ -2809,11 +2810,11 @@ yyreduce: } } -#line 2813 "util/configparser.c" +#line 2814 "util/configparser.c" /* yacc.c:1646 */ break; - case 255: -#line 381 "./util/configparser.y" + case 256: +#line 382 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 && @@ -2828,21 +2829,21 @@ yyreduce: cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } -#line 2832 "util/configparser.c" +#line 2833 "util/configparser.c" /* yacc.c:1646 */ break; - case 256: -#line 398 "./util/configparser.y" + case 257: +#line 399 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_cname); cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str); } -#line 2842 "util/configparser.c" +#line 2843 "util/configparser.c" /* yacc.c:1646 */ break; - case 257: -#line 406 "./util/configparser.y" + case 258: +#line 407 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2850,21 +2851,21 @@ yyreduce: else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2854 "util/configparser.c" +#line 2855 "util/configparser.c" /* yacc.c:1646 */ break; - case 258: -#line 416 "./util/configparser.y" + case 259: +#line 417 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_log_name); cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str); } -#line 2864 "util/configparser.c" +#line 2865 "util/configparser.c" /* yacc.c:1646 */ break; - case 259: -#line 424 "./util/configparser.y" + case 260: +#line 425 "./util/configparser.y" /* yacc.c:1646 */ { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -2880,11 +2881,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2884 "util/configparser.c" +#line 2885 "util/configparser.c" /* yacc.c:1646 */ break; - case 272: -#line 447 "./util/configparser.y" + case 273: +#line 448 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2892,11 +2893,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2896 "util/configparser.c" +#line 2897 "util/configparser.c" /* yacc.c:1646 */ break; - case 273: -#line 456 "./util/configparser.y" + case 274: +#line 457 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2904,11 +2905,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2908 "util/configparser.c" +#line 2909 "util/configparser.c" /* yacc.c:1646 */ break; - case 274: -#line 465 "./util/configparser.y" + case 275: +#line 466 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2918,11 +2919,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2922 "util/configparser.c" +#line 2923 "util/configparser.c" /* yacc.c:1646 */ break; - case 275: -#line 476 "./util/configparser.y" + case 276: +#line 477 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2930,11 +2931,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2934 "util/configparser.c" +#line 2935 "util/configparser.c" /* yacc.c:1646 */ break; - case 276: -#line 485 "./util/configparser.y" + case 277: +#line 486 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2942,11 +2943,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2946 "util/configparser.c" +#line 2947 "util/configparser.c" /* yacc.c:1646 */ break; - case 277: -#line 494 "./util/configparser.y" + case 278: +#line 495 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2954,11 +2955,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2958 "util/configparser.c" +#line 2959 "util/configparser.c" /* yacc.c:1646 */ break; - case 278: -#line 503 "./util/configparser.y" + case 279: +#line 504 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2968,11 +2969,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2972 "util/configparser.c" +#line 2973 "util/configparser.c" /* yacc.c:1646 */ break; - case 279: -#line 514 "./util/configparser.y" + case 280: +#line 515 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2980,11 +2981,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2984 "util/configparser.c" +#line 2985 "util/configparser.c" /* yacc.c:1646 */ break; - case 280: -#line 523 "./util/configparser.y" + case 281: +#line 524 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2995,11 +2996,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 2999 "util/configparser.c" +#line 3000 "util/configparser.c" /* yacc.c:1646 */ break; - case 281: -#line 535 "./util/configparser.y" + case 282: +#line 536 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -3011,11 +3012,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 3015 "util/configparser.c" +#line 3016 "util/configparser.c" /* yacc.c:1646 */ break; - case 282: -#line 549 "./util/configparser.y" + case 283: +#line 550 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -3029,11 +3030,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3033 "util/configparser.c" +#line 3034 "util/configparser.c" /* yacc.c:1646 */ break; - case 283: -#line 564 "./util/configparser.y" + case 284: +#line 565 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -3043,11 +3044,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3047 "util/configparser.c" +#line 3048 "util/configparser.c" /* yacc.c:1646 */ break; - case 284: -#line 575 "./util/configparser.y" + case 285: +#line 576 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3063,11 +3064,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3067 "util/configparser.c" +#line 3068 "util/configparser.c" /* yacc.c:1646 */ break; - case 285: -#line 592 "./util/configparser.y" + case 286: +#line 593 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3083,11 +3084,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3087 "util/configparser.c" +#line 3088 "util/configparser.c" /* yacc.c:1646 */ break; - case 286: -#line 609 "./util/configparser.y" + case 287: +#line 610 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3103,11 +3104,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3107 "util/configparser.c" +#line 3108 "util/configparser.c" /* yacc.c:1646 */ break; - case 287: -#line 626 "./util/configparser.y" + case 288: +#line 627 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3123,11 +3124,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3127 "util/configparser.c" +#line 3128 "util/configparser.c" /* yacc.c:1646 */ break; - case 288: -#line 643 "./util/configparser.y" + case 289: +#line 644 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -3141,11 +3142,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3145 "util/configparser.c" +#line 3146 "util/configparser.c" /* yacc.c:1646 */ break; - case 289: -#line 658 "./util/configparser.y" + case 290: +#line 659 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -3159,11 +3160,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3163 "util/configparser.c" +#line 3164 "util/configparser.c" /* yacc.c:1646 */ break; - case 290: -#line 673 "./util/configparser.y" + case 291: +#line 674 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3175,11 +3176,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3179 "util/configparser.c" +#line 3180 "util/configparser.c" /* yacc.c:1646 */ break; - case 291: -#line 686 "./util/configparser.y" + case 292: +#line 687 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3193,11 +3194,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3197 "util/configparser.c" +#line 3198 "util/configparser.c" /* yacc.c:1646 */ break; - case 292: -#line 701 "./util/configparser.y" + case 293: +#line 702 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3205,11 +3206,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3209 "util/configparser.c" +#line 3210 "util/configparser.c" /* yacc.c:1646 */ break; - case 293: -#line 710 "./util/configparser.y" + case 294: +#line 711 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3217,11 +3218,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3221 "util/configparser.c" +#line 3222 "util/configparser.c" /* yacc.c:1646 */ break; - case 294: -#line 719 "./util/configparser.y" + case 295: +#line 720 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3229,11 +3230,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3233 "util/configparser.c" +#line 3234 "util/configparser.c" /* yacc.c:1646 */ break; - case 295: -#line 728 "./util/configparser.y" + case 296: +#line 729 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3241,11 +3242,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3245 "util/configparser.c" +#line 3246 "util/configparser.c" /* yacc.c:1646 */ break; - case 296: -#line 737 "./util/configparser.y" + case 297: +#line 738 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3253,11 +3254,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3257 "util/configparser.c" +#line 3258 "util/configparser.c" /* yacc.c:1646 */ break; - case 297: -#line 746 "./util/configparser.y" + case 298: +#line 747 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3265,11 +3266,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3269 "util/configparser.c" +#line 3270 "util/configparser.c" /* yacc.c:1646 */ break; - case 298: -#line 755 "./util/configparser.y" + case 299: +#line 756 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3277,11 +3278,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3281 "util/configparser.c" +#line 3282 "util/configparser.c" /* yacc.c:1646 */ break; - case 299: -#line 764 "./util/configparser.y" + case 300: +#line 765 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3289,11 +3290,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3293 "util/configparser.c" +#line 3294 "util/configparser.c" /* yacc.c:1646 */ break; - case 300: -#line 773 "./util/configparser.y" + case 301: +#line 774 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3301,11 +3302,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3305 "util/configparser.c" +#line 3306 "util/configparser.c" /* yacc.c:1646 */ break; - case 301: -#line 782 "./util/configparser.y" + case 302: +#line 783 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3313,11 +3314,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3317 "util/configparser.c" +#line 3318 "util/configparser.c" /* yacc.c:1646 */ break; - case 302: -#line 791 "./util/configparser.y" + case 303: +#line 792 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3325,11 +3326,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3329 "util/configparser.c" +#line 3330 "util/configparser.c" /* yacc.c:1646 */ break; - case 303: -#line 800 "./util/configparser.y" + case 304: +#line 801 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3337,11 +3338,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3341 "util/configparser.c" +#line 3342 "util/configparser.c" /* yacc.c:1646 */ break; - case 304: -#line 809 "./util/configparser.y" + case 305: +#line 810 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3349,11 +3350,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3353 "util/configparser.c" +#line 3354 "util/configparser.c" /* yacc.c:1646 */ break; - case 305: -#line 818 "./util/configparser.y" + case 306: +#line 819 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3361,11 +3362,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3365 "util/configparser.c" +#line 3366 "util/configparser.c" /* yacc.c:1646 */ break; - case 306: -#line 827 "./util/configparser.y" + case 307: +#line 828 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3377,11 +3378,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3381 "util/configparser.c" +#line 3382 "util/configparser.c" /* yacc.c:1646 */ break; - case 307: -#line 840 "./util/configparser.y" + case 308: +#line 841 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3389,11 +3390,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3393 "util/configparser.c" +#line 3394 "util/configparser.c" /* yacc.c:1646 */ break; - case 308: -#line 849 "./util/configparser.y" + case 309: +#line 850 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3405,11 +3406,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3409 "util/configparser.c" +#line 3410 "util/configparser.c" /* yacc.c:1646 */ break; - case 309: -#line 862 "./util/configparser.y" + case 310: +#line 863 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3417,11 +3418,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3421 "util/configparser.c" +#line 3422 "util/configparser.c" /* yacc.c:1646 */ break; - case 310: -#line 871 "./util/configparser.y" + case 311: +#line 872 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3429,11 +3430,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3433 "util/configparser.c" +#line 3434 "util/configparser.c" /* yacc.c:1646 */ break; - case 311: -#line 880 "./util/configparser.y" + case 312: +#line 881 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3441,31 +3442,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3445 "util/configparser.c" +#line 3446 "util/configparser.c" /* yacc.c:1646 */ break; - case 312: -#line 889 "./util/configparser.y" + case 313: +#line 890 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } -#line 3455 "util/configparser.c" +#line 3456 "util/configparser.c" /* yacc.c:1646 */ break; - case 313: -#line 896 "./util/configparser.y" + case 314: +#line 897 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } -#line 3465 "util/configparser.c" +#line 3466 "util/configparser.c" /* yacc.c:1646 */ break; - case 314: -#line 903 "./util/configparser.y" + case 315: +#line 904 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3473,21 +3474,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3477 "util/configparser.c" +#line 3478 "util/configparser.c" /* yacc.c:1646 */ break; - case 315: -#line 912 "./util/configparser.y" + case 316: +#line 913 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_cert_bundle); cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str); } -#line 3487 "util/configparser.c" +#line 3488 "util/configparser.c" /* yacc.c:1646 */ break; - case 316: -#line 919 "./util/configparser.y" + case 317: +#line 920 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3495,53 +3496,53 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3499 "util/configparser.c" +#line 3500 "util/configparser.c" /* yacc.c:1646 */ break; - case 317: -#line 928 "./util/configparser.y" + case 318: +#line 929 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3510 "util/configparser.c" +#line 3511 "util/configparser.c" /* yacc.c:1646 */ break; - case 318: -#line 936 "./util/configparser.y" + case 319: +#line 937 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphers); cfg_parser->cfg->tls_ciphers = (yyvsp[0].str); } -#line 3520 "util/configparser.c" +#line 3521 "util/configparser.c" /* yacc.c:1646 */ break; - case 319: -#line 943 "./util/configparser.y" + case 320: +#line 944 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphersuites); cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str); } -#line 3530 "util/configparser.c" +#line 3531 "util/configparser.c" /* yacc.c:1646 */ break; - case 320: -#line 950 "./util/configparser.y" + case 321: +#line 951 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3541 "util/configparser.c" +#line 3542 "util/configparser.c" /* yacc.c:1646 */ break; - case 321: -#line 958 "./util/configparser.y" + case 322: +#line 959 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3549,11 +3550,11 @@ yyreduce: else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3553 "util/configparser.c" +#line 3554 "util/configparser.c" /* yacc.c:1646 */ break; - case 322: -#line 967 "./util/configparser.y" + case 323: +#line 968 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3561,11 +3562,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3565 "util/configparser.c" +#line 3566 "util/configparser.c" /* yacc.c:1646 */ break; - case 323: -#line 976 "./util/configparser.y" + case 324: +#line 977 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3573,11 +3574,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3577 "util/configparser.c" +#line 3578 "util/configparser.c" /* yacc.c:1646 */ break; - case 324: -#line 985 "./util/configparser.y" + case 325: +#line 986 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3590,11 +3591,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3594 "util/configparser.c" +#line 3595 "util/configparser.c" /* yacc.c:1646 */ break; - case 325: -#line 999 "./util/configparser.y" + case 326: +#line 1000 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3602,11 +3603,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3606 "util/configparser.c" +#line 3607 "util/configparser.c" /* yacc.c:1646 */ break; - case 326: -#line 1008 "./util/configparser.y" + case 327: +#line 1009 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3614,11 +3615,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3618 "util/configparser.c" +#line 3619 "util/configparser.c" /* yacc.c:1646 */ break; - case 327: -#line 1017 "./util/configparser.y" + case 328: +#line 1018 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3626,11 +3627,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3630 "util/configparser.c" +#line 3631 "util/configparser.c" /* yacc.c:1646 */ break; - case 328: -#line 1026 "./util/configparser.y" + case 329: +#line 1027 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3638,11 +3639,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3642 "util/configparser.c" +#line 3643 "util/configparser.c" /* yacc.c:1646 */ break; - case 329: -#line 1035 "./util/configparser.y" + case 330: +#line 1036 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3650,11 +3651,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3654 "util/configparser.c" +#line 3655 "util/configparser.c" /* yacc.c:1646 */ break; - case 330: -#line 1044 "./util/configparser.y" + case 331: +#line 1045 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3662,31 +3663,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3666 "util/configparser.c" +#line 3667 "util/configparser.c" /* yacc.c:1646 */ break; - case 331: -#line 1053 "./util/configparser.y" + case 332: +#line 1054 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3676 "util/configparser.c" +#line 3677 "util/configparser.c" /* yacc.c:1646 */ break; - case 332: -#line 1060 "./util/configparser.y" + case 333: +#line 1061 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3686 "util/configparser.c" +#line 3687 "util/configparser.c" /* yacc.c:1646 */ break; - case 333: -#line 1067 "./util/configparser.y" + case 334: +#line 1068 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3711,105 +3712,105 @@ yyreduce: } } } -#line 3715 "util/configparser.c" +#line 3716 "util/configparser.c" /* yacc.c:1646 */ break; - case 334: -#line 1093 "./util/configparser.y" + case 335: +#line 1094 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } -#line 3726 "util/configparser.c" +#line 3727 "util/configparser.c" /* yacc.c:1646 */ break; - case 335: -#line 1101 "./util/configparser.y" + case 336: +#line 1102 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3736 "util/configparser.c" +#line 3737 "util/configparser.c" /* yacc.c:1646 */ break; - case 336: -#line 1108 "./util/configparser.y" + case 337: +#line 1109 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3746 "util/configparser.c" +#line 3747 "util/configparser.c" /* yacc.c:1646 */ break; - case 337: -#line 1115 "./util/configparser.y" + case 338: +#line 1116 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3756 "util/configparser.c" +#line 3757 "util/configparser.c" /* yacc.c:1646 */ break; - case 338: -#line 1122 "./util/configparser.y" + case 339: +#line 1123 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3766 "util/configparser.c" +#line 3767 "util/configparser.c" /* yacc.c:1646 */ break; - case 339: -#line 1129 "./util/configparser.y" + case 340: +#line 1130 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3777 "util/configparser.c" +#line 3778 "util/configparser.c" /* yacc.c:1646 */ break; - case 340: -#line 1137 "./util/configparser.y" + case 341: +#line 1138 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3788 "util/configparser.c" +#line 3789 "util/configparser.c" /* yacc.c:1646 */ break; - case 341: -#line 1145 "./util/configparser.y" + case 342: +#line 1146 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3799 "util/configparser.c" +#line 3800 "util/configparser.c" /* yacc.c:1646 */ break; - case 342: -#line 1153 "./util/configparser.y" + case 343: +#line 1154 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3809 "util/configparser.c" +#line 3810 "util/configparser.c" /* yacc.c:1646 */ break; - case 343: -#line 1160 "./util/configparser.y" + case 344: +#line 1161 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3819,11 +3820,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3823 "util/configparser.c" +#line 3824 "util/configparser.c" /* yacc.c:1646 */ break; - case 344: -#line 1171 "./util/configparser.y" + case 345: +#line 1172 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3833,21 +3834,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3837 "util/configparser.c" +#line 3838 "util/configparser.c" /* yacc.c:1646 */ break; - case 345: -#line 1182 "./util/configparser.y" + case 346: +#line 1183 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3847 "util/configparser.c" +#line 3848 "util/configparser.c" /* yacc.c:1646 */ break; - case 346: -#line 1189 "./util/configparser.y" + case 347: +#line 1190 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3855,11 +3856,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3859 "util/configparser.c" +#line 3860 "util/configparser.c" /* yacc.c:1646 */ break; - case 347: -#line 1198 "./util/configparser.y" + case 348: +#line 1199 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3867,11 +3868,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3871 "util/configparser.c" +#line 3872 "util/configparser.c" /* yacc.c:1646 */ break; - case 348: -#line 1207 "./util/configparser.y" + case 349: +#line 1208 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3879,53 +3880,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3883 "util/configparser.c" +#line 3884 "util/configparser.c" /* yacc.c:1646 */ break; - case 349: -#line 1216 "./util/configparser.y" + case 350: +#line 1217 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 3893 "util/configparser.c" +#line 3894 "util/configparser.c" /* yacc.c:1646 */ break; - case 350: -#line 1223 "./util/configparser.y" + case 351: +#line 1224 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 3903 "util/configparser.c" +#line 3904 "util/configparser.c" /* yacc.c:1646 */ break; - case 351: -#line 1230 "./util/configparser.y" + case 352: +#line 1231 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3914 "util/configparser.c" +#line 3915 "util/configparser.c" /* yacc.c:1646 */ break; - case 352: -#line 1238 "./util/configparser.y" + case 353: +#line 1239 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3925 "util/configparser.c" +#line 3926 "util/configparser.c" /* yacc.c:1646 */ break; - case 353: -#line 1246 "./util/configparser.y" + case 354: +#line 1247 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3934,11 +3935,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3938 "util/configparser.c" +#line 3939 "util/configparser.c" /* yacc.c:1646 */ break; - case 354: -#line 1256 "./util/configparser.y" + case 355: +#line 1257 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3947,11 +3948,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3951 "util/configparser.c" +#line 3952 "util/configparser.c" /* yacc.c:1646 */ break; - case 355: -#line 1266 "./util/configparser.y" + case 356: +#line 1267 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3960,11 +3961,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3964 "util/configparser.c" +#line 3965 "util/configparser.c" /* yacc.c:1646 */ break; - case 356: -#line 1276 "./util/configparser.y" + case 357: +#line 1277 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3977,22 +3978,22 @@ yyreduce: cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3981 "util/configparser.c" +#line 3982 "util/configparser.c" /* yacc.c:1646 */ break; - case 357: -#line 1290 "./util/configparser.y" + case 358: +#line 1291 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3992 "util/configparser.c" +#line 3993 "util/configparser.c" /* yacc.c:1646 */ break; - case 358: -#line 1298 "./util/configparser.y" + case 359: +#line 1299 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4004,11 +4005,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4008 "util/configparser.c" +#line 4009 "util/configparser.c" /* yacc.c:1646 */ break; - case 359: -#line 1311 "./util/configparser.y" + case 360: +#line 1312 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4018,22 +4019,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4022 "util/configparser.c" +#line 4023 "util/configparser.c" /* yacc.c:1646 */ break; - case 360: -#line 1322 "./util/configparser.y" + case 361: +#line 1323 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4033 "util/configparser.c" +#line 4034 "util/configparser.c" /* yacc.c:1646 */ break; - case 361: -#line 1330 "./util/configparser.y" + case 362: +#line 1331 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4045,11 +4046,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4049 "util/configparser.c" +#line 4050 "util/configparser.c" /* yacc.c:1646 */ break; - case 362: -#line 1343 "./util/configparser.y" + case 363: +#line 1344 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4057,11 +4058,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4061 "util/configparser.c" +#line 4062 "util/configparser.c" /* yacc.c:1646 */ break; - case 363: -#line 1352 "./util/configparser.y" + case 364: +#line 1353 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4069,11 +4070,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4073 "util/configparser.c" +#line 4074 "util/configparser.c" /* yacc.c:1646 */ break; - case 364: -#line 1361 "./util/configparser.y" + case 365: +#line 1362 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4081,11 +4082,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4085 "util/configparser.c" +#line 4086 "util/configparser.c" /* yacc.c:1646 */ break; - case 365: -#line 1370 "./util/configparser.y" + case 366: +#line 1371 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4094,11 +4095,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4098 "util/configparser.c" +#line 4099 "util/configparser.c" /* yacc.c:1646 */ break; - case 366: -#line 1380 "./util/configparser.y" + case 367: +#line 1381 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4107,22 +4108,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4111 "util/configparser.c" +#line 4112 "util/configparser.c" /* yacc.c:1646 */ break; - case 367: -#line 1390 "./util/configparser.y" + case 368: +#line 1391 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4122 "util/configparser.c" +#line 4123 "util/configparser.c" /* yacc.c:1646 */ break; - case 368: -#line 1398 "./util/configparser.y" + case 369: +#line 1399 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4134,11 +4135,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4138 "util/configparser.c" +#line 4139 "util/configparser.c" /* yacc.c:1646 */ break; - case 369: -#line 1411 "./util/configparser.y" + case 370: +#line 1412 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4146,22 +4147,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4150 "util/configparser.c" +#line 4151 "util/configparser.c" /* yacc.c:1646 */ break; - case 370: -#line 1420 "./util/configparser.y" + case 371: +#line 1421 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " "removed, use infra-host-ttl)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4161 "util/configparser.c" +#line 4162 "util/configparser.c" /* yacc.c:1646 */ break; - case 371: -#line 1428 "./util/configparser.y" + case 372: +#line 1429 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4169,22 +4170,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4173 "util/configparser.c" +#line 4174 "util/configparser.c" /* yacc.c:1646 */ break; - case 372: -#line 1437 "./util/configparser.y" + case 373: +#line 1438 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4184 "util/configparser.c" +#line 4185 "util/configparser.c" /* yacc.c:1646 */ break; - case 373: -#line 1445 "./util/configparser.y" + case 374: +#line 1446 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4196,11 +4197,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4200 "util/configparser.c" +#line 4201 "util/configparser.c" /* yacc.c:1646 */ break; - case 374: -#line 1458 "./util/configparser.y" + case 375: +#line 1459 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4208,21 +4209,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4212 "util/configparser.c" +#line 4213 "util/configparser.c" /* yacc.c:1646 */ break; - case 375: -#line 1467 "./util/configparser.y" + case 376: +#line 1468 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); } -#line 4222 "util/configparser.c" +#line 4223 "util/configparser.c" /* yacc.c:1646 */ break; - case 376: -#line 1474 "./util/configparser.y" + case 377: +#line 1475 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4231,11 +4232,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4235 "util/configparser.c" +#line 4236 "util/configparser.c" /* yacc.c:1646 */ break; - case 377: -#line 1484 "./util/configparser.y" + case 378: +#line 1485 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4244,11 +4245,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4248 "util/configparser.c" +#line 4249 "util/configparser.c" /* yacc.c:1646 */ break; - case 378: -#line 1494 "./util/configparser.y" + case 379: +#line 1495 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4257,11 +4258,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4261 "util/configparser.c" +#line 4262 "util/configparser.c" /* yacc.c:1646 */ break; - case 379: -#line 1504 "./util/configparser.y" + case 380: +#line 1505 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4270,11 +4271,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4274 "util/configparser.c" +#line 4275 "util/configparser.c" /* yacc.c:1646 */ break; - case 380: -#line 1514 "./util/configparser.y" + case 381: +#line 1515 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4283,11 +4284,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4287 "util/configparser.c" +#line 4288 "util/configparser.c" /* yacc.c:1646 */ break; - case 381: -#line 1524 "./util/configparser.y" + case 382: +#line 1525 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4296,11 +4297,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4300 "util/configparser.c" +#line 4301 "util/configparser.c" /* yacc.c:1646 */ break; - case 382: -#line 1534 "./util/configparser.y" + case 383: +#line 1535 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4309,11 +4310,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4313 "util/configparser.c" +#line 4314 "util/configparser.c" /* yacc.c:1646 */ break; - case 383: -#line 1544 "./util/configparser.y" + case 384: +#line 1545 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4322,41 +4323,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4326 "util/configparser.c" +#line 4327 "util/configparser.c" /* yacc.c:1646 */ break; - case 384: -#line 1554 "./util/configparser.y" + case 385: +#line 1555 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4336 "util/configparser.c" +#line 4337 "util/configparser.c" /* yacc.c:1646 */ break; - case 385: -#line 1561 "./util/configparser.y" + case 386: +#line 1562 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4346 "util/configparser.c" +#line 4347 "util/configparser.c" /* yacc.c:1646 */ break; - case 386: -#line 1568 "./util/configparser.y" + case 387: +#line 1569 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4356 "util/configparser.c" +#line 4357 "util/configparser.c" /* yacc.c:1646 */ break; - case 387: -#line 1575 "./util/configparser.y" + case 388: +#line 1576 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4364,11 +4365,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4368 "util/configparser.c" +#line 4369 "util/configparser.c" /* yacc.c:1646 */ break; - case 388: -#line 1584 "./util/configparser.y" + case 389: +#line 1585 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4376,11 +4377,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4380 "util/configparser.c" +#line 4381 "util/configparser.c" /* yacc.c:1646 */ break; - case 389: -#line 1593 "./util/configparser.y" + case 390: +#line 1594 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4388,11 +4389,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4392 "util/configparser.c" +#line 4393 "util/configparser.c" /* yacc.c:1646 */ break; - case 390: -#line 1602 "./util/configparser.y" + case 391: +#line 1603 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4400,21 +4401,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4404 "util/configparser.c" +#line 4405 "util/configparser.c" /* yacc.c:1646 */ break; - case 391: -#line 1611 "./util/configparser.y" + case 392: +#line 1612 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4414 "util/configparser.c" +#line 4415 "util/configparser.c" /* yacc.c:1646 */ break; - case 392: -#line 1618 "./util/configparser.y" + case 393: +#line 1619 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4423,11 +4424,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4427 "util/configparser.c" +#line 4428 "util/configparser.c" /* yacc.c:1646 */ break; - case 393: -#line 1628 "./util/configparser.y" + case 394: +#line 1629 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4446,21 +4447,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4450 "util/configparser.c" +#line 4451 "util/configparser.c" /* yacc.c:1646 */ break; - case 394: -#line 1648 "./util/configparser.y" + case 395: +#line 1649 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = (yyvsp[0].str); } -#line 4460 "util/configparser.c" +#line 4461 "util/configparser.c" /* yacc.c:1646 */ break; - case 395: -#line 1655 "./util/configparser.y" + case 396: +#line 1656 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4477,11 +4478,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4481 "util/configparser.c" +#line 4482 "util/configparser.c" /* yacc.c:1646 */ break; - case 396: -#line 1673 "./util/configparser.y" + case 397: +#line 1674 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4493,11 +4494,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4497 "util/configparser.c" +#line 4498 "util/configparser.c" /* yacc.c:1646 */ break; - case 397: -#line 1686 "./util/configparser.y" + case 398: +#line 1687 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4509,11 +4510,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4513 "util/configparser.c" +#line 4514 "util/configparser.c" /* yacc.c:1646 */ break; - case 398: -#line 1699 "./util/configparser.y" + case 399: +#line 1700 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4521,11 +4522,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4525 "util/configparser.c" +#line 4526 "util/configparser.c" /* yacc.c:1646 */ break; - case 399: -#line 1708 "./util/configparser.y" + case 400: +#line 1709 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4533,11 +4534,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4537 "util/configparser.c" +#line 4538 "util/configparser.c" /* yacc.c:1646 */ break; - case 400: -#line 1717 "./util/configparser.y" + case 401: +#line 1718 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4545,11 +4546,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4549 "util/configparser.c" +#line 4550 "util/configparser.c" /* yacc.c:1646 */ break; - case 401: -#line 1726 "./util/configparser.y" + case 402: +#line 1727 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4557,11 +4558,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4561 "util/configparser.c" +#line 4562 "util/configparser.c" /* yacc.c:1646 */ break; - case 402: -#line 1735 "./util/configparser.y" + case 403: +#line 1736 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4570,11 +4571,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4574 "util/configparser.c" +#line 4575 "util/configparser.c" /* yacc.c:1646 */ break; - case 403: -#line 1745 "./util/configparser.y" + case 404: +#line 1746 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4583,11 +4584,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4587 "util/configparser.c" +#line 4588 "util/configparser.c" /* yacc.c:1646 */ break; - case 404: -#line 1755 "./util/configparser.y" + case 405: +#line 1756 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4597,11 +4598,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4601 "util/configparser.c" +#line 4602 "util/configparser.c" /* yacc.c:1646 */ break; - case 405: -#line 1766 "./util/configparser.y" + case 406: +#line 1767 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4609,11 +4610,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4613 "util/configparser.c" +#line 4614 "util/configparser.c" /* yacc.c:1646 */ break; - case 406: -#line 1775 "./util/configparser.y" + case 407: +#line 1776 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4621,11 +4622,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4625 "util/configparser.c" +#line 4626 "util/configparser.c" /* yacc.c:1646 */ break; - case 407: -#line 1784 "./util/configparser.y" + case 408: +#line 1785 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4633,11 +4634,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4637 "util/configparser.c" +#line 4638 "util/configparser.c" /* yacc.c:1646 */ break; - case 408: -#line 1793 "./util/configparser.y" + case 409: +#line 1794 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4645,11 +4646,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4649 "util/configparser.c" +#line 4650 "util/configparser.c" /* yacc.c:1646 */ break; - case 409: -#line 1802 "./util/configparser.y" + case 410: +#line 1803 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4657,11 +4658,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4661 "util/configparser.c" +#line 4662 "util/configparser.c" /* yacc.c:1646 */ break; - case 410: -#line 1811 "./util/configparser.y" + case 411: +#line 1812 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4669,11 +4670,23 @@ yyreduce: else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4673 "util/configparser.c" +#line 4674 "util/configparser.c" /* yacc.c:1646 */ break; - case 411: -#line 1820 "./util/configparser.y" + case 412: +#line 1821 "./util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(server_serve_original_ttl:%s)\n", (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->serve_original_ttl = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 4686 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 413: +#line 1830 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4685,11 +4698,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4689 "util/configparser.c" +#line 4702 "util/configparser.c" /* yacc.c:1646 */ break; - case 412: -#line 1833 "./util/configparser.y" + case 414: +#line 1843 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4701,11 +4714,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4705 "util/configparser.c" +#line 4718 "util/configparser.c" /* yacc.c:1646 */ break; - case 413: -#line 1846 "./util/configparser.y" + case 415: +#line 1856 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4713,21 +4726,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4717 "util/configparser.c" +#line 4730 "util/configparser.c" /* yacc.c:1646 */ break; - case 414: -#line 1855 "./util/configparser.y" + case 416: +#line 1865 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); } -#line 4727 "util/configparser.c" +#line 4740 "util/configparser.c" /* yacc.c:1646 */ break; - case 415: -#line 1862 "./util/configparser.y" + case 417: +#line 1872 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4735,11 +4748,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4739 "util/configparser.c" +#line 4752 "util/configparser.c" /* yacc.c:1646 */ break; - case 416: -#line 1871 "./util/configparser.y" + case 418: +#line 1881 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4747,11 +4760,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4751 "util/configparser.c" +#line 4764 "util/configparser.c" /* yacc.c:1646 */ break; - case 417: -#line 1880 "./util/configparser.y" + case 419: +#line 1890 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4759,11 +4772,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4763 "util/configparser.c" +#line 4776 "util/configparser.c" /* yacc.c:1646 */ break; - case 418: -#line 1889 "./util/configparser.y" + case 420: +#line 1899 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4772,22 +4785,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4776 "util/configparser.c" +#line 4789 "util/configparser.c" /* yacc.c:1646 */ break; - case 419: -#line 1898 "./util/configparser.y" + case 421: +#line 1908 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4787 "util/configparser.c" +#line 4800 "util/configparser.c" /* yacc.c:1646 */ break; - case 420: -#line 1906 "./util/configparser.y" + case 422: +#line 1916 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4799,22 +4812,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4803 "util/configparser.c" +#line 4816 "util/configparser.c" /* yacc.c:1646 */ break; - case 421: -#line 1919 "./util/configparser.y" + case 423: +#line 1929 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4814 "util/configparser.c" +#line 4827 "util/configparser.c" /* yacc.c:1646 */ break; - case 422: -#line 1927 "./util/configparser.y" + case 424: +#line 1937 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -4854,21 +4867,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4858 "util/configparser.c" +#line 4871 "util/configparser.c" /* yacc.c:1646 */ break; - case 423: -#line 1968 "./util/configparser.y" + case 425: +#line 1978 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) fatal_exit("out of memory adding local-data"); } -#line 4868 "util/configparser.c" +#line 4881 "util/configparser.c" /* yacc.c:1646 */ break; - case 424: -#line 1975 "./util/configparser.y" + case 426: +#line 1985 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4882,11 +4895,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4886 "util/configparser.c" +#line 4899 "util/configparser.c" /* yacc.c:1646 */ break; - case 425: -#line 1990 "./util/configparser.y" + case 427: +#line 2000 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4895,11 +4908,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4899 "util/configparser.c" +#line 4912 "util/configparser.c" /* yacc.c:1646 */ break; - case 426: -#line 2000 "./util/configparser.y" + case 428: +#line 2010 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4908,41 +4921,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4912 "util/configparser.c" +#line 4925 "util/configparser.c" /* yacc.c:1646 */ break; - case 427: -#line 2010 "./util/configparser.y" + case 429: +#line 2020 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4922 "util/configparser.c" +#line 4935 "util/configparser.c" /* yacc.c:1646 */ break; - case 428: -#line 2017 "./util/configparser.y" + case 430: +#line 2027 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4932 "util/configparser.c" +#line 4945 "util/configparser.c" /* yacc.c:1646 */ break; - case 429: -#line 2024 "./util/configparser.y" + case 431: +#line 2034 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 4942 "util/configparser.c" +#line 4955 "util/configparser.c" /* yacc.c:1646 */ break; - case 430: -#line 2031 "./util/configparser.y" + case 432: +#line 2041 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4950,22 +4963,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4954 "util/configparser.c" +#line 4967 "util/configparser.c" /* yacc.c:1646 */ break; - case 431: -#line 2040 "./util/configparser.y" + case 433: +#line 2050 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, (yyvsp[0].str))) fatal_exit("out of memory adding dns64-ignore-aaaa"); } -#line 4965 "util/configparser.c" +#line 4978 "util/configparser.c" /* yacc.c:1646 */ break; - case 432: -#line 2048 "./util/configparser.y" + case 434: +#line 2058 "./util/configparser.y" /* yacc.c:1646 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4978,11 +4991,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4982 "util/configparser.c" +#line 4995 "util/configparser.c" /* yacc.c:1646 */ break; - case 433: -#line 2062 "./util/configparser.y" + case 435: +#line 2072 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5002,11 +5015,11 @@ yyreduce: } } } -#line 5006 "util/configparser.c" +#line 5019 "util/configparser.c" /* yacc.c:1646 */ break; - case 434: -#line 2083 "./util/configparser.y" + case 436: +#line 2093 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5026,11 +5039,11 @@ yyreduce: } } } -#line 5030 "util/configparser.c" +#line 5043 "util/configparser.c" /* yacc.c:1646 */ break; - case 435: -#line 2104 "./util/configparser.y" + case 437: +#line 2114 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, @@ -5041,11 +5054,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5045 "util/configparser.c" +#line 5058 "util/configparser.c" /* yacc.c:1646 */ break; - case 436: -#line 2116 "./util/configparser.y" + case 438: +#line 2126 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, @@ -5056,11 +5069,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5060 "util/configparser.c" +#line 5073 "util/configparser.c" /* yacc.c:1646 */ break; - case 437: -#line 2128 "./util/configparser.y" + case 439: +#line 2138 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, @@ -5071,11 +5084,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5075 "util/configparser.c" +#line 5088 "util/configparser.c" /* yacc.c:1646 */ break; - case 438: -#line 2140 "./util/configparser.y" + case 440: +#line 2150 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -5083,11 +5096,11 @@ yyreduce: yyerror("out of memory"); } } -#line 5087 "util/configparser.c" +#line 5100 "util/configparser.c" /* yacc.c:1646 */ break; - case 439: -#line 2149 "./util/configparser.y" + case 441: +#line 2159 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5107,11 +5120,11 @@ yyreduce: } } } -#line 5111 "util/configparser.c" +#line 5124 "util/configparser.c" /* yacc.c:1646 */ break; - case 440: -#line 2170 "./util/configparser.y" + case 442: +#line 2180 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5119,11 +5132,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5123 "util/configparser.c" +#line 5136 "util/configparser.c" /* yacc.c:1646 */ break; - case 441: -#line 2180 "./util/configparser.y" + case 443: +#line 2190 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5131,33 +5144,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5135 "util/configparser.c" +#line 5148 "util/configparser.c" /* yacc.c:1646 */ break; - case 442: -#line 2189 "./util/configparser.y" + case 444: +#line 2199 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5146 "util/configparser.c" +#line 5159 "util/configparser.c" /* yacc.c:1646 */ break; - case 443: -#line 2197 "./util/configparser.y" + case 445: +#line 2207 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5157 "util/configparser.c" +#line 5170 "util/configparser.c" /* yacc.c:1646 */ break; - case 444: -#line 2205 "./util/configparser.y" + case 446: +#line 2215 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5169,11 +5182,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5173 "util/configparser.c" +#line 5186 "util/configparser.c" /* yacc.c:1646 */ break; - case 445: -#line 2218 "./util/configparser.y" + case 447: +#line 2228 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5185,11 +5198,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5189 "util/configparser.c" +#line 5202 "util/configparser.c" /* yacc.c:1646 */ break; - case 446: -#line 2231 "./util/configparser.y" + case 448: +#line 2241 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -5203,11 +5216,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 5207 "util/configparser.c" +#line 5220 "util/configparser.c" /* yacc.c:1646 */ break; - case 447: -#line 2246 "./util/configparser.y" + case 449: +#line 2256 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -5221,11 +5234,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 5225 "util/configparser.c" +#line 5238 "util/configparser.c" /* yacc.c:1646 */ break; - case 448: -#line 2261 "./util/configparser.y" + case 450: +#line 2271 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5233,11 +5246,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5237 "util/configparser.c" +#line 5250 "util/configparser.c" /* yacc.c:1646 */ break; - case 449: -#line 2270 "./util/configparser.y" + case 451: +#line 2280 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5245,20 +5258,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5249 "util/configparser.c" +#line 5262 "util/configparser.c" /* yacc.c:1646 */ break; - case 450: -#line 2279 "./util/configparser.y" + case 452: +#line 2289 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5258 "util/configparser.c" +#line 5271 "util/configparser.c" /* yacc.c:1646 */ break; - case 451: -#line 2285 "./util/configparser.y" + case 453: +#line 2295 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -5266,11 +5279,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5270 "util/configparser.c" +#line 5283 "util/configparser.c" /* yacc.c:1646 */ break; - case 452: -#line 2294 "./util/configparser.y" + case 454: +#line 2304 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5278,11 +5291,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5282 "util/configparser.c" +#line 5295 "util/configparser.c" /* yacc.c:1646 */ break; - case 453: -#line 2303 "./util/configparser.y" + case 455: +#line 2313 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5291,11 +5304,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5295 "util/configparser.c" +#line 5308 "util/configparser.c" /* yacc.c:1646 */ break; - case 454: -#line 2313 "./util/configparser.y" + case 456: +#line 2323 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5304,11 +5317,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5308 "util/configparser.c" +#line 5321 "util/configparser.c" /* yacc.c:1646 */ break; - case 455: -#line 2323 "./util/configparser.y" + case 457: +#line 2333 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5320,11 +5333,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5324 "util/configparser.c" +#line 5337 "util/configparser.c" /* yacc.c:1646 */ break; - case 456: -#line 2336 "./util/configparser.y" + case 458: +#line 2346 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5336,11 +5349,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5340 "util/configparser.c" +#line 5353 "util/configparser.c" /* yacc.c:1646 */ break; - case 457: -#line 2349 "./util/configparser.y" + case 459: +#line 2359 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5351,11 +5364,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5355 "util/configparser.c" +#line 5368 "util/configparser.c" /* yacc.c:1646 */ break; - case 458: -#line 2361 "./util/configparser.y" + case 460: +#line 2371 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5368,11 +5381,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5372 "util/configparser.c" +#line 5385 "util/configparser.c" /* yacc.c:1646 */ break; - case 459: -#line 2375 "./util/configparser.y" + case 461: +#line 2385 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5383,11 +5396,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5387 "util/configparser.c" +#line 5400 "util/configparser.c" /* yacc.c:1646 */ break; - case 460: -#line 2387 "./util/configparser.y" + case 462: +#line 2397 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5400,11 +5413,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5404 "util/configparser.c" +#line 5417 "util/configparser.c" /* yacc.c:1646 */ break; - case 461: -#line 2401 "./util/configparser.y" + case 463: +#line 2411 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5413,31 +5426,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5417 "util/configparser.c" +#line 5430 "util/configparser.c" /* yacc.c:1646 */ break; - case 462: -#line 2411 "./util/configparser.y" + case 464: +#line 2421 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5427 "util/configparser.c" +#line 5440 "util/configparser.c" /* yacc.c:1646 */ break; - case 463: -#line 2418 "./util/configparser.y" + case 465: +#line 2428 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5437 "util/configparser.c" +#line 5450 "util/configparser.c" /* yacc.c:1646 */ break; - case 464: -#line 2425 "./util/configparser.y" + case 466: +#line 2435 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5445,11 +5458,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5449 "util/configparser.c" +#line 5462 "util/configparser.c" /* yacc.c:1646 */ break; - case 465: -#line 2434 "./util/configparser.y" + case 467: +#line 2444 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5457,11 +5470,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5461 "util/configparser.c" +#line 5474 "util/configparser.c" /* yacc.c:1646 */ break; - case 466: -#line 2443 "./util/configparser.y" + case 468: +#line 2453 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5470,11 +5483,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5474 "util/configparser.c" +#line 5487 "util/configparser.c" /* yacc.c:1646 */ break; - case 467: -#line 2453 "./util/configparser.y" + case 469: +#line 2463 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5483,11 +5496,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5487 "util/configparser.c" +#line 5500 "util/configparser.c" /* yacc.c:1646 */ break; - case 468: -#line 2463 "./util/configparser.y" + case 470: +#line 2473 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5496,31 +5509,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5500 "util/configparser.c" +#line 5513 "util/configparser.c" /* yacc.c:1646 */ break; - case 469: -#line 2473 "./util/configparser.y" + case 471: +#line 2483 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5510 "util/configparser.c" +#line 5523 "util/configparser.c" /* yacc.c:1646 */ break; - case 470: -#line 2480 "./util/configparser.y" + case 472: +#line 2490 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5520 "util/configparser.c" +#line 5533 "util/configparser.c" /* yacc.c:1646 */ break; - case 471: -#line 2487 "./util/configparser.y" + case 473: +#line 2497 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5528,11 +5541,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5532 "util/configparser.c" +#line 5545 "util/configparser.c" /* yacc.c:1646 */ break; - case 472: -#line 2496 "./util/configparser.y" + case 474: +#line 2506 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5540,11 +5553,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5544 "util/configparser.c" +#line 5557 "util/configparser.c" /* yacc.c:1646 */ break; - case 473: -#line 2505 "./util/configparser.y" + case 475: +#line 2515 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5553,11 +5566,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5557 "util/configparser.c" +#line 5570 "util/configparser.c" /* yacc.c:1646 */ break; - case 474: -#line 2515 "./util/configparser.y" + case 476: +#line 2525 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5566,52 +5579,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5570 "util/configparser.c" +#line 5583 "util/configparser.c" /* yacc.c:1646 */ break; - case 475: -#line 2525 "./util/configparser.y" + case 477: +#line 2535 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 5580 "util/configparser.c" +#line 5593 "util/configparser.c" /* yacc.c:1646 */ break; - case 476: -#line 2532 "./util/configparser.y" + case 478: +#line 2542 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(master:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5590 "util/configparser.c" +#line 5603 "util/configparser.c" /* yacc.c:1646 */ break; - case 477: -#line 2539 "./util/configparser.y" + case 479: +#line 2549 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(url:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5600 "util/configparser.c" +#line 5613 "util/configparser.c" /* yacc.c:1646 */ break; - case 478: -#line 2546 "./util/configparser.y" + case 480: +#line 2556 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5611 "util/configparser.c" +#line 5624 "util/configparser.c" /* yacc.c:1646 */ break; - case 479: -#line 2554 "./util/configparser.y" + case 481: +#line 2564 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5620,11 +5633,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5624 "util/configparser.c" +#line 5637 "util/configparser.c" /* yacc.c:1646 */ break; - case 480: -#line 2564 "./util/configparser.y" + case 482: +#line 2574 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5633,11 +5646,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5637 "util/configparser.c" +#line 5650 "util/configparser.c" /* yacc.c:1646 */ break; - case 481: -#line 2574 "./util/configparser.y" + case 483: +#line 2584 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5646,11 +5659,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5650 "util/configparser.c" +#line 5663 "util/configparser.c" /* yacc.c:1646 */ break; - case 482: -#line 2584 "./util/configparser.y" + case 484: +#line 2594 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5659,11 +5672,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5663 "util/configparser.c" +#line 5676 "util/configparser.c" /* yacc.c:1646 */ break; - case 483: -#line 2594 "./util/configparser.y" + case 485: +#line 2604 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -5701,11 +5714,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5705 "util/configparser.c" +#line 5718 "util/configparser.c" /* yacc.c:1646 */ break; - case 484: -#line 2633 "./util/configparser.y" + case 486: +#line 2643 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5714,33 +5727,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5718 "util/configparser.c" +#line 5731 "util/configparser.c" /* yacc.c:1646 */ break; - case 485: -#line 2643 "./util/configparser.y" + case 487: +#line 2653 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 5729 "util/configparser.c" +#line 5742 "util/configparser.c" /* yacc.c:1646 */ break; - case 486: -#line 2651 "./util/configparser.y" + case 488: +#line 2661 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { fatal_exit("out of memory adding local-data"); } } -#line 5740 "util/configparser.c" +#line 5753 "util/configparser.c" /* yacc.c:1646 */ break; - case 487: -#line 2659 "./util/configparser.y" + case 489: +#line 2669 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5754,11 +5767,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5758 "util/configparser.c" +#line 5771 "util/configparser.c" /* yacc.c:1646 */ break; - case 488: -#line 2674 "./util/configparser.y" + case 490: +#line 2684 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5766,19 +5779,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5770 "util/configparser.c" +#line 5783 "util/configparser.c" /* yacc.c:1646 */ break; - case 489: -#line 2683 "./util/configparser.y" + case 491: +#line 2693 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 5778 "util/configparser.c" +#line 5791 "util/configparser.c" /* yacc.c:1646 */ break; - case 500: -#line 2694 "./util/configparser.y" + case 502: +#line 2704 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5787,11 +5800,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5791 "util/configparser.c" +#line 5804 "util/configparser.c" /* yacc.c:1646 */ break; - case 501: -#line 2704 "./util/configparser.y" + case 503: +#line 2714 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5799,79 +5812,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5803 "util/configparser.c" +#line 5816 "util/configparser.c" /* yacc.c:1646 */ break; - case 502: -#line 2713 "./util/configparser.y" + case 504: +#line 2723 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5813 "util/configparser.c" +#line 5826 "util/configparser.c" /* yacc.c:1646 */ break; - case 503: -#line 2720 "./util/configparser.y" + case 505: +#line 2730 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5823 "util/configparser.c" +#line 5836 "util/configparser.c" /* yacc.c:1646 */ break; - case 504: -#line 2727 "./util/configparser.y" + case 506: +#line 2737 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = (yyvsp[0].str); } -#line 5833 "util/configparser.c" +#line 5846 "util/configparser.c" /* yacc.c:1646 */ break; - case 505: -#line 2734 "./util/configparser.y" + case 507: +#line 2744 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } -#line 5843 "util/configparser.c" +#line 5856 "util/configparser.c" /* yacc.c:1646 */ break; - case 506: -#line 2741 "./util/configparser.y" + case 508: +#line 2751 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = (yyvsp[0].str); } -#line 5853 "util/configparser.c" +#line 5866 "util/configparser.c" /* yacc.c:1646 */ break; - case 507: -#line 2748 "./util/configparser.y" + case 509: +#line 2758 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } -#line 5863 "util/configparser.c" +#line 5876 "util/configparser.c" /* yacc.c:1646 */ break; - case 508: -#line 2755 "./util/configparser.y" + case 510: +#line 2765 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 5871 "util/configparser.c" +#line 5884 "util/configparser.c" /* yacc.c:1646 */ break; - case 529: -#line 2775 "./util/configparser.y" + case 531: +#line 2785 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5879,31 +5892,31 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5883 "util/configparser.c" +#line 5896 "util/configparser.c" /* yacc.c:1646 */ break; - case 530: -#line 2784 "./util/configparser.y" + case 532: +#line 2794 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } -#line 5893 "util/configparser.c" +#line 5906 "util/configparser.c" /* yacc.c:1646 */ break; - case 531: -#line 2791 "./util/configparser.y" + case 533: +#line 2801 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_ip); cfg_parser->cfg->dnstap_ip = (yyvsp[0].str); } -#line 5903 "util/configparser.c" +#line 5916 "util/configparser.c" /* yacc.c:1646 */ break; - case 532: -#line 2798 "./util/configparser.y" + case 534: +#line 2808 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5911,51 +5924,51 @@ yyreduce: else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5915 "util/configparser.c" +#line 5928 "util/configparser.c" /* yacc.c:1646 */ break; - case 533: -#line 2807 "./util/configparser.y" + case 535: +#line 2817 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_server_name); cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str); } -#line 5925 "util/configparser.c" +#line 5938 "util/configparser.c" /* yacc.c:1646 */ break; - case 534: -#line 2814 "./util/configparser.y" + case 536: +#line 2824 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_cert_bundle); cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str); } -#line 5935 "util/configparser.c" +#line 5948 "util/configparser.c" /* yacc.c:1646 */ break; - case 535: -#line 2821 "./util/configparser.y" + case 537: +#line 2831 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_key_file); cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str); } -#line 5945 "util/configparser.c" +#line 5958 "util/configparser.c" /* yacc.c:1646 */ break; - case 536: -#line 2828 "./util/configparser.y" + case 538: +#line 2838 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_cert_file); cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str); } -#line 5955 "util/configparser.c" +#line 5968 "util/configparser.c" /* yacc.c:1646 */ break; - case 537: -#line 2835 "./util/configparser.y" + case 539: +#line 2845 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5963,11 +5976,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5967 "util/configparser.c" +#line 5980 "util/configparser.c" /* yacc.c:1646 */ break; - case 538: -#line 2844 "./util/configparser.y" + case 540: +#line 2854 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5975,31 +5988,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5979 "util/configparser.c" +#line 5992 "util/configparser.c" /* yacc.c:1646 */ break; - case 539: -#line 2853 "./util/configparser.y" + case 541: +#line 2863 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } -#line 5989 "util/configparser.c" +#line 6002 "util/configparser.c" /* yacc.c:1646 */ break; - case 540: -#line 2860 "./util/configparser.y" + case 542: +#line 2870 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } -#line 5999 "util/configparser.c" +#line 6012 "util/configparser.c" /* yacc.c:1646 */ break; - case 541: -#line 2867 "./util/configparser.y" + case 543: +#line 2877 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6008,11 +6021,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6012 "util/configparser.c" +#line 6025 "util/configparser.c" /* yacc.c:1646 */ break; - case 542: -#line 2877 "./util/configparser.y" + case 544: +#line 2887 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6021,11 +6034,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6025 "util/configparser.c" +#line 6038 "util/configparser.c" /* yacc.c:1646 */ break; - case 543: -#line 2887 "./util/configparser.y" + case 545: +#line 2897 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6034,11 +6047,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6038 "util/configparser.c" +#line 6051 "util/configparser.c" /* yacc.c:1646 */ break; - case 544: -#line 2897 "./util/configparser.y" + case 546: +#line 2907 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6047,11 +6060,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6051 "util/configparser.c" +#line 6064 "util/configparser.c" /* yacc.c:1646 */ break; - case 545: -#line 2907 "./util/configparser.y" + case 547: +#line 2917 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6060,11 +6073,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6064 "util/configparser.c" +#line 6077 "util/configparser.c" /* yacc.c:1646 */ break; - case 546: -#line 2917 "./util/configparser.y" + case 548: +#line 2927 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6073,47 +6086,47 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6077 "util/configparser.c" +#line 6090 "util/configparser.c" /* yacc.c:1646 */ break; - case 547: -#line 2927 "./util/configparser.y" + case 549: +#line 2937 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(python:)\n")); } -#line 6085 "util/configparser.c" +#line 6098 "util/configparser.c" /* yacc.c:1646 */ break; - case 551: -#line 2936 "./util/configparser.y" + case 553: +#line 2946 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6095 "util/configparser.c" +#line 6108 "util/configparser.c" /* yacc.c:1646 */ break; - case 552: -#line 2942 "./util/configparser.y" + case 554: +#line 2952 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dynlib:)\n")); } -#line 6103 "util/configparser.c" +#line 6116 "util/configparser.c" /* yacc.c:1646 */ break; - case 556: -#line 2951 "./util/configparser.y" + case 558: +#line 2961 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dynlib-file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6113 "util/configparser.c" +#line 6126 "util/configparser.c" /* yacc.c:1646 */ break; - case 557: -#line 2957 "./util/configparser.y" + case 559: +#line 2967 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6122,21 +6135,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6126 "util/configparser.c" +#line 6139 "util/configparser.c" /* yacc.c:1646 */ break; - case 558: -#line 2967 "./util/configparser.y" + case 560: +#line 2977 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = (yyvsp[0].str); } -#line 6136 "util/configparser.c" +#line 6149 "util/configparser.c" /* yacc.c:1646 */ break; - case 559: -#line 2974 "./util/configparser.y" + case 561: +#line 2984 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -6144,30 +6157,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 6148 "util/configparser.c" +#line 6161 "util/configparser.c" /* yacc.c:1646 */ break; - case 560: -#line 2983 "./util/configparser.y" + case 562: +#line 2993 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 6159 "util/configparser.c" +#line 6172 "util/configparser.c" /* yacc.c:1646 */ break; - case 561: -#line 2991 "./util/configparser.y" + case 563: +#line 3001 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnscrypt:)\n")); } -#line 6167 "util/configparser.c" +#line 6180 "util/configparser.c" /* yacc.c:1646 */ break; - case 574: -#line 3007 "./util/configparser.y" + case 576: +#line 3017 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6175,11 +6188,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6179 "util/configparser.c" +#line 6192 "util/configparser.c" /* yacc.c:1646 */ break; - case 575: -#line 3017 "./util/configparser.y" + case 577: +#line 3027 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6187,21 +6200,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6191 "util/configparser.c" +#line 6204 "util/configparser.c" /* yacc.c:1646 */ break; - case 576: -#line 3026 "./util/configparser.y" + case 578: +#line 3036 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } -#line 6201 "util/configparser.c" +#line 6214 "util/configparser.c" /* yacc.c:1646 */ break; - case 577: -#line 3033 "./util/configparser.y" + case 579: +#line 3043 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -6209,21 +6222,21 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 6213 "util/configparser.c" +#line 6226 "util/configparser.c" /* yacc.c:1646 */ break; - case 578: -#line 3042 "./util/configparser.y" + case 580: +#line 3052 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); } -#line 6223 "util/configparser.c" +#line 6236 "util/configparser.c" /* yacc.c:1646 */ break; - case 579: -#line 3049 "./util/configparser.y" + case 581: +#line 3059 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -6231,22 +6244,22 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 6235 "util/configparser.c" +#line 6248 "util/configparser.c" /* yacc.c:1646 */ break; - case 580: -#line 3058 "./util/configparser.y" + case 582: +#line 3068 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6246 "util/configparser.c" +#line 6259 "util/configparser.c" /* yacc.c:1646 */ break; - case 581: -#line 3066 "./util/configparser.y" + case 583: +#line 3076 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6258,22 +6271,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6262 "util/configparser.c" +#line 6275 "util/configparser.c" /* yacc.c:1646 */ break; - case 582: -#line 3079 "./util/configparser.y" + case 584: +#line 3089 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6273 "util/configparser.c" +#line 6286 "util/configparser.c" /* yacc.c:1646 */ break; - case 583: -#line 3087 "./util/configparser.y" + case 585: +#line 3097 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6285,19 +6298,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6289 "util/configparser.c" +#line 6302 "util/configparser.c" /* yacc.c:1646 */ break; - case 584: -#line 3100 "./util/configparser.y" + case 586: +#line 3110 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(cachedb:)\n")); } -#line 6297 "util/configparser.c" +#line 6310 "util/configparser.c" /* yacc.c:1646 */ break; - case 593: -#line 3111 "./util/configparser.y" + case 595: +#line 3121 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -6308,11 +6321,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6312 "util/configparser.c" +#line 6325 "util/configparser.c" /* yacc.c:1646 */ break; - case 594: -#line 3123 "./util/configparser.y" + case 596: +#line 3133 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -6323,11 +6336,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6327 "util/configparser.c" +#line 6340 "util/configparser.c" /* yacc.c:1646 */ break; - case 595: -#line 3135 "./util/configparser.y" + case 597: +#line 3145 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -6338,11 +6351,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6342 "util/configparser.c" +#line 6355 "util/configparser.c" /* yacc.c:1646 */ break; - case 596: -#line 3147 "./util/configparser.y" + case 598: +#line 3157 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -6356,11 +6369,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6360 "util/configparser.c" +#line 6373 "util/configparser.c" /* yacc.c:1646 */ break; - case 597: -#line 3162 "./util/configparser.y" + case 599: +#line 3172 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -6372,11 +6385,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6376 "util/configparser.c" +#line 6389 "util/configparser.c" /* yacc.c:1646 */ break; - case 598: -#line 3175 "./util/configparser.y" + case 600: +#line 3185 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str))); @@ -6388,11 +6401,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6392 "util/configparser.c" +#line 6405 "util/configparser.c" /* yacc.c:1646 */ break; - case 599: -#line 3188 "./util/configparser.y" + case 601: +#line 3198 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -6402,19 +6415,19 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6406 "util/configparser.c" +#line 6419 "util/configparser.c" /* yacc.c:1646 */ break; - case 600: -#line 3199 "./util/configparser.y" + case 602: +#line 3209 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(ipset:)\n")); } -#line 6414 "util/configparser.c" +#line 6427 "util/configparser.c" /* yacc.c:1646 */ break; - case 605: -#line 3208 "./util/configparser.y" + case 607: +#line 3218 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); @@ -6428,11 +6441,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6432 "util/configparser.c" +#line 6445 "util/configparser.c" /* yacc.c:1646 */ break; - case 606: -#line 3223 "./util/configparser.y" + case 608: +#line 3233 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); @@ -6446,12 +6459,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6450 "util/configparser.c" +#line 6463 "util/configparser.c" /* yacc.c:1646 */ break; -#line 6454 "util/configparser.c" - +#line 6467 "util/configparser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -6476,13 +6488,14 @@ yyreduce: /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ - { - const int yylhs = yyr1[yyn] - YYNTOKENS; - const int yyi = yypgoto[yylhs] + *yyssp; - yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp - ? yytable[yyi] - : yydefgoto[yylhs]); - } + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; @@ -6565,10 +6578,12 @@ yyerrlab: | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: - /* Pacify compilers when the user code never invokes YYERROR and the - label yyerrorlab therefore never appears in user code. */ - if (0) - YYERROR; + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ @@ -6630,7 +6645,6 @@ yyacceptlab: yyresult = 0; goto yyreturn; - /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ @@ -6638,7 +6652,6 @@ yyabortlab: yyresult = 1; goto yyreturn; - #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | @@ -6649,10 +6662,6 @@ yyexhaustedlab: /* Fall through. */ #endif - -/*-----------------------------------------------------. -| yyreturn -- parsing is finished, return the result. | -`-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { @@ -6682,7 +6691,7 @@ yyreturn: #endif return yyresult; } -#line 3237 "./util/configparser.y" +#line 3247 "./util/configparser.y" /* yacc.c:1906 */ /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 66662409e..1548199c6 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -1,9 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.4.1. */ +/* A Bison parser, made by GNU Bison 3.0.4. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, - Inc. + Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -31,9 +30,6 @@ This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ -/* Undocumented macros, especially those whose name start with YY_, - are private implementation details. Do not rely on them. */ - #ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED # define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED /* Debug traces. */ @@ -264,78 +260,79 @@ extern int yydebug; VAR_SERVE_EXPIRED_TTL_RESET = 470, VAR_SERVE_EXPIRED_REPLY_TTL = 471, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 472, - VAR_FAKE_DSA = 473, - VAR_FAKE_SHA1 = 474, - VAR_LOG_IDENTITY = 475, - VAR_HIDE_TRUSTANCHOR = 476, - VAR_TRUST_ANCHOR_SIGNALING = 477, - VAR_AGGRESSIVE_NSEC = 478, - VAR_USE_SYSTEMD = 479, - VAR_SHM_ENABLE = 480, - VAR_SHM_KEY = 481, - VAR_ROOT_KEY_SENTINEL = 482, - VAR_DNSCRYPT = 483, - VAR_DNSCRYPT_ENABLE = 484, - VAR_DNSCRYPT_PORT = 485, - VAR_DNSCRYPT_PROVIDER = 486, - VAR_DNSCRYPT_SECRET_KEY = 487, - VAR_DNSCRYPT_PROVIDER_CERT = 488, - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 489, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 490, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 491, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 492, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 493, - VAR_IPSECMOD_ENABLED = 494, - VAR_IPSECMOD_HOOK = 495, - VAR_IPSECMOD_IGNORE_BOGUS = 496, - VAR_IPSECMOD_MAX_TTL = 497, - VAR_IPSECMOD_WHITELIST = 498, - VAR_IPSECMOD_STRICT = 499, - VAR_CACHEDB = 500, - VAR_CACHEDB_BACKEND = 501, - VAR_CACHEDB_SECRETSEED = 502, - VAR_CACHEDB_REDISHOST = 503, - VAR_CACHEDB_REDISPORT = 504, - VAR_CACHEDB_REDISTIMEOUT = 505, - VAR_CACHEDB_REDISEXPIRERECORDS = 506, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 507, - VAR_FOR_UPSTREAM = 508, - VAR_AUTH_ZONE = 509, - VAR_ZONEFILE = 510, - VAR_MASTER = 511, - VAR_URL = 512, - VAR_FOR_DOWNSTREAM = 513, - VAR_FALLBACK_ENABLED = 514, - VAR_TLS_ADDITIONAL_PORT = 515, - VAR_LOW_RTT = 516, - VAR_LOW_RTT_PERMIL = 517, - VAR_FAST_SERVER_PERMIL = 518, - VAR_FAST_SERVER_NUM = 519, - VAR_ALLOW_NOTIFY = 520, - VAR_TLS_WIN_CERT = 521, - VAR_TCP_CONNECTION_LIMIT = 522, - VAR_FORWARD_NO_CACHE = 523, - VAR_STUB_NO_CACHE = 524, - VAR_LOG_SERVFAIL = 525, - VAR_DENY_ANY = 526, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 527, - VAR_LOG_TAG_QUERYREPLY = 528, - VAR_STREAM_WAIT_SIZE = 529, - VAR_TLS_CIPHERS = 530, - VAR_TLS_CIPHERSUITES = 531, - VAR_TLS_USE_SNI = 532, - VAR_IPSET = 533, - VAR_IPSET_NAME_V4 = 534, - VAR_IPSET_NAME_V6 = 535, - VAR_TLS_SESSION_TICKET_KEYS = 536, - VAR_RPZ = 537, - VAR_TAGS = 538, - VAR_RPZ_ACTION_OVERRIDE = 539, - VAR_RPZ_CNAME_OVERRIDE = 540, - VAR_RPZ_LOG = 541, - VAR_RPZ_LOG_NAME = 542, - VAR_DYNLIB = 543, - VAR_DYNLIB_FILE = 544 + VAR_SERVE_ORIGINAL_TTL = 473, + VAR_FAKE_DSA = 474, + VAR_FAKE_SHA1 = 475, + VAR_LOG_IDENTITY = 476, + VAR_HIDE_TRUSTANCHOR = 477, + VAR_TRUST_ANCHOR_SIGNALING = 478, + VAR_AGGRESSIVE_NSEC = 479, + VAR_USE_SYSTEMD = 480, + VAR_SHM_ENABLE = 481, + VAR_SHM_KEY = 482, + VAR_ROOT_KEY_SENTINEL = 483, + VAR_DNSCRYPT = 484, + VAR_DNSCRYPT_ENABLE = 485, + VAR_DNSCRYPT_PORT = 486, + VAR_DNSCRYPT_PROVIDER = 487, + VAR_DNSCRYPT_SECRET_KEY = 488, + VAR_DNSCRYPT_PROVIDER_CERT = 489, + VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 490, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 491, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 492, + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 493, + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 494, + VAR_IPSECMOD_ENABLED = 495, + VAR_IPSECMOD_HOOK = 496, + VAR_IPSECMOD_IGNORE_BOGUS = 497, + VAR_IPSECMOD_MAX_TTL = 498, + VAR_IPSECMOD_WHITELIST = 499, + VAR_IPSECMOD_STRICT = 500, + VAR_CACHEDB = 501, + VAR_CACHEDB_BACKEND = 502, + VAR_CACHEDB_SECRETSEED = 503, + VAR_CACHEDB_REDISHOST = 504, + VAR_CACHEDB_REDISPORT = 505, + VAR_CACHEDB_REDISTIMEOUT = 506, + VAR_CACHEDB_REDISEXPIRERECORDS = 507, + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 508, + VAR_FOR_UPSTREAM = 509, + VAR_AUTH_ZONE = 510, + VAR_ZONEFILE = 511, + VAR_MASTER = 512, + VAR_URL = 513, + VAR_FOR_DOWNSTREAM = 514, + VAR_FALLBACK_ENABLED = 515, + VAR_TLS_ADDITIONAL_PORT = 516, + VAR_LOW_RTT = 517, + VAR_LOW_RTT_PERMIL = 518, + VAR_FAST_SERVER_PERMIL = 519, + VAR_FAST_SERVER_NUM = 520, + VAR_ALLOW_NOTIFY = 521, + VAR_TLS_WIN_CERT = 522, + VAR_TCP_CONNECTION_LIMIT = 523, + VAR_FORWARD_NO_CACHE = 524, + VAR_STUB_NO_CACHE = 525, + VAR_LOG_SERVFAIL = 526, + VAR_DENY_ANY = 527, + VAR_UNKNOWN_SERVER_TIME_LIMIT = 528, + VAR_LOG_TAG_QUERYREPLY = 529, + VAR_STREAM_WAIT_SIZE = 530, + VAR_TLS_CIPHERS = 531, + VAR_TLS_CIPHERSUITES = 532, + VAR_TLS_USE_SNI = 533, + VAR_IPSET = 534, + VAR_IPSET_NAME_V4 = 535, + VAR_IPSET_NAME_V6 = 536, + VAR_TLS_SESSION_TICKET_KEYS = 537, + VAR_RPZ = 538, + VAR_TAGS = 539, + VAR_RPZ_ACTION_OVERRIDE = 540, + VAR_RPZ_CNAME_OVERRIDE = 541, + VAR_RPZ_LOG = 542, + VAR_RPZ_LOG_NAME = 543, + VAR_DYNLIB = 544, + VAR_DYNLIB_FILE = 545 }; #endif /* Tokens. */ @@ -554,90 +551,92 @@ extern int yydebug; #define VAR_SERVE_EXPIRED_TTL_RESET 470 #define VAR_SERVE_EXPIRED_REPLY_TTL 471 #define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 472 -#define VAR_FAKE_DSA 473 -#define VAR_FAKE_SHA1 474 -#define VAR_LOG_IDENTITY 475 -#define VAR_HIDE_TRUSTANCHOR 476 -#define VAR_TRUST_ANCHOR_SIGNALING 477 -#define VAR_AGGRESSIVE_NSEC 478 -#define VAR_USE_SYSTEMD 479 -#define VAR_SHM_ENABLE 480 -#define VAR_SHM_KEY 481 -#define VAR_ROOT_KEY_SENTINEL 482 -#define VAR_DNSCRYPT 483 -#define VAR_DNSCRYPT_ENABLE 484 -#define VAR_DNSCRYPT_PORT 485 -#define VAR_DNSCRYPT_PROVIDER 486 -#define VAR_DNSCRYPT_SECRET_KEY 487 -#define VAR_DNSCRYPT_PROVIDER_CERT 488 -#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 489 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 490 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 491 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 492 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 493 -#define VAR_IPSECMOD_ENABLED 494 -#define VAR_IPSECMOD_HOOK 495 -#define VAR_IPSECMOD_IGNORE_BOGUS 496 -#define VAR_IPSECMOD_MAX_TTL 497 -#define VAR_IPSECMOD_WHITELIST 498 -#define VAR_IPSECMOD_STRICT 499 -#define VAR_CACHEDB 500 -#define VAR_CACHEDB_BACKEND 501 -#define VAR_CACHEDB_SECRETSEED 502 -#define VAR_CACHEDB_REDISHOST 503 -#define VAR_CACHEDB_REDISPORT 504 -#define VAR_CACHEDB_REDISTIMEOUT 505 -#define VAR_CACHEDB_REDISEXPIRERECORDS 506 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 507 -#define VAR_FOR_UPSTREAM 508 -#define VAR_AUTH_ZONE 509 -#define VAR_ZONEFILE 510 -#define VAR_MASTER 511 -#define VAR_URL 512 -#define VAR_FOR_DOWNSTREAM 513 -#define VAR_FALLBACK_ENABLED 514 -#define VAR_TLS_ADDITIONAL_PORT 515 -#define VAR_LOW_RTT 516 -#define VAR_LOW_RTT_PERMIL 517 -#define VAR_FAST_SERVER_PERMIL 518 -#define VAR_FAST_SERVER_NUM 519 -#define VAR_ALLOW_NOTIFY 520 -#define VAR_TLS_WIN_CERT 521 -#define VAR_TCP_CONNECTION_LIMIT 522 -#define VAR_FORWARD_NO_CACHE 523 -#define VAR_STUB_NO_CACHE 524 -#define VAR_LOG_SERVFAIL 525 -#define VAR_DENY_ANY 526 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 527 -#define VAR_LOG_TAG_QUERYREPLY 528 -#define VAR_STREAM_WAIT_SIZE 529 -#define VAR_TLS_CIPHERS 530 -#define VAR_TLS_CIPHERSUITES 531 -#define VAR_TLS_USE_SNI 532 -#define VAR_IPSET 533 -#define VAR_IPSET_NAME_V4 534 -#define VAR_IPSET_NAME_V6 535 -#define VAR_TLS_SESSION_TICKET_KEYS 536 -#define VAR_RPZ 537 -#define VAR_TAGS 538 -#define VAR_RPZ_ACTION_OVERRIDE 539 -#define VAR_RPZ_CNAME_OVERRIDE 540 -#define VAR_RPZ_LOG 541 -#define VAR_RPZ_LOG_NAME 542 -#define VAR_DYNLIB 543 -#define VAR_DYNLIB_FILE 544 +#define VAR_SERVE_ORIGINAL_TTL 473 +#define VAR_FAKE_DSA 474 +#define VAR_FAKE_SHA1 475 +#define VAR_LOG_IDENTITY 476 +#define VAR_HIDE_TRUSTANCHOR 477 +#define VAR_TRUST_ANCHOR_SIGNALING 478 +#define VAR_AGGRESSIVE_NSEC 479 +#define VAR_USE_SYSTEMD 480 +#define VAR_SHM_ENABLE 481 +#define VAR_SHM_KEY 482 +#define VAR_ROOT_KEY_SENTINEL 483 +#define VAR_DNSCRYPT 484 +#define VAR_DNSCRYPT_ENABLE 485 +#define VAR_DNSCRYPT_PORT 486 +#define VAR_DNSCRYPT_PROVIDER 487 +#define VAR_DNSCRYPT_SECRET_KEY 488 +#define VAR_DNSCRYPT_PROVIDER_CERT 489 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 490 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 491 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 492 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 493 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 494 +#define VAR_IPSECMOD_ENABLED 495 +#define VAR_IPSECMOD_HOOK 496 +#define VAR_IPSECMOD_IGNORE_BOGUS 497 +#define VAR_IPSECMOD_MAX_TTL 498 +#define VAR_IPSECMOD_WHITELIST 499 +#define VAR_IPSECMOD_STRICT 500 +#define VAR_CACHEDB 501 +#define VAR_CACHEDB_BACKEND 502 +#define VAR_CACHEDB_SECRETSEED 503 +#define VAR_CACHEDB_REDISHOST 504 +#define VAR_CACHEDB_REDISPORT 505 +#define VAR_CACHEDB_REDISTIMEOUT 506 +#define VAR_CACHEDB_REDISEXPIRERECORDS 507 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 508 +#define VAR_FOR_UPSTREAM 509 +#define VAR_AUTH_ZONE 510 +#define VAR_ZONEFILE 511 +#define VAR_MASTER 512 +#define VAR_URL 513 +#define VAR_FOR_DOWNSTREAM 514 +#define VAR_FALLBACK_ENABLED 515 +#define VAR_TLS_ADDITIONAL_PORT 516 +#define VAR_LOW_RTT 517 +#define VAR_LOW_RTT_PERMIL 518 +#define VAR_FAST_SERVER_PERMIL 519 +#define VAR_FAST_SERVER_NUM 520 +#define VAR_ALLOW_NOTIFY 521 +#define VAR_TLS_WIN_CERT 522 +#define VAR_TCP_CONNECTION_LIMIT 523 +#define VAR_FORWARD_NO_CACHE 524 +#define VAR_STUB_NO_CACHE 525 +#define VAR_LOG_SERVFAIL 526 +#define VAR_DENY_ANY 527 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 528 +#define VAR_LOG_TAG_QUERYREPLY 529 +#define VAR_STREAM_WAIT_SIZE 530 +#define VAR_TLS_CIPHERS 531 +#define VAR_TLS_CIPHERSUITES 532 +#define VAR_TLS_USE_SNI 533 +#define VAR_IPSET 534 +#define VAR_IPSET_NAME_V4 535 +#define VAR_IPSET_NAME_V6 536 +#define VAR_TLS_SESSION_TICKET_KEYS 537 +#define VAR_RPZ 538 +#define VAR_TAGS 539 +#define VAR_RPZ_ACTION_OVERRIDE 540 +#define VAR_RPZ_CNAME_OVERRIDE 541 +#define VAR_RPZ_LOG 542 +#define VAR_RPZ_LOG_NAME 543 +#define VAR_DYNLIB 544 +#define VAR_DYNLIB_FILE 545 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED + union YYSTYPE { -#line 66 "./util/configparser.y" +#line 66 "./util/configparser.y" /* yacc.c:1909 */ char* str; -#line 639 "util/configparser.h" - +#line 638 "util/configparser.h" /* yacc.c:1909 */ }; + typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 diff --git a/util/configparser.y b/util/configparser.y index eb21abeed..9b300324c 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -147,7 +147,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_ACCESS_CONTROL_TAG_DATA VAR_VIEW VAR_ACCESS_CONTROL_VIEW %token VAR_VIEW_FIRST VAR_SERVE_EXPIRED VAR_SERVE_EXPIRED_TTL %token VAR_SERVE_EXPIRED_TTL_RESET VAR_SERVE_EXPIRED_REPLY_TTL -%token VAR_SERVE_EXPIRED_CLIENT_TIMEOUT VAR_FAKE_DSA +%token VAR_SERVE_EXPIRED_CLIENT_TIMEOUT VAR_SERVE_ORIGINAL_TTL VAR_FAKE_DSA %token VAR_FAKE_SHA1 VAR_LOG_IDENTITY VAR_HIDE_TRUSTANCHOR %token VAR_TRUST_ANCHOR_SIGNALING VAR_AGGRESSIVE_NSEC VAR_USE_SYSTEMD %token VAR_SHM_ENABLE VAR_SHM_KEY VAR_ROOT_KEY_SENTINEL @@ -264,7 +264,8 @@ content_server: server_num_threads | server_verbosity | server_port | server_qname_minimisation_strict | server_serve_expired | server_serve_expired_ttl | server_serve_expired_ttl_reset | server_serve_expired_reply_ttl | server_serve_expired_client_timeout | - server_fake_dsa | server_log_identity | server_use_systemd | + server_serve_original_ttl | server_fake_dsa | + server_log_identity | server_use_systemd | server_response_ip_tag | server_response_ip | server_response_ip_data | server_shm_enable | server_shm_key | server_fake_sha1 | server_hide_trustanchor | server_trust_anchor_signaling | @@ -1816,6 +1817,15 @@ server_serve_expired_client_timeout: VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG free($2); } ; +server_serve_original_ttl: VAR_SERVE_ORIGINAL_TTL STRING_ARG + { + OUTYY(("P(server_serve_original_ttl:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->serve_original_ttl = (strcmp($2, "yes")==0); + free($2); + } + ; server_fake_dsa: VAR_FAKE_DSA STRING_ARG { OUTYY(("P(server_fake_dsa:%s)\n", $2)); diff --git a/util/data/msgencode.c b/util/data/msgencode.c index be69f628a..bf5c9ab43 100644 --- a/util/data/msgencode.c +++ b/util/data/msgencode.c @@ -483,7 +483,9 @@ packed_rrset_encode(struct ub_packed_rrset_key* key, sldns_buffer* pkt, sldns_buffer_write_u32(pkt, SERVE_EXPIRED?SERVE_EXPIRED_REPLY_TTL:0); else sldns_buffer_write_u32(pkt, - data->rr_ttl[j]-timenow); + data->rr_ttl[j]-(timenow == 0 ? 0 : + (SERVE_ORIGINAL_TTL ? + data->ttl_add : timenow))); if(c) { if((r=compress_rdata(pkt, data->rr_data[j], data->rr_len[j], region, tree, c)) @@ -521,7 +523,9 @@ packed_rrset_encode(struct ub_packed_rrset_key* key, sldns_buffer* pkt, sldns_buffer_write_u32(pkt, SERVE_EXPIRED?SERVE_EXPIRED_REPLY_TTL:0); else sldns_buffer_write_u32(pkt, - data->rr_ttl[i]-timenow); + data->rr_ttl[i]-(timenow == 0 ? 0 : + (SERVE_ORIGINAL_TTL ? + data->ttl_add : timenow))); /* rrsig rdata cannot be compressed, perform 100+ byte * memcopy. */ sldns_buffer_write(pkt, data->rr_data[i], diff --git a/util/data/msgparse.h b/util/data/msgparse.h index fd04f9f6f..001cc4fe5 100644 --- a/util/data/msgparse.h +++ b/util/data/msgparse.h @@ -87,6 +87,8 @@ extern time_t SERVE_EXPIRED_TTL; extern time_t SERVE_EXPIRED_REPLY_TTL; /** Negative cache time (for entries without any RRs.) */ #define NORR_TTL 5 /* seconds */ +/** If we serve the original TTL or decrementing TTLs */ +extern int SERVE_ORIGINAL_TTL; /** * Data stored in scratch pad memory during parsing. diff --git a/util/data/msgreply.c b/util/data/msgreply.c index 927bf09a2..5a6c1f853 100644 --- a/util/data/msgreply.c +++ b/util/data/msgreply.c @@ -67,6 +67,8 @@ int SERVE_EXPIRED = 0; time_t SERVE_EXPIRED_TTL = 0; /** TTL to use for expired records */ time_t SERVE_EXPIRED_REPLY_TTL = 30; +/** If we serve the original TTL or decrementing TTLs */ +int SERVE_ORIGINAL_TTL = 0; /** allocate qinfo, return 0 on error */ static int @@ -526,6 +528,7 @@ reply_info_set_ttls(struct reply_info* rep, time_t timenow) for(j=0; jcount + data->rrsig_count; j++) { data->rr_ttl[j] += timenow; } + data->ttl_add = timenow; } } diff --git a/util/data/packed_rrset.c b/util/data/packed_rrset.c index 4b0294f97..6147233ab 100644 --- a/util/data/packed_rrset.c +++ b/util/data/packed_rrset.c @@ -220,6 +220,7 @@ packed_rrset_ttl_add(struct packed_rrset_data* data, time_t add) { size_t i; size_t total = data->count + data->rrsig_count; + data->ttl_add = add; data->ttl += add; for(i=0; irr_ttl[i] += add; @@ -286,7 +287,7 @@ int packed_rr_to_string(struct ub_packed_rrset_key* rrset, size_t i, else sldns_write_uint16(rr+rrset->rk.dname_len, LDNS_RR_TYPE_RRSIG); memmove(rr+rrset->rk.dname_len+2, &rrset->rk.rrset_class, 2); sldns_write_uint32(rr+rrset->rk.dname_len+4, - (uint32_t)(d->rr_ttl[i]-now)); + (uint32_t)(d->rr_ttl[i]-(SERVE_ORIGINAL_TTL ? d->ttl_add : now))); memmove(rr+rrset->rk.dname_len+8, d->rr_data[i], d->rr_len[i]); if(sldns_wire2str_rr_buf(rr, rlen, dest, dest_len) == -1) { log_info("rrbuf failure %d %s", (int)d->rr_len[i], dest); @@ -353,11 +354,12 @@ packed_rrset_copy_region(struct ub_packed_rrset_key* key, for(i=0; icount + d->rrsig_count; i++) { if(d->rr_ttl[i] < now) d->rr_ttl[i] = SERVE_EXPIRED?SERVE_EXPIRED_REPLY_TTL:0; - else d->rr_ttl[i] -= now; + else d->rr_ttl[i] -= SERVE_ORIGINAL_TTL ? data->ttl_add : now; } if(d->ttl < now) d->ttl = SERVE_EXPIRED?SERVE_EXPIRED_REPLY_TTL:0; - else d->ttl -= now; + else d->ttl -= SERVE_ORIGINAL_TTL ? data->ttl_add : now; + d->ttl_add = 0; /* TTLs have been made relative */ return ck; } diff --git a/util/data/packed_rrset.h b/util/data/packed_rrset.h index 729877bab..ff95c0af0 100644 --- a/util/data/packed_rrset.h +++ b/util/data/packed_rrset.h @@ -233,6 +233,9 @@ enum sec_status { * the ttl value to send changes due to time. */ struct packed_rrset_data { + /** Timestamp added to TTLs in the packed data. + * Needed to support serving original TTLs. */ + time_t ttl_add; /** TTL (in seconds like time()) of the rrset. * Same for all RRs see rfc2181(5.2). */ time_t ttl; From ec6fde611c2ed016e22fa9435181c18e48495a7f Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Wed, 15 Jul 2020 15:36:06 +0000 Subject: [PATCH 004/168] Cleaned up adjustment in message encoding, fixes spurious negative TTLs --- util/data/msgencode.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/util/data/msgencode.c b/util/data/msgencode.c index bf5c9ab43..5de9379a1 100644 --- a/util/data/msgencode.c +++ b/util/data/msgencode.c @@ -454,6 +454,7 @@ packed_rrset_encode(struct ub_packed_rrset_key* key, sldns_buffer* pkt, size_t i, j, owner_pos; int r, owner_labs; uint16_t owner_ptr = 0; + time_t adjust = 0; struct packed_rrset_data* data = (struct packed_rrset_data*) key->entry.data; @@ -464,9 +465,12 @@ packed_rrset_encode(struct ub_packed_rrset_key* key, sldns_buffer* pkt, owner_labs = dname_count_labels(key->rk.dname); owner_pos = sldns_buffer_position(pkt); - /* For an rrset with a fixed TTL, use the rrset's TTL as given */ + /** Determine relative time adjustment for TTL values. + * For an rrset with a fixed TTL, use the rrset's TTL as given. */ if((key->rk.flags & PACKED_RRSET_FIXEDTTL) != 0) - timenow = 0; + adjust = 0; + else + adjust = SERVE_ORIGINAL_TTL ? data->ttl_add : timenow; if(do_data) { const sldns_rr_descriptor* c = type_rdata_compressable(key); @@ -479,13 +483,10 @@ packed_rrset_encode(struct ub_packed_rrset_key* key, sldns_buffer* pkt, return r; sldns_buffer_write(pkt, &key->rk.type, 2); sldns_buffer_write(pkt, &key->rk.rrset_class, 2); - if(data->rr_ttl[j] < timenow) + if(data->rr_ttl[j] < adjust) sldns_buffer_write_u32(pkt, SERVE_EXPIRED?SERVE_EXPIRED_REPLY_TTL:0); - else sldns_buffer_write_u32(pkt, - data->rr_ttl[j]-(timenow == 0 ? 0 : - (SERVE_ORIGINAL_TTL ? - data->ttl_add : timenow))); + else sldns_buffer_write_u32(pkt, data->rr_ttl[j]-adjust); if(c) { if((r=compress_rdata(pkt, data->rr_data[j], data->rr_len[j], region, tree, c)) @@ -519,13 +520,10 @@ packed_rrset_encode(struct ub_packed_rrset_key* key, sldns_buffer* pkt, } sldns_buffer_write_u16(pkt, LDNS_RR_TYPE_RRSIG); sldns_buffer_write(pkt, &key->rk.rrset_class, 2); - if(data->rr_ttl[i] < timenow) + if(data->rr_ttl[i] < adjust) sldns_buffer_write_u32(pkt, SERVE_EXPIRED?SERVE_EXPIRED_REPLY_TTL:0); - else sldns_buffer_write_u32(pkt, - data->rr_ttl[i]-(timenow == 0 ? 0 : - (SERVE_ORIGINAL_TTL ? - data->ttl_add : timenow))); + else sldns_buffer_write_u32(pkt, data->rr_ttl[i]-adjust); /* rrsig rdata cannot be compressed, perform 100+ byte * memcopy. */ sldns_buffer_write(pkt, data->rr_data[i], From 506dad946b7388786f11435ebcbd667388d1da9f Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Wed, 29 Jul 2020 15:26:42 +0000 Subject: [PATCH 005/168] Ensure packet_rrset_data is always initialised to zero upon allocation --- dns64/dns64.c | 2 +- respip/respip.c | 2 +- util/data/msgencode.c | 4 ++-- util/data/msgreply.c | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dns64/dns64.c b/dns64/dns64.c index 5c70119a5..39fd8778c 100644 --- a/dns64/dns64.c +++ b/dns64/dns64.c @@ -722,7 +722,7 @@ dns64_synth_aaaa_data(const struct ub_packed_rrset_key* fk, *dd_out = NULL; return; /* integer overflow protection in alloc */ } - if (!(dd = *dd_out = regional_alloc(region, + if (!(dd = *dd_out = regional_alloc_zero(region, sizeof(struct packed_rrset_data) + fd->count * (sizeof(size_t) + sizeof(time_t) + sizeof(uint8_t*) + 2 + 16)))) { diff --git a/respip/respip.c b/respip/respip.c index 6fa4f1885..dd0bed8be 100644 --- a/respip/respip.c +++ b/respip/respip.c @@ -523,7 +523,7 @@ copy_rrset(const struct ub_packed_rrset_key* key, struct regional* region) return NULL; /* guard against integer overflow */ dsize += data->rr_len[i]; } - d = regional_alloc(region, dsize); + d = regional_alloc_zero(region, dsize); if(!d) return NULL; *d = *data; diff --git a/util/data/msgencode.c b/util/data/msgencode.c index 5de9379a1..6798b1799 100644 --- a/util/data/msgencode.c +++ b/util/data/msgencode.c @@ -486,7 +486,7 @@ packed_rrset_encode(struct ub_packed_rrset_key* key, sldns_buffer* pkt, if(data->rr_ttl[j] < adjust) sldns_buffer_write_u32(pkt, SERVE_EXPIRED?SERVE_EXPIRED_REPLY_TTL:0); - else sldns_buffer_write_u32(pkt, data->rr_ttl[j]-adjust); + else sldns_buffer_write_u32(pkt, data->rr_ttl[j]-adjust); if(c) { if((r=compress_rdata(pkt, data->rr_data[j], data->rr_len[j], region, tree, c)) @@ -523,7 +523,7 @@ packed_rrset_encode(struct ub_packed_rrset_key* key, sldns_buffer* pkt, if(data->rr_ttl[i] < adjust) sldns_buffer_write_u32(pkt, SERVE_EXPIRED?SERVE_EXPIRED_REPLY_TTL:0); - else sldns_buffer_write_u32(pkt, data->rr_ttl[i]-adjust); + else sldns_buffer_write_u32(pkt, data->rr_ttl[i]-adjust); /* rrsig rdata cannot be compressed, perform 100+ byte * memcopy. */ sldns_buffer_write(pkt, data->rr_data[i], diff --git a/util/data/msgreply.c b/util/data/msgreply.c index 5a6c1f853..6fce9a732 100644 --- a/util/data/msgreply.c +++ b/util/data/msgreply.c @@ -323,8 +323,8 @@ parse_create_rrset(sldns_buffer* pkt, struct rrset_parse* pset, (sizeof(size_t)+sizeof(uint8_t*)+sizeof(time_t)) + pset->size; if(region) - *data = regional_alloc(region, s); - else *data = malloc(s); + *data = regional_alloc_zero(region, s); + else *data = calloc(1, s); if(!*data) return 0; /* copy & decompress */ From 21f175b1acc8e8766060e71e84a0c1913fc38c23 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Wed, 29 Jul 2020 15:27:15 +0000 Subject: [PATCH 006/168] Adjust semantics of TTL adjustment after feedback from @wcawijngaards --- cachedb/cachedb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cachedb/cachedb.c b/cachedb/cachedb.c index 6a2b735aa..e948a6b0d 100644 --- a/cachedb/cachedb.c +++ b/cachedb/cachedb.c @@ -465,7 +465,7 @@ packed_rrset_ttl_subtract(struct packed_rrset_data* data, time_t subtract) data->rr_ttl[i] -= subtract; else data->rr_ttl[i] = 0; } - data->ttl_add = 0; + data->ttl_add = (subtract < data->ttl_add) ? (data->ttl_add - subtract) : 0; } /* Adjust the TTL of a DNS message and its RRs by 'adjust'. If 'adjust' is From 027884aad26796d810299c1d3c32ba3814f0ff65 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Wed, 29 Jul 2020 15:52:58 +0000 Subject: [PATCH 007/168] Disable enforcing of min/max TTL when serving original TTL --- doc/unbound.conf.5.in | 11 ++++++----- util/data/msgreply.c | 4 ++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 5e826bbf6..8c029411a 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -1126,14 +1126,15 @@ behavior. Default is 0. .TP .B serve\-original\-ttl: \fI If enabled, unbound will always return the original TTL as received from -the upstream authoritative name server rather than the decrementing TTL as +the upstream name server rather than the decrementing TTL as stored in the cache. This feature may be useful if unbound serves as a front-end to a hidden authoritative name server. Enabling this feature does not impact cache expiry, it only changes the TTL unbound embeds in responses to -queries. Note that the returned TTL is still subject to the -configured maximum TTL as set using \fBcache\-max\-ttl\fR (defaults to -86400 seconds). If you wish to return higher original TTL values, you may -need to explicitly adjust the setting for \fBcache\-max\-ttl\fR. +queries. Note that enabling this feature implicitly disables enforcement of +the configured minimum and maximum TTL, as it is assumed users who enable this +feature do not want unbound to change the TTL obtained from an upstream server. +Thus, the values set using \fBcache\-min\-ttl\fR and \fBcache\-max\-ttl\fR are +ignored. Default is "no". .TP .B val\-nsec3\-keysize\-iterations: \fI<"list of values"> diff --git a/util/data/msgreply.c b/util/data/msgreply.c index 6fce9a732..072a69b33 100644 --- a/util/data/msgreply.c +++ b/util/data/msgreply.c @@ -199,9 +199,9 @@ rdata_copy(sldns_buffer* pkt, struct packed_rrset_data* data, uint8_t* to, if(*rr_ttl > MAX_NEG_TTL) *rr_ttl = MAX_NEG_TTL; } - if(*rr_ttl < MIN_TTL) + if(!SERVE_ORIGINAL_TTL && (*rr_ttl < MIN_TTL)) *rr_ttl = MIN_TTL; - if(*rr_ttl > MAX_TTL) + if(!SERVE_ORIGINAL_TTL && (*rr_ttl > MAX_TTL)) *rr_ttl = MAX_TTL; if(*rr_ttl < data->ttl) data->ttl = *rr_ttl; From db6030dd397ded69742ac650baa90776e65059bd Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 6 Oct 2020 10:48:24 +0200 Subject: [PATCH 008/168] Create branch zonemd Add RR Type ZONEMD to RR definitions. --- sldns/rrdef.c | 6 +++++- sldns/rrdef.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/sldns/rrdef.c b/sldns/rrdef.c index 0af015f4b..54051313a 100644 --- a/sldns/rrdef.c +++ b/sldns/rrdef.c @@ -150,6 +150,9 @@ static const sldns_rdf_type type_openpgpkey_wireformat[] = { static const sldns_rdf_type type_csync_wireformat[] = { LDNS_RDF_TYPE_INT32, LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_NSEC }; +static const sldns_rdf_type type_zonemd_wireformat[] = { + LDNS_RDF_TYPE_INT32, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_HEX +}; /* nsec3 is some vars, followed by same type of data of nsec */ static const sldns_rdf_type type_nsec3_wireformat[] = { /* LDNS_RDF_TYPE_NSEC3_VARS, LDNS_RDF_TYPE_NSEC3_NEXT_OWNER, LDNS_RDF_TYPE_NSEC*/ @@ -372,7 +375,8 @@ static sldns_rr_descriptor rdata_field_descriptors[] = { {LDNS_RR_TYPE_OPENPGPKEY, "OPENPGPKEY", 1, 1, type_openpgpkey_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 }, /* 62 */ {LDNS_RR_TYPE_CSYNC, "CSYNC", 3, 3, type_csync_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 }, -{(enum sldns_enum_rr_type)0, "TYPE63", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 }, + /* 63 */ + {LDNS_RR_TYPE_ZONEMD, "ZONEMD", 4, 4, type_zonemd_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 }, {(enum sldns_enum_rr_type)0, "TYPE64", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 }, {(enum sldns_enum_rr_type)0, "TYPE65", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 }, {(enum sldns_enum_rr_type)0, "TYPE66", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 }, diff --git a/sldns/rrdef.h b/sldns/rrdef.h index e084f354a..ece632c3c 100644 --- a/sldns/rrdef.h +++ b/sldns/rrdef.h @@ -195,6 +195,7 @@ enum sldns_enum_rr_type LDNS_RR_TYPE_CDNSKEY = 60, /** RFC 7344 */ LDNS_RR_TYPE_OPENPGPKEY = 61, /* RFC 7929 */ LDNS_RR_TYPE_CSYNC = 62, /* RFC 7477 */ + LDNS_RR_TYPE_ZONEMD = 63, /* draft-ietf-dnsop-dns-zone-digest-12 */ LDNS_RR_TYPE_SPF = 99, /* RFC 4408 */ From ca31ea7dc86ebdc59d64e51256ee443fd2f5009f Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 6 Oct 2020 13:38:21 +0200 Subject: [PATCH 009/168] test rr type parse inputs and print outputs. --- testcode/unitldns.c | 2 +- testdata/test_ldnsrr.5 | 19 +++++++++++++++++++ testdata/test_ldnsrr.c5 | 22 ++++++++++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/testcode/unitldns.c b/testcode/unitldns.c index 22c9ed945..6397f29db 100644 --- a/testcode/unitldns.c +++ b/testcode/unitldns.c @@ -47,7 +47,7 @@ #include "sldns/parseutil.h" /** verbose this unit test */ -static int vbmp = 0; +static int vbmp = 0; /** print buffer to hex into string */ static void diff --git a/testdata/test_ldnsrr.5 b/testdata/test_ldnsrr.5 index d5f4650a7..9be72b4aa 100644 --- a/testdata/test_ldnsrr.5 +++ b/testdata/test_ldnsrr.5 @@ -151,3 +151,22 @@ blabla. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480585012 300 16 k9mSMs2t5vq5FV2D blabla. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480523776 300 16 sBfx00GRs+tfRTm4uRCjyQ== 25791 0 0 blabla. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480585449 300 0 59692 BADSIG 0 blabla. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480585462 300 16 6wvlG82sEVHyqsTtBLvRQw== 26044 NOERROR 0 + +; Test for ZONEMD +example.org. 86400 IN ZONEMD 5 1 2 c1b8eddf4ef128db88125ede9008d6ff0b33a047b8a8a4d77b00271f7d8e7ae5ccd6c86d8398f64f0de0615bf3121ffba6946a3cd5f32acbc4e8d0649b4a78e6 +; from draft-ietf-dnsop-dns-zone-digest-12#section-2.4 +example.com. 86400 IN ZONEMD 2018031500 1 1 ( FEBE3D4CE2EC2FFA4BA99D46CD69D6D29711E55217057BEE 7EB1A7B641A47BA7FED2DD5B97AE499FAFA4F22C6BD647DE ) +; from draft-ietf-dnsop-dns-zone-digest-12#section-A.1 +example. 86400 IN ZONEMD 2018031900 1 1 ( c68090d90a7aed71 6bc459f9340e3d7c 1370d4d24b7e2fc3 a1ddc0b9a87153b9 a9713b3c9ae5cc27 777f98b8e730044c ) +; from draft-ietf-dnsop-dns-zone-digest-12#section-A.2 +example. 86400 IN ZONEMD 2018031900 1 1 ( 31cefb03814f5062 ad12fa951ba0ef5f 8da6ae354a415767 246f7dc932ceb1e7 42a2108f529db6a3 3a11c01493de358d ) +non-apex.example. 900 IN ZONEMD 2018031900 1 1 ( 616c6c6f77656420 6275742069676e6f 7265642e20616c6c 6f77656420627574 2069676e6f726564 2e20616c6c6f7765 ) +; from draft-ietf-dnsop-dns-zone-digest-12#section-A.3 +example. 86400 IN ZONEMD 2018031900 1 1 ( 62e6cf51b02e54b9 b5f967d547ce4313 6792901f9f88e637 493daaf401c92c27 9dd10f0edb1c56f8 080211f8480ee306 ) +example. 86400 IN ZONEMD 2018031900 1 2 ( 08cfa1115c7b948c 4163a901270395ea 226a930cd2cbcf2f a9a5e6eb85f37c8a 4e114d884e66f176 eab121cb02db7d65 2e0cc4827e7a3204 f166b47e5613fd27 ) +example. 86400 IN ZONEMD 2018031900 1 240 ( e2d523f654b9422a 96c5a8f44607bbee ) +example. 86400 IN ZONEMD 2018031900 241 1 ( e1846540e33a9e41 89792d18d5d131f6 05fc283e ) +; from draft-ietf-dnsop-dns-zone-digest-12#section-A.4 +uri.arpa. 3600 IN ZONEMD 2018100702 1 1 ( 1291b78ddf7669b1a39d014d87626b709b55774c5d7d58fa dc556439889a10eaf6f11d615900a4f996bd46279514e473 ) +; from draft-ietf-dnsop-dns-zone-digest-12#section-A.5 +root-servers.net. 3600000 IN ZONEMD 2018091100 1 1 ( f1ca0ccd91bd5573d9f431c00ee0101b2545c97602be0a97 8a3b11dbfc1c776d5b3e86ae3d973d6b5349ba7f04340f79 ) diff --git a/testdata/test_ldnsrr.c5 b/testdata/test_ldnsrr.c5 index 1e292ba64..98c2ed380 100644 --- a/testdata/test_ldnsrr.c5 +++ b/testdata/test_ldnsrr.c5 @@ -188,3 +188,25 @@ blabla. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480523776 300 16 sBfx00GRs+tfRTm4u blabla. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480585449 300 0 59692 BADSIG 0 06626C61626C610000FA00FF00000000003A08686D61632D6D6435077369672D616C670372656703696E74000000583FF0F6012C0010EB0BE51BCDAC1151F2AAC4ED04BBD14365BC00000000 blabla. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480585462 300 16 6wvlG82sEVHyqsTtBLvRQw== 26044 NOERROR 0 +076578616D706C65036F726700003F0001000151800046000000050102C1B8EDDF4EF128DB88125EDE9008D6FF0B33A047B8A8A4D77B00271F7D8E7AE5CCD6C86D8398F64F0DE0615BF3121FFBA6946A3CD5F32ACBC4E8D0649B4A78E6 +example.org. 86400 IN ZONEMD 5 1 2 C1B8EDDF4EF128DB88125EDE9008D6FF0B33A047B8A8A4D77B00271F7D8E7AE5CCD6C86D8398F64F0DE0615BF3121FFBA6946A3CD5F32ACBC4E8D0649B4A78E6 +076578616D706C6503636F6D00003F00010001518000367848B78C0101FEBE3D4CE2EC2FFA4BA99D46CD69D6D29711E55217057BEE7EB1A7B641A47BA7FED2DD5B97AE499FAFA4F22C6BD647DE +example.com. 86400 IN ZONEMD 2018031500 1 1 FEBE3D4CE2EC2FFA4BA99D46CD69D6D29711E55217057BEE7EB1A7B641A47BA7FED2DD5B97AE499FAFA4F22C6BD647DE +076578616D706C6500003F00010001518000367848B91C0101C68090D90A7AED716BC459F9340E3D7C1370D4D24B7E2FC3A1DDC0B9A87153B9A9713B3C9AE5CC27777F98B8E730044C +example. 86400 IN ZONEMD 2018031900 1 1 C68090D90A7AED716BC459F9340E3D7C1370D4D24B7E2FC3A1DDC0B9A87153B9A9713B3C9AE5CC27777F98B8E730044C +076578616D706C6500003F00010001518000367848B91C010131CEFB03814F5062AD12FA951BA0EF5F8DA6AE354A415767246F7DC932CEB1E742A2108F529DB6A33A11C01493DE358D +example. 86400 IN ZONEMD 2018031900 1 1 31CEFB03814F5062AD12FA951BA0EF5F8DA6AE354A415767246F7DC932CEB1E742A2108F529DB6A33A11C01493DE358D +086E6F6E2D61706578076578616D706C6500003F00010000038400367848B91C0101616C6C6F776564206275742069676E6F7265642E20616C6C6F776564206275742069676E6F7265642E20616C6C6F7765 +non-apex.example. 900 IN ZONEMD 2018031900 1 1 616C6C6F776564206275742069676E6F7265642E20616C6C6F776564206275742069676E6F7265642E20616C6C6F7765 +076578616D706C6500003F00010001518000367848B91C010162E6CF51B02E54B9B5F967D547CE43136792901F9F88E637493DAAF401C92C279DD10F0EDB1C56F8080211F8480EE306 +example. 86400 IN ZONEMD 2018031900 1 1 62E6CF51B02E54B9B5F967D547CE43136792901F9F88E637493DAAF401C92C279DD10F0EDB1C56F8080211F8480EE306 +076578616D706C6500003F00010001518000467848B91C010208CFA1115C7B948C4163A901270395EA226A930CD2CBCF2FA9A5E6EB85F37C8A4E114D884E66F176EAB121CB02DB7D652E0CC4827E7A3204F166B47E5613FD27 +example. 86400 IN ZONEMD 2018031900 1 2 08CFA1115C7B948C4163A901270395EA226A930CD2CBCF2FA9A5E6EB85F37C8A4E114D884E66F176EAB121CB02DB7D652E0CC4827E7A3204F166B47E5613FD27 +076578616D706C6500003F00010001518000167848B91C01F0E2D523F654B9422A96C5A8F44607BBEE +example. 86400 IN ZONEMD 2018031900 1 240 E2D523F654B9422A96C5A8F44607BBEE +076578616D706C6500003F000100015180001A7848B91CF101E1846540E33A9E4189792D18D5D131F605FC283E +example. 86400 IN ZONEMD 2018031900 241 1 E1846540E33A9E4189792D18D5D131F605FC283E +03757269046172706100003F000100000E1000367849C5DE01011291B78DDF7669B1A39D014D87626B709B55774C5D7D58FADC556439889A10EAF6F11D615900A4F996BD46279514E473 +uri.arpa. 3600 IN ZONEMD 2018100702 1 1 1291B78DDF7669B1A39D014D87626B709B55774C5D7D58FADC556439889A10EAF6F11D615900A4F996BD46279514E473 +0C726F6F742D73657276657273036E657400003F00010036EE8000367849A05C0101F1CA0CCD91BD5573D9F431C00EE0101B2545C97602BE0A978A3B11DBFC1C776D5B3E86AE3D973D6B5349BA7F04340F79 +root-servers.net. 3600000 IN ZONEMD 2018091100 1 1 F1CA0CCD91BD5573D9F431C00EE0101B2545C97602BE0A978A3B11DBFC1C776D5B3E86AE3D973D6B5349BA7F04340F79 From 3163a93121cae6826484c95db4c2ac8d88d94073 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 6 Oct 2020 17:07:24 +0200 Subject: [PATCH 010/168] zonemd, loop over zone and canonicalize data, test call in unit test. --- services/authzone.c | 364 ++++++++++++++++++++++++++++++++++ services/authzone.h | 35 ++++ testcode/unitauth.c | 8 +- testcode/unitmain.c | 47 +++++ testdata/zonemd.example1.zone | 4 + validator/val_sigcrypt.c | 53 +++++ validator/val_sigcrypt.h | 12 ++ 7 files changed, 519 insertions(+), 4 deletions(-) create mode 100644 testdata/zonemd.example1.zone diff --git a/services/authzone.c b/services/authzone.c index a26d1003a..b4217bd55 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -68,6 +68,7 @@ #include "sldns/keyraw.h" #include "validator/val_nsec3.h" #include "validator/val_secalgo.h" +#include "validator/val_sigcrypt.h" #include /** bytes to use for NSEC3 hash buffer. 20 for sha1 */ @@ -6965,3 +6966,366 @@ compare_serial(uint32_t a, uint32_t b) return 1; } } + +/** returns true if a zonemd hash algo is supported */ +static int zonemd_hashalgo_supported(int hashalgo) +{ + if(hashalgo == 1) return 1; + if(hashalgo == 2) return 1; + return 0; +} + +/** returns true if a zonemd scheme is supported */ +static int zonemd_scheme_supported(int scheme) +{ + if(scheme == 1) return 1; + return 0; +} + +/** initialize hash for hashing with zonemd hash algo */ +static void* zonemd_digest_init(int hashalgo) +{ + if(hashalgo == 1) { + /* sha384 */ + //return secalgo_digest_start_sha384(); + } else if(hashalgo == 2) { + /* sha512 */ + //return secalgo_digest_start_sha512(); + } + /* unknown hash algo */ + return NULL; +} + +/** add rrsets from node to the list */ +static size_t authdata_rrsets_to_list(struct auth_rrset** array, + size_t arraysize, struct auth_rrset* first) +{ + struct auth_rrset* rrset = first; + size_t num = 0; + while(rrset) { + if(num+1 >= arraysize) + return num; + array[num] = rrset; + num++; + rrset = rrset->next; + } + return num; +} + +/** compare rr list entries */ +static int rrlist_compare(const void* arg1, const void* arg2) +{ + struct auth_rrset* r1 = *(struct auth_rrset**)arg1; + struct auth_rrset* r2 = *(struct auth_rrset**)arg2; + uint16_t t1, t2; + if(r1 == NULL) t1 = LDNS_RR_TYPE_RRSIG; + else t1 = r1->type; + if(r2 == NULL) t2 = LDNS_RR_TYPE_RRSIG; + else t2 = r2->type; + if(t1 < t2) + return -1; + if(t1 > t2) + return 1; + return 0; +} + +/** add type RRSIG to rr list if not one there already, + * this is to perform RRSIG collate processing at that point. */ +static void addrrsigtype_if_needed(struct auth_rrset** array, + size_t arraysize, size_t* rrnum, struct auth_data* node) +{ + if(az_domain_rrset(node, LDNS_RR_TYPE_RRSIG)) + return; /* already one there */ + if((*rrnum)+1 >= arraysize) + return; /* array too small? */ + array[*rrnum] = NULL; /* nothing there, but need entry in list */ + (*rrnum)++; +} + +/** collate the RRs in an RRset using the simple scheme */ +static int zonemd_simple_rrset(struct auth_zone* z, void* hash, + struct auth_data* node, struct auth_rrset* rrset, + struct regional* region, struct sldns_buffer* buf, char** reason) +{ + /* canonicalize */ + struct ub_packed_rrset_key key; + memset(&key, 0, sizeof(key)); + key.entry.key = &key; + key.entry.data = rrset->data; + key.rk.dname = node->name; + key.rk.dname_len = node->namelen; + key.rk.type = htons(rrset->type); + key.rk.rrset_class = htons(z->dclass); + if(!rrset_canonicalize_to_buffer(region, buf, &key)) { + *reason = "out of memory"; + return 0; + } + regional_free_all(region); + + /* hash */ + return 1; +} + +/** count number of RRSIGs in a domain name rrset list */ +static size_t zonemd_simple_count_rrsig(struct auth_rrset* rrset, + struct auth_rrset** rrlist, size_t rrnum, + struct auth_zone* z, struct auth_data* node) +{ + size_t i, count = 0; + if(rrset) { + size_t j; + for(j = 0; jdata->count; j++) { + if(rrsig_rdata_get_type_covered(rrset->data-> + rr_data[j], rrset->data->rr_len[j]) == + LDNS_RR_TYPE_ZONEMD && + query_dname_compare(z->name, node->name)==0) { + /* omit RRSIGs over type ZONEMD at apex */ + continue; + } + count++; + } + } + for(i=0; itype == LDNS_RR_TYPE_ZONEMD && + query_dname_compare(z->name, node->name)==0) { + /* omit RRSIGs over type ZONEMD at apex */ + continue; + } + count += (rrlist[i]?rrlist[i]->data->rrsig_count:0); + } + return count; +} + +/** allocate sparse rrset data for the number of entries in tepm region */ +static int zonemd_simple_rrsig_allocs(struct regional* region, + struct packed_rrset_data* data, size_t count) +{ + data->rr_len = regional_alloc(region, sizeof(*data->rr_len) * count); + if(!data->rr_len) { + return 0; + } + data->rr_ttl = regional_alloc(region, sizeof(*data->rr_ttl) * count); + if(!data->rr_ttl) { + return 0; + } + data->rr_data = regional_alloc(region, sizeof(*data->rr_data) * count); + if(!data->rr_data) { + return 0; + } + return 1; +} + +/** add the RRSIGs from the rrs in the domain into the data */ +static void add_rrlist_rrsigs_into_data(struct packed_rrset_data* data, + size_t* done, struct auth_rrset** rrlist, size_t rrnum, + struct auth_zone* z, struct auth_data* node) +{ + size_t i; + for(i=0; itype == LDNS_RR_TYPE_ZONEMD && + query_dname_compare(z->name, node->name)==0) { + /* omit RRSIGs over type ZONEMD at apex */ + continue; + } + for(j = 0; jdata->rrsig_count; j++) { + data->rr_len[*done] = rrlist[i]->data->rr_len[rrlist[i]->data->count + j]; + data->rr_ttl[*done] = rrlist[i]->data->rr_ttl[rrlist[i]->data->count + j]; + /* reference the rdata in the rrset, no need to + * copy it, it is no longer need at the end of + * the routine */ + data->rr_data[*done] = rrlist[i]->data->rr_data[rrlist[i]->data->count + j]; + (*done)++; + } + } +} + +static void add_rrset_into_data(struct packed_rrset_data* data, + size_t* done, struct auth_rrset* rrset, + struct auth_zone* z, struct auth_data* node) +{ + if(rrset) { + size_t j; + for(j = 0; jdata->count; j++) { + if(rrsig_rdata_get_type_covered(rrset->data-> + rr_data[j], rrset->data->rr_len[j]) == + LDNS_RR_TYPE_ZONEMD && + query_dname_compare(z->name, node->name)==0) { + /* omit RRSIGs over type ZONEMD at apex */ + continue; + } + data->rr_len[*done] = rrset->data->rr_len[j]; + data->rr_ttl[*done] = rrset->data->rr_ttl[j]; + /* reference the rdata in the rrset, no need to + * copy it, it is no longer need at the end of + * the routine */ + data->rr_data[*done] = rrset->data->rr_data[j]; + (*done)++; + } + } +} + +/** collate the RRSIGs using the simple scheme */ +static int zonemd_simple_rrsig(struct auth_zone* z, void* hash, + struct auth_data* node, struct auth_rrset* rrset, + struct auth_rrset** rrlist, size_t rrnum, struct regional* region, + struct sldns_buffer* buf, char** reason) +{ + /* the rrset pointer can be NULL, this means it is type RRSIG and + * there is no ordinary type RRSIG there. The RRSIGs are stored + * with the RRsets in their data. + * + * The RRset pointer can be nonNULL. This happens if there is + * no RR that is covered by the RRSIG for the domain. Then this + * RRSIG RR is stored in an rrset of type RRSIG. The other RRSIGs + * are stored in the rrset entries for the RRs in the rr list for + * the domain node. We need to collate the rrset's data, if any, and + * the rrlist's rrsigs */ + /* if this is the apex, omit RRSIGs that cover type ZONEMD */ + /* build rrsig rrset */ + size_t done = 0; + struct ub_packed_rrset_key key; + struct packed_rrset_data data; + memset(&key, 0, sizeof(key)); + memset(&data, 0, sizeof(data)); + key.entry.key = &key; + key.entry.data = &data; + key.rk.dname = node->name; + key.rk.dname_len = node->namelen; + key.rk.type = htons(rrset->type); + key.rk.rrset_class = htons(z->dclass); + data.count = zonemd_simple_count_rrsig(rrset, rrlist, rrnum, z, node); + if(!zonemd_simple_rrsig_allocs(region, &data, data.count)) { + *reason = "out of memory"; + regional_free_all(region); + return 0; + } + /* all the RRSIGs stored in the other rrsets for this domain node */ + add_rrlist_rrsigs_into_data(&data, &done, rrlist, rrnum, z, node); + /* plus the RRSIGs stored in an rrset of type RRSIG for this node */ + add_rrset_into_data(&data, &done, rrset, z, node); + + /* canonicalize */ + if(!rrset_canonicalize_to_buffer(region, buf, &key)) { + *reason = "out of memory"; + regional_free_all(region); + return 0; + } + regional_free_all(region); + + /* hash */ + return 1; +} + +/** collate a domain's rrsets using the simple scheme */ +static int zonemd_simple_domain(struct auth_zone* z, void* hash, + struct auth_data* node, struct regional* region, + struct sldns_buffer* buf, char** reason) +{ + const size_t rrlistsize = 65536; + struct auth_rrset* rrlist[rrlistsize]; + size_t i, rrnum = 0; + /* see if the domain is out of scope, the zone origin, + * that would be omitted */ + if(!dname_subdomain_c(node->name, z->name)) + return 1; /* continue */ + /* loop over the rrsets in ascending order. */ + rrnum = authdata_rrsets_to_list(rrlist, rrlistsize, node->rrsets); + addrrsigtype_if_needed(rrlist, rrlistsize, &rrnum, node); + qsort(rrlist, rrnum, sizeof(*rrlist), rrlist_compare); + for(i=0; itype == LDNS_RR_TYPE_ZONEMD && + query_dname_compare(z->name, node->name) == 0) { + /* omit type ZONEMD at apex */ + continue; + } + if(rrlist[i] == NULL || rrlist[i]->type == + LDNS_RR_TYPE_RRSIG) { + if(!zonemd_simple_rrsig(z, hash, node, rrlist[i], + rrlist, rrnum, region, buf, reason)) + return 0; + } else if(!zonemd_simple_rrset(z, hash, node, rrlist[i], + region, buf, reason)) { + return 0; + } + } + return 1; +} + +/** collate the zone using the simple scheme */ +static int zonemd_simple_collate(struct auth_zone* z, void* hash, + struct regional* region, struct sldns_buffer* buf, char** reason) +{ + /* our tree is sorted in canonical order, so we can just loop over + * the tree */ + struct auth_data* n; + RBTREE_FOR(n, struct auth_data*, &z->data) { + if(!zonemd_simple_domain(z, hash, n, region, buf, reason)) + return 0; + } + return 1; +} + +int auth_zone_generate_zonemd_hash(struct auth_zone* z, int scheme, + int hashalgo, uint8_t* hash, size_t hashlen, size_t* resultlen, + struct regional* region, struct sldns_buffer* buf, char** reason) +{ + void* h = zonemd_digest_init(hashalgo); + if(!h) { + *reason = "digest init fail"; + return 0; + } + if(scheme == 1) { + if(!zonemd_simple_collate(z, h, region, buf, reason)) { + if(!*reason) *reason = "scheme simple collate fail"; + return 0; + } + } + /* + if(!zonemd_digest_finish(hashalgo, hash, hashlen, resultlen)) { + *reason = "digest finish fail"; + return 0; + } + */ + return 1; +} + +int auth_zone_generate_zonemd_check(struct auth_zone* z, int scheme, + int hashalgo, uint8_t* hash, size_t hashlen, struct regional* region, + struct sldns_buffer* buf, char** reason) +{ + uint8_t gen[512]; + size_t genlen = 0; + if(!zonemd_hashalgo_supported(hashalgo)) { + *reason = "unsupported algorithm"; + return 0; + } + if(!zonemd_scheme_supported(scheme)) { + *reason = "unsupported scheme"; + return 0; + } + if(hashlen < 12) { + /* the ZONEMD draft requires digests to fail if too small */ + *reason = "digest length too small, less than 12"; + return 0; + } + /* generate digest */ + if(!auth_zone_generate_zonemd_hash(z, scheme, hashalgo, gen, + sizeof(gen), &genlen, region, buf, reason)) { + /* reason filled in by zonemd hash routine */ + return 0; + } + /* check digest length */ + if(hashlen != genlen) { + *reason = "incorrect digest length"; + return 0; + } + /* check digest */ + if(memcmp(hash, gen, genlen) != 0) { + *reason = "incorrect digest"; + return 0; + } + return 1; +} diff --git a/services/authzone.h b/services/authzone.h index 3d94f30d6..813fc0e87 100644 --- a/services/authzone.h +++ b/services/authzone.h @@ -685,4 +685,39 @@ void auth_xfer_transfer_lookup_callback(void* arg, int rcode, */ int compare_serial(uint32_t a, uint32_t b); +/** + * Generate ZONEMD digest for the auth zone. + * @param z: the auth zone to digest. + * omits zonemd at apex and its RRSIG from the digest. + * @param scheme: the collation scheme to use. Numbers as defined for ZONEMD. + * @param hashalgo: the hash algo, from the registry defined for ZONEMD type. + * @param hash: the result buffer. + * @param buflen: size of the result buffer, must be large enough. or the + * routine fails. + * @param resultlen: size of the hash in the result buffer of the result. + * @param region: temp region for allocs during canonicalisation. + * @param buf: temp buffer during canonicalisation. + * @param reason: failure reason, returns a string, NULL on success. + * @return false on failure. + */ +int auth_zone_generate_zonemd_hash(struct auth_zone* z, int scheme, + int hashalgo, uint8_t* hash, size_t buflen, size_t* resultlen, + struct regional* region, struct sldns_buffer* buf, char** reason); + +/** + * Check ZONEMD digest for the auth zone. + * @param z: auth zone to digest. + * @param scheme: zonemd scheme. + * @param hashalgo: zonemd hash algorithm. + * @param hash: the hash to check. + * @param buflen: length of hash buffer. + * @param region: temp region for allocs during canonicalisation. + * @param buf: temp buffer during canonicalisation. + * @param reason: string returned with failure reason. + * @return false on failure. + */ +int auth_zone_generate_zonemd_check(struct auth_zone* z, int scheme, + int hashalgo, uint8_t* hash, size_t hashlen, struct regional* region, + struct sldns_buffer* buf, char** reason); + #endif /* SERVICES_AUTHZONE_H */ diff --git a/testcode/unitauth.c b/testcode/unitauth.c index 4b3410c9e..184573ab6 100644 --- a/testcode/unitauth.c +++ b/testcode/unitauth.c @@ -517,8 +517,8 @@ del_tmp_file(char* fname) } /** Add zone from file for testing */ -static struct auth_zone* -addzone(struct auth_zones* az, const char* name, char* fname) +struct auth_zone* +authtest_addzone(struct auth_zones* az, const char* name, char* fname) { struct auth_zone* z; size_t nmlen; @@ -593,7 +593,7 @@ check_read_exact(const char* name, const char* zone) az = auth_zones_create(); unit_assert(az); - z = addzone(az, name, fname); + z = authtest_addzone(az, name, fname); unit_assert(z); outf = create_tmp_file(NULL); if(!auth_zone_write_file(z, outf)) { @@ -844,7 +844,7 @@ check_queries(const char* name, const char* zone, struct q_ans* queries) fname = create_tmp_file(zone); az = auth_zones_create(); if(!az) fatal_exit("out of memory"); - z = addzone(az, name, fname); + z = authtest_addzone(az, name, fname); if(!z) fatal_exit("could not read zone for queries test"); del_tmp_file(fname); diff --git a/testcode/unitmain.c b/testcode/unitmain.c index a42be424e..df560a466 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -839,6 +839,52 @@ static void respip_test(void) respip_conf_actions_test(); } +#include "services/authzone.h" +#include "util/data/dname.h" +#include "util/regional.h" +/** Add zone from file for testing */ +struct auth_zone* authtest_addzone(struct auth_zones* az, const char* name, + char* fname); +/** zonemd unit tests */ +static void zonemd_test(void) +{ + uint8_t zonemd_hash[512]; + struct auth_zones* az; + struct auth_zone* z; + int scheme = 1, hashalgo = 2; + size_t hashlen = 0; + int result; + char* reason = NULL; + struct regional* region = NULL; + struct sldns_buffer* buf = NULL; + unit_show_feature("zonemd"); + region = regional_create(); + unit_assert(region); + buf = sldns_buffer_new(65535); + unit_assert(buf); + az = auth_zones_create(); + unit_assert(az); + z = authtest_addzone(az, "example.org", "testdata/zonemd.example1.zone"); + unit_assert(z); + + /* zonemd test on zone */ + result = auth_zone_generate_zonemd_hash(z, scheme, hashalgo, + zonemd_hash, sizeof(zonemd_hash), &hashlen, region, buf, + &reason); + if(reason) printf("zonemd failure reason: %s\n", reason); + unit_assert(result); + if(1) { + char zname[255+1]; + dname_str(z->name, zname); + printf("zonemd generated for %s in %s with scheme=%d, hashalgo=%d\n", zname, z->zonefile, scheme, hashalgo); + log_hex("digest", zonemd_hash, hashlen); + } + + auth_zones_delete(az); + regional_destroy(region); + sldns_buffer_free(buf); +} + void unit_show_func(const char* file, const char* func) { printf("test %s:%s\n", file, func); @@ -889,6 +935,7 @@ main(int argc, char* argv[]) fatal_exit("could not init NSS"); #endif /* HAVE_SSL or HAVE_NSS*/ checklock_start(); + zonemd_test(); authzone_test(); neg_test(); rnd_test(); diff --git a/testdata/zonemd.example1.zone b/testdata/zonemd.example1.zone new file mode 100644 index 000000000..b1a44895f --- /dev/null +++ b/testdata/zonemd.example1.zone @@ -0,0 +1,4 @@ +example.org. IN SOA ns.example.org. hostmaster.example.org. 200154054 28800 7200 604800 3600 +example.org. IN NS ns.example.org. +www.example.org. IN A 127.0.0.1 +ns.example.org. IN A 127.0.0.1 diff --git a/validator/val_sigcrypt.c b/validator/val_sigcrypt.c index de730f681..10cf2caee 100644 --- a/validator/val_sigcrypt.c +++ b/validator/val_sigcrypt.c @@ -1199,6 +1199,59 @@ rrset_canonical(struct regional* region, sldns_buffer* buf, return 1; } +int +rrset_canonicalize_to_buffer(struct regional* region, sldns_buffer* buf, + struct ub_packed_rrset_key* k) +{ + struct rbtree_type* sortree = NULL; + struct packed_rrset_data* d = (struct packed_rrset_data*)k->entry.data; + uint8_t* can_owner = NULL; + size_t can_owner_len = 0; + struct canon_rr* walk; + struct canon_rr* rrs; + + sortree = (struct rbtree_type*)regional_alloc(region, + sizeof(rbtree_type)); + if(!sortree) + return 0; + if(d->count > RR_COUNT_MAX) + return 0; /* integer overflow protection */ + rrs = regional_alloc(region, sizeof(struct canon_rr)*d->count); + if(!rrs) { + return 0; + } + rbtree_init(sortree, &canonical_tree_compare); + canonical_sort(k, d, sortree, rrs); + + sldns_buffer_clear(buf); + RBTREE_FOR(walk, struct canon_rr*, sortree) { + /* see if there is enough space left in the buffer */ + if(sldns_buffer_remaining(buf) < can_owner_len + 2 + 2 + 4 + + d->rr_len[walk->rr_idx]) { + log_err("verify: failed to canonicalize, " + "rrset too big"); + return 0; + } + /* determine canonical owner name */ + if(can_owner) + sldns_buffer_write(buf, can_owner, can_owner_len); + else { + can_owner = sldns_buffer_current(buf); + sldns_buffer_write(buf, k->rk.dname, k->rk.dname_len); + query_dname_tolower(can_owner); + can_owner_len = k->rk.dname_len; + } + sldns_buffer_write(buf, &k->rk.type, 2); + sldns_buffer_write(buf, &k->rk.rrset_class, 2); + sldns_buffer_write_u32(buf, d->rr_ttl[walk->rr_idx]); + sldns_buffer_write(buf, d->rr_data[walk->rr_idx], + d->rr_len[walk->rr_idx]); + canonicalize_rdata(buf, k, d->rr_len[walk->rr_idx]); + } + sldns_buffer_flip(buf); + return 1; +} + /** pretty print rrsig error with dates */ static void sigdate_error(const char* str, int32_t expi, int32_t incep, int32_t now) diff --git a/validator/val_sigcrypt.h b/validator/val_sigcrypt.h index 755a1d6e1..23ca1d91b 100644 --- a/validator/val_sigcrypt.h +++ b/validator/val_sigcrypt.h @@ -334,4 +334,16 @@ int canonical_tree_compare(const void* k1, const void* k2); int rrset_canonical_equal(struct regional* region, struct ub_packed_rrset_key* k1, struct ub_packed_rrset_key* k2); +/** + * Canonicalize an rrset into the buffer. For an auth zone record, so + * this does not use a signature, or the RRSIG TTL or the wildcard label + * count from the RRSIG. + * @param region: temporary region. + * @param buf: the buffer to use. + * @param k: the rrset to insert. + * @return false on alloc error. + */ +int rrset_canonicalize_to_buffer(struct regional* region, + struct sldns_buffer* buf, struct ub_packed_rrset_key* k); + #endif /* VALIDATOR_VAL_SIGCRYPT_H */ From eb4932a463f594732fd2e91285300b85e97463b1 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 9 Oct 2020 11:19:31 +0200 Subject: [PATCH 011/168] zonemd, digest code calls, secalgo openssl sha384 and sha512. --- services/authzone.c | 128 +++++++++++++++++++++++++++++++--------- validator/val_secalgo.c | 63 ++++++++++++++++++++ validator/val_secalgo.h | 43 ++++++++++++++ 3 files changed, 207 insertions(+), 27 deletions(-) diff --git a/services/authzone.c b/services/authzone.c index b4217bd55..208c0b825 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -6983,19 +6983,79 @@ static int zonemd_scheme_supported(int scheme) } /** initialize hash for hashing with zonemd hash algo */ -static void* zonemd_digest_init(int hashalgo) +static struct secalgo_hash* zonemd_digest_init(int hashalgo, char** reason) { + struct secalgo_hash *h; if(hashalgo == 1) { /* sha384 */ - //return secalgo_digest_start_sha384(); + h = secalgo_hash_create_sha384(); + if(!h) + *reason = "digest sha384 could not be created"; + return h; } else if(hashalgo == 2) { /* sha512 */ - //return secalgo_digest_start_sha512(); + h = secalgo_hash_create_sha512(); + if(!h) + *reason = "digest sha512 could not be created"; + return h; } /* unknown hash algo */ + *reason = "unsupported algorithm"; return NULL; } +/** update the hash for zonemd */ +static int zonemd_digest_update(int hashalgo, struct secalgo_hash* h, + uint8_t* data, size_t len, char** reason) +{ + if(hashalgo == 1) { + if(!secalgo_hash_update(h, data, len)) { + *reason = "digest sha384 failed"; + return 0; + } + return 1; + } else if(hashalgo == 2) { + if(!secalgo_hash_update(h, data, len)) { + *reason = "digest sha512 failed"; + return 0; + } + return 1; + } + /* unknown hash algo */ + *reason = "unsupported algorithm"; + return 0; +} + +/** finish the hash for zonemd */ +static int zonemd_digest_finish(int hashalgo, struct secalgo_hash* h, + uint8_t* result, size_t hashlen, size_t* resultlen, char** reason) +{ + if(hashalgo == 1) { + if(hashlen < 384/8) { + *reason = "digest buffer too small for sha384"; + return 0; + } + if(!secalgo_hash_final(h, result, hashlen, resultlen)) { + *reason = "digest sha384 finish failed"; + return 0; + } + return 1; + } else if(hashalgo == 2) { + if(hashlen < 512/8) { + *reason = "digest buffer too small for sha512"; + return 0; + } + if(!secalgo_hash_final(h, result, hashlen, resultlen)) { + *reason = "digest sha512 finish failed"; + return 0; + } + return 1; + } + /* unknown algo */ + *reason = "unsupported algorithm"; + return 0; +} + /** add rrsets from node to the list */ static size_t authdata_rrsets_to_list(struct auth_rrset** array, size_t arraysize, struct auth_rrset* first) @@ -7043,9 +7103,10 @@ static void addrrsigtype_if_needed(struct auth_rrset** array, } /** collate the RRs in an RRset using the simple scheme */ -static int zonemd_simple_rrset(struct auth_zone* z, void* hash, - struct auth_data* node, struct auth_rrset* rrset, - struct regional* region, struct sldns_buffer* buf, char** reason) +static int zonemd_simple_rrset(struct auth_zone* z, int hashalgo, + struct secalgo_hash* h, struct auth_data* node, + struct auth_rrset* rrset, struct regional* region, + struct sldns_buffer* buf, char** reason) { /* canonicalize */ struct ub_packed_rrset_key key; @@ -7063,6 +7124,10 @@ static int zonemd_simple_rrset(struct auth_zone* z, void* hash, regional_free_all(region); /* hash */ + if(!zonemd_digest_update(hashalgo, h, sldns_buffer_begin(buf), + sldns_buffer_limit(buf), reason)) { + return 0; + } return 1; } @@ -7168,10 +7233,10 @@ static void add_rrset_into_data(struct packed_rrset_data* data, } /** collate the RRSIGs using the simple scheme */ -static int zonemd_simple_rrsig(struct auth_zone* z, void* hash, - struct auth_data* node, struct auth_rrset* rrset, - struct auth_rrset** rrlist, size_t rrnum, struct regional* region, - struct sldns_buffer* buf, char** reason) +static int zonemd_simple_rrsig(struct auth_zone* z, int hashalgo, + struct secalgo_hash* h, struct auth_data* node, + struct auth_rrset* rrset, struct auth_rrset** rrlist, size_t rrnum, + struct regional* region, struct sldns_buffer* buf, char** reason) { /* the rrset pointer can be NULL, this means it is type RRSIG and * there is no ordinary type RRSIG there. The RRSIGs are stored @@ -7194,7 +7259,7 @@ static int zonemd_simple_rrsig(struct auth_zone* z, void* hash, key.entry.data = &data; key.rk.dname = node->name; key.rk.dname_len = node->namelen; - key.rk.type = htons(rrset->type); + key.rk.type = htons(LDNS_RR_TYPE_RRSIG); key.rk.rrset_class = htons(z->dclass); data.count = zonemd_simple_count_rrsig(rrset, rrlist, rrnum, z, node); if(!zonemd_simple_rrsig_allocs(region, &data, data.count)) { @@ -7216,13 +7281,17 @@ static int zonemd_simple_rrsig(struct auth_zone* z, void* hash, regional_free_all(region); /* hash */ + if(!zonemd_digest_update(hashalgo, h, sldns_buffer_begin(buf), + sldns_buffer_limit(buf), reason)) { + return 0; + } return 1; } /** collate a domain's rrsets using the simple scheme */ -static int zonemd_simple_domain(struct auth_zone* z, void* hash, - struct auth_data* node, struct regional* region, - struct sldns_buffer* buf, char** reason) +static int zonemd_simple_domain(struct auth_zone* z, int hashalgo, + struct secalgo_hash* h, struct auth_data* node, + struct regional* region, struct sldns_buffer* buf, char** reason) { const size_t rrlistsize = 65536; struct auth_rrset* rrlist[rrlistsize]; @@ -7243,11 +7312,11 @@ static int zonemd_simple_domain(struct auth_zone* z, void* hash, } if(rrlist[i] == NULL || rrlist[i]->type == LDNS_RR_TYPE_RRSIG) { - if(!zonemd_simple_rrsig(z, hash, node, rrlist[i], - rrlist, rrnum, region, buf, reason)) + if(!zonemd_simple_rrsig(z, hashalgo, h, node, + rrlist[i], rrlist, rrnum, region, buf, reason)) return 0; - } else if(!zonemd_simple_rrset(z, hash, node, rrlist[i], - region, buf, reason)) { + } else if(!zonemd_simple_rrset(z, hashalgo, h, node, + rrlist[i], region, buf, reason)) { return 0; } } @@ -7255,14 +7324,16 @@ static int zonemd_simple_domain(struct auth_zone* z, void* hash, } /** collate the zone using the simple scheme */ -static int zonemd_simple_collate(struct auth_zone* z, void* hash, - struct regional* region, struct sldns_buffer* buf, char** reason) +static int zonemd_simple_collate(struct auth_zone* z, int hashalgo, + struct secalgo_hash* h, struct regional* region, + struct sldns_buffer* buf, char** reason) { /* our tree is sorted in canonical order, so we can just loop over * the tree */ struct auth_data* n; RBTREE_FOR(n, struct auth_data*, &z->data) { - if(!zonemd_simple_domain(z, hash, n, region, buf, reason)) + if(!zonemd_simple_domain(z, hashalgo, h, n, region, buf, + reason)) return 0; } return 1; @@ -7272,23 +7343,26 @@ int auth_zone_generate_zonemd_hash(struct auth_zone* z, int scheme, int hashalgo, uint8_t* hash, size_t hashlen, size_t* resultlen, struct regional* region, struct sldns_buffer* buf, char** reason) { - void* h = zonemd_digest_init(hashalgo); + struct secalgo_hash* h = zonemd_digest_init(hashalgo, reason); if(!h) { - *reason = "digest init fail"; + if(!*reason) + *reason = "digest init fail"; return 0; } if(scheme == 1) { - if(!zonemd_simple_collate(z, h, region, buf, reason)) { + if(!zonemd_simple_collate(z, hashalgo, h, region, buf, reason)) { if(!*reason) *reason = "scheme simple collate fail"; + secalgo_hash_delete(h); return 0; } } - /* - if(!zonemd_digest_finish(hashalgo, hash, hashlen, resultlen)) { + if(!zonemd_digest_finish(hashalgo, h, hash, hashlen, resultlen, + reason)) { + secalgo_hash_delete(h); *reason = "digest finish fail"; return 0; } - */ + secalgo_hash_delete(h); return 1; } diff --git a/validator/val_secalgo.c b/validator/val_secalgo.c index 65bca8b69..18509ce85 100644 --- a/validator/val_secalgo.c +++ b/validator/val_secalgo.c @@ -141,6 +141,69 @@ secalgo_hash_sha256(unsigned char* buf, size_t len, unsigned char* res) #endif } +/** hash structure for keeping track of running hashes */ +struct secalgo_hash { + /** the openssl message digest context */ + EVP_MD_CTX* ctx; +}; + +/** create secalgo hash with hash type */ +static struct secalgo_hash* secalgo_hash_create_md(const EVP_MD* md) +{ + struct secalgo_hash* h; + if(!md) + return NULL; + h = calloc(1, sizeof(*h)); + if(!h) + return NULL; + h->ctx = EVP_MD_CTX_create(); + if(!h->ctx) { + free(h); + return NULL; + } + if(!EVP_DigestInit_ex(h->ctx, md, NULL)) { + EVP_MD_CTX_destroy(h->ctx); + free(h); + return NULL; + } + return h; +} + +struct secalgo_hash* secalgo_hash_create_sha384(void) +{ + return secalgo_hash_create_md(EVP_sha384()); +} + +struct secalgo_hash* secalgo_hash_create_sha512(void) +{ + return secalgo_hash_create_md(EVP_sha512()); +} + +int secalgo_hash_update(struct secalgo_hash* hash, uint8_t* data, size_t len) +{ + return EVP_DigestUpdate(hash->ctx, (unsigned char*)data, + (unsigned int)len); +} + +int secalgo_hash_final(struct secalgo_hash* hash, uint8_t* result, + size_t maxlen, size_t* resultlen) +{ + if(EVP_MD_CTX_size(hash->ctx) > (int)maxlen) { + *resultlen = 0; + log_err("secalgo_hash_final: hash buffer too small"); + return 0; + } + *resultlen = EVP_MD_CTX_size(hash->ctx); + return EVP_DigestFinal_ex(hash->ctx, result, NULL); +} + +void secalgo_hash_delete(struct secalgo_hash* hash) +{ + if(!hash) return; + EVP_MD_CTX_destroy(hash->ctx); + free(hash); +} + /** * Return size of DS digest according to its hash algorithm. * @param algo: DS digest algo. diff --git a/validator/val_secalgo.h b/validator/val_secalgo.h index 52aaeb9f6..8b6080dc2 100644 --- a/validator/val_secalgo.h +++ b/validator/val_secalgo.h @@ -43,6 +43,7 @@ #ifndef VALIDATOR_VAL_SECALGO_H #define VALIDATOR_VAL_SECALGO_H struct sldns_buffer; +struct secalgo_hash; /** Return size of nsec3 hash algorithm, 0 if not supported */ size_t nsec3_hash_algo_size_supported(int id); @@ -67,6 +68,48 @@ int secalgo_nsec3_hash(int algo, unsigned char* buf, size_t len, */ void secalgo_hash_sha256(unsigned char* buf, size_t len, unsigned char* res); +/** + * Start a hash of type sha384. Allocates structure, then inits it, + * so that a series of updates can be performed, before the final result. + * @return hash structure. NULL on malloc failure or no support. + */ +struct secalgo_hash* secalgo_hash_create_sha384(void); + +/** + * Start a hash of type sha512. Allocates structure, then inits it, + * so that a series of updates can be performed, before the final result. + * @return hash structure. NULL on malloc failure or no support. + */ +struct secalgo_hash* secalgo_hash_create_sha512(void); + +/** + * Update a hash with more information to add to it. + * @param hash: the hash that is updated. + * @param data: data to add. + * @param len: length of data. + * @return false on failure. + */ +int secalgo_hash_update(struct secalgo_hash* hash, uint8_t* data, size_t len); + +/** + * Get the final result of the hash. + * @param hash: the hash that has had updates to it. + * @param result: where to store the result. + * @param maxlen: length of the result buffer, eg. size of the allocation. + * If not large enough the routine fails. + * @param resultlen: the length of the result, returned to the caller. + * How much of maxlen is used. + * @return false on failure. + */ +int secalgo_hash_final(struct secalgo_hash* hash, uint8_t* result, + size_t maxlen, size_t* resultlen); + +/** + * Delete the hash structure. + * @param hash: the hash to delete. + */ +void secalgo_hash_delete(struct secalgo_hash* hash); + /** * Return size of DS digest according to its hash algorithm. * @param algo: DS digest algo. From cdf6544b466a55875ae34a492d458702722caeed Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 9 Oct 2020 12:18:25 +0200 Subject: [PATCH 012/168] zonemd, unit test, succeeds at verifying examples of zonemd draft-12. --- services/authzone.c | 6 +- services/authzone.h | 6 ++ testcode/unitmain.c | 81 +++++++++++++++++--- testdata/zonemd.example_a1.zone | 6 ++ testdata/zonemd.example_a2.zone | 25 +++++++ testdata/zonemd.example_a3.zone | 30 ++++++++ testdata/zonemd.example_a4.zone | 127 ++++++++++++++++++++++++++++++++ testdata/zonemd.example_a5.zone | 48 ++++++++++++ 8 files changed, 313 insertions(+), 16 deletions(-) create mode 100644 testdata/zonemd.example_a1.zone create mode 100644 testdata/zonemd.example_a2.zone create mode 100644 testdata/zonemd.example_a3.zone create mode 100644 testdata/zonemd.example_a4.zone create mode 100644 testdata/zonemd.example_a5.zone diff --git a/services/authzone.c b/services/authzone.c index 208c0b825..7ba273b52 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -6967,16 +6967,14 @@ compare_serial(uint32_t a, uint32_t b) } } -/** returns true if a zonemd hash algo is supported */ -static int zonemd_hashalgo_supported(int hashalgo) +int zonemd_hashalgo_supported(int hashalgo) { if(hashalgo == 1) return 1; if(hashalgo == 2) return 1; return 0; } -/** returns true if a zonemd scheme is supported */ -static int zonemd_scheme_supported(int scheme) +int zonemd_scheme_supported(int scheme) { if(scheme == 1) return 1; return 0; diff --git a/services/authzone.h b/services/authzone.h index 813fc0e87..6dd9c30b3 100644 --- a/services/authzone.h +++ b/services/authzone.h @@ -704,6 +704,12 @@ int auth_zone_generate_zonemd_hash(struct auth_zone* z, int scheme, int hashalgo, uint8_t* hash, size_t buflen, size_t* resultlen, struct regional* region, struct sldns_buffer* buf, char** reason); + +/** returns true if a zonemd hash algo is supported */ +int zonemd_hashalgo_supported(int hashalgo); +/** returns true if a zonemd scheme is supported */ +int zonemd_scheme_supported(int scheme); + /** * Check ZONEMD digest for the auth zone. * @param z: auth zone to digest. diff --git a/testcode/unitmain.c b/testcode/unitmain.c index df560a466..8762bc169 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -839,52 +839,109 @@ static void respip_test(void) respip_conf_actions_test(); } +#include #include "services/authzone.h" #include "util/data/dname.h" #include "util/regional.h" /** Add zone from file for testing */ struct auth_zone* authtest_addzone(struct auth_zones* az, const char* name, char* fname); -/** zonemd unit tests */ -static void zonemd_test(void) + +/** zonemd unit test, generate a zonemd digest and check if correct */ +static void zonemd_generate_test(const char* zname, char* zfile, + int scheme, int hashalgo, const char* digest) { uint8_t zonemd_hash[512]; + size_t hashlen = 0; + char output[1024+1]; + size_t i; struct auth_zones* az; struct auth_zone* z; - int scheme = 1, hashalgo = 2; - size_t hashlen = 0; int result; char* reason = NULL; struct regional* region = NULL; struct sldns_buffer* buf = NULL; - unit_show_feature("zonemd"); + char* digestdup; + + if(!zonemd_hashalgo_supported(hashalgo)) + return; /* cannot test unsupported algo */ + + /* setup environment */ + az = auth_zones_create(); + unit_assert(az); region = regional_create(); unit_assert(region); buf = sldns_buffer_new(65535); unit_assert(buf); - az = auth_zones_create(); - unit_assert(az); - z = authtest_addzone(az, "example.org", "testdata/zonemd.example1.zone"); + + /* read file */ + z = authtest_addzone(az, zname, zfile); unit_assert(z); - /* zonemd test on zone */ + /* create zonemd digest */ result = auth_zone_generate_zonemd_hash(z, scheme, hashalgo, zonemd_hash, sizeof(zonemd_hash), &hashlen, region, buf, &reason); if(reason) printf("zonemd failure reason: %s\n", reason); unit_assert(result); - if(1) { + + /* check digest */ + unit_assert(hashlen*2+1 <= sizeof(output)); + for(i=0; i>4]; + output[i*2+1] = hexl[zonemd_hash[i]&0xf]; + } + output[hashlen*2] = 0; + digestdup = strdup(digest); + unit_assert(digestdup); + for(i=0; iname, zname); - printf("zonemd generated for %s in %s with scheme=%d, hashalgo=%d\n", zname, z->zonefile, scheme, hashalgo); - log_hex("digest", zonemd_hash, hashlen); + printf("zonemd generated for %s in %s with " + "scheme=%d hashalgo=%d\n", zname, z->zonefile, + scheme, hashalgo); + printf("digest %s\n", output); + printf("wanted %s\n", digestdup); } + unit_assert(strcmp(output, digestdup) == 0); + /* delete environment */ + free(digestdup); auth_zones_delete(az); regional_destroy(region); sldns_buffer_free(buf); } +/** loop over files and test generated zonemd digest */ +static void zonemd_generate_tests(void) +{ + zonemd_generate_test("example.org", "testdata/zonemd.example1.zone", + 1, 2, "20564D10F50A0CEBEC856C64032B7DFB53D3C449A421A5BC7A21F7627B4ACEA4DF29F2C6FE82ED9C23ADF6F4D420D5DD63EF6E6349D60FDAB910B65DF8D481B7"); + zonemd_generate_test("example", "testdata/zonemd.example_a1.zone", + 1, 1, "c68090d90a7aed716bc459f9340e3d7c1370d4d24b7e2fc3a1ddc0b9a87153b9a9713b3c9ae5cc27777f98b8e730044c"); + zonemd_generate_test("example", "testdata/zonemd.example_a2.zone", + 1, 1, "31cefb03814f5062ad12fa951ba0ef5f8da6ae354a415767246f7dc932ceb1e742a2108f529db6a33a11c01493de358d"); + zonemd_generate_test("example", "testdata/zonemd.example_a3.zone", + 1, 1, "62e6cf51b02e54b9b5f967d547ce43136792901f9f88e637493daaf401c92c279dd10f0edb1c56f8080211f8480ee306"); + zonemd_generate_test("example", "testdata/zonemd.example_a3.zone", + 1, 2, "08cfa1115c7b948c4163a901270395ea226a930cd2cbcf2fa9a5e6eb85f37c8a4e114d884e66f176eab121cb02db7d652e0cc4827e7a3204f166b47e5613fd27"); + zonemd_generate_test("uri.arpa", "testdata/zonemd.example_a4.zone", + 1, 1, "1291b78ddf7669b1a39d014d87626b709b55774c5d7d58fadc556439889a10eaf6f11d615900a4f996bd46279514e473"); + zonemd_generate_test("root-servers.net", "testdata/zonemd.example_a5.zone", + 1, 1, "f1ca0ccd91bd5573d9f431c00ee0101b2545c97602be0a978a3b11dbfc1c776d5b3e86ae3d973d6b5349ba7f04340f79"); +} + +/** zonemd unit tests */ +static void zonemd_test(void) +{ + unit_show_feature("zonemd"); + zonemd_generate_tests(); +} + void unit_show_func(const char* file, const char* func) { printf("test %s:%s\n", file, func); diff --git a/testdata/zonemd.example_a1.zone b/testdata/zonemd.example_a1.zone new file mode 100644 index 000000000..331b45a15 --- /dev/null +++ b/testdata/zonemd.example_a1.zone @@ -0,0 +1,6 @@ +example. 86400 IN SOA ns1 admin 2018031900 ( 1800 900 604800 86400 ) + 86400 IN NS ns1 + 86400 IN NS ns2 + 86400 IN ZONEMD 2018031900 1 1 ( c68090d90a7aed71 6bc459f9340e3d7c 1370d4d24b7e2fc3 a1ddc0b9a87153b9 a9713b3c9ae5cc27 777f98b8e730044c ) +ns1 3600 IN A 203.0.113.63 +ns2 3600 IN AAAA 2001:db8::63 diff --git a/testdata/zonemd.example_a2.zone b/testdata/zonemd.example_a2.zone new file mode 100644 index 000000000..56d06ae06 --- /dev/null +++ b/testdata/zonemd.example_a2.zone @@ -0,0 +1,25 @@ +example. 86400 IN SOA ns1 admin 2018031900 ( + 1800 900 604800 86400 ) + 86400 IN NS ns1 + 86400 IN NS ns2 + 86400 IN ZONEMD 2018031900 1 1 ( + 31cefb03814f5062 + ad12fa951ba0ef5f + 8da6ae354a415767 + 246f7dc932ceb1e7 + 42a2108f529db6a3 + 3a11c01493de358d ) +ns1 3600 IN A 203.0.113.63 +ns2 3600 IN AAAA 2001:db8::63 +occluded.sub 7200 IN TXT "I'm occluded but must be digested" +sub 7200 IN NS ns1 +duplicate 300 IN TXT "I must be digested just once" +duplicate 300 IN TXT "I must be digested just once" +foo.test. 555 IN TXT "out-of-zone data must be excluded" +non-apex 900 IN ZONEMD 2018031900 1 1 ( + 616c6c6f77656420 + 6275742069676e6f + 7265642e20616c6c + 6f77656420627574 + 2069676e6f726564 + 2e20616c6c6f7765 ) diff --git a/testdata/zonemd.example_a3.zone b/testdata/zonemd.example_a3.zone new file mode 100644 index 000000000..45c47ad05 --- /dev/null +++ b/testdata/zonemd.example_a3.zone @@ -0,0 +1,30 @@ +example. 86400 IN SOA ns1 admin 2018031900 ( + 1800 900 604800 86400 ) +example. 86400 IN NS ns1.example. +example. 86400 IN NS ns2.example. +example. 86400 IN ZONEMD 2018031900 1 1 ( + 62e6cf51b02e54b9 + b5f967d547ce4313 + 6792901f9f88e637 + 493daaf401c92c27 + 9dd10f0edb1c56f8 + 080211f8480ee306 ) +example. 86400 IN ZONEMD 2018031900 1 2 ( + 08cfa1115c7b948c + 4163a901270395ea + 226a930cd2cbcf2f + a9a5e6eb85f37c8a + 4e114d884e66f176 + eab121cb02db7d65 + 2e0cc4827e7a3204 + f166b47e5613fd27 ) +example. 86400 IN ZONEMD 2018031900 1 240 ( + e2d523f654b9422a + 96c5a8f44607bbee ) +example. 86400 IN ZONEMD 2018031900 241 1 ( + e1846540e33a9e41 + 89792d18d5d131f6 + 05fc283e ) +ns1.example. 3600 IN A 203.0.113.63 +ns2.example. 86400 IN TXT "This example has multiple digests" +ns2.example. 3600 IN AAAA 2001:db8::63 diff --git a/testdata/zonemd.example_a4.zone b/testdata/zonemd.example_a4.zone new file mode 100644 index 000000000..74b913c89 --- /dev/null +++ b/testdata/zonemd.example_a4.zone @@ -0,0 +1,127 @@ +uri.arpa. 3600 IN SOA sns.dns.icann.org. ( + noc.dns.icann.org. 2018100702 10800 3600 1209600 3600 ) +uri.arpa. 3600 IN RRSIG NSEC 8 2 3600 ( + 20181028142623 20181007205525 47155 uri.arpa. + eEC4w/oXLR1Epwgv4MBiDtSBsXhqrJVvJWUpbX8XpetAvD35bxwNCUTi + /pAJVUXefegWeiriD2rkTgCBCMmn7YQIm3gdR+HjY/+o3BXNQnz97f+e + HAE9EDDzoNVfL1PyV/2fde9tDeUuAGVVwmD399NGq9jWYMRpyri2kysr q/g= ) +uri.arpa. 86400 IN RRSIG NS 8 2 86400 ( + 20181028172020 20181007175821 47155 uri.arpa. + ATyV2A2A8ZoggC+68u4GuP5MOUuR+2rr3eWOkEU55zAHld/7FiBxl4ln + 4byJYy7NudUwlMOEXajqFZE7DVl8PpcvrP3HeeGaVzKqaWj+aus0jbKF + Bsvs2b1qDZemBfkz/IfAhUTJKnto0vSUicJKfItu0GjyYNJCz2CqEuGD Wxc= ) +uri.arpa. 600 IN RRSIG MX 8 2 600 ( + 20181028170556 20181007175821 47155 uri.arpa. + e7/r3KXDohX1lyVavetFFObp8fB8aXT76HnN9KCQDxSnSghNM83UQV0t + lTtD8JVeN1mCvcNFZpagwIgB7XhTtm6Beur/m5ES+4uSnVeS6Q66HBZK + A3mR95IpevuVIZvvJ+GcCAQpBo6KRODYvJ/c/ZG6sfYWkZ7qg/Em5/+3 4UI= ) +uri.arpa. 3600 IN RRSIG DNSKEY 8 2 3600 ( + 20181028152832 20181007175821 15796 uri.arpa. + nzpbnh0OqsgBBP8St28pLvPEQ3wZAUdEBuUwil+rtjjWlYYiqjPxZ286 + XF4Rq1usfV5x71jZz5IqswOaQgia91ylodFpLuXD6FTGs2nXGhNKkg1V + chHgtwj70mXU72GefVgo8TxrFYzxuEFP5ZTP92t97FVWVVyyFd86sbbR + 6DZj3uA2wEvqBVLECgJLrMQ9Yy7MueJl3UA4h4E6zO2JY9Yp0W9woq0B + dqkkwYTwzogyYffPmGAJG91RJ2h6cHtFjEZe2MnaY2glqniZ0WT9vXXd + uFPm0KD9U77Ac+ZtctAF9tsZwSdAoL365E2L1usZbA+K0BnPPqGFJRJk + 5R0A1w== ) +uri.arpa. 3600 IN RRSIG DNSKEY 8 2 3600 ( + 20181028152832 20181007175821 55480 uri.arpa. + lWtQV/5szQjkXmbcD47/+rOW8kJPksRFHlzxxmzt906+DBYyfrH6uq5X + nHvrUlQO6M12uhqDeL+bDFVgqSpNy+42/OaZvaK3J8EzPZVBHPJykKMV + 63T83aAiJrAyHzOaEdmzLCpalqcEE2ImzlLHSafManRfJL8Yuv+JDZFj + 2WDWfEcUuwkmIZWX11zxp+DxwzyUlRl7x4+ok5iKZWIg5UnBAf6B8T75 + WnXzlhCw3F2pXI0a5LYg71L3Tp/xhjN6Yy9jGlIRf5BjB59X2zra3a2R + PkI09SSnuEwHyF1mDaV5BmQrLGRnCjvwXA7ho2m+vv4SP5dUdXf+GTeA + 1HeBfw== ) +uri.arpa. 3600 IN RRSIG SOA 8 2 3600 ( + 20181029114753 20181008222815 47155 uri.arpa. + qn8yBNoHDjGdT79U2Wu9IIahoS0YPOgYP8lG+qwPcrZ1BwGiHywuoUa2 + Mx6BWZlg+HDyaxj2iOmox+IIqoUHhXUbO7IUkJFlgrOKCgAR2twDHrXu + 9BUQHy9SoV16wYm3kBTEPyxW5FFm8vcdnKAF7sxSY8BbaYNpRIEjDx4A JUc= ) +uri.arpa. 3600 IN NSEC ftp.uri.arpa. NS SOA ( + MX RRSIG NSEC DNSKEY ) +uri.arpa. 86400 IN NS a.iana-servers.net. +uri.arpa. 86400 IN NS b.iana-servers.net. +uri.arpa. 86400 IN NS c.iana-servers.net. +uri.arpa. 86400 IN NS ns2.lacnic.net. +uri.arpa. 86400 IN NS sec3.apnic.net. +uri.arpa. 600 IN MX 10 pechora.icann.org. +uri.arpa. 3600 IN DNSKEY 256 3 8 ( + AwEAAcBi7tSart2J599zbYWspMNGN70IBWb4ziqyQYH9MTB/VCz6WyUK + uXunwiJJbbQ3bcLqTLWEw134B6cTMHrZpjTAb5WAwg4XcWUu8mdcPTiL + Bl6qVRlRD0WiFCTzuYUfkwsh1Rbr7rvrxSQhF5rh71zSpwV5jjjp65Wx + SdJjlH0B ) +uri.arpa. 3600 IN DNSKEY 257 3 8 ( + AwEAAbNVv6ulgRdO31MtAehz7j3ALRjwZglWesnzvllQl/+hBRZr9QoY + cO2I+DkO4Q1NKxox4DUIxj8SxPO3GwDuOFR9q2/CFi2O0mZjafbdYtWc + 3zSdBbi3q0cwCIx7GuG9eqlL+pg7mdk9dgdNZfHwB0LnqTD8ebLPsrO/ + Id7kBaiqYOfMlZnh2fp+2h6OOJZHtY0DK1UlssyB5PKsE0tVzo5s6zo9 + iXKe5u+8WTMaGDY49vG80JPAKE7ezMiH/NZcUMiE0PRZ8D3foq2dYuS5 + ym+vA83Z7v8A+Rwh4UGnjxKB8zmr803V0ASAmHz/gwH5Vb0nH+LObwFt + l3wpbp+Wpm8= ) +uri.arpa. 3600 IN DNSKEY 257 3 8 ( + AwEAAbwnFTakCvaUKsXji4mgmxZUJi1IygbnGahbkmFEa0L16J+TchKR + wcgzVfsxUGa2MmeA4hgkAooC3uy+tTmoMsgy8uq/JAj24DjiHzd46LfD + FK/qMidVqFpYSHeq2Vv5ojkuIsx4oe4KsafGWYNOczKZgH5loGjN2aJG + mrIm++XCphOskgCsQYl65MIzuXffzJyxlAuts+ecAIiVeqRaqQfr8LRU + 7wIsLxinXirprtQrbor+EtvlHp9qXE6ARTZDzf4jvsNpKvLFZtmxzFf3 + e/UJz5eHjpwDSiZL7xE8aE1o1nGfPtJx9ZnB3bapltaJ5wY+5XOCKgY0 + xmJVvNQlwdE= ) +ftp.uri.arpa. 3600 IN RRSIG NSEC 8 3 3600 ( + 20181028080856 20181007175821 47155 uri.arpa. + HClGAqPxzkYkAT7Q/QNtQeB6YrkP6EPOef+9Qo5/2zngwAewXEAQiyF9 + jD1USJiroM11QqBS3v3aIdW/LXORs4Ez3hLcKNO1cKHsOuWAqzmE+BPP + Arfh8N95jqh/q6vpaB9UtMkQ53tM2fYU1GszOLN0knxbHgDHAh2axMGH lqM= ) +ftp.uri.arpa. 604800 IN RRSIG NAPTR 8 3 604800 ( + 20181028103644 20181007205525 47155 uri.arpa. + WoLi+vZzkxaoLr2IGZnwkRvcDf6KxiWQd1WZP/U+AWnV+7MiqsWPZaf0 + 9toRErerGoFOiOASNxZjBGJrRgjmavOM9U+LZSconP9zrNFd4dIu6kp5 + YxlQJ0uHOvx1ZHFCj6lAt1ACUIw04ZhMydTmi27c8MzEOMepvn7iH7r7 k7k= ) +ftp.uri.arpa. 3600 IN NSEC http.uri.arpa. NAPTR ( + RRSIG NSEC ) +ftp.uri.arpa. 604800 IN NAPTR 0 0 "" "" ( + "!^ftp://([^:/?#]*).*$!\\1!i" . ) +http.uri.arpa. 3600 IN RRSIG NSEC 8 3 3600 ( + 20181029010647 20181007175821 47155 uri.arpa. + U03NntQ73LHWpfLmUK8nMsqkwVsOGW2KdsyuHYAjqQSZvKbtmbv7HBmE + H1+Ii3Z+wtfdMZBy5aC/6sHdx69BfZJs16xumycMlAy6325DKTQbIMN+ + ift9GrKBC7cgCd2msF/uzSrYxxg4MJQzBPvlkwXnY3b7eJSlIXisBIn7 3b8= ) +http.uri.arpa. 604800 IN RRSIG NAPTR 8 3 604800 ( + 20181029011815 20181007205525 47155 uri.arpa. + T7mRrdag+WSmG+n22mtBSQ/0Y3v+rdDnfQV90LN5Fq32N5K2iYFajF7F + Tp56oOznytfcL4fHrqOE0wRc9NWOCCUec9C7Wa1gJQcllEvgoAM+L6f0 + RsEjWq6+9jvlLKMXQv0xQuMX17338uoD/xiAFQSnDbiQKxwWMqVAimv5 7Zs= ) +http.uri.arpa. 3600 IN NSEC mailto.uri.arpa. NAPTR ( + RRSIG NSEC ) +http.uri.arpa. 604800 IN NAPTR 0 0 "" "" ( + "!^http://([^:/?#]*).*$!\\1!i" . ) +mailto.uri.arpa. 3600 IN RRSIG NSEC 8 3 3600 ( + 20181028110727 20181007175821 47155 uri.arpa. + GvxzVL85rEukwGqtuLxek9ipwjBMfTOFIEyJ7afC8HxVMs6mfFa/nEM/ + IdFvvFg+lcYoJSQYuSAVYFl3xPbgrxVSLK125QutCFMdC/YjuZEnq5cl + fQciMRD7R3+znZfm8d8u/snLV9w4D+lTBZrJJUBe1Efc8vum5vvV7819 ZoY= ) +mailto.uri.arpa. 604800 IN RRSIG NAPTR 8 3 604800 ( + 20181028141825 20181007205525 47155 uri.arpa. + MaADUgc3fc5v++M0YmqjGk3jBdfIA5RuP62hUSlPsFZO4k37erjIGCfF + j+g84yc+QgbSde0PQHszl9fE/+SU5ZXiS9YdcbzSZxp2erFpZOTchrpg + 916T4vx6i59scodjb0l6bDyZ+mtIPrc1w6b4hUyOUTsDQoAJYxdfEuMg Vy4= ) +mailto.uri.arpa. 3600 IN NSEC urn.uri.arpa. NAPTR ( + RRSIG NSEC ) +mailto.uri.arpa. 604800 IN NAPTR 0 0 "" "" ( + "!^mailto:(.*)@(.*)$!\\2!i" . ) +urn.uri.arpa. 3600 IN RRSIG NSEC 8 3 3600 ( + 20181028123243 20181007175821 47155 uri.arpa. + Hgsw4Deops1O8uWyELGe6hpR/OEqCnTHvahlwiQkHhO5CSEQrbhmFAWe + UOkmGAdTEYrSz+skLRQuITRMwzyFf4oUkZihGyhZyzHbcxWfuDc/Pd/9 + DSl56gdeBwy1evn5wBTms8yWQVkNtphbJH395gRqZuaJs3LD/qTyJ5Dp LvA= ) +urn.uri.arpa. 604800 IN RRSIG NAPTR 8 3 604800 ( + 20181029071816 20181007205525 47155 uri.arpa. + ALIZD0vBqAQQt40GQ0Efaj8OCyE9xSRJRdyvyn/H/wZVXFRFKrQYrLAS + D/K7q6CMTOxTRCu2J8yes63WJiaJEdnh+dscXzZkmOg4n5PsgZbkvUSW + BiGtxvz5jNncM0xVbkjbtByrvJQAO1cU1mnlDKe1FmVB1uLpVdA9Ib4J hMU= ) +urn.uri.arpa. 3600 IN NSEC uri.arpa. NAPTR RRSIG ( + NSEC ) +urn.uri.arpa. 604800 IN NAPTR 0 0 "" "" ( + "/urn:([^:]+)/\\1/i" . ) +uri.arpa. 3600 IN SOA sns.dns.icann.org. ( + noc.dns.icann.org. 2018100702 10800 3600 1209600 3600 ) diff --git a/testdata/zonemd.example_a5.zone b/testdata/zonemd.example_a5.zone new file mode 100644 index 000000000..246f5e237 --- /dev/null +++ b/testdata/zonemd.example_a5.zone @@ -0,0 +1,48 @@ +root-servers.net. 3600000 IN SOA a.root-servers.net. ( + nstld.verisign-grs.com. 2018091100 14400 7200 1209600 3600000 ) +root-servers.net. 3600000 IN NS a.root-servers.net. +root-servers.net. 3600000 IN NS b.root-servers.net. +root-servers.net. 3600000 IN NS c.root-servers.net. +root-servers.net. 3600000 IN NS d.root-servers.net. +root-servers.net. 3600000 IN NS e.root-servers.net. +root-servers.net. 3600000 IN NS f.root-servers.net. +root-servers.net. 3600000 IN NS g.root-servers.net. +root-servers.net. 3600000 IN NS h.root-servers.net. +root-servers.net. 3600000 IN NS i.root-servers.net. +root-servers.net. 3600000 IN NS j.root-servers.net. +root-servers.net. 3600000 IN NS k.root-servers.net. +root-servers.net. 3600000 IN NS l.root-servers.net. +root-servers.net. 3600000 IN NS m.root-servers.net. +a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30 +a.root-servers.net. 3600000 IN A 198.41.0.4 +b.root-servers.net. 3600000 IN MX 20 mail.isi.edu. +b.root-servers.net. 3600000 IN AAAA 2001:500:200::b +b.root-servers.net. 3600000 IN A 199.9.14.201 +c.root-servers.net. 3600000 IN AAAA 2001:500:2::c +c.root-servers.net. 3600000 IN A 192.33.4.12 +d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d +d.root-servers.net. 3600000 IN A 199.7.91.13 +e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e +e.root-servers.net. 3600000 IN A 192.203.230.10 +f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f +f.root-servers.net. 3600000 IN A 192.5.5.241 +g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d +g.root-servers.net. 3600000 IN A 192.112.36.4 +h.root-servers.net. 3600000 IN AAAA 2001:500:1::53 +h.root-servers.net. 3600000 IN A 198.97.190.53 +i.root-servers.net. 3600000 IN MX 10 mx.i.root-servers.org. +i.root-servers.net. 3600000 IN AAAA 2001:7fe::53 +i.root-servers.net. 3600000 IN A 192.36.148.17 +j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30 +j.root-servers.net. 3600000 IN A 192.58.128.30 +k.root-servers.net. 3600000 IN AAAA 2001:7fd::1 +k.root-servers.net. 3600000 IN A 193.0.14.129 +l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42 +l.root-servers.net. 3600000 IN A 199.7.83.42 +m.root-servers.net. 3600000 IN AAAA 2001:dc3::35 +m.root-servers.net. 3600000 IN A 202.12.27.33 +root-servers.net. 3600000 IN SOA a.root-servers.net. ( + nstld.verisign-grs.com. 2018091100 14400 7200 1209600 3600000 ) +root-servers.net. 3600000 IN ZONEMD 2018091100 1 1 ( + f1ca0ccd91bd5573d9f431c00ee0101b2545c97602be0a97 + 8a3b11dbfc1c776d5b3e86ae3d973d6b5349ba7f04340f79 ) From 2f7908b6690117ebb1d9dca23fd48733d09b3196 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 9 Oct 2020 12:20:50 +0200 Subject: [PATCH 013/168] zonemd, unit test, note example origins. --- testcode/unitmain.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/testcode/unitmain.c b/testcode/unitmain.c index 8762bc169..35feb6827 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -921,16 +921,34 @@ static void zonemd_generate_tests(void) { zonemd_generate_test("example.org", "testdata/zonemd.example1.zone", 1, 2, "20564D10F50A0CEBEC856C64032B7DFB53D3C449A421A5BC7A21F7627B4ACEA4DF29F2C6FE82ED9C23ADF6F4D420D5DD63EF6E6349D60FDAB910B65DF8D481B7"); + + /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 + * from section A.1 */ zonemd_generate_test("example", "testdata/zonemd.example_a1.zone", 1, 1, "c68090d90a7aed716bc459f9340e3d7c1370d4d24b7e2fc3a1ddc0b9a87153b9a9713b3c9ae5cc27777f98b8e730044c"); + + /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 + * from section A.2 */ zonemd_generate_test("example", "testdata/zonemd.example_a2.zone", 1, 1, "31cefb03814f5062ad12fa951ba0ef5f8da6ae354a415767246f7dc932ceb1e742a2108f529db6a33a11c01493de358d"); + + /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 + * from section A.3 SHA384 digest */ zonemd_generate_test("example", "testdata/zonemd.example_a3.zone", 1, 1, "62e6cf51b02e54b9b5f967d547ce43136792901f9f88e637493daaf401c92c279dd10f0edb1c56f8080211f8480ee306"); + + /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 + * from section A.3 SHA512 digest*/ zonemd_generate_test("example", "testdata/zonemd.example_a3.zone", 1, 2, "08cfa1115c7b948c4163a901270395ea226a930cd2cbcf2fa9a5e6eb85f37c8a4e114d884e66f176eab121cb02db7d652e0cc4827e7a3204f166b47e5613fd27"); + + /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 + * from section A.4 */ zonemd_generate_test("uri.arpa", "testdata/zonemd.example_a4.zone", 1, 1, "1291b78ddf7669b1a39d014d87626b709b55774c5d7d58fadc556439889a10eaf6f11d615900a4f996bd46279514e473"); + + /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 + * from section A.5 */ zonemd_generate_test("root-servers.net", "testdata/zonemd.example_a5.zone", 1, 1, "f1ca0ccd91bd5573d9f431c00ee0101b2545c97602be0a978a3b11dbfc1c776d5b3e86ae3d973d6b5349ba7f04340f79"); } From 6a8ed4bb15a588aa39f477ed7edddb6dc59c69a6 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 9 Oct 2020 13:59:44 +0200 Subject: [PATCH 014/168] zonemd, unit test, tests the check routine and reason for failure. --- testcode/unitmain.c | 71 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) diff --git a/testcode/unitmain.c b/testcode/unitmain.c index 35feb6827..7bb967b05 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -840,6 +840,7 @@ static void respip_test(void) } #include +#include "sldns/str2wire.h" #include "services/authzone.h" #include "util/data/dname.h" #include "util/regional.h" @@ -858,9 +859,9 @@ static void zonemd_generate_test(const char* zname, char* zfile, struct auth_zones* az; struct auth_zone* z; int result; - char* reason = NULL; struct regional* region = NULL; struct sldns_buffer* buf = NULL; + char* reason = NULL; char* digestdup; if(!zonemd_hashalgo_supported(hashalgo)) @@ -953,11 +954,79 @@ static void zonemd_generate_tests(void) 1, 1, "f1ca0ccd91bd5573d9f431c00ee0101b2545c97602be0a978a3b11dbfc1c776d5b3e86ae3d973d6b5349ba7f04340f79"); } +/** test the zonemd check routine */ +static void zonemd_check_test(void) +{ + const char* zname = "example.org"; + char* zfile = "testdata/zonemd.example1.zone"; + int scheme = 1; + int hashalgo = 2; + const char* digest = "20564D10F50A0CEBEC856C64032B7DFB53D3C449A421A5BC7A21F7627B4ACEA4DF29F2C6FE82ED9C23ADF6F4D420D5DD63EF6E6349D60FDAB910B65DF8D481B7"; + const char* digestwrong = "20564D10F50A0CEBEC856C64032B7DFB53D3C449A421A5BC7A21F7627B4ACEA4DF29F2C6FE82ED9C23ADF6F4D420D5DD63EF6E6349D60FDAB910B65DF8D48100"; + uint8_t hash[512], hashwrong[512]; + size_t hashlen = 0, hashwronglen = 0; + struct auth_zones* az; + struct auth_zone* z; + int result; + struct regional* region = NULL; + struct sldns_buffer* buf = NULL; + char* reason = NULL; + + if(!zonemd_hashalgo_supported(hashalgo)) + return; /* cannot test unsupported algo */ + + /* setup environment */ + az = auth_zones_create(); + unit_assert(az); + region = regional_create(); + unit_assert(region); + buf = sldns_buffer_new(65535); + unit_assert(buf); + + /* read file */ + z = authtest_addzone(az, zname, zfile); + unit_assert(z); + hashlen = sizeof(hash); + if(sldns_str2wire_hex_buf(digest, hash, &hashlen) != 0) { + unit_assert(0); /* parse failure */ + } + hashwronglen = sizeof(hashwrong); + if(sldns_str2wire_hex_buf(digestwrong, hashwrong, &hashwronglen) != 0) { + unit_assert(0); /* parse failure */ + } + + /* check return values of the check routine */ + result = auth_zone_generate_zonemd_check(z, scheme, hashalgo, + hash, hashlen, region, buf, &reason); + unit_assert(result && reason == NULL); + result = auth_zone_generate_zonemd_check(z, 241, hashalgo, + hash, hashlen, region, buf, &reason); + unit_assert(!result && strcmp(reason, "unsupported scheme")==0); + result = auth_zone_generate_zonemd_check(z, scheme, 242, + hash, hashlen, region, buf, &reason); + unit_assert(!result && strcmp(reason, "unsupported algorithm")==0); + result = auth_zone_generate_zonemd_check(z, scheme, hashalgo, + hash, 2, region, buf, &reason); + unit_assert(!result && strcmp(reason, "digest length too small, less than 12")==0); + result = auth_zone_generate_zonemd_check(z, scheme, hashalgo, + hashwrong, hashwronglen, region, buf, &reason); + unit_assert(!result && strcmp(reason, "incorrect digest")==0); + result = auth_zone_generate_zonemd_check(z, scheme, hashalgo, + hashwrong, hashwronglen-3, region, buf, &reason); + unit_assert(!result && strcmp(reason, "incorrect digest length")==0); + + /* delete environment */ + auth_zones_delete(az); + regional_destroy(region); + sldns_buffer_free(buf); +} + /** zonemd unit tests */ static void zonemd_test(void) { unit_show_feature("zonemd"); zonemd_generate_tests(); + zonemd_check_test(); } void unit_show_func(const char* file, const char* func) From b20fefb858b3dc65af0933a74bed00eaf577e4c9 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 9 Oct 2020 14:03:13 +0200 Subject: [PATCH 015/168] zonemd, unit test, reorder test order --- testcode/unitmain.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testcode/unitmain.c b/testcode/unitmain.c index 7bb967b05..84d850e5f 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -1079,7 +1079,6 @@ main(int argc, char* argv[]) fatal_exit("could not init NSS"); #endif /* HAVE_SSL or HAVE_NSS*/ checklock_start(); - zonemd_test(); authzone_test(); neg_test(); rnd_test(); @@ -1097,6 +1096,7 @@ main(int argc, char* argv[]) slabhash_test(); infra_test(); ldns_test(); + zonemd_test(); msgparse_test(); #ifdef CLIENT_SUBNET ecs_test(); From 6cb0c4c61dfd662c778c7ccce24a117f3381cd21 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 9 Oct 2020 14:30:56 +0200 Subject: [PATCH 016/168] zonemd, libnss implementation and libnettle implementation. Both succeed on unit tests. --- validator/val_secalgo.c | 133 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) diff --git a/validator/val_secalgo.c b/validator/val_secalgo.c index 18509ce85..4f3870d4d 100644 --- a/validator/val_secalgo.c +++ b/validator/val_secalgo.c @@ -886,6 +886,64 @@ secalgo_hash_sha256(unsigned char* buf, size_t len, unsigned char* res) (void)HASH_HashBuf(HASH_AlgSHA256, res, buf, (unsigned long)len); } +/** the secalgo hash structure */ +struct secalgo_hash { + /** hash context */ + HASHContext* ctx; +}; + +/** create hash struct of type */ +static struct secalgo_hash* secalgo_hash_create_type(HASH_HashType tp) +{ + struct secalgo_hash* h = calloc(1, sizeof(*h)); + if(!h) + return NULL; + h->ctx = HASH_Create(tp); + if(!h->ctx) { + free(h); + return NULL; + } + return h; +} + +struct secalgo_hash* secalgo_hash_create_sha384(void) +{ + return secalgo_hash_create_type(HASH_AlgSHA384); +} + +struct secalgo_hash* secalgo_hash_create_sha512(void) +{ + return secalgo_hash_create_type(HASH_AlgSHA512); +} + +int secalgo_hash_update(struct secalgo_hash* hash, uint8_t* data, size_t len) +{ + HASH_Update(hash->ctx, (unsigned char*)data, (unsigned int)len); + return 1; +} + +int secalgo_hash_final(struct secalgo_hash* hash, uint8_t* result, + size_t maxlen, size_t* resultlen) +{ + unsigned int reslen = 0; + if(HASH_ResultLenContext(hash->ctx) > (unsigned int)maxlen) { + *resultlen = 0; + log_err("secalgo_hash_final: hash buffer too small"); + return 0; + } + HASH_End(hash->ctx, (unsigned char*)result, &reslen, + (unsigned int)maxlen); + *resultlen = (size_t)reslen; + return 1; +} + +void secalgo_hash_delete(struct secalgo_hash* hash) +{ + if(!hash) return; + HASH_Destroy(hash->ctx); + free(hash); +} + size_t ds_digest_size_supported(int algo) { @@ -1512,6 +1570,81 @@ secalgo_hash_sha256(unsigned char* buf, size_t len, unsigned char* res) _digest_nettle(SHA256_DIGEST_SIZE, (uint8_t*)buf, len, res); } +/** secalgo hash structure */ +struct secalgo_hash { + /** if it is 384 or 512 */ + int active; + /** context for sha384 */ + struct sha384_ctx ctx384; + /** context for sha512 */ + struct sha512_ctx ctx512; +}; + +struct secalgo_hash* secalgo_hash_create_sha384(void) +{ + struct secalgo_hash* h = calloc(1, sizeof(*h)); + if(!h) + return NULL; + h->active = 384; + sha384_init(&h->ctx384); + return h; +} + +struct secalgo_hash* secalgo_hash_create_sha512(void) +{ + struct secalgo_hash* h = calloc(1, sizeof(*h)); + if(!h) + return NULL; + h->active = 512; + sha512_init(&h->ctx512); + return h; +} + +int secalgo_hash_update(struct secalgo_hash* hash, uint8_t* data, size_t len) +{ + if(hash->active == 384) { + sha384_update(&hash->ctx384, len, data); + } else if(hash->active == 512) { + sha512_update(&hash->ctx512, len, data); + } else { + return 0; + } + return 1; +} + +int secalgo_hash_final(struct secalgo_hash* hash, uint8_t* result, + size_t maxlen, size_t* resultlen) +{ + if(hash->active == 384) { + if(SHA384_DIGEST_SIZE > maxlen) { + *resultlen = 0; + log_err("secalgo_hash_final: hash buffer too small"); + return 0; + } + *resultlen = SHA384_DIGEST_SIZE; + sha384_digest(&hash->ctx384, SHA384_DIGEST_SIZE, + (unsigned char*)result); + } else if(hash->active == 512) { + if(SHA512_DIGEST_SIZE > maxlen) { + *resultlen = 0; + log_err("secalgo_hash_final: hash buffer too small"); + return 0; + } + *resultlen = SHA512_DIGEST_SIZE; + sha512_digest(&hash->ctx512, SHA512_DIGEST_SIZE, + (unsigned char*)result); + } else { + return 0; + } + return 1; +} + +void secalgo_hash_delete(struct secalgo_hash* hash) +{ + if(!hash) return; + free(hash); +} + /** * Return size of DS digest according to its hash algorithm. * @param algo: DS digest algo. From 1dc4d7a9f61a225690e35e99b40539d942de0a53 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 9 Oct 2020 14:40:26 +0200 Subject: [PATCH 017/168] zonemd, harden result length for unsupported algo in nettle digest final. --- validator/val_secalgo.c | 1 + 1 file changed, 1 insertion(+) diff --git a/validator/val_secalgo.c b/validator/val_secalgo.c index 908155d6f..a4d020143 100644 --- a/validator/val_secalgo.c +++ b/validator/val_secalgo.c @@ -1636,6 +1636,7 @@ int secalgo_hash_final(struct secalgo_hash* hash, uint8_t* result, sha512_digest(&hash->ctx512, SHA512_DIGEST_SIZE, (unsigned char*)result); } else { + *resultlen = 0; return 0; } return 1; From c49a4e60fe2c6d3cbb3da1ac64953f9099a24447 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 9 Oct 2020 15:05:46 +0200 Subject: [PATCH 018/168] zonemd, doxygen comment fix. --- services/authzone.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/authzone.h b/services/authzone.h index 6dd9c30b3..4df8c54c6 100644 --- a/services/authzone.h +++ b/services/authzone.h @@ -716,7 +716,7 @@ int zonemd_scheme_supported(int scheme); * @param scheme: zonemd scheme. * @param hashalgo: zonemd hash algorithm. * @param hash: the hash to check. - * @param buflen: length of hash buffer. + * @param hashlen: length of hash buffer. * @param region: temp region for allocs during canonicalisation. * @param buf: temp buffer during canonicalisation. * @param reason: string returned with failure reason. From 0af62aba53234deeb95d0c7e35d81015ea7eebd4 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 9 Oct 2020 15:14:27 +0200 Subject: [PATCH 019/168] zonemd, defines for scheme and algorithm. --- services/authzone.c | 20 ++++++++++---------- services/authzone.h | 7 +++++++ 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/services/authzone.c b/services/authzone.c index 7ba273b52..c3c472f06 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -6969,14 +6969,14 @@ compare_serial(uint32_t a, uint32_t b) int zonemd_hashalgo_supported(int hashalgo) { - if(hashalgo == 1) return 1; - if(hashalgo == 2) return 1; + if(hashalgo == ZONEMD_ALGO_SHA384) return 1; + if(hashalgo == ZONEMD_ALGO_SHA512) return 1; return 0; } int zonemd_scheme_supported(int scheme) { - if(scheme == 1) return 1; + if(scheme == ZONEMD_SCHEME_SIMPLE) return 1; return 0; } @@ -6984,13 +6984,13 @@ int zonemd_scheme_supported(int scheme) static struct secalgo_hash* zonemd_digest_init(int hashalgo, char** reason) { struct secalgo_hash *h; - if(hashalgo == 1) { + if(hashalgo == ZONEMD_ALGO_SHA384) { /* sha384 */ h = secalgo_hash_create_sha384(); if(!h) *reason = "digest sha384 could not be created"; return h; - } else if(hashalgo == 2) { + } else if(hashalgo == ZONEMD_ALGO_SHA512) { /* sha512 */ h = secalgo_hash_create_sha512(); if(!h) @@ -7006,13 +7006,13 @@ static struct secalgo_hash* zonemd_digest_init(int hashalgo, char** reason) static int zonemd_digest_update(int hashalgo, struct secalgo_hash* h, uint8_t* data, size_t len, char** reason) { - if(hashalgo == 1) { + if(hashalgo == ZONEMD_ALGO_SHA384) { if(!secalgo_hash_update(h, data, len)) { *reason = "digest sha384 failed"; return 0; } return 1; - } else if(hashalgo == 2) { + } else if(hashalgo == ZONEMD_ALGO_SHA512) { if(!secalgo_hash_update(h, data, len)) { *reason = "digest sha512 failed"; return 0; @@ -7028,7 +7028,7 @@ static int zonemd_digest_update(int hashalgo, struct secalgo_hash* h, static int zonemd_digest_finish(int hashalgo, struct secalgo_hash* h, uint8_t* result, size_t hashlen, size_t* resultlen, char** reason) { - if(hashalgo == 1) { + if(hashalgo == ZONEMD_ALGO_SHA384) { if(hashlen < 384/8) { *reason = "digest buffer too small for sha384"; return 0; @@ -7038,7 +7038,7 @@ static int zonemd_digest_finish(int hashalgo, struct secalgo_hash* h, return 0; } return 1; - } else if(hashalgo == 2) { + } else if(hashalgo == ZONEMD_ALGO_SHA512) { if(hashlen < 512/8) { *reason = "digest buffer too small for sha512"; return 0; @@ -7347,7 +7347,7 @@ int auth_zone_generate_zonemd_hash(struct auth_zone* z, int scheme, *reason = "digest init fail"; return 0; } - if(scheme == 1) { + if(scheme == ZONEMD_SCHEME_SIMPLE) { if(!zonemd_simple_collate(z, hashalgo, h, region, buf, reason)) { if(!*reason) *reason = "scheme simple collate fail"; secalgo_hash_delete(h); diff --git a/services/authzone.h b/services/authzone.h index 4df8c54c6..6a0a79da4 100644 --- a/services/authzone.h +++ b/services/authzone.h @@ -704,6 +704,13 @@ int auth_zone_generate_zonemd_hash(struct auth_zone* z, int scheme, int hashalgo, uint8_t* hash, size_t buflen, size_t* resultlen, struct regional* region, struct sldns_buffer* buf, char** reason); +/** ZONEMD scheme definitions */ +#define ZONEMD_SCHEME_SIMPLE 1 + +/** ZONEMD hash algorithm definition for SHA384 */ +#define ZONEMD_ALGO_SHA384 1 +/** ZONEMD hash algorithm definition for SHA512 */ +#define ZONEMD_ALGO_SHA512 2 /** returns true if a zonemd hash algo is supported */ int zonemd_hashalgo_supported(int hashalgo); From 754e6f13497a3613ae5f682c7beeade230cfc1e8 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 9 Oct 2020 16:46:20 +0200 Subject: [PATCH 020/168] zonemd, routine to check zonemd hash if present --- services/authzone.c | 109 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) diff --git a/services/authzone.c b/services/authzone.c index c3c472f06..d58e2a481 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -1761,6 +1761,115 @@ auth_zones_read_zones(struct auth_zones* az, struct config_file* cfg) return 1; } +/** fetch the content of a ZONEMD RR from the rdata */ +static int zonemd_fetch_parameters(struct auth_rrset* zonemd_rrset, size_t i, + uint32_t* serial, int* scheme, int* hashalgo, uint8_t** hash, + size_t* hashlen) +{ + size_t rr_len; + uint8_t* rdata; + if(i >= zonemd_rrset->data->count) + return 0; + rr_len = zonemd_rrset->data->rr_len[i]; + if(rr_len < 2+4+1+1) + return 0; /* too short, for rdlen+serial+scheme+algo */ + rdata = zonemd_rrset->data->rr_data[i]; + *serial = sldns_read_uint32(rdata+2); + *scheme = rdata[6]; + *hashalgo = rdata[7]; + *hashlen = rr_len - 8; + if(*hashlen == 0) + *hash = NULL; + else *hash = rdata+8; + return 1; +} + +/** + * Check ZONEMDs if present for the auth zone. Depending on config + * it can warn or fail on that. Checks the hash of the ZONEMD. + * @param z: auth zone to check for. + * caller must hold lock on zone. + * @param cfg: config file options + */ +void auth_zone_zonemd_check_hash(struct auth_zone* z /*, struct config_file* cfg*/) +{ + /* loop over ZONEMDs and see which one is valid. if not print + * failure (depending on config) */ + struct auth_data* apex; + struct auth_rrset* zonemd_rrset; + size_t i; + char* reason = NULL; + struct regional* region = NULL; + struct sldns_buffer* buf = NULL; + char zstr[255+1]; + uint32_t soa_serial = 0; + region = regional_create(); + if(!region) { + return; + } + buf = sldns_buffer_new(65535); + if(!buf) { + regional_destroy(region); + return; + } + if(!auth_zone_get_serial(z, &soa_serial)) { + regional_destroy(region); + sldns_buffer_free(buf); + return; + } + + apex = az_find_name(z, z->name, z->namelen); + if(!apex) { + regional_destroy(region); + sldns_buffer_free(buf); + return; + } + zonemd_rrset = az_domain_rrset(apex, LDNS_RR_TYPE_ZONEMD); + if(!zonemd_rrset || zonemd_rrset->data->count==0) { + regional_destroy(region); + sldns_buffer_free(buf); + return; /* no RRset or no RRs in rrset */ + } + + /* we have a ZONEMD, check if it is correct */ + for(i=0; idata->count; i++) { + uint32_t serial = 0; + int scheme = 0, hashalgo = 0; + uint8_t* hash = NULL; + size_t hashlen = 0; + if(!zonemd_fetch_parameters(zonemd_rrset, i, &serial, &scheme, + &hashalgo, &hash, &hashlen)) { + /* malformed RR */ + reason = "ZONEMD rdata malformed"; + continue; + } + if(serial != soa_serial) { + reason = "ZONEMD serial is wrong"; + continue; + } + if(auth_zone_generate_zonemd_check(z, scheme, hashalgo, + hash, hashlen, region, buf, &reason)) { + /* success */ + if(verbosity >= VERB_ALGO) { + dname_str(z->name, zstr); + verbose(VERB_ALGO, "auth-zone %s ZONEMD hash is correct", zstr); + } + regional_destroy(region); + sldns_buffer_free(buf); + return; + } + /* try next one */ + } + /* fail, we may have reason */ + if(!reason) + reason = "no ZONEMD records found"; + dname_str(z->name, zstr); + log_warn("auth-zone %s ZONEMD failed: %s", zstr, reason); + + regional_destroy(region); + sldns_buffer_free(buf); +} + /** find serial number of zone or false if none */ int auth_zone_get_serial(struct auth_zone* z, uint32_t* serial) From efc01c928cdf89ea999ae3e80b4ed338f8dacf6b Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 9 Oct 2020 16:47:49 +0200 Subject: [PATCH 021/168] Formatting. --- services/authzone.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/authzone.c b/services/authzone.c index d58e2a481..143350665 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -1783,7 +1783,7 @@ static int zonemd_fetch_parameters(struct auth_rrset* zonemd_rrset, size_t i, else *hash = rdata+8; return 1; } - + /** * Check ZONEMDs if present for the auth zone. Depending on config * it can warn or fail on that. Checks the hash of the ZONEMD. From 22e82765f99ccf4060f1c15a1a316d0699df7bbf Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 14 Oct 2020 13:34:50 +0200 Subject: [PATCH 022/168] zonemd, dnssec verification routines. --- services/authzone.c | 555 +++++++++++++++++++++++++++++++++++++++++--- services/authzone.h | 18 ++ util/fptr_wlist.c | 1 + 3 files changed, 541 insertions(+), 33 deletions(-) diff --git a/services/authzone.c b/services/authzone.c index 143350665..df77b12a2 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -69,6 +69,8 @@ #include "validator/val_nsec3.h" #include "validator/val_secalgo.h" #include "validator/val_sigcrypt.h" +#include "validator/val_anchor.h" +#include "validator/val_utils.h" #include /** bytes to use for NSEC3 hash buffer. 20 for sha1 */ @@ -1789,46 +1791,39 @@ static int zonemd_fetch_parameters(struct auth_rrset* zonemd_rrset, size_t i, * it can warn or fail on that. Checks the hash of the ZONEMD. * @param z: auth zone to check for. * caller must hold lock on zone. - * @param cfg: config file options + * @param env: module env for temp buffers. + * @param reason: returned on failure. + * @return false on failure, true if hash checks out. */ -void auth_zone_zonemd_check_hash(struct auth_zone* z /*, struct config_file* cfg*/) +static int auth_zone_zonemd_check_hash(struct auth_zone* z, + struct module_env* env, char** reason) { /* loop over ZONEMDs and see which one is valid. if not print * failure (depending on config) */ struct auth_data* apex; struct auth_rrset* zonemd_rrset; size_t i; - char* reason = NULL; struct regional* region = NULL; struct sldns_buffer* buf = NULL; char zstr[255+1]; uint32_t soa_serial = 0; - region = regional_create(); - if(!region) { - return; - } - buf = sldns_buffer_new(65535); - if(!buf) { - regional_destroy(region); - return; - } + region = env->scratch; + regional_free_all(region); + buf = env->scratch_buffer; if(!auth_zone_get_serial(z, &soa_serial)) { - regional_destroy(region); - sldns_buffer_free(buf); - return; + *reason = "zone has no SOA serial"; + return 0; } apex = az_find_name(z, z->name, z->namelen); if(!apex) { - regional_destroy(region); - sldns_buffer_free(buf); - return; + *reason = "zone has no apex"; + return 0; } zonemd_rrset = az_domain_rrset(apex, LDNS_RR_TYPE_ZONEMD); if(!zonemd_rrset || zonemd_rrset->data->count==0) { - regional_destroy(region); - sldns_buffer_free(buf); - return; /* no RRset or no RRs in rrset */ + *reason = "zone has no ZONEMD"; + return 0; /* no RRset or no RRs in rrset */ } /* we have a ZONEMD, check if it is correct */ @@ -1840,34 +1835,31 @@ void auth_zone_zonemd_check_hash(struct auth_zone* z /*, struct config_file* cfg if(!zonemd_fetch_parameters(zonemd_rrset, i, &serial, &scheme, &hashalgo, &hash, &hashlen)) { /* malformed RR */ - reason = "ZONEMD rdata malformed"; + *reason = "ZONEMD rdata malformed"; continue; } + regional_free_all(region); if(serial != soa_serial) { - reason = "ZONEMD serial is wrong"; + *reason = "ZONEMD serial is wrong"; continue; } if(auth_zone_generate_zonemd_check(z, scheme, hashalgo, - hash, hashlen, region, buf, &reason)) { + hash, hashlen, region, buf, reason)) { /* success */ if(verbosity >= VERB_ALGO) { dname_str(z->name, zstr); verbose(VERB_ALGO, "auth-zone %s ZONEMD hash is correct", zstr); } - regional_destroy(region); - sldns_buffer_free(buf); - return; + return 1; } /* try next one */ } /* fail, we may have reason */ - if(!reason) - reason = "no ZONEMD records found"; + if(!*reason) + *reason = "no ZONEMD records found"; dname_str(z->name, zstr); - log_warn("auth-zone %s ZONEMD failed: %s", zstr, reason); - - regional_destroy(region); - sldns_buffer_free(buf); + log_warn("auth-zone %s ZONEMD failed: %s", zstr, *reason); + return 0; } /** find serial number of zone or false if none */ @@ -7501,12 +7493,509 @@ int auth_zone_generate_zonemd_check(struct auth_zone* z, int scheme, /* check digest length */ if(hashlen != genlen) { *reason = "incorrect digest length"; + if(verbosity >= VERB_ALGO) { + verbose(VERB_ALGO, "zonemd scheme=%d hashalgo=%d", + scheme, hashalgo); + log_hex("ZONEMD should be ", gen, genlen); + log_hex("ZONEMD to check is", hash, hashlen); + } return 0; } /* check digest */ if(memcmp(hash, gen, genlen) != 0) { *reason = "incorrect digest"; + if(verbosity >= VERB_ALGO) { + verbose(VERB_ALGO, "zonemd scheme=%d hashalgo=%d", + scheme, hashalgo); + log_hex("ZONEMD should be ", gen, genlen); + log_hex("ZONEMD to check is", hash, hashlen); + } return 0; } return 1; } + +/** log auth zone message with zone name in front. */ +static void auth_zone_log(uint8_t* name, enum verbosity_value level, const char* format, ...) ATTR_FORMAT(printf, 3, 4); +static void auth_zone_log(uint8_t* name, enum verbosity_value level, const char* format, ...) +{ + va_list args; + va_start(args, format); + if(verbosity >= level) { + char str[255+1]; + char msg[MAXSYSLOGMSGLEN]; + dname_str(name, str); + vsnprintf(msg, sizeof(msg), format, args); + verbose(level, "auth zone %s %s", str, msg); + } + va_end(args); +} + +/** ZONEMD, dnssec verify the rrset with the dnskey */ +static int zonemd_dnssec_verify(struct auth_zone* z, struct module_env* env, + struct ub_packed_rrset_key* dnskey, struct auth_rrset* rrset) +{ + struct ub_packed_rrset_key pk; + enum sec_status sec; + struct val_env* ve; + int m; + char* why_bogus = NULL; + m = modstack_find(&env->mesh->mods, "validator"); + if(m == -1) { + auth_zone_log(z->name, VERB_ALGO, "zonemd dnssec verify: have " + "trust anchor, but no validator module"); + return 0; + } + ve = (struct val_env*)env->modinfo[m]; + + memset(&pk, 0, sizeof(pk)); + pk.entry.key = &pk; + pk.entry.data = rrset->data; + pk.rk.dname = z->name; + pk.rk.dname_len = z->namelen; + pk.rk.type = htons(rrset->type); + pk.rk.rrset_class = htons(z->dclass); + auth_zone_log(z->name, VERB_ALGO, + "zonemd: verify RRset with DNSKEY"); + /* pass NULL for qstate, it is only used for qtype NSEC to realloc + * a new name in the qstate region */ + sec = dnskeyset_verify_rrset(env, ve, &pk, dnskey, NULL, &why_bogus, + LDNS_SECTION_ANSWER, NULL); + regional_free_all(env->scratch); + if(sec == sec_status_secure) { + return 1; + } + if(why_bogus) + auth_zone_log(z->name, VERB_ALGO, "DNSSEC verify was bogus: %s", why_bogus); + return 0; +} + +/** Verify the absence of ZONEMD with DNSSEC by checking NSEC, NSEC3 type flag. + * return false on failure, reason contains description of failure. */ +static int zonemd_check_dnssec_absence(struct auth_zone* z, + struct module_env* env, struct ub_packed_rrset_key* dnskey, + struct auth_data* apex, char** reason) +{ + struct auth_rrset* nsec = NULL; + if(!apex) { + *reason = "zone has no apex domain but ZONEMD missing"; + return 0; + } + nsec = az_domain_rrset(apex, LDNS_RR_TYPE_NSEC); + if(nsec) { + /* dnssec verify the NSEC */ + if(!zonemd_dnssec_verify(z, env, dnskey, nsec)) { + *reason = "DNSSEC verify failed for NSEC RRset"; + return 0; + } + /* check type bitmap */ + } else { + /* NSEC3 perhaps ? */ + int algo; + size_t iter, saltlen; + uint8_t* salt; + struct auth_rrset* nsec3param = az_domain_rrset(apex, + LDNS_RR_TYPE_NSEC3PARAM); + struct auth_data* match; + struct auth_rrset* nsec3; + if(!nsec3param) { + *reason = "zone has no NSEC information but ZONEMD missing"; + return 0; + } + if(!az_nsec3_param(z, &algo, &iter, &salt, &saltlen)) { + *reason = "zone has no NSEC information but ZONEMD missing"; + return 0; + } + /* find the NSEC3 record */ + match = az_nsec3_find_exact(z, z->name, z->namelen, algo, + iter, salt, saltlen); + if(!match) { + *reason = "zone has no NSEC3 domain for the apex but ZONEMD missing"; + return 0; + } + nsec3 = az_domain_rrset(match, LDNS_RR_TYPE_NSEC3); + if(!nsec3) { + *reason = "zone has no NSEC3 RRset for the apex but ZONEMD missing"; + return 0; + } + /* dnssec verify the NSEC3 */ + if(!zonemd_dnssec_verify(z, env, dnskey, nsec3)) { + *reason = "DNSSEC verify failed for NSEC3 RRset"; + return 0; + } + /* check type bitmap */ + } + + return 1; +} + +/** Verify the SOA and ZONEMD DNSSEC signatures. + * return false on failure, reason contains description of failure. */ +static int zonemd_check_dnssec_soazonemd(struct auth_zone* z, + struct module_env* env, struct ub_packed_rrset_key* dnskey, + struct auth_data* apex, struct auth_rrset* zonemd_rrset, + char** reason) +{ + struct auth_rrset* soa; + if(!apex) { + *reason = "zone has no apex domain"; + return 0; + } + soa = az_domain_rrset(apex, LDNS_RR_TYPE_SOA); + if(!soa) { + *reason = "zone has no SOA RRset"; + return 0; + } + if(!zonemd_dnssec_verify(z, env, dnskey, soa)) { + *reason = "DNSSEC verify failed for SOA RRset"; + return 0; + } + if(!zonemd_dnssec_verify(z, env, dnskey, zonemd_rrset)) { + *reason = "DNSSEC verify failed for ZONEMD RRset"; + return 0; + } + auth_zone_log(z->name, VERB_ALGO, "zonemd DNSSEC verification of SOA and ZONEMD RRsets secure"); + return 1; +} + +/** + * Fail the ZONEMD verification. + * @param z: auth zone that fails. + * @param env: environment with config, to ignore failure or not. + * @param reason: failure string description. + */ +static void auth_zone_zonemd_fail(struct auth_zone* z, struct module_env* env, + char* reason) +{ + char zstr[255+1]; + /* if fail: log reason, and depending on config also take action + * and drop the zone, eg. it is gone from memory, set zone_expired */ + dname_str(z->name, zstr); + if(!reason) reason = "verification failed"; + log_warn("auth zone %s: ZONEMD verification failed: %s", zstr, reason); + + /* expired means the zone gives servfail and is not used by + * lookup if fallback_enabled*/ + z->zone_expired = 1; +} + +/** + * Verify the zonemd with DNSSEC and hash check, with given key. + * @param z: auth zone. + * @param env: environment with config and temp buffers. + * @param dnskey: dnskey that we can use, or NULL. If nonnull, the key + * has been verified and is the start of the chain of trust. + * @param is_insecure: if true, the dnskey is not used, the zone is insecure. + * And dnssec is not used. It is DNSSEC secure insecure or not under + * a trust anchor. + */ +static void +auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env, + struct ub_packed_rrset_key* dnskey, int is_insecure) +{ + char* reason = NULL; + struct auth_data* apex = NULL; + struct auth_rrset* zonemd_rrset = NULL; + int zonemd_absent = 0; + + /* see if ZONEMD is present or absent. */ + apex = az_find_name(z, z->name, z->namelen); + if(!apex) { + zonemd_absent = 1; + } else { + zonemd_rrset = az_domain_rrset(apex, LDNS_RR_TYPE_ZONEMD); + if(!zonemd_rrset || zonemd_rrset->data->count==0) { + zonemd_absent = 1; + zonemd_rrset = NULL; + } + } + + /* if no ZONEMD, and no DNSSEC, done. */ + /* if no ZONEMD, and DNSSEC, use DNSKEY to verify NSEC or NSEC3 for + * zone apex. Check ZONEMD bit is turned off or else fail */ + /* if ZONEMD, and DNSSEC, check DNSSEC signature on SOA and ZONEMD, + * or else fail */ + if(!zonemd_rrset && is_insecure) { + /* success, zonemd is absent */ + } else if(!zonemd_rrset) { + /* fetch, DNSSEC verify, and check NSEC/NSEC3 */ + if(!zonemd_check_dnssec_absence(z, env, dnskey, apex, + &reason)) { + auth_zone_zonemd_fail(z, env, reason); + return; + } + } else if(zonemd_rrset && dnskey) { + /* check DNSSEC verify of SOA and ZONEMD */ + if(!zonemd_check_dnssec_soazonemd(z, env, dnskey, apex, + zonemd_rrset, &reason)) { + auth_zone_zonemd_fail(z, env, reason); + return; + } + } + + /* check ZONEMD checksum and report or else fail. */ + if(!auth_zone_zonemd_check_hash(z, env, &reason)) { + auth_zone_zonemd_fail(z, env, reason); + return; + } + + if(zonemd_absent) + auth_zone_zonemd_fail(z, env, "ZONEMD absent and that is not allowed by config"); + /* success! log the success */ + auth_zone_log(z->name, VERB_ALGO, "ZONEMD verification successful"); +} + +/** + * verify the zone DNSKEY rrset from the trust anchor + * This is possible because the anchor is for the zone itself, and can + * thus apply straight to the zone DNSKEY set. + * @param z: the auth zone. + * @param env: environment with time and temp buffers. + * @param anchor: trust anchor to use + * @param is_insecure: returned, true if the zone is securely insecure. + * @param reason: if the routine fails, returns the failure reason. + * @param keystorage: where to store the ub_packed_rrset_key that is created + * on success. A pointer to it is returned on success. + * @return the dnskey RRset, reference to zone data and keystorage, or + * NULL on failure. + */ +static struct ub_packed_rrset_key* +zonemd_get_dnskey_from_anchor(struct auth_zone* z, struct module_env* env, + struct trust_anchor* anchor, int* is_insecure, char** reason, + struct ub_packed_rrset_key* keystorage) +{ + struct auth_data* apex; + struct auth_rrset* dnskey_rrset; + enum sec_status sec; + struct val_env* ve; + int m; + + apex = az_find_name(z, z->name, z->namelen); + if(!apex) { + *reason = "have trust anchor, but zone has no apex domain for DNSKEY"; + return 0; + } + dnskey_rrset = az_domain_rrset(apex, LDNS_RR_TYPE_DNSKEY); + if(!dnskey_rrset || dnskey_rrset->data->count==0) { + *reason = "have trust anchor, but zone has no DNSKEY"; + return 0; + } + + m = modstack_find(&env->mesh->mods, "validator"); + if(m == -1) { + *reason = "have trust anchor, but no validator module"; + return 0; + } + ve = (struct val_env*)env->modinfo[m]; + + memset(keystorage, 0, sizeof(*keystorage)); + keystorage->entry.key = keystorage; + keystorage->entry.data = dnskey_rrset->data; + keystorage->rk.dname = apex->name; + keystorage->rk.dname_len = apex->namelen; + keystorage->rk.type = htons(LDNS_RR_TYPE_DNSKEY); + keystorage->rk.rrset_class = htons(z->dclass); + auth_zone_log(z->name, VERB_QUERY, + "zonemd: verify DNSKEY RRset with trust anchor"); + /* pass NULL for qstate, it is only used when type NSEC needs a + * name reallocated to get the qstate region for that */ + sec = val_verify_DNSKEY_with_TA(env, ve, keystorage, anchor->ds_rrset, + anchor->dnskey_rrset, NULL, reason, NULL); + regional_free_all(env->scratch); + if(sec == sec_status_secure) { + /* success */ + *is_insecure = 0; + return keystorage; + } else if(sec == sec_status_insecure) { + /* insecure */ + *is_insecure = 1; + } else { + /* bogus */ + *is_insecure = 0; + } + return NULL; +} + +/** callback for ZONEMD lookup of DNSKEY */ +void auth_zonemd_dnskey_lookup_callback(void* arg, int rcode, sldns_buffer* buf, + enum sec_status sec, char* why_bogus, int ATTR_UNUSED(was_ratelimited)) +{ + struct auth_zone* z = (struct auth_zone*)arg; + struct module_env* env; + char* reason = NULL; + struct ub_packed_rrset_key* dnskey = NULL; + int is_insecure = 0; + + lock_rw_wrlock(&z->lock); + env = z->zonemd_callback_env; + /* release the env variable so another worker can pick up the + * ZONEMD verification task if it wants to */ + z->zonemd_callback_env = NULL; + if(!env || env->outnet->want_to_quit) { + lock_rw_unlock(&z->lock); + return; /* stop on quit */ + } + + /* process result */ + if(sec == sec_status_bogus) { + reason = why_bogus; + if(!reason) + reason = "lookup of DNSKEY was bogus"; + auth_zone_log(z->name, VERB_ALGO, + "zonemd lookup of DNSKEY was bogus: %s", why_bogus); + } else if(rcode == LDNS_RCODE_NOERROR) { + uint16_t wanted_qtype = LDNS_RR_TYPE_DNSKEY; + struct regional* temp = env->scratch; + struct query_info rq; + struct reply_info* rep; + memset(&rq, 0, sizeof(rq)); + rep = parse_reply_in_temp_region(buf, temp, &rq); + if(rep && rq.qtype == wanted_qtype && + FLAGS_GET_RCODE(rep->flags) == LDNS_RCODE_NOERROR) { + /* parsed successfully */ + struct ub_packed_rrset_key* answer = + reply_find_answer_rrset(&rq, rep); + if(answer && sec == sec_status_secure) { + dnskey = answer; + auth_zone_log(z->name, VERB_ALGO, + "zonemd lookup of DNSKEY was secure"); + } else if(sec == sec_status_secure && !answer) { + is_insecure = 1; + auth_zone_log(z->name, VERB_ALGO, + "zonemd lookup of DNSKEY has no content, but is secure, treat as insecure"); + } else if(sec == sec_status_insecure) { + is_insecure = 1; + auth_zone_log(z->name, VERB_ALGO, + "zonemd lookup of DNSKEY was insecure"); + } else if(sec == sec_status_indeterminate) { + is_insecure = 1; + auth_zone_log(z->name, VERB_ALGO, + "zonemd lookup of DNSKEY was indeterminate, treat as insecure"); + } else { + auth_zone_log(z->name, VERB_ALGO, + "zonemd lookup of DNSKEY has nodata"); + reason = "lookup of DNSKEY has nodata"; + } + } else { + auth_zone_log(z->name, VERB_ALGO, + "zonemd lookup of DNSKEY has no answer"); + reason = "lookup of DNSKEY has no answer"; + } + } else { + auth_zone_log(z->name, VERB_ALGO, + "zonemd lookup of DNSKEY failed"); + reason = "lookup of DNSKEY failed"; + } + + if(reason) { + auth_zone_zonemd_fail(z, env, reason); + lock_rw_unlock(&z->lock); + return; + } + + auth_zone_verify_zonemd_with_key(z, env, dnskey, is_insecure); + lock_rw_unlock(&z->lock); +} + +/** lookup DNSKEY for ZONEMD verification */ +static int +zonemd_lookup_dnskey(struct auth_zone* z, struct module_env* env) +{ + struct query_info qinfo; + uint16_t qflags = BIT_RD; + struct edns_data edns; + sldns_buffer* buf = env->scratch_buffer; + + if(z->zonemd_callback_env) { + /* another worker is already working on the callback + * for the DNSKEY lookup for ZONEMD verification. + * We do not also have to do ZONEMD verification, let that + * worker do it */ + auth_zone_log(z->name, VERB_ALGO, + "zonemd needs lookup of DNSKEY and that already worked on by another worker"); + return 1; + } + + /* use mesh_new_callback to lookup the DNSKEY, + * and then wait for them to be looked up (in cache, or query) */ + qinfo.qname_len = z->namelen; + qinfo.qname = z->name; + qinfo.qclass = z->dclass; + qinfo.qtype = LDNS_RR_TYPE_DNSKEY; + qinfo.local_alias = NULL; + if(verbosity >= VERB_ALGO) { + char buf1[512]; + char buf2[LDNS_MAX_DOMAINLEN+1]; + dname_str(z->name, buf2); + snprintf(buf1, sizeof(buf1), "auth zone %s: lookup DNSKEY " + "for zonemd verification", buf2); + log_query_info(VERB_ALGO, buf1, &qinfo); + } + edns.edns_present = 1; + edns.ext_rcode = 0; + edns.edns_version = 0; + edns.bits = EDNS_DO; + edns.opt_list = NULL; + if(sldns_buffer_capacity(buf) < 65535) + edns.udp_size = (uint16_t)sldns_buffer_capacity(buf); + else edns.udp_size = 65535; + + /* store the worker-specific module env for the callback. + * We can then reference this when the callback executes */ + z->zonemd_callback_env = env; + /* the callback can be called straight away */ + lock_rw_unlock(&z->lock); + if(!mesh_new_callback(env->mesh, &qinfo, qflags, &edns, buf, 0, + &auth_zonemd_dnskey_lookup_callback, z)) { + lock_rw_wrlock(&z->lock); + log_err("out of memory lookup up dnskey for zonemd"); + return 0; + } + lock_rw_wrlock(&z->lock); + return 1; +} + +void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env) +{ + char* reason = NULL; + struct trust_anchor* anchor = NULL; + struct ub_packed_rrset_key* dnskey = NULL; + struct ub_packed_rrset_key keystorage; + int is_insecure = 0; + /* verify the ZONEMD if present. + * If not present check if absence is allowed by DNSSEC */ + + /* if zone is under a trustanchor */ + /* is it equal to trustanchor - get dnskey's verified */ + /* else, find chain of trust by fetching DNSKEYs lookup for zone */ + /* result if that, if insecure, means no DNSSEC for the ZONEMD, + * otherwise we have the zone DNSKEY for the DNSSEC verification. */ + anchor = anchors_lookup(env->anchors, z->name, z->namelen, z->dclass); + if(anchor && query_dname_compare(z->name, anchor->name) == 0) { + /* equal to trustanchor, no need for online lookups */ + dnskey = zonemd_get_dnskey_from_anchor(z, env, anchor, + &is_insecure, &reason, &keystorage); + if(!dnskey && !reason) { + reason = "dnskey verify with anchor failed"; + } + } else if(anchor) { + /* perform online lookups */ + /* setup online lookups, and wait for them */ + if(zonemd_lookup_dnskey(z, env)) { + /* wait for the lookup */ + return; + } + reason = "could not lookup DNSKEY for chain of trust"; + } else { + /* the zone is not under a trust anchor */ + dnskey = NULL; + is_insecure = 1; + } + + if(reason) { + auth_zone_zonemd_fail(z, env, reason); + return; + } + + auth_zone_verify_zonemd_with_key(z, env, dnskey, is_insecure); +} diff --git a/services/authzone.h b/services/authzone.h index 6a0a79da4..69ec7ed99 100644 --- a/services/authzone.h +++ b/services/authzone.h @@ -134,6 +134,11 @@ struct auth_zone { int for_upstream; /** RPZ zones */ struct rpz* rpz; + /** store the env (worker thread specific) for the zonemd callbacks + * from the mesh with the results of the lookup, if nonNULL, some + * worker has already picked up the zonemd verification task and + * this worked does not have to do it as well. */ + struct module_env* zonemd_callback_env; /** zone has been deleted */ int zone_deleted; /** deletelist pointer, unused normally except during delete */ @@ -733,4 +738,17 @@ int auth_zone_generate_zonemd_check(struct auth_zone* z, int scheme, int hashalgo, uint8_t* hash, size_t hashlen, struct regional* region, struct sldns_buffer* buf, char** reason); +/** + * Perform ZONEMD checks and verification for the auth zone. + * This includes DNSSEC verification if applicable. + * @param z: auth zone to check. Caller holds lock. wrlock. + * @param env: with temp region, buffer and config. + */ +void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env); + +/** mesh callback for zonemd on lookup of dnskey */ +void auth_zonemd_dnskey_lookup_callback(void* arg, int rcode, + struct sldns_buffer* buf, enum sec_status sec, char* why_bogus, + int was_ratelimited); + #endif /* SERVICES_AUTHZONE_H */ diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c index 7d15d1075..1469e8213 100644 --- a/util/fptr_wlist.c +++ b/util/fptr_wlist.c @@ -581,6 +581,7 @@ int fptr_whitelist_mesh_cb(mesh_cb_func_type fptr) else if(fptr == &probe_answer_cb) return 1; else if(fptr == &auth_xfer_probe_lookup_callback) return 1; else if(fptr == &auth_xfer_transfer_lookup_callback) return 1; + else if(fptr == &auth_zonemd_dnskey_lookup_callback) return 1; return 0; } From 42d7cdb7d58425456fc6607db89c8a70e8f4d68b Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 14 Oct 2020 14:46:59 +0200 Subject: [PATCH 023/168] zonemd, region freed, and qstate not used when not in a query, and nsec and nsec3 bitmap checks. --- services/authzone.c | 71 ++++++++++++++++++++++++++++++---------- validator/val_sigcrypt.c | 2 +- 2 files changed, 55 insertions(+), 18 deletions(-) diff --git a/services/authzone.c b/services/authzone.c index df77b12a2..0507c66ca 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -67,6 +67,7 @@ #include "sldns/parseutil.h" #include "sldns/keyraw.h" #include "validator/val_nsec3.h" +#include "validator/val_nsec.h" #include "validator/val_secalgo.h" #include "validator/val_sigcrypt.h" #include "validator/val_anchor.h" @@ -7516,8 +7517,10 @@ int auth_zone_generate_zonemd_check(struct auth_zone* z, int scheme, } /** log auth zone message with zone name in front. */ -static void auth_zone_log(uint8_t* name, enum verbosity_value level, const char* format, ...) ATTR_FORMAT(printf, 3, 4); -static void auth_zone_log(uint8_t* name, enum verbosity_value level, const char* format, ...) +static void auth_zone_log(uint8_t* name, enum verbosity_value level, + const char* format, ...) ATTR_FORMAT(printf, 3, 4); +static void auth_zone_log(uint8_t* name, enum verbosity_value level, + const char* format, ...) { va_list args; va_start(args, format); @@ -7532,8 +7535,9 @@ static void auth_zone_log(uint8_t* name, enum verbosity_value level, const char* } /** ZONEMD, dnssec verify the rrset with the dnskey */ -static int zonemd_dnssec_verify(struct auth_zone* z, struct module_env* env, - struct ub_packed_rrset_key* dnskey, struct auth_rrset* rrset) +static int zonemd_dnssec_verify_rrset(struct auth_zone* z, + struct module_env* env, struct ub_packed_rrset_key* dnskey, + struct auth_data* node, struct auth_rrset* rrset) { struct ub_packed_rrset_key pk; enum sec_status sec; @@ -7543,7 +7547,7 @@ static int zonemd_dnssec_verify(struct auth_zone* z, struct module_env* env, m = modstack_find(&env->mesh->mods, "validator"); if(m == -1) { auth_zone_log(z->name, VERB_ALGO, "zonemd dnssec verify: have " - "trust anchor, but no validator module"); + "DNSKEY chain of trust, but no validator module"); return 0; } ve = (struct val_env*)env->modinfo[m]; @@ -7551,17 +7555,14 @@ static int zonemd_dnssec_verify(struct auth_zone* z, struct module_env* env, memset(&pk, 0, sizeof(pk)); pk.entry.key = &pk; pk.entry.data = rrset->data; - pk.rk.dname = z->name; - pk.rk.dname_len = z->namelen; + pk.rk.dname = node->name; + pk.rk.dname_len = node->namelen; pk.rk.type = htons(rrset->type); pk.rk.rrset_class = htons(z->dclass); auth_zone_log(z->name, VERB_ALGO, "zonemd: verify RRset with DNSKEY"); - /* pass NULL for qstate, it is only used for qtype NSEC to realloc - * a new name in the qstate region */ sec = dnskeyset_verify_rrset(env, ve, &pk, dnskey, NULL, &why_bogus, LDNS_SECTION_ANSWER, NULL); - regional_free_all(env->scratch); if(sec == sec_status_secure) { return 1; } @@ -7570,6 +7571,30 @@ static int zonemd_dnssec_verify(struct auth_zone* z, struct module_env* env, return 0; } +/** check for nsec3, the RR with params equal, if bitmap has the type */ +static int nsec3_of_param_has_type(struct auth_rrset* nsec3, int algo, + size_t iter, uint8_t* salt, size_t saltlen, uint16_t rrtype) +{ + size_t i; + struct ub_packed_rrset_key pk; + memset(&pk, 0, sizeof(pk)); + pk.entry.data = nsec3->data; + for(i=0; idata->count; i++) { + int rralgo; + size_t rriter, rrsaltlen; + uint8_t* rrsalt; + if(!nsec3_get_params(&pk, i, &rralgo, &rriter, &rrsalt, + &rrsaltlen)) + continue; /* no parameters, malformed */ + if(rralgo != algo || rriter != iter || rrsaltlen != saltlen || + memcmp(rrsalt, salt, saltlen) != 0) + continue; /* different parameters */ + if(nsec3_has_type(&pk, i, rrtype)) + return 1; + } + return 0; +} + /** Verify the absence of ZONEMD with DNSSEC by checking NSEC, NSEC3 type flag. * return false on failure, reason contains description of failure. */ static int zonemd_check_dnssec_absence(struct auth_zone* z, @@ -7583,12 +7608,19 @@ static int zonemd_check_dnssec_absence(struct auth_zone* z, } nsec = az_domain_rrset(apex, LDNS_RR_TYPE_NSEC); if(nsec) { + struct ub_packed_rrset_key pk; /* dnssec verify the NSEC */ - if(!zonemd_dnssec_verify(z, env, dnskey, nsec)) { + if(!zonemd_dnssec_verify_rrset(z, env, dnskey, apex, nsec)) { *reason = "DNSSEC verify failed for NSEC RRset"; return 0; } /* check type bitmap */ + memset(&pk, 0, sizeof(pk)); + pk.entry.data = nsec->data; + if(nsec_has_type(&pk, LDNS_RR_TYPE_ZONEMD)) { + *reason = "DNSSEC NSEC bitmap says type ZONEMD exists"; + return 0; + } } else { /* NSEC3 perhaps ? */ int algo; @@ -7619,11 +7651,16 @@ static int zonemd_check_dnssec_absence(struct auth_zone* z, return 0; } /* dnssec verify the NSEC3 */ - if(!zonemd_dnssec_verify(z, env, dnskey, nsec3)) { + if(!zonemd_dnssec_verify_rrset(z, env, dnskey, match, nsec3)) { *reason = "DNSSEC verify failed for NSEC3 RRset"; return 0; } /* check type bitmap */ + if(nsec3_of_param_has_type(nsec3, algo, iter, salt, saltlen, + LDNS_RR_TYPE_ZONEMD)) { + *reason = "DNSSEC NSEC3 bitmap says type ZONEMD exists"; + return 0; + } } return 1; @@ -7646,11 +7683,11 @@ static int zonemd_check_dnssec_soazonemd(struct auth_zone* z, *reason = "zone has no SOA RRset"; return 0; } - if(!zonemd_dnssec_verify(z, env, dnskey, soa)) { + if(!zonemd_dnssec_verify_rrset(z, env, dnskey, apex, soa)) { *reason = "DNSSEC verify failed for SOA RRset"; return 0; } - if(!zonemd_dnssec_verify(z, env, dnskey, zonemd_rrset)) { + if(!zonemd_dnssec_verify_rrset(z, env, dnskey, apex, zonemd_rrset)) { *reason = "DNSSEC verify failed for ZONEMD RRset"; return 0; } @@ -7797,8 +7834,6 @@ zonemd_get_dnskey_from_anchor(struct auth_zone* z, struct module_env* env, keystorage->rk.rrset_class = htons(z->dclass); auth_zone_log(z->name, VERB_QUERY, "zonemd: verify DNSKEY RRset with trust anchor"); - /* pass NULL for qstate, it is only used when type NSEC needs a - * name reallocated to get the qstate region for that */ sec = val_verify_DNSKEY_with_TA(env, ve, keystorage, anchor->ds_rrset, anchor->dnskey_rrset, NULL, reason, NULL); regional_free_all(env->scratch); @@ -7842,7 +7877,7 @@ void auth_zonemd_dnskey_lookup_callback(void* arg, int rcode, sldns_buffer* buf, if(!reason) reason = "lookup of DNSKEY was bogus"; auth_zone_log(z->name, VERB_ALGO, - "zonemd lookup of DNSKEY was bogus: %s", why_bogus); + "zonemd lookup of DNSKEY was bogus: %s", reason); } else if(rcode == LDNS_RCODE_NOERROR) { uint16_t wanted_qtype = LDNS_RR_TYPE_DNSKEY; struct regional* temp = env->scratch; @@ -7894,6 +7929,7 @@ void auth_zonemd_dnskey_lookup_callback(void* arg, int rcode, sldns_buffer* buf, } auth_zone_verify_zonemd_with_key(z, env, dnskey, is_insecure); + regional_free_all(env->scratch); lock_rw_unlock(&z->lock); } @@ -7998,4 +8034,5 @@ void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env) } auth_zone_verify_zonemd_with_key(z, env, dnskey, is_insecure); + regional_free_all(env->scratch); } diff --git a/validator/val_sigcrypt.c b/validator/val_sigcrypt.c index 10cf2caee..14e13da06 100644 --- a/validator/val_sigcrypt.c +++ b/validator/val_sigcrypt.c @@ -1187,7 +1187,7 @@ rrset_canonical(struct regional* region, sldns_buffer* buf, * section, to prevent that a wildcard synthesized NSEC can be used in * the non-existence proves. */ if(ntohs(k->rk.type) == LDNS_RR_TYPE_NSEC && - section == LDNS_SECTION_AUTHORITY) { + section == LDNS_SECTION_AUTHORITY && qstate) { k->rk.dname = regional_alloc_init(qstate->region, can_owner, can_owner_len); if(!k->rk.dname) From e35b1dfbd5e36f470859ad16595c821f8e38e4eb Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 14 Oct 2020 14:52:32 +0200 Subject: [PATCH 024/168] zonemd, nsec3 rr iterator is type int, like other nsec3 code. --- services/authzone.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/authzone.c b/services/authzone.c index 0507c66ca..98656dfb0 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -7575,11 +7575,11 @@ static int zonemd_dnssec_verify_rrset(struct auth_zone* z, static int nsec3_of_param_has_type(struct auth_rrset* nsec3, int algo, size_t iter, uint8_t* salt, size_t saltlen, uint16_t rrtype) { - size_t i; + int i, count = (int)nsec3->data->count; struct ub_packed_rrset_key pk; memset(&pk, 0, sizeof(pk)); pk.entry.data = nsec3->data; - for(i=0; idata->count; i++) { + for(i=0; i Date: Thu, 15 Oct 2020 09:17:57 +0200 Subject: [PATCH 025/168] zonemd, fix anchor unlock. zonemd, unit test for dnssec verify function test harness. --- services/authzone.c | 2 ++ testcode/unitmain.c | 66 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/services/authzone.c b/services/authzone.c index 6bbb88a20..7c75441d5 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -8013,10 +8013,12 @@ void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env) /* equal to trustanchor, no need for online lookups */ dnskey = zonemd_get_dnskey_from_anchor(z, env, anchor, &is_insecure, &reason, &keystorage); + lock_basic_unlock(&anchor->lock); if(!dnskey && !reason) { reason = "dnskey verify with anchor failed"; } } else if(anchor) { + lock_basic_unlock(&anchor->lock); /* perform online lookups */ /* setup online lookups, and wait for them */ if(zonemd_lookup_dnskey(z, env)) { diff --git a/testcode/unitmain.c b/testcode/unitmain.c index 84d850e5f..b5aa8fe42 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -844,6 +844,7 @@ static void respip_test(void) #include "services/authzone.h" #include "util/data/dname.h" #include "util/regional.h" +#include "validator/val_anchor.h" /** Add zone from file for testing */ struct auth_zone* authtest_addzone(struct auth_zones* az, const char* name, char* fname); @@ -920,6 +921,7 @@ static void zonemd_generate_test(const char* zname, char* zfile, /** loop over files and test generated zonemd digest */ static void zonemd_generate_tests(void) { + unit_show_func("services/authzone.c", "auth_zone_generate_zonemd_hash"); zonemd_generate_test("example.org", "testdata/zonemd.example1.zone", 1, 2, "20564D10F50A0CEBEC856C64032B7DFB53D3C449A421A5BC7A21F7627B4ACEA4DF29F2C6FE82ED9C23ADF6F4D420D5DD63EF6E6349D60FDAB910B65DF8D481B7"); @@ -974,6 +976,7 @@ static void zonemd_check_test(void) if(!zonemd_hashalgo_supported(hashalgo)) return; /* cannot test unsupported algo */ + unit_show_func("services/authzone.c", "auth_zone_generate_zonemd_check"); /* setup environment */ az = auth_zones_create(); @@ -1021,12 +1024,75 @@ static void zonemd_check_test(void) sldns_buffer_free(buf); } +/** zonemd test verify */ +static void zonemd_verify_test(void) +{ + struct module_stack mods; + struct module_env env; + char* tastr = "example.org. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af"; + char* zname = "example.org"; + char* zfile = "testdata/zonemd.example1.zone"; + char* date_override = "20180302005009"; + struct auth_zone* z; + unit_show_func("services/authzone.c", "auth_zone_verify_zonemd"); + + /* setup test harness */ + memset(&mods, 0, sizeof(mods)); + memset(&env, 0, sizeof(env)); + env.scratch = regional_create(); + if(!env.scratch) + fatal_exit("out of memory"); + env.scratch_buffer = sldns_buffer_new(65553); + if(!env.scratch_buffer) + fatal_exit("out of memory"); + env.cfg = config_create(); + if(!env.cfg) + fatal_exit("out of memory"); + env.cfg->val_date_override = cfg_convert_timeval(date_override); + if(!env.cfg->val_date_override) + fatal_exit("could not parse datetime %s", date_override); + env.anchors = anchors_create(); + if(!env.anchors) + fatal_exit("out of memory"); + env.auth_zones = auth_zones_create(); + if(!env.auth_zones) + fatal_exit("out of memory"); + modstack_init(&mods); + if(!modstack_config(&mods, "validator iterator")) + fatal_exit("could not init modules"); + env.mesh = mesh_create(&mods, &env); + if(!env.mesh) + fatal_exit("out of memory"); + + /* load data */ + if(!anchor_store_str(env.anchors, env.scratch_buffer, tastr)) + fatal_exit("could not store anchor: %s", tastr); + z = authtest_addzone(env.auth_zones, zname, zfile); + if(!z) + fatal_exit("could not addzone %s %s", zname, zfile); + + /* test */ + lock_rw_wrlock(&z->lock); + auth_zone_verify_zonemd(z, &env); + lock_rw_unlock(&z->lock); + + /* desetup test harness */ + mesh_delete(env.mesh); + modstack_desetup(&mods, &env); + auth_zones_delete(env.auth_zones); + anchors_delete(env.anchors); + config_delete(env.cfg); + regional_destroy(env.scratch); + sldns_buffer_free(env.scratch_buffer); +} + /** zonemd unit tests */ static void zonemd_test(void) { unit_show_feature("zonemd"); zonemd_generate_tests(); zonemd_check_test(); + zonemd_verify_test(); } void unit_show_func(const char* file, const char* func) From 0a238280b9c31850bda9201de8abeb82d9163967 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 15 Oct 2020 12:27:22 +0200 Subject: [PATCH 026/168] zonemd, unit test for dnssec verify, implement test. --- services/authzone.c | 36 ++++++++++++++++++++++++------------ services/authzone.h | 4 +++- testcode/unitmain.c | 22 +++++++++++++++++++++- 3 files changed, 48 insertions(+), 14 deletions(-) diff --git a/services/authzone.c b/services/authzone.c index 7c75441d5..7ba86c23c 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -7702,16 +7702,22 @@ static int zonemd_check_dnssec_soazonemd(struct auth_zone* z, * @param z: auth zone that fails. * @param env: environment with config, to ignore failure or not. * @param reason: failure string description. + * @param result: strdup result in here if not NULL. */ static void auth_zone_zonemd_fail(struct auth_zone* z, struct module_env* env, - char* reason) + char* reason, char** result) { char zstr[255+1]; /* if fail: log reason, and depending on config also take action * and drop the zone, eg. it is gone from memory, set zone_expired */ dname_str(z->name, zstr); if(!reason) reason = "verification failed"; - log_warn("auth zone %s: ZONEMD verification failed: %s", zstr, reason); + if(result) { + *result = strdup(reason); + if(!*result) log_err("out of memory"); + } else { + log_warn("auth zone %s: ZONEMD verification failed: %s", zstr, reason); + } /* expired means the zone gives servfail and is not used by * lookup if fallback_enabled*/ @@ -7727,10 +7733,11 @@ static void auth_zone_zonemd_fail(struct auth_zone* z, struct module_env* env, * @param is_insecure: if true, the dnskey is not used, the zone is insecure. * And dnssec is not used. It is DNSSEC secure insecure or not under * a trust anchor. + * @param result: if not NULL result reason copied here. */ static void auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env, - struct ub_packed_rrset_key* dnskey, int is_insecure) + struct ub_packed_rrset_key* dnskey, int is_insecure, char** result) { char* reason = NULL; struct auth_data* apex = NULL; @@ -7760,28 +7767,32 @@ auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env, /* fetch, DNSSEC verify, and check NSEC/NSEC3 */ if(!zonemd_check_dnssec_absence(z, env, dnskey, apex, &reason)) { - auth_zone_zonemd_fail(z, env, reason); + auth_zone_zonemd_fail(z, env, reason, result); return; } } else if(zonemd_rrset && dnskey) { /* check DNSSEC verify of SOA and ZONEMD */ if(!zonemd_check_dnssec_soazonemd(z, env, dnskey, apex, zonemd_rrset, &reason)) { - auth_zone_zonemd_fail(z, env, reason); + auth_zone_zonemd_fail(z, env, reason, result); return; } } /* check ZONEMD checksum and report or else fail. */ if(!auth_zone_zonemd_check_hash(z, env, &reason)) { - auth_zone_zonemd_fail(z, env, reason); + auth_zone_zonemd_fail(z, env, reason, result); return; } if(zonemd_absent) - auth_zone_zonemd_fail(z, env, "ZONEMD absent and that is not allowed by config"); + auth_zone_zonemd_fail(z, env, "ZONEMD absent and that is not allowed by config", result); /* success! log the success */ auth_zone_log(z->name, VERB_ALGO, "ZONEMD verification successful"); + if(result) { + *result = strdup("ZONEMD verification successful"); + if(!*result) log_err("out of memory"); + } } /** @@ -7925,12 +7936,12 @@ void auth_zonemd_dnskey_lookup_callback(void* arg, int rcode, sldns_buffer* buf, } if(reason) { - auth_zone_zonemd_fail(z, env, reason); + auth_zone_zonemd_fail(z, env, reason, NULL); lock_rw_unlock(&z->lock); return; } - auth_zone_verify_zonemd_with_key(z, env, dnskey, is_insecure); + auth_zone_verify_zonemd_with_key(z, env, dnskey, is_insecure, NULL); regional_free_all(env->scratch); lock_rw_unlock(&z->lock); } @@ -7993,7 +8004,8 @@ zonemd_lookup_dnskey(struct auth_zone* z, struct module_env* env) return 1; } -void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env) +void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env, + char** result) { char* reason = NULL; struct trust_anchor* anchor = NULL; @@ -8033,10 +8045,10 @@ void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env) } if(reason) { - auth_zone_zonemd_fail(z, env, reason); + auth_zone_zonemd_fail(z, env, reason, result); return; } - auth_zone_verify_zonemd_with_key(z, env, dnskey, is_insecure); + auth_zone_verify_zonemd_with_key(z, env, dnskey, is_insecure, result); regional_free_all(env->scratch); } diff --git a/services/authzone.h b/services/authzone.h index 69ec7ed99..c00598ad1 100644 --- a/services/authzone.h +++ b/services/authzone.h @@ -743,8 +743,10 @@ int auth_zone_generate_zonemd_check(struct auth_zone* z, int scheme, * This includes DNSSEC verification if applicable. * @param z: auth zone to check. Caller holds lock. wrlock. * @param env: with temp region, buffer and config. + * @param result: if not NULL, result string strdupped in here. */ -void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env); +void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env, + char** result); /** mesh callback for zonemd on lookup of dnskey */ void auth_zonemd_dnskey_lookup_callback(void* arg, int rcode, diff --git a/testcode/unitmain.c b/testcode/unitmain.c index b5aa8fe42..519653064 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -1033,6 +1033,8 @@ static void zonemd_verify_test(void) char* zname = "example.org"; char* zfile = "testdata/zonemd.example1.zone"; char* date_override = "20180302005009"; + char* result = NULL; + char* result_wanted = "have trust anchor, but zone has no DNSKEY"; struct auth_zone* z; unit_show_func("services/authzone.c", "auth_zone_verify_zonemd"); @@ -1073,8 +1075,26 @@ static void zonemd_verify_test(void) /* test */ lock_rw_wrlock(&z->lock); - auth_zone_verify_zonemd(z, &env); + auth_zone_verify_zonemd(z, &env, &result); lock_rw_unlock(&z->lock); + if(1) { + printf("auth zone %s: ZONEMD verification %s: %s\n", zname, + (strcmp(result, "ZONEMD verification successful")==0?"successful":"failed"), + result); + } + if(!result) + fatal_exit("out of memory"); + unit_assert(strcmp(result, result_wanted) == 0); + free(result); + if(strcmp(result, "ZONEMD verification successful") == 0) { + lock_rw_rdlock(&z->lock); + unit_assert(!z->zone_expired); + lock_rw_unlock(&z->lock); + } else { + lock_rw_rdlock(&z->lock); + unit_assert(z->zone_expired); + lock_rw_unlock(&z->lock); + } /* desetup test harness */ mesh_delete(env.mesh); From ceb0214b7d4697cb808fe701a1cb046ce37a6eab Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 16 Oct 2020 16:09:13 +0200 Subject: [PATCH 027/168] zonemd, unit tests for dnssec verify --- testcode/unitmain.c | 44 +++++++++++++++++++++++++++-------- testdata/zonemd.example2.zone | 8 +++++++ 2 files changed, 42 insertions(+), 10 deletions(-) create mode 100644 testdata/zonemd.example2.zone diff --git a/testcode/unitmain.c b/testcode/unitmain.c index 519653064..9bfa35ede 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -1025,18 +1025,13 @@ static void zonemd_check_test(void) } /** zonemd test verify */ -static void zonemd_verify_test(void) +static void zonemd_verify_test(char* zname, char* zfile, char* tastr, + char* date_override, char* result_wanted) { struct module_stack mods; struct module_env env; - char* tastr = "example.org. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af"; - char* zname = "example.org"; - char* zfile = "testdata/zonemd.example1.zone"; - char* date_override = "20180302005009"; char* result = NULL; - char* result_wanted = "have trust anchor, but zone has no DNSKEY"; struct auth_zone* z; - unit_show_func("services/authzone.c", "auth_zone_verify_zonemd"); /* setup test harness */ memset(&mods, 0, sizeof(mods)); @@ -1067,7 +1062,7 @@ static void zonemd_verify_test(void) fatal_exit("out of memory"); /* load data */ - if(!anchor_store_str(env.anchors, env.scratch_buffer, tastr)) + if(tastr && !anchor_store_str(env.anchors, env.scratch_buffer, tastr)) fatal_exit("could not store anchor: %s", tastr); z = authtest_addzone(env.auth_zones, zname, zfile); if(!z) @@ -1085,7 +1080,6 @@ static void zonemd_verify_test(void) if(!result) fatal_exit("out of memory"); unit_assert(strcmp(result, result_wanted) == 0); - free(result); if(strcmp(result, "ZONEMD verification successful") == 0) { lock_rw_rdlock(&z->lock); unit_assert(!z->zone_expired); @@ -1095,6 +1089,7 @@ static void zonemd_verify_test(void) unit_assert(z->zone_expired); lock_rw_unlock(&z->lock); } + free(result); /* desetup test harness */ mesh_delete(env.mesh); @@ -1106,13 +1101,42 @@ static void zonemd_verify_test(void) sldns_buffer_free(env.scratch_buffer); } +/** zonemd test verify suite */ +static void zonemd_verify_tests(void) +{ + unit_show_func("services/authzone.c", "auth_zone_verify_zonemd"); + verbosity=4; /* DEBUG */ + zonemd_verify_test("example.org", + "testdata/zonemd.example1.zone", + "example.org. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20180302005009", + "have trust anchor, but zone has no DNSKEY"); + zonemd_verify_test("example.org", + "testdata/zonemd.example1.zone", + NULL, + "20180302005009", + "zone has no ZONEMD"); + /* no trust anchor, so it succeeds */ + zonemd_verify_test("example.com", + "testdata/zonemd.example2.zone", + NULL, + "20180302005009", + "ZONEMD verification successful"); + /* trust anchor for another zone, so it is indeterminate */ + zonemd_verify_test("example.com", + "testdata/zonemd.example2.zone", + "example.org. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20180302005009", + "ZONEMD verification successful"); +} + /** zonemd unit tests */ static void zonemd_test(void) { unit_show_feature("zonemd"); zonemd_generate_tests(); zonemd_check_test(); - zonemd_verify_test(); + zonemd_verify_tests(); } void unit_show_func(const char* file, const char* func) diff --git a/testdata/zonemd.example2.zone b/testdata/zonemd.example2.zone new file mode 100644 index 000000000..16b631c7b --- /dev/null +++ b/testdata/zonemd.example2.zone @@ -0,0 +1,8 @@ +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 From a5252844214d1cb63195e9b683a86d046c8ad513 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 16 Oct 2020 16:15:35 +0200 Subject: [PATCH 028/168] zonemd, remove debug. --- testcode/unitmain.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/testcode/unitmain.c b/testcode/unitmain.c index 9bfa35ede..a147b13ae 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -1072,7 +1072,7 @@ static void zonemd_verify_test(char* zname, char* zfile, char* tastr, lock_rw_wrlock(&z->lock); auth_zone_verify_zonemd(z, &env, &result); lock_rw_unlock(&z->lock); - if(1) { + if(0) { printf("auth zone %s: ZONEMD verification %s: %s\n", zname, (strcmp(result, "ZONEMD verification successful")==0?"successful":"failed"), result); @@ -1105,7 +1105,6 @@ static void zonemd_verify_test(char* zname, char* zfile, char* tastr, static void zonemd_verify_tests(void) { unit_show_func("services/authzone.c", "auth_zone_verify_zonemd"); - verbosity=4; /* DEBUG */ zonemd_verify_test("example.org", "testdata/zonemd.example1.zone", "example.org. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", From 89618ff9baf4908ff43a8bd7991a71c3ccc9a440 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 19 Oct 2020 16:26:22 +0200 Subject: [PATCH 029/168] zonemd, unit test more zones. --- testcode/unitmain.c | 40 +++++++++++++++++++++++++++++++++++ testdata/zonemd.example2.zone | 7 ++++++ testdata/zonemd.example3.zone | 34 +++++++++++++++++++++++++++++ testdata/zonemd.example4.zone | 36 +++++++++++++++++++++++++++++++ testdata/zonemd.example5.zone | 34 +++++++++++++++++++++++++++++ testdata/zonemd.example6.zone | 36 +++++++++++++++++++++++++++++++ 6 files changed, 187 insertions(+) create mode 100644 testdata/zonemd.example3.zone create mode 100644 testdata/zonemd.example4.zone create mode 100644 testdata/zonemd.example5.zone create mode 100644 testdata/zonemd.example6.zone diff --git a/testcode/unitmain.c b/testcode/unitmain.c index a147b13ae..bd68a7161 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -1127,6 +1127,46 @@ static void zonemd_verify_tests(void) "example.org. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", "20180302005009", "ZONEMD verification successful"); + + /* load a DNSSEC signed zone, but no trust anchor */ + zonemd_verify_test("example.com", + "testdata/zonemd.example3.zone", + NULL, + "20180302005009", + "incorrect digest"); + /* load a DNSSEC zone with NSEC3, but no trust anchor */ + zonemd_verify_test("example.com", + "testdata/zonemd.example4.zone", + NULL, + "20180302005009", + "incorrect digest"); + /* valid zonemd, in dnssec signed zone, no trust anchor*/ + zonemd_verify_test("example.com", + "testdata/zonemd.example5.zone", + NULL, + "20180302005009", + "ZONEMD verification successful"); + /* valid zonemd, in dnssec NSEC3 zone, no trust anchor*/ + zonemd_verify_test("example.com", + "testdata/zonemd.example6.zone", + NULL, + "20180302005009", + "ZONEMD verification successful"); + +#if 0 + /* load a DNSSEC signed zone with a trust anchor, valid ZONEMD */ + zonemd_verify_test("example.com", + "testdata/zonemd.example5.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "ZONEMD verification successful"); + /* load a DNSSEC NSEC3 signed zone with a trust anchor, valid ZONEMD */ + zonemd_verify_test("example.com", + "testdata/zonemd.example6.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "ZONEMD verification successful"); +#endif } /** zonemd unit tests */ diff --git a/testdata/zonemd.example2.zone b/testdata/zonemd.example2.zone index 16b631c7b..14b7ea689 100644 --- a/testdata/zonemd.example2.zone +++ b/testdata/zonemd.example2.zone @@ -1,6 +1,13 @@ example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 example.com. IN NS ns.example.com. +; the ZONEMD that should be in this file, without DNSSEC example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +; incorrect digest in example3 and example4. +;example.com. IN TYPE63 \# 70 0BEE1BC60102EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +; correct digest for example 5. +;example.com. IN TYPE63 \# 70 0BEE1BC6010258F7620F93204BBB31B44F795B3409CC4ABD9EF5601DECC15675BD7751213152984EDDCE0626E6062E744B03B3E47711202FBB79E4A2EB8BC5CF46741B5CAE6F +; correct digest for example 6. +;example.com. IN TYPE63 \# 70 0BEE1BC6010246E31506F321C58DB811C934C6446141D651A8574FB21088A2BB6FEEC875FC8B60F50BEAE00E7F6554E2CF3CB048350EF92E2946137443E30079813DB4D1BFBD www.example.com. IN A 127.0.0.1 ns.example.com. IN A 127.0.0.1 bar.example.com. IN A 1.2.3.4 diff --git a/testdata/zonemd.example3.zone b/testdata/zonemd.example3.zone new file mode 100644 index 000000000..12389f3d5 --- /dev/null +++ b/testdata/zonemd.example3.zone @@ -0,0 +1,34 @@ +; signed version of zonemd.example2.zone +; with ldns-signzone -e 20201116135527 -i 20201019135527 zonemd.example2.zone Kexample.com.+008+55566 +; this zonefile has an incorrect ZONEMD digest, with correct DNSSEC signature. + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc60102efaa5b78b38ab1c45de57b8167bcce906451d0e72118e1f5e80b5f0c3cf04bffc65d53c011185528ead439d6f3a02f511961e090e5e4e0dfa013bd276d728b22 +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. RdHiJlugposfoRbog+Mkg2xeJXSzBi/UXxBnyHVF/Usqhp6Z7Acy4XwtRRb8YAbJevP9nBpCh23Fh4b1Vxl4xI0iB8aXWKtHeb98m81rfsflWvnTYbeau3ltfP/OJWqdmFsBy8DOwNxiN8sAMbGwQK8PFDk3lcRCqv8qq/tmow8= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= diff --git a/testdata/zonemd.example4.zone b/testdata/zonemd.example4.zone new file mode 100644 index 000000000..dae0f17c7 --- /dev/null +++ b/testdata/zonemd.example4.zone @@ -0,0 +1,36 @@ +; signed with NSEC3, of zonemd.example.2.zone +; ldns-signzone -n -s 012345 -e 20201116135527 -i 20201019135527 zonemd.example2.zone Kexample.com.+008+55566 +; this zonefile has an incorrect ZONEMD digest, with correct DNSSEC signature. + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN NSEC3PARAM 1 0 1 012345 +example.com. 3600 IN RRSIG NSEC3PARAM 8 2 3600 20201116135527 20201019135527 55566 example.com. CDbcPLDrpVUyk3v7kwQ3LNzzhDHS40e0LDv7IZrzMt2AO/6SJ7xhlG+qByhc7CFBUMvBNaOteO5th0tvotWxk0UrVhqRyyXNCr8SmDdAaPH4SGwJ2p+XPIwn0CTXDpyOcgCrW0Kt2OjubA+4fQwjkGYFuDATY5QOITe6kGJpKpw= +example.com. 3600 IN TYPE63 \# 70 0bee1bc60102efaa5b78b38ab1c45de57b8167bcce906451d0e72118e1f5e80b5f0c3cf04bffc65d53c011185528ead439d6f3a02f511961e090e5e4e0dfa013bd276d728b22 +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. RdHiJlugposfoRbog+Mkg2xeJXSzBi/UXxBnyHVF/Usqhp6Z7Acy4XwtRRb8YAbJevP9nBpCh23Fh4b1Vxl4xI0iB8aXWKtHeb98m81rfsflWvnTYbeau3ltfP/OJWqdmFsBy8DOwNxiN8sAMbGwQK8PFDk3lcRCqv8qq/tmow8= +v4cknoe1mioduf5bmhgfjjq4dlqet8fm.example.com. 3600 IN NSEC3 1 0 1 012345 2v43f6ripfocif5h6bbi07glq6849rnj NS SOA RRSIG DNSKEY NSEC3PARAM TYPE63 +v4cknoe1mioduf5bmhgfjjq4dlqet8fm.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. Yd+g1m2aDKDUuZNv2KpKk4uSNrpB5KLM3QUqypm484VjOpnj5Wy3BjUULH3P8z+S9PG7XbaOf+yUYHK8cI6i5GTcrMhoLKaanAD09i1KbXbTVJujwA9Za7WzlFVZ3o6f1D8CbrSS3YPWNF3Mb2FYaptvZ9so7MlecuLYdEer7DY= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +c6ntadrd765diocebcrq6trs8npn83o3.example.com. 3600 IN NSEC3 1 0 1 012345 f0lpjkgefgrobj5pucem78r2ouo53fq8 A RRSIG +c6ntadrd765diocebcrq6trs8npn83o3.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. gTDi/2e/RPeSOwoBr6oqfoFsGXAknLX3J96EHzMmhtRR7W4pEW8uXKsMJ3rr4qgUUX+ZtzoCMYy+UBkiJfjpWvMToGtuADNOzz0rF8BESaW/8k6iDKPmqmwdGyLGMmfGjYPcb4qg3+9egLejA+fF1OSrhHuINeO80ouw++PL0ns= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +r18q2sl76hceldh0keqr7vnqc15db64a.example.com. 3600 IN NSEC3 1 0 1 012345 v4cknoe1mioduf5bmhgfjjq4dlqet8fm A RRSIG +r18q2sl76hceldh0keqr7vnqc15db64a.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. VugivzPyv5+qZhl+x0frrykYyOOdZfcKdmIA13P4OzhtiRNhCRHznhrdTlmfLw/b5Rs5jFX7Iw/hhU80Geg72cYG4KVJwtP6zTyFApDl/8x3rj3vhZOc2nwpYmjjFsyrlb7M2RhcStnS6c/2R4+dBFwwVZXyJBi3fo9NybujI9g= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +f0lpjkgefgrobj5pucem78r2ouo53fq8.example.com. 3600 IN NSEC3 1 0 1 012345 r18q2sl76hceldh0keqr7vnqc15db64a A RRSIG +f0lpjkgefgrobj5pucem78r2ouo53fq8.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. zishUbm8GxjaHOOUdbz0ZEut99dm+DQ/zvxhOTeS3kmUnL8t3ISew641JeNvvajAUk/xn6eGHjLBuHfwNG+itF2pSD8Gl6Ppo22Y0C9uO5TyRQalYpjtz1kI/VlIelcd0TyusmIMaRChswtpctPKITbr8Wl+MoZZtPQhJ5NjQlQ= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +2v43f6ripfocif5h6bbi07glq6849rnj.example.com. 3600 IN NSEC3 1 0 1 012345 91onuasouslv1so1i62id4rf0l763dss A RRSIG +2v43f6ripfocif5h6bbi07glq6849rnj.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. d9CluwN3zWfLe20J212CuwNzJVbVsDR4eijuJyLpyHzziSc10CauWtUiuHeQMXCVJNwhPSb5kQTfKtql+Jd44BQlenRt/sHfa6YZEOwClN4O8V0vZ43K4vlwwWbh5kxQbFQ/e+w4vlYb1m4PHwzDLtqocNQ9T4A8SXl3A8paZqI= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +91onuasouslv1so1i62id4rf0l763dss.example.com. 3600 IN NSEC3 1 0 1 012345 c6ntadrd765diocebcrq6trs8npn83o3 A RRSIG +91onuasouslv1so1i62id4rf0l763dss.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. czJf5HkfHLpfGcku2iZnCu9tXnM7VWOYYhGtVAwkYG0M6BO4LzRxGCV3SkUvHLFxoqQY0DZLnafPl2MKg8zsF+tusf3e3xmpcCSR29IfuDYH7GzuVCj3H0ScmXM0lvyQ92JpJ0AMqq2mW1nvKmgjkyugs+EMpxcFVjhibljocLU= diff --git a/testdata/zonemd.example5.zone b/testdata/zonemd.example5.zone new file mode 100644 index 000000000..d88380ade --- /dev/null +++ b/testdata/zonemd.example5.zone @@ -0,0 +1,34 @@ +; signed version of zonemd.example2.zone +; with ldns-signzone -e 20201116135527 -i 20201019135527 zonemd.example2.zone Kexample.com.+008+55566 +; this zonefile has a correct ZONEMD digest, with correct DNSSEC signature. + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= diff --git a/testdata/zonemd.example6.zone b/testdata/zonemd.example6.zone new file mode 100644 index 000000000..0a7b05a8d --- /dev/null +++ b/testdata/zonemd.example6.zone @@ -0,0 +1,36 @@ +; signed with NSEC3, of zonemd.example.2.zone +; ldns-signzone -n -s 012345 -e 20201116135527 -i 20201019135527 zonemd.example2.zone Kexample.com.+008+55566 +; this zonefile has a correct ZONEMD digest, with correct DNSSEC signature. + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN NSEC3PARAM 1 0 1 012345 +example.com. 3600 IN RRSIG NSEC3PARAM 8 2 3600 20201116135527 20201019135527 55566 example.com. CDbcPLDrpVUyk3v7kwQ3LNzzhDHS40e0LDv7IZrzMt2AO/6SJ7xhlG+qByhc7CFBUMvBNaOteO5th0tvotWxk0UrVhqRyyXNCr8SmDdAaPH4SGwJ2p+XPIwn0CTXDpyOcgCrW0Kt2OjubA+4fQwjkGYFuDATY5QOITe6kGJpKpw= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010246e31506f321c58db811c934c6446141d651a8574fb21088a2bb6feec875fc8b60f50beae00e7f6554e2cf3cb048350ef92e2946137443e30079813db4d1bfbd +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. M0f4wkOn6dcYtaQtwvp698QL7HuKEgi+PPjYJawV8d1VNOWbbRTF9L9tHFDK42Ylq238uOxi223ZEk/pq4BP64Sm31dV54K2V95QqdzN9NDD34+sqKEgGyRcmBiE50gm3kZZ4ENqBQKc+GdlbZ2fHSI6gf6X694sSmZ7dfjq+2k= +v4cknoe1mioduf5bmhgfjjq4dlqet8fm.example.com. 3600 IN NSEC3 1 0 1 012345 2v43f6ripfocif5h6bbi07glq6849rnj NS SOA RRSIG DNSKEY NSEC3PARAM TYPE63 +v4cknoe1mioduf5bmhgfjjq4dlqet8fm.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. Yd+g1m2aDKDUuZNv2KpKk4uSNrpB5KLM3QUqypm484VjOpnj5Wy3BjUULH3P8z+S9PG7XbaOf+yUYHK8cI6i5GTcrMhoLKaanAD09i1KbXbTVJujwA9Za7WzlFVZ3o6f1D8CbrSS3YPWNF3Mb2FYaptvZ9so7MlecuLYdEer7DY= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +c6ntadrd765diocebcrq6trs8npn83o3.example.com. 3600 IN NSEC3 1 0 1 012345 f0lpjkgefgrobj5pucem78r2ouo53fq8 A RRSIG +c6ntadrd765diocebcrq6trs8npn83o3.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. gTDi/2e/RPeSOwoBr6oqfoFsGXAknLX3J96EHzMmhtRR7W4pEW8uXKsMJ3rr4qgUUX+ZtzoCMYy+UBkiJfjpWvMToGtuADNOzz0rF8BESaW/8k6iDKPmqmwdGyLGMmfGjYPcb4qg3+9egLejA+fF1OSrhHuINeO80ouw++PL0ns= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +r18q2sl76hceldh0keqr7vnqc15db64a.example.com. 3600 IN NSEC3 1 0 1 012345 v4cknoe1mioduf5bmhgfjjq4dlqet8fm A RRSIG +r18q2sl76hceldh0keqr7vnqc15db64a.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. VugivzPyv5+qZhl+x0frrykYyOOdZfcKdmIA13P4OzhtiRNhCRHznhrdTlmfLw/b5Rs5jFX7Iw/hhU80Geg72cYG4KVJwtP6zTyFApDl/8x3rj3vhZOc2nwpYmjjFsyrlb7M2RhcStnS6c/2R4+dBFwwVZXyJBi3fo9NybujI9g= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +f0lpjkgefgrobj5pucem78r2ouo53fq8.example.com. 3600 IN NSEC3 1 0 1 012345 r18q2sl76hceldh0keqr7vnqc15db64a A RRSIG +f0lpjkgefgrobj5pucem78r2ouo53fq8.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. zishUbm8GxjaHOOUdbz0ZEut99dm+DQ/zvxhOTeS3kmUnL8t3ISew641JeNvvajAUk/xn6eGHjLBuHfwNG+itF2pSD8Gl6Ppo22Y0C9uO5TyRQalYpjtz1kI/VlIelcd0TyusmIMaRChswtpctPKITbr8Wl+MoZZtPQhJ5NjQlQ= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +2v43f6ripfocif5h6bbi07glq6849rnj.example.com. 3600 IN NSEC3 1 0 1 012345 91onuasouslv1so1i62id4rf0l763dss A RRSIG +2v43f6ripfocif5h6bbi07glq6849rnj.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. d9CluwN3zWfLe20J212CuwNzJVbVsDR4eijuJyLpyHzziSc10CauWtUiuHeQMXCVJNwhPSb5kQTfKtql+Jd44BQlenRt/sHfa6YZEOwClN4O8V0vZ43K4vlwwWbh5kxQbFQ/e+w4vlYb1m4PHwzDLtqocNQ9T4A8SXl3A8paZqI= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +91onuasouslv1so1i62id4rf0l763dss.example.com. 3600 IN NSEC3 1 0 1 012345 c6ntadrd765diocebcrq6trs8npn83o3 A RRSIG +91onuasouslv1so1i62id4rf0l763dss.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. czJf5HkfHLpfGcku2iZnCu9tXnM7VWOYYhGtVAwkYG0M6BO4LzRxGCV3SkUvHLFxoqQY0DZLnafPl2MKg8zsF+tusf3e3xmpcCSR29IfuDYH7GzuVCj3H0ScmXM0lvyQ92JpJ0AMqq2mW1nvKmgjkyugs+EMpxcFVjhibljocLU= From f67507750216f365f0c628415a38797853bf03e3 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 20 Oct 2020 16:49:49 +0200 Subject: [PATCH 030/168] zonemd, unit test improved debug output and unit test dnssec verify zonemd --- services/authzone.c | 11 ++++++++--- testcode/unitmain.c | 36 ++++++++++++++++++++++++++++-------- 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/services/authzone.c b/services/authzone.c index 7ba86c23c..03d41d9c7 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -1859,7 +1859,7 @@ static int auth_zone_zonemd_check_hash(struct auth_zone* z, if(!*reason) *reason = "no ZONEMD records found"; dname_str(z->name, zstr); - log_warn("auth-zone %s ZONEMD failed: %s", zstr, *reason); + verbose(VERB_ALGO, "auth-zone %s ZONEMD failed: %s", zstr, *reason); return 0; } @@ -7561,8 +7561,13 @@ static int zonemd_dnssec_verify_rrset(struct auth_zone* z, pk.rk.dname_len = node->namelen; pk.rk.type = htons(rrset->type); pk.rk.rrset_class = htons(z->dclass); - auth_zone_log(z->name, VERB_ALGO, - "zonemd: verify RRset with DNSKEY"); + if(verbosity >= VERB_ALGO) { + char typestr[32]; + typestr[0]=0; + sldns_wire2str_type_buf(rrset->type, typestr, sizeof(typestr)); + auth_zone_log(z->name, VERB_ALGO, + "zonemd: verify %s RRset with DNSKEY", typestr); + } sec = dnskeyset_verify_rrset(env, ve, &pk, dnskey, NULL, &why_bogus, LDNS_SECTION_ANSWER, NULL); if(sec == sec_status_secure) { diff --git a/testcode/unitmain.c b/testcode/unitmain.c index bd68a7161..8ed148e6b 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -900,7 +900,7 @@ static void zonemd_generate_test(const char* zname, char* zfile, for(i=0; i= VERB_ALGO) { char zname[255+1]; dname_str(z->name, zname); printf("zonemd generated for %s in %s with " @@ -916,6 +916,10 @@ static void zonemd_generate_test(const char* zname, char* zfile, auth_zones_delete(az); regional_destroy(region); sldns_buffer_free(buf); + + if(verbosity >= VERB_ALGO) { + printf("\n"); + } } /** loop over files and test generated zonemd digest */ @@ -1022,12 +1026,17 @@ static void zonemd_check_test(void) auth_zones_delete(az); regional_destroy(region); sldns_buffer_free(buf); + + if(verbosity >= VERB_ALGO) { + printf("\n"); + } } /** zonemd test verify */ static void zonemd_verify_test(char* zname, char* zfile, char* tastr, char* date_override, char* result_wanted) { + time_t now = 0; struct module_stack mods; struct module_env env; char* result = NULL; @@ -1045,9 +1054,20 @@ static void zonemd_verify_test(char* zname, char* zfile, char* tastr, env.cfg = config_create(); if(!env.cfg) fatal_exit("out of memory"); + env.now = &now; env.cfg->val_date_override = cfg_convert_timeval(date_override); if(!env.cfg->val_date_override) fatal_exit("could not parse datetime %s", date_override); + if(env.cfg->module_conf) + free(env.cfg->module_conf); + env.cfg->module_conf = strdup("validator iterator"); + if(!env.cfg->module_conf) + fatal_exit("out of memory"); + if(tastr) { + if(!cfg_strlist_insert(&env.cfg->trust_anchor_list, + strdup(tastr))) + fatal_exit("out of memory"); + } env.anchors = anchors_create(); if(!env.anchors) fatal_exit("out of memory"); @@ -1055,15 +1075,13 @@ static void zonemd_verify_test(char* zname, char* zfile, char* tastr, if(!env.auth_zones) fatal_exit("out of memory"); modstack_init(&mods); - if(!modstack_config(&mods, "validator iterator")) - fatal_exit("could not init modules"); + if(!modstack_setup(&mods, env.cfg->module_conf, &env)) + fatal_exit("could not modstack_setup"); env.mesh = mesh_create(&mods, &env); if(!env.mesh) fatal_exit("out of memory"); /* load data */ - if(tastr && !anchor_store_str(env.anchors, env.scratch_buffer, tastr)) - fatal_exit("could not store anchor: %s", tastr); z = authtest_addzone(env.auth_zones, zname, zfile); if(!z) fatal_exit("could not addzone %s %s", zname, zfile); @@ -1072,7 +1090,7 @@ static void zonemd_verify_test(char* zname, char* zfile, char* tastr, lock_rw_wrlock(&z->lock); auth_zone_verify_zonemd(z, &env, &result); lock_rw_unlock(&z->lock); - if(0) { + if(verbosity >= VERB_ALGO) { printf("auth zone %s: ZONEMD verification %s: %s\n", zname, (strcmp(result, "ZONEMD verification successful")==0?"successful":"failed"), result); @@ -1099,6 +1117,10 @@ static void zonemd_verify_test(char* zname, char* zfile, char* tastr, config_delete(env.cfg); regional_destroy(env.scratch); sldns_buffer_free(env.scratch_buffer); + + if(verbosity >= VERB_ALGO) { + printf("\n"); + } } /** zonemd test verify suite */ @@ -1153,7 +1175,6 @@ static void zonemd_verify_tests(void) "20180302005009", "ZONEMD verification successful"); -#if 0 /* load a DNSSEC signed zone with a trust anchor, valid ZONEMD */ zonemd_verify_test("example.com", "testdata/zonemd.example5.zone", @@ -1166,7 +1187,6 @@ static void zonemd_verify_tests(void) "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", "20201020135527", "ZONEMD verification successful"); -#endif } /** zonemd unit tests */ From e8d29f973dd5e5e33042701a31a95d14e6bb7bb4 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 21 Oct 2020 11:51:30 +0200 Subject: [PATCH 031/168] zonemd, fix that dnssec denial does not invalidate zone. zonemd, unit test of nsec and nsec3 denial. --- services/authzone.c | 20 +++++++++++++++++--- testcode/unitmain.c | 16 +++++++++++++++- testdata/zonemd.example7.zone | 31 +++++++++++++++++++++++++++++++ testdata/zonemd.example8.zone | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 97 insertions(+), 4 deletions(-) create mode 100644 testdata/zonemd.example7.zone create mode 100644 testdata/zonemd.example8.zone diff --git a/services/authzone.c b/services/authzone.c index 03d41d9c7..b17fe81c3 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -7628,6 +7628,7 @@ static int zonemd_check_dnssec_absence(struct auth_zone* z, *reason = "DNSSEC NSEC bitmap says type ZONEMD exists"; return 0; } + auth_zone_log(z->name, VERB_ALGO, "zonemd DNSSEC NSEC verification of absence of ZONEMD secure"); } else { /* NSEC3 perhaps ? */ int algo; @@ -7668,6 +7669,7 @@ static int zonemd_check_dnssec_absence(struct auth_zone* z, *reason = "DNSSEC NSEC3 bitmap says type ZONEMD exists"; return 0; } + auth_zone_log(z->name, VERB_ALGO, "zonemd DNSSEC NSEC3 verification of absence of ZONEMD secure"); } return 1; @@ -7747,7 +7749,7 @@ auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env, char* reason = NULL; struct auth_data* apex = NULL; struct auth_rrset* zonemd_rrset = NULL; - int zonemd_absent = 0; + int zonemd_absent = 0, zonemd_absence_dnssecok = 0; /* see if ZONEMD is present or absent. */ apex = az_find_name(z, z->name, z->namelen); @@ -7775,6 +7777,7 @@ auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env, auth_zone_zonemd_fail(z, env, reason, result); return; } + zonemd_absence_dnssecok = 1; } else if(zonemd_rrset && dnskey) { /* check DNSSEC verify of SOA and ZONEMD */ if(!zonemd_check_dnssec_soazonemd(z, env, dnskey, apex, @@ -7784,14 +7787,25 @@ auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env, } } + if(zonemd_absent && 0) { + auth_zone_zonemd_fail(z, env, "ZONEMD absent and that is not allowed by config", result); + return; + } + if(zonemd_absent && zonemd_absence_dnssecok) { + auth_zone_log(z->name, VERB_ALGO, "ZONEMD successful, DNSSEC verified nonexistence of ZONEMD"); + if(result) { + *result = strdup("ZONEMD successful, DNSSEC verified nonexistence of ZONEMD"); + if(!*result) log_err("out of memory"); + } + return; + } + /* check ZONEMD checksum and report or else fail. */ if(!auth_zone_zonemd_check_hash(z, env, &reason)) { auth_zone_zonemd_fail(z, env, reason, result); return; } - if(zonemd_absent) - auth_zone_zonemd_fail(z, env, "ZONEMD absent and that is not allowed by config", result); /* success! log the success */ auth_zone_log(z->name, VERB_ALGO, "ZONEMD verification successful"); if(result) { diff --git a/testcode/unitmain.c b/testcode/unitmain.c index 8ed148e6b..3c198e567 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -1098,7 +1098,8 @@ static void zonemd_verify_test(char* zname, char* zfile, char* tastr, if(!result) fatal_exit("out of memory"); unit_assert(strcmp(result, result_wanted) == 0); - if(strcmp(result, "ZONEMD verification successful") == 0) { + if(strcmp(result, "ZONEMD verification successful") == 0 || + strcmp(result, "ZONEMD successful, DNSSEC verified nonexistence of ZONEMD") == 0) { lock_rw_rdlock(&z->lock); unit_assert(!z->zone_expired); lock_rw_unlock(&z->lock); @@ -1187,6 +1188,19 @@ static void zonemd_verify_tests(void) "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", "20201020135527", "ZONEMD verification successful"); + + /* load a DNSSEC NSEC zone without ZONEMD */ + zonemd_verify_test("example.com", + "testdata/zonemd.example7.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "ZONEMD successful, DNSSEC verified nonexistence of ZONEMD"); + /* load a DNSSEC NSEC3 zone without ZONEMD */ + zonemd_verify_test("example.com", + "testdata/zonemd.example8.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "ZONEMD successful, DNSSEC verified nonexistence of ZONEMD"); } /** zonemd unit tests */ diff --git a/testdata/zonemd.example7.zone b/testdata/zonemd.example7.zone new file mode 100644 index 000000000..4339bd570 --- /dev/null +++ b/testdata/zonemd.example7.zone @@ -0,0 +1,31 @@ +; DNSSEC NSEC zone without ZONEMD +; created with +; ldns-signzone -e 20201116135527 -i 20201019135527 zonemd.example2.zone Kexample.com.+008+55566 +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ROT+Kh6Y0sEf+L9c2HGPvppLL/DFP5KcX/zSjy7ovM7vXTrrdhEhOedbuccN84tk6VU8udGIixd5Usc+juZ+WsiWwaSNB5rKo6lZ9ceOJlYVzLCmawePzTsl6VAIiIVXwrMxGz/amBd+Ou/1NCuXJiWVThU9PDyJ/lQZbVJEHMA= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= diff --git a/testdata/zonemd.example8.zone b/testdata/zonemd.example8.zone new file mode 100644 index 000000000..2900753c0 --- /dev/null +++ b/testdata/zonemd.example8.zone @@ -0,0 +1,34 @@ +; DNSSEC NSEC3 zone without ZONEMD +; created with +; ldns-signzone -n -s 012345 -e 20201116135527 -i 20201019135527 zonemd.example2.zone Kexample.com.+008+55566 + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN NSEC3PARAM 1 0 1 012345 +example.com. 3600 IN RRSIG NSEC3PARAM 8 2 3600 20201116135527 20201019135527 55566 example.com. CDbcPLDrpVUyk3v7kwQ3LNzzhDHS40e0LDv7IZrzMt2AO/6SJ7xhlG+qByhc7CFBUMvBNaOteO5th0tvotWxk0UrVhqRyyXNCr8SmDdAaPH4SGwJ2p+XPIwn0CTXDpyOcgCrW0Kt2OjubA+4fQwjkGYFuDATY5QOITe6kGJpKpw= +v4cknoe1mioduf5bmhgfjjq4dlqet8fm.example.com. 3600 IN NSEC3 1 0 1 012345 2v43f6ripfocif5h6bbi07glq6849rnj NS SOA RRSIG DNSKEY NSEC3PARAM +v4cknoe1mioduf5bmhgfjjq4dlqet8fm.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. J2LISTGtBe+x2pNESBOYrBHAJjEDVFkmjJf2kj0GSFYisvSuy6ZUvQZZUB9sfLmEX18FpdNTieE8MrR2nbpKWfgVBDdGtcU72x/GOIRRq586A1KNtP2eJ81vcblM5dvqvpht46tF+xy85j9G9BYxpcT1PQRpvmho9yhgCxq2kUQ= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +c6ntadrd765diocebcrq6trs8npn83o3.example.com. 3600 IN NSEC3 1 0 1 012345 f0lpjkgefgrobj5pucem78r2ouo53fq8 A RRSIG +c6ntadrd765diocebcrq6trs8npn83o3.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. gTDi/2e/RPeSOwoBr6oqfoFsGXAknLX3J96EHzMmhtRR7W4pEW8uXKsMJ3rr4qgUUX+ZtzoCMYy+UBkiJfjpWvMToGtuADNOzz0rF8BESaW/8k6iDKPmqmwdGyLGMmfGjYPcb4qg3+9egLejA+fF1OSrhHuINeO80ouw++PL0ns= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +r18q2sl76hceldh0keqr7vnqc15db64a.example.com. 3600 IN NSEC3 1 0 1 012345 v4cknoe1mioduf5bmhgfjjq4dlqet8fm A RRSIG +r18q2sl76hceldh0keqr7vnqc15db64a.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. VugivzPyv5+qZhl+x0frrykYyOOdZfcKdmIA13P4OzhtiRNhCRHznhrdTlmfLw/b5Rs5jFX7Iw/hhU80Geg72cYG4KVJwtP6zTyFApDl/8x3rj3vhZOc2nwpYmjjFsyrlb7M2RhcStnS6c/2R4+dBFwwVZXyJBi3fo9NybujI9g= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +f0lpjkgefgrobj5pucem78r2ouo53fq8.example.com. 3600 IN NSEC3 1 0 1 012345 r18q2sl76hceldh0keqr7vnqc15db64a A RRSIG +f0lpjkgefgrobj5pucem78r2ouo53fq8.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. zishUbm8GxjaHOOUdbz0ZEut99dm+DQ/zvxhOTeS3kmUnL8t3ISew641JeNvvajAUk/xn6eGHjLBuHfwNG+itF2pSD8Gl6Ppo22Y0C9uO5TyRQalYpjtz1kI/VlIelcd0TyusmIMaRChswtpctPKITbr8Wl+MoZZtPQhJ5NjQlQ= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +2v43f6ripfocif5h6bbi07glq6849rnj.example.com. 3600 IN NSEC3 1 0 1 012345 91onuasouslv1so1i62id4rf0l763dss A RRSIG +2v43f6ripfocif5h6bbi07glq6849rnj.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. d9CluwN3zWfLe20J212CuwNzJVbVsDR4eijuJyLpyHzziSc10CauWtUiuHeQMXCVJNwhPSb5kQTfKtql+Jd44BQlenRt/sHfa6YZEOwClN4O8V0vZ43K4vlwwWbh5kxQbFQ/e+w4vlYb1m4PHwzDLtqocNQ9T4A8SXl3A8paZqI= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +91onuasouslv1so1i62id4rf0l763dss.example.com. 3600 IN NSEC3 1 0 1 012345 c6ntadrd765diocebcrq6trs8npn83o3 A RRSIG +91onuasouslv1so1i62id4rf0l763dss.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. czJf5HkfHLpfGcku2iZnCu9tXnM7VWOYYhGtVAwkYG0M6BO4LzRxGCV3SkUvHLFxoqQY0DZLnafPl2MKg8zsF+tusf3e3xmpcCSR29IfuDYH7GzuVCj3H0ScmXM0lvyQ92JpJ0AMqq2mW1nvKmgjkyugs+EMpxcFVjhibljocLU= From 124545796753139f0cc8e335909584f4fef24e52 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 21 Oct 2020 11:56:41 +0200 Subject: [PATCH 032/168] zonemd, fix that zonemd absence in unsigned zone does not invalidate zone. --- services/authzone.c | 12 ++++++++++-- testcode/unitmain.c | 9 +++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/services/authzone.c b/services/authzone.c index b17fe81c3..e05a5d81d 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -7792,9 +7792,17 @@ auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env, return; } if(zonemd_absent && zonemd_absence_dnssecok) { - auth_zone_log(z->name, VERB_ALGO, "ZONEMD successful, DNSSEC verified nonexistence of ZONEMD"); + auth_zone_log(z->name, VERB_ALGO, "DNSSEC verified nonexistence of ZONEMD"); if(result) { - *result = strdup("ZONEMD successful, DNSSEC verified nonexistence of ZONEMD"); + *result = strdup("DNSSEC verified nonexistence of ZONEMD"); + if(!*result) log_err("out of memory"); + } + return; + } + if(zonemd_absent) { + auth_zone_log(z->name, VERB_ALGO, "no ZONEMD present"); + if(result) { + *result = strdup("no ZONEMD present"); if(!*result) log_err("out of memory"); } return; diff --git a/testcode/unitmain.c b/testcode/unitmain.c index 3c198e567..ba2d33fc4 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -1099,7 +1099,8 @@ static void zonemd_verify_test(char* zname, char* zfile, char* tastr, fatal_exit("out of memory"); unit_assert(strcmp(result, result_wanted) == 0); if(strcmp(result, "ZONEMD verification successful") == 0 || - strcmp(result, "ZONEMD successful, DNSSEC verified nonexistence of ZONEMD") == 0) { + strcmp(result, "DNSSEC verified nonexistence of ZONEMD") == 0 || + strcmp(result, "no ZONEMD present") == 0) { lock_rw_rdlock(&z->lock); unit_assert(!z->zone_expired); lock_rw_unlock(&z->lock); @@ -1137,7 +1138,7 @@ static void zonemd_verify_tests(void) "testdata/zonemd.example1.zone", NULL, "20180302005009", - "zone has no ZONEMD"); + "no ZONEMD present"); /* no trust anchor, so it succeeds */ zonemd_verify_test("example.com", "testdata/zonemd.example2.zone", @@ -1194,13 +1195,13 @@ static void zonemd_verify_tests(void) "testdata/zonemd.example7.zone", "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", "20201020135527", - "ZONEMD successful, DNSSEC verified nonexistence of ZONEMD"); + "DNSSEC verified nonexistence of ZONEMD"); /* load a DNSSEC NSEC3 zone without ZONEMD */ zonemd_verify_test("example.com", "testdata/zonemd.example8.zone", "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", "20201020135527", - "ZONEMD successful, DNSSEC verified nonexistence of ZONEMD"); + "DNSSEC verified nonexistence of ZONEMD"); } /** zonemd unit tests */ From c32c9a0ae24d99771b2f2aab255d7f3d9e7ec73e Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 21 Oct 2020 12:04:53 +0200 Subject: [PATCH 033/168] zonemd, zonemd unit test in own file. --- Makefile.in | 5 +- testcode/unitmain.c | 374 ------------------------------------- testcode/unitmain.h | 2 + testcode/unitzonemd.c | 417 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 422 insertions(+), 376 deletions(-) create mode 100644 testcode/unitzonemd.c diff --git a/Makefile.in b/Makefile.in index d2600e71f..690a757ab 100644 --- a/Makefile.in +++ b/Makefile.in @@ -173,10 +173,10 @@ UNITTEST_SRC=testcode/unitanchor.c testcode/unitdname.c \ testcode/unitlruhash.c testcode/unitmain.c testcode/unitmsgparse.c \ testcode/unitneg.c testcode/unitregional.c testcode/unitslabhash.c \ testcode/unitverify.c testcode/readhex.c testcode/testpkts.c testcode/unitldns.c \ -testcode/unitecs.c testcode/unitauth.c +testcode/unitecs.c testcode/unitauth.c testcode/unitzonemd.c UNITTEST_OBJ=unitanchor.lo unitdname.lo unitlruhash.lo unitmain.lo \ unitmsgparse.lo unitneg.lo unitregional.lo unitslabhash.lo unitverify.lo \ -readhex.lo testpkts.lo unitldns.lo unitecs.lo unitauth.lo +readhex.lo testpkts.lo unitldns.lo unitecs.lo unitauth.lo unitzonemd.lo UNITTEST_OBJ_LINK=$(UNITTEST_OBJ) worker_cb.lo $(COMMON_OBJ) $(SLDNS_OBJ) \ $(COMPAT_OBJ) DAEMON_SRC=daemon/acl_list.c daemon/cachedump.c daemon/daemon.c \ @@ -1217,6 +1217,7 @@ unitldns.lo unitldns.o: $(srcdir)/testcode/unitldns.c config.h $(srcdir)/util/lo $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h \ $(srcdir)/sldns/parseutil.h unitecs.lo unitecs.o: $(srcdir)/testcode/unitecs.c config.h +unitzonemd.lo unitzonemd.o: $(srcdir)/testcode/unitzonemd.c config.h $(srcdir)/services/authzone.h unitauth.lo unitauth.o: $(srcdir)/testcode/unitauth.c config.h $(srcdir)/services/authzone.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgparse.h \ diff --git a/testcode/unitmain.c b/testcode/unitmain.c index ba2d33fc4..6a099b15e 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -839,380 +839,6 @@ static void respip_test(void) respip_conf_actions_test(); } -#include -#include "sldns/str2wire.h" -#include "services/authzone.h" -#include "util/data/dname.h" -#include "util/regional.h" -#include "validator/val_anchor.h" -/** Add zone from file for testing */ -struct auth_zone* authtest_addzone(struct auth_zones* az, const char* name, - char* fname); - -/** zonemd unit test, generate a zonemd digest and check if correct */ -static void zonemd_generate_test(const char* zname, char* zfile, - int scheme, int hashalgo, const char* digest) -{ - uint8_t zonemd_hash[512]; - size_t hashlen = 0; - char output[1024+1]; - size_t i; - struct auth_zones* az; - struct auth_zone* z; - int result; - struct regional* region = NULL; - struct sldns_buffer* buf = NULL; - char* reason = NULL; - char* digestdup; - - if(!zonemd_hashalgo_supported(hashalgo)) - return; /* cannot test unsupported algo */ - - /* setup environment */ - az = auth_zones_create(); - unit_assert(az); - region = regional_create(); - unit_assert(region); - buf = sldns_buffer_new(65535); - unit_assert(buf); - - /* read file */ - z = authtest_addzone(az, zname, zfile); - unit_assert(z); - - /* create zonemd digest */ - result = auth_zone_generate_zonemd_hash(z, scheme, hashalgo, - zonemd_hash, sizeof(zonemd_hash), &hashlen, region, buf, - &reason); - if(reason) printf("zonemd failure reason: %s\n", reason); - unit_assert(result); - - /* check digest */ - unit_assert(hashlen*2+1 <= sizeof(output)); - for(i=0; i>4]; - output[i*2+1] = hexl[zonemd_hash[i]&0xf]; - } - output[hashlen*2] = 0; - digestdup = strdup(digest); - unit_assert(digestdup); - for(i=0; i= VERB_ALGO) { - char zname[255+1]; - dname_str(z->name, zname); - printf("zonemd generated for %s in %s with " - "scheme=%d hashalgo=%d\n", zname, z->zonefile, - scheme, hashalgo); - printf("digest %s\n", output); - printf("wanted %s\n", digestdup); - } - unit_assert(strcmp(output, digestdup) == 0); - - /* delete environment */ - free(digestdup); - auth_zones_delete(az); - regional_destroy(region); - sldns_buffer_free(buf); - - if(verbosity >= VERB_ALGO) { - printf("\n"); - } -} - -/** loop over files and test generated zonemd digest */ -static void zonemd_generate_tests(void) -{ - unit_show_func("services/authzone.c", "auth_zone_generate_zonemd_hash"); - zonemd_generate_test("example.org", "testdata/zonemd.example1.zone", - 1, 2, "20564D10F50A0CEBEC856C64032B7DFB53D3C449A421A5BC7A21F7627B4ACEA4DF29F2C6FE82ED9C23ADF6F4D420D5DD63EF6E6349D60FDAB910B65DF8D481B7"); - - /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 - * from section A.1 */ - zonemd_generate_test("example", "testdata/zonemd.example_a1.zone", - 1, 1, "c68090d90a7aed716bc459f9340e3d7c1370d4d24b7e2fc3a1ddc0b9a87153b9a9713b3c9ae5cc27777f98b8e730044c"); - - /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 - * from section A.2 */ - zonemd_generate_test("example", "testdata/zonemd.example_a2.zone", - 1, 1, "31cefb03814f5062ad12fa951ba0ef5f8da6ae354a415767246f7dc932ceb1e742a2108f529db6a33a11c01493de358d"); - - /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 - * from section A.3 SHA384 digest */ - zonemd_generate_test("example", "testdata/zonemd.example_a3.zone", - 1, 1, "62e6cf51b02e54b9b5f967d547ce43136792901f9f88e637493daaf401c92c279dd10f0edb1c56f8080211f8480ee306"); - - /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 - * from section A.3 SHA512 digest*/ - zonemd_generate_test("example", "testdata/zonemd.example_a3.zone", - 1, 2, "08cfa1115c7b948c4163a901270395ea226a930cd2cbcf2fa9a5e6eb85f37c8a4e114d884e66f176eab121cb02db7d652e0cc4827e7a3204f166b47e5613fd27"); - - /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 - * from section A.4 */ - zonemd_generate_test("uri.arpa", "testdata/zonemd.example_a4.zone", - 1, 1, "1291b78ddf7669b1a39d014d87626b709b55774c5d7d58fadc556439889a10eaf6f11d615900a4f996bd46279514e473"); - - /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 - * from section A.5 */ - zonemd_generate_test("root-servers.net", "testdata/zonemd.example_a5.zone", - 1, 1, "f1ca0ccd91bd5573d9f431c00ee0101b2545c97602be0a978a3b11dbfc1c776d5b3e86ae3d973d6b5349ba7f04340f79"); -} - -/** test the zonemd check routine */ -static void zonemd_check_test(void) -{ - const char* zname = "example.org"; - char* zfile = "testdata/zonemd.example1.zone"; - int scheme = 1; - int hashalgo = 2; - const char* digest = "20564D10F50A0CEBEC856C64032B7DFB53D3C449A421A5BC7A21F7627B4ACEA4DF29F2C6FE82ED9C23ADF6F4D420D5DD63EF6E6349D60FDAB910B65DF8D481B7"; - const char* digestwrong = "20564D10F50A0CEBEC856C64032B7DFB53D3C449A421A5BC7A21F7627B4ACEA4DF29F2C6FE82ED9C23ADF6F4D420D5DD63EF6E6349D60FDAB910B65DF8D48100"; - uint8_t hash[512], hashwrong[512]; - size_t hashlen = 0, hashwronglen = 0; - struct auth_zones* az; - struct auth_zone* z; - int result; - struct regional* region = NULL; - struct sldns_buffer* buf = NULL; - char* reason = NULL; - - if(!zonemd_hashalgo_supported(hashalgo)) - return; /* cannot test unsupported algo */ - unit_show_func("services/authzone.c", "auth_zone_generate_zonemd_check"); - - /* setup environment */ - az = auth_zones_create(); - unit_assert(az); - region = regional_create(); - unit_assert(region); - buf = sldns_buffer_new(65535); - unit_assert(buf); - - /* read file */ - z = authtest_addzone(az, zname, zfile); - unit_assert(z); - hashlen = sizeof(hash); - if(sldns_str2wire_hex_buf(digest, hash, &hashlen) != 0) { - unit_assert(0); /* parse failure */ - } - hashwronglen = sizeof(hashwrong); - if(sldns_str2wire_hex_buf(digestwrong, hashwrong, &hashwronglen) != 0) { - unit_assert(0); /* parse failure */ - } - - /* check return values of the check routine */ - result = auth_zone_generate_zonemd_check(z, scheme, hashalgo, - hash, hashlen, region, buf, &reason); - unit_assert(result && reason == NULL); - result = auth_zone_generate_zonemd_check(z, 241, hashalgo, - hash, hashlen, region, buf, &reason); - unit_assert(!result && strcmp(reason, "unsupported scheme")==0); - result = auth_zone_generate_zonemd_check(z, scheme, 242, - hash, hashlen, region, buf, &reason); - unit_assert(!result && strcmp(reason, "unsupported algorithm")==0); - result = auth_zone_generate_zonemd_check(z, scheme, hashalgo, - hash, 2, region, buf, &reason); - unit_assert(!result && strcmp(reason, "digest length too small, less than 12")==0); - result = auth_zone_generate_zonemd_check(z, scheme, hashalgo, - hashwrong, hashwronglen, region, buf, &reason); - unit_assert(!result && strcmp(reason, "incorrect digest")==0); - result = auth_zone_generate_zonemd_check(z, scheme, hashalgo, - hashwrong, hashwronglen-3, region, buf, &reason); - unit_assert(!result && strcmp(reason, "incorrect digest length")==0); - - /* delete environment */ - auth_zones_delete(az); - regional_destroy(region); - sldns_buffer_free(buf); - - if(verbosity >= VERB_ALGO) { - printf("\n"); - } -} - -/** zonemd test verify */ -static void zonemd_verify_test(char* zname, char* zfile, char* tastr, - char* date_override, char* result_wanted) -{ - time_t now = 0; - struct module_stack mods; - struct module_env env; - char* result = NULL; - struct auth_zone* z; - - /* setup test harness */ - memset(&mods, 0, sizeof(mods)); - memset(&env, 0, sizeof(env)); - env.scratch = regional_create(); - if(!env.scratch) - fatal_exit("out of memory"); - env.scratch_buffer = sldns_buffer_new(65553); - if(!env.scratch_buffer) - fatal_exit("out of memory"); - env.cfg = config_create(); - if(!env.cfg) - fatal_exit("out of memory"); - env.now = &now; - env.cfg->val_date_override = cfg_convert_timeval(date_override); - if(!env.cfg->val_date_override) - fatal_exit("could not parse datetime %s", date_override); - if(env.cfg->module_conf) - free(env.cfg->module_conf); - env.cfg->module_conf = strdup("validator iterator"); - if(!env.cfg->module_conf) - fatal_exit("out of memory"); - if(tastr) { - if(!cfg_strlist_insert(&env.cfg->trust_anchor_list, - strdup(tastr))) - fatal_exit("out of memory"); - } - env.anchors = anchors_create(); - if(!env.anchors) - fatal_exit("out of memory"); - env.auth_zones = auth_zones_create(); - if(!env.auth_zones) - fatal_exit("out of memory"); - modstack_init(&mods); - if(!modstack_setup(&mods, env.cfg->module_conf, &env)) - fatal_exit("could not modstack_setup"); - env.mesh = mesh_create(&mods, &env); - if(!env.mesh) - fatal_exit("out of memory"); - - /* load data */ - z = authtest_addzone(env.auth_zones, zname, zfile); - if(!z) - fatal_exit("could not addzone %s %s", zname, zfile); - - /* test */ - lock_rw_wrlock(&z->lock); - auth_zone_verify_zonemd(z, &env, &result); - lock_rw_unlock(&z->lock); - if(verbosity >= VERB_ALGO) { - printf("auth zone %s: ZONEMD verification %s: %s\n", zname, - (strcmp(result, "ZONEMD verification successful")==0?"successful":"failed"), - result); - } - if(!result) - fatal_exit("out of memory"); - unit_assert(strcmp(result, result_wanted) == 0); - if(strcmp(result, "ZONEMD verification successful") == 0 || - strcmp(result, "DNSSEC verified nonexistence of ZONEMD") == 0 || - strcmp(result, "no ZONEMD present") == 0) { - lock_rw_rdlock(&z->lock); - unit_assert(!z->zone_expired); - lock_rw_unlock(&z->lock); - } else { - lock_rw_rdlock(&z->lock); - unit_assert(z->zone_expired); - lock_rw_unlock(&z->lock); - } - free(result); - - /* desetup test harness */ - mesh_delete(env.mesh); - modstack_desetup(&mods, &env); - auth_zones_delete(env.auth_zones); - anchors_delete(env.anchors); - config_delete(env.cfg); - regional_destroy(env.scratch); - sldns_buffer_free(env.scratch_buffer); - - if(verbosity >= VERB_ALGO) { - printf("\n"); - } -} - -/** zonemd test verify suite */ -static void zonemd_verify_tests(void) -{ - unit_show_func("services/authzone.c", "auth_zone_verify_zonemd"); - zonemd_verify_test("example.org", - "testdata/zonemd.example1.zone", - "example.org. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", - "20180302005009", - "have trust anchor, but zone has no DNSKEY"); - zonemd_verify_test("example.org", - "testdata/zonemd.example1.zone", - NULL, - "20180302005009", - "no ZONEMD present"); - /* no trust anchor, so it succeeds */ - zonemd_verify_test("example.com", - "testdata/zonemd.example2.zone", - NULL, - "20180302005009", - "ZONEMD verification successful"); - /* trust anchor for another zone, so it is indeterminate */ - zonemd_verify_test("example.com", - "testdata/zonemd.example2.zone", - "example.org. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", - "20180302005009", - "ZONEMD verification successful"); - - /* load a DNSSEC signed zone, but no trust anchor */ - zonemd_verify_test("example.com", - "testdata/zonemd.example3.zone", - NULL, - "20180302005009", - "incorrect digest"); - /* load a DNSSEC zone with NSEC3, but no trust anchor */ - zonemd_verify_test("example.com", - "testdata/zonemd.example4.zone", - NULL, - "20180302005009", - "incorrect digest"); - /* valid zonemd, in dnssec signed zone, no trust anchor*/ - zonemd_verify_test("example.com", - "testdata/zonemd.example5.zone", - NULL, - "20180302005009", - "ZONEMD verification successful"); - /* valid zonemd, in dnssec NSEC3 zone, no trust anchor*/ - zonemd_verify_test("example.com", - "testdata/zonemd.example6.zone", - NULL, - "20180302005009", - "ZONEMD verification successful"); - - /* load a DNSSEC signed zone with a trust anchor, valid ZONEMD */ - zonemd_verify_test("example.com", - "testdata/zonemd.example5.zone", - "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", - "20201020135527", - "ZONEMD verification successful"); - /* load a DNSSEC NSEC3 signed zone with a trust anchor, valid ZONEMD */ - zonemd_verify_test("example.com", - "testdata/zonemd.example6.zone", - "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", - "20201020135527", - "ZONEMD verification successful"); - - /* load a DNSSEC NSEC zone without ZONEMD */ - zonemd_verify_test("example.com", - "testdata/zonemd.example7.zone", - "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", - "20201020135527", - "DNSSEC verified nonexistence of ZONEMD"); - /* load a DNSSEC NSEC3 zone without ZONEMD */ - zonemd_verify_test("example.com", - "testdata/zonemd.example8.zone", - "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", - "20201020135527", - "DNSSEC verified nonexistence of ZONEMD"); -} - -/** zonemd unit tests */ -static void zonemd_test(void) -{ - unit_show_feature("zonemd"); - zonemd_generate_tests(); - zonemd_check_test(); - zonemd_verify_tests(); -} - void unit_show_func(const char* file, const char* func) { printf("test %s:%s\n", file, func); diff --git a/testcode/unitmain.h b/testcode/unitmain.h index e5c6109a2..66d1322f2 100644 --- a/testcode/unitmain.h +++ b/testcode/unitmain.h @@ -80,5 +80,7 @@ void ecs_test(void); void ldns_test(void); /** unit test for auth zone functions */ void authzone_test(void); +/** unit test for zonemd functions */ +void zonemd_test(void); #endif /* TESTCODE_UNITMAIN_H */ diff --git a/testcode/unitzonemd.c b/testcode/unitzonemd.c new file mode 100644 index 000000000..8ba8fedc6 --- /dev/null +++ b/testcode/unitzonemd.c @@ -0,0 +1,417 @@ +/* + * testcode/unitzonemd.c - unit test for zonemd. + * + * Copyright (c) 2020, NLnet Labs. All rights reserved. + * + * This software is open source. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the NLNET LABS nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +/** + * \file + * Unit tests for ZONEMD functionality. + */ + +#include "config.h" +#include +#include "util/log.h" +#include "testcode/unitmain.h" +#include "sldns/str2wire.h" +#include "services/authzone.h" +#include "util/data/dname.h" +#include "util/regional.h" +#include "validator/val_anchor.h" + +/** Add zone from file for testing */ +struct auth_zone* authtest_addzone(struct auth_zones* az, const char* name, + char* fname); + +/** zonemd unit test, generate a zonemd digest and check if correct */ +static void zonemd_generate_test(const char* zname, char* zfile, + int scheme, int hashalgo, const char* digest) +{ + uint8_t zonemd_hash[512]; + size_t hashlen = 0; + char output[1024+1]; + size_t i; + struct auth_zones* az; + struct auth_zone* z; + int result; + struct regional* region = NULL; + struct sldns_buffer* buf = NULL; + char* reason = NULL; + char* digestdup; + + if(!zonemd_hashalgo_supported(hashalgo)) + return; /* cannot test unsupported algo */ + + /* setup environment */ + az = auth_zones_create(); + unit_assert(az); + region = regional_create(); + unit_assert(region); + buf = sldns_buffer_new(65535); + unit_assert(buf); + + /* read file */ + z = authtest_addzone(az, zname, zfile); + unit_assert(z); + + /* create zonemd digest */ + result = auth_zone_generate_zonemd_hash(z, scheme, hashalgo, + zonemd_hash, sizeof(zonemd_hash), &hashlen, region, buf, + &reason); + if(reason) printf("zonemd failure reason: %s\n", reason); + unit_assert(result); + + /* check digest */ + unit_assert(hashlen*2+1 <= sizeof(output)); + for(i=0; i>4]; + output[i*2+1] = hexl[zonemd_hash[i]&0xf]; + } + output[hashlen*2] = 0; + digestdup = strdup(digest); + unit_assert(digestdup); + for(i=0; i= VERB_ALGO) { + char zname[255+1]; + dname_str(z->name, zname); + printf("zonemd generated for %s in %s with " + "scheme=%d hashalgo=%d\n", zname, z->zonefile, + scheme, hashalgo); + printf("digest %s\n", output); + printf("wanted %s\n", digestdup); + } + unit_assert(strcmp(output, digestdup) == 0); + + /* delete environment */ + free(digestdup); + auth_zones_delete(az); + regional_destroy(region); + sldns_buffer_free(buf); + + if(verbosity >= VERB_ALGO) { + printf("\n"); + } +} + +/** loop over files and test generated zonemd digest */ +static void zonemd_generate_tests(void) +{ + unit_show_func("services/authzone.c", "auth_zone_generate_zonemd_hash"); + zonemd_generate_test("example.org", "testdata/zonemd.example1.zone", + 1, 2, "20564D10F50A0CEBEC856C64032B7DFB53D3C449A421A5BC7A21F7627B4ACEA4DF29F2C6FE82ED9C23ADF6F4D420D5DD63EF6E6349D60FDAB910B65DF8D481B7"); + + /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 + * from section A.1 */ + zonemd_generate_test("example", "testdata/zonemd.example_a1.zone", + 1, 1, "c68090d90a7aed716bc459f9340e3d7c1370d4d24b7e2fc3a1ddc0b9a87153b9a9713b3c9ae5cc27777f98b8e730044c"); + + /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 + * from section A.2 */ + zonemd_generate_test("example", "testdata/zonemd.example_a2.zone", + 1, 1, "31cefb03814f5062ad12fa951ba0ef5f8da6ae354a415767246f7dc932ceb1e742a2108f529db6a33a11c01493de358d"); + + /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 + * from section A.3 SHA384 digest */ + zonemd_generate_test("example", "testdata/zonemd.example_a3.zone", + 1, 1, "62e6cf51b02e54b9b5f967d547ce43136792901f9f88e637493daaf401c92c279dd10f0edb1c56f8080211f8480ee306"); + + /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 + * from section A.3 SHA512 digest*/ + zonemd_generate_test("example", "testdata/zonemd.example_a3.zone", + 1, 2, "08cfa1115c7b948c4163a901270395ea226a930cd2cbcf2fa9a5e6eb85f37c8a4e114d884e66f176eab121cb02db7d652e0cc4827e7a3204f166b47e5613fd27"); + + /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 + * from section A.4 */ + zonemd_generate_test("uri.arpa", "testdata/zonemd.example_a4.zone", + 1, 1, "1291b78ddf7669b1a39d014d87626b709b55774c5d7d58fadc556439889a10eaf6f11d615900a4f996bd46279514e473"); + + /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 + * from section A.5 */ + zonemd_generate_test("root-servers.net", "testdata/zonemd.example_a5.zone", + 1, 1, "f1ca0ccd91bd5573d9f431c00ee0101b2545c97602be0a978a3b11dbfc1c776d5b3e86ae3d973d6b5349ba7f04340f79"); +} + +/** test the zonemd check routine */ +static void zonemd_check_test(void) +{ + const char* zname = "example.org"; + char* zfile = "testdata/zonemd.example1.zone"; + int scheme = 1; + int hashalgo = 2; + const char* digest = "20564D10F50A0CEBEC856C64032B7DFB53D3C449A421A5BC7A21F7627B4ACEA4DF29F2C6FE82ED9C23ADF6F4D420D5DD63EF6E6349D60FDAB910B65DF8D481B7"; + const char* digestwrong = "20564D10F50A0CEBEC856C64032B7DFB53D3C449A421A5BC7A21F7627B4ACEA4DF29F2C6FE82ED9C23ADF6F4D420D5DD63EF6E6349D60FDAB910B65DF8D48100"; + uint8_t hash[512], hashwrong[512]; + size_t hashlen = 0, hashwronglen = 0; + struct auth_zones* az; + struct auth_zone* z; + int result; + struct regional* region = NULL; + struct sldns_buffer* buf = NULL; + char* reason = NULL; + + if(!zonemd_hashalgo_supported(hashalgo)) + return; /* cannot test unsupported algo */ + unit_show_func("services/authzone.c", "auth_zone_generate_zonemd_check"); + + /* setup environment */ + az = auth_zones_create(); + unit_assert(az); + region = regional_create(); + unit_assert(region); + buf = sldns_buffer_new(65535); + unit_assert(buf); + + /* read file */ + z = authtest_addzone(az, zname, zfile); + unit_assert(z); + hashlen = sizeof(hash); + if(sldns_str2wire_hex_buf(digest, hash, &hashlen) != 0) { + unit_assert(0); /* parse failure */ + } + hashwronglen = sizeof(hashwrong); + if(sldns_str2wire_hex_buf(digestwrong, hashwrong, &hashwronglen) != 0) { + unit_assert(0); /* parse failure */ + } + + /* check return values of the check routine */ + result = auth_zone_generate_zonemd_check(z, scheme, hashalgo, + hash, hashlen, region, buf, &reason); + unit_assert(result && reason == NULL); + result = auth_zone_generate_zonemd_check(z, 241, hashalgo, + hash, hashlen, region, buf, &reason); + unit_assert(!result && strcmp(reason, "unsupported scheme")==0); + result = auth_zone_generate_zonemd_check(z, scheme, 242, + hash, hashlen, region, buf, &reason); + unit_assert(!result && strcmp(reason, "unsupported algorithm")==0); + result = auth_zone_generate_zonemd_check(z, scheme, hashalgo, + hash, 2, region, buf, &reason); + unit_assert(!result && strcmp(reason, "digest length too small, less than 12")==0); + result = auth_zone_generate_zonemd_check(z, scheme, hashalgo, + hashwrong, hashwronglen, region, buf, &reason); + unit_assert(!result && strcmp(reason, "incorrect digest")==0); + result = auth_zone_generate_zonemd_check(z, scheme, hashalgo, + hashwrong, hashwronglen-3, region, buf, &reason); + unit_assert(!result && strcmp(reason, "incorrect digest length")==0); + + /* delete environment */ + auth_zones_delete(az); + regional_destroy(region); + sldns_buffer_free(buf); + + if(verbosity >= VERB_ALGO) { + printf("\n"); + } +} + +/** zonemd test verify */ +static void zonemd_verify_test(char* zname, char* zfile, char* tastr, + char* date_override, char* result_wanted) +{ + time_t now = 0; + struct module_stack mods; + struct module_env env; + char* result = NULL; + struct auth_zone* z; + + /* setup test harness */ + memset(&mods, 0, sizeof(mods)); + memset(&env, 0, sizeof(env)); + env.scratch = regional_create(); + if(!env.scratch) + fatal_exit("out of memory"); + env.scratch_buffer = sldns_buffer_new(65553); + if(!env.scratch_buffer) + fatal_exit("out of memory"); + env.cfg = config_create(); + if(!env.cfg) + fatal_exit("out of memory"); + env.now = &now; + env.cfg->val_date_override = cfg_convert_timeval(date_override); + if(!env.cfg->val_date_override) + fatal_exit("could not parse datetime %s", date_override); + if(env.cfg->module_conf) + free(env.cfg->module_conf); + env.cfg->module_conf = strdup("validator iterator"); + if(!env.cfg->module_conf) + fatal_exit("out of memory"); + if(tastr) { + if(!cfg_strlist_insert(&env.cfg->trust_anchor_list, + strdup(tastr))) + fatal_exit("out of memory"); + } + env.anchors = anchors_create(); + if(!env.anchors) + fatal_exit("out of memory"); + env.auth_zones = auth_zones_create(); + if(!env.auth_zones) + fatal_exit("out of memory"); + modstack_init(&mods); + if(!modstack_setup(&mods, env.cfg->module_conf, &env)) + fatal_exit("could not modstack_setup"); + env.mesh = mesh_create(&mods, &env); + if(!env.mesh) + fatal_exit("out of memory"); + + /* load data */ + z = authtest_addzone(env.auth_zones, zname, zfile); + if(!z) + fatal_exit("could not addzone %s %s", zname, zfile); + + /* test */ + lock_rw_wrlock(&z->lock); + auth_zone_verify_zonemd(z, &env, &result); + lock_rw_unlock(&z->lock); + if(verbosity >= VERB_ALGO) { + printf("auth zone %s: ZONEMD verification %s: %s\n", zname, + (strcmp(result, "ZONEMD verification successful")==0?"successful":"failed"), + result); + } + if(!result) + fatal_exit("out of memory"); + unit_assert(strcmp(result, result_wanted) == 0); + if(strcmp(result, "ZONEMD verification successful") == 0 || + strcmp(result, "DNSSEC verified nonexistence of ZONEMD") == 0 || + strcmp(result, "no ZONEMD present") == 0) { + lock_rw_rdlock(&z->lock); + unit_assert(!z->zone_expired); + lock_rw_unlock(&z->lock); + } else { + lock_rw_rdlock(&z->lock); + unit_assert(z->zone_expired); + lock_rw_unlock(&z->lock); + } + free(result); + + /* desetup test harness */ + mesh_delete(env.mesh); + modstack_desetup(&mods, &env); + auth_zones_delete(env.auth_zones); + anchors_delete(env.anchors); + config_delete(env.cfg); + regional_destroy(env.scratch); + sldns_buffer_free(env.scratch_buffer); + + if(verbosity >= VERB_ALGO) { + printf("\n"); + } +} + +/** zonemd test verify suite */ +static void zonemd_verify_tests(void) +{ + unit_show_func("services/authzone.c", "auth_zone_verify_zonemd"); + zonemd_verify_test("example.org", + "testdata/zonemd.example1.zone", + "example.org. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20180302005009", + "have trust anchor, but zone has no DNSKEY"); + zonemd_verify_test("example.org", + "testdata/zonemd.example1.zone", + NULL, + "20180302005009", + "no ZONEMD present"); + /* no trust anchor, so it succeeds */ + zonemd_verify_test("example.com", + "testdata/zonemd.example2.zone", + NULL, + "20180302005009", + "ZONEMD verification successful"); + /* trust anchor for another zone, so it is indeterminate */ + zonemd_verify_test("example.com", + "testdata/zonemd.example2.zone", + "example.org. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20180302005009", + "ZONEMD verification successful"); + + /* load a DNSSEC signed zone, but no trust anchor */ + zonemd_verify_test("example.com", + "testdata/zonemd.example3.zone", + NULL, + "20180302005009", + "incorrect digest"); + /* load a DNSSEC zone with NSEC3, but no trust anchor */ + zonemd_verify_test("example.com", + "testdata/zonemd.example4.zone", + NULL, + "20180302005009", + "incorrect digest"); + /* valid zonemd, in dnssec signed zone, no trust anchor*/ + zonemd_verify_test("example.com", + "testdata/zonemd.example5.zone", + NULL, + "20180302005009", + "ZONEMD verification successful"); + /* valid zonemd, in dnssec NSEC3 zone, no trust anchor*/ + zonemd_verify_test("example.com", + "testdata/zonemd.example6.zone", + NULL, + "20180302005009", + "ZONEMD verification successful"); + + /* load a DNSSEC signed zone with a trust anchor, valid ZONEMD */ + zonemd_verify_test("example.com", + "testdata/zonemd.example5.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "ZONEMD verification successful"); + /* load a DNSSEC NSEC3 signed zone with a trust anchor, valid ZONEMD */ + zonemd_verify_test("example.com", + "testdata/zonemd.example6.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "ZONEMD verification successful"); + + /* load a DNSSEC NSEC zone without ZONEMD */ + zonemd_verify_test("example.com", + "testdata/zonemd.example7.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "DNSSEC verified nonexistence of ZONEMD"); + /* load a DNSSEC NSEC3 zone without ZONEMD */ + zonemd_verify_test("example.com", + "testdata/zonemd.example8.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "DNSSEC verified nonexistence of ZONEMD"); +} + +/** zonemd unit tests */ +void zonemd_test(void) +{ + unit_show_feature("zonemd"); + zonemd_generate_tests(); + zonemd_check_test(); + zonemd_verify_tests(); +} From e1d119af7ebd1038024eb7d690422449b2be547f Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 21 Oct 2020 13:17:42 +0200 Subject: [PATCH 034/168] zonemd, unit tests for wrong DNSSEC signatures. --- testcode/unitzonemd.c | 13 +++++++++++++ testdata/zonemd.example10.zone | 35 ++++++++++++++++++++++++++++++++++ testdata/zonemd.example9.zone | 35 ++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+) create mode 100644 testdata/zonemd.example10.zone create mode 100644 testdata/zonemd.example9.zone diff --git a/testcode/unitzonemd.c b/testcode/unitzonemd.c index 8ba8fedc6..f135d21e3 100644 --- a/testcode/unitzonemd.c +++ b/testcode/unitzonemd.c @@ -405,6 +405,19 @@ static void zonemd_verify_tests(void) "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", "20201020135527", "DNSSEC verified nonexistence of ZONEMD"); + + /* load DNSSEC zone but RRSIG on ZONEMD is wrong */ + zonemd_verify_test("example.com", + "testdata/zonemd.example9.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "DNSSEC verify failed for ZONEMD RRset"); + /* load DNSSEC zone but RRSIG on SOA is wrong */ + zonemd_verify_test("example.com", + "testdata/zonemd.example10.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "DNSSEC verify failed for SOA RRset"); } /** zonemd unit tests */ diff --git a/testdata/zonemd.example10.zone b/testdata/zonemd.example10.zone new file mode 100644 index 000000000..33ca2828e --- /dev/null +++ b/testdata/zonemd.example10.zone @@ -0,0 +1,35 @@ +; DNSSEC signed but RRSIG on SOA is wrong. + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +; old sig +; example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +; wrong sig +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgeAAAAA= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= diff --git a/testdata/zonemd.example9.zone b/testdata/zonemd.example9.zone new file mode 100644 index 000000000..9c035aa13 --- /dev/null +++ b/testdata/zonemd.example9.zone @@ -0,0 +1,35 @@ +; signed zone but RRSIG on ZONEMD is wrong. + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +; old sig +; example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +; wrong sig +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVAAAAA= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= From 58d91646f1ffd6efb7eab69813ae05dd9770257d Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 21 Oct 2020 14:23:44 +0200 Subject: [PATCH 035/168] zonemd, unit tests for DNSSEC type bitmaps. --- testcode/unitzonemd.c | 13 +++++++++++++ testdata/zonemd.example11.zone | 33 ++++++++++++++++++++++++++++++++ testdata/zonemd.example12.zone | 35 ++++++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 testdata/zonemd.example11.zone create mode 100644 testdata/zonemd.example12.zone diff --git a/testcode/unitzonemd.c b/testcode/unitzonemd.c index f135d21e3..b297c44e9 100644 --- a/testcode/unitzonemd.c +++ b/testcode/unitzonemd.c @@ -418,6 +418,19 @@ static void zonemd_verify_tests(void) "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", "20201020135527", "DNSSEC verify failed for SOA RRset"); + + /* load DNSSEC zone without ZONEMD, but NSEC bitmap says it exists */ + zonemd_verify_test("example.com", + "testdata/zonemd.example11.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "DNSSEC NSEC bitmap says type ZONEMD exists"); + /* load DNSSEC zone without ZONEMD, but NSEC3 bitmap says it exists */ + zonemd_verify_test("example.com", + "testdata/zonemd.example12.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "DNSSEC NSEC3 bitmap says type ZONEMD exists"); } /** zonemd unit tests */ diff --git a/testdata/zonemd.example11.zone b/testdata/zonemd.example11.zone new file mode 100644 index 000000000..7562f7972 --- /dev/null +++ b/testdata/zonemd.example11.zone @@ -0,0 +1,33 @@ +; DNSSEC NSEC zone, but ZONEMD is missing + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +; missing ZONEMD +;example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +;example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= diff --git a/testdata/zonemd.example12.zone b/testdata/zonemd.example12.zone new file mode 100644 index 000000000..4fc04bf88 --- /dev/null +++ b/testdata/zonemd.example12.zone @@ -0,0 +1,35 @@ +; DNSSEC NSEC3 zone, but ZONEMD is missing + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN NSEC3PARAM 1 0 1 012345 +example.com. 3600 IN RRSIG NSEC3PARAM 8 2 3600 20201116135527 20201019135527 55566 example.com. CDbcPLDrpVUyk3v7kwQ3LNzzhDHS40e0LDv7IZrzMt2AO/6SJ7xhlG+qByhc7CFBUMvBNaOteO5th0tvotWxk0UrVhqRyyXNCr8SmDdAaPH4SGwJ2p+XPIwn0CTXDpyOcgCrW0Kt2OjubA+4fQwjkGYFuDATY5QOITe6kGJpKpw= +; missing ZONEMD +;example.com. 3600 IN TYPE63 \# 70 0bee1bc6010246e31506f321c58db811c934c6446141d651a8574fb21088a2bb6feec875fc8b60f50beae00e7f6554e2cf3cb048350ef92e2946137443e30079813db4d1bfbd +;example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. M0f4wkOn6dcYtaQtwvp698QL7HuKEgi+PPjYJawV8d1VNOWbbRTF9L9tHFDK42Ylq238uOxi223ZEk/pq4BP64Sm31dV54K2V95QqdzN9NDD34+sqKEgGyRcmBiE50gm3kZZ4ENqBQKc+GdlbZ2fHSI6gf6X694sSmZ7dfjq+2k= +v4cknoe1mioduf5bmhgfjjq4dlqet8fm.example.com. 3600 IN NSEC3 1 0 1 012345 2v43f6ripfocif5h6bbi07glq6849rnj NS SOA RRSIG DNSKEY NSEC3PARAM TYPE63 +v4cknoe1mioduf5bmhgfjjq4dlqet8fm.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. Yd+g1m2aDKDUuZNv2KpKk4uSNrpB5KLM3QUqypm484VjOpnj5Wy3BjUULH3P8z+S9PG7XbaOf+yUYHK8cI6i5GTcrMhoLKaanAD09i1KbXbTVJujwA9Za7WzlFVZ3o6f1D8CbrSS3YPWNF3Mb2FYaptvZ9so7MlecuLYdEer7DY= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +c6ntadrd765diocebcrq6trs8npn83o3.example.com. 3600 IN NSEC3 1 0 1 012345 f0lpjkgefgrobj5pucem78r2ouo53fq8 A RRSIG +c6ntadrd765diocebcrq6trs8npn83o3.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. gTDi/2e/RPeSOwoBr6oqfoFsGXAknLX3J96EHzMmhtRR7W4pEW8uXKsMJ3rr4qgUUX+ZtzoCMYy+UBkiJfjpWvMToGtuADNOzz0rF8BESaW/8k6iDKPmqmwdGyLGMmfGjYPcb4qg3+9egLejA+fF1OSrhHuINeO80ouw++PL0ns= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +r18q2sl76hceldh0keqr7vnqc15db64a.example.com. 3600 IN NSEC3 1 0 1 012345 v4cknoe1mioduf5bmhgfjjq4dlqet8fm A RRSIG +r18q2sl76hceldh0keqr7vnqc15db64a.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. VugivzPyv5+qZhl+x0frrykYyOOdZfcKdmIA13P4OzhtiRNhCRHznhrdTlmfLw/b5Rs5jFX7Iw/hhU80Geg72cYG4KVJwtP6zTyFApDl/8x3rj3vhZOc2nwpYmjjFsyrlb7M2RhcStnS6c/2R4+dBFwwVZXyJBi3fo9NybujI9g= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +f0lpjkgefgrobj5pucem78r2ouo53fq8.example.com. 3600 IN NSEC3 1 0 1 012345 r18q2sl76hceldh0keqr7vnqc15db64a A RRSIG +f0lpjkgefgrobj5pucem78r2ouo53fq8.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. zishUbm8GxjaHOOUdbz0ZEut99dm+DQ/zvxhOTeS3kmUnL8t3ISew641JeNvvajAUk/xn6eGHjLBuHfwNG+itF2pSD8Gl6Ppo22Y0C9uO5TyRQalYpjtz1kI/VlIelcd0TyusmIMaRChswtpctPKITbr8Wl+MoZZtPQhJ5NjQlQ= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +2v43f6ripfocif5h6bbi07glq6849rnj.example.com. 3600 IN NSEC3 1 0 1 012345 91onuasouslv1so1i62id4rf0l763dss A RRSIG +2v43f6ripfocif5h6bbi07glq6849rnj.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. d9CluwN3zWfLe20J212CuwNzJVbVsDR4eijuJyLpyHzziSc10CauWtUiuHeQMXCVJNwhPSb5kQTfKtql+Jd44BQlenRt/sHfa6YZEOwClN4O8V0vZ43K4vlwwWbh5kxQbFQ/e+w4vlYb1m4PHwzDLtqocNQ9T4A8SXl3A8paZqI= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +91onuasouslv1so1i62id4rf0l763dss.example.com. 3600 IN NSEC3 1 0 1 012345 c6ntadrd765diocebcrq6trs8npn83o3 A RRSIG +91onuasouslv1so1i62id4rf0l763dss.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. czJf5HkfHLpfGcku2iZnCu9tXnM7VWOYYhGtVAwkYG0M6BO4LzRxGCV3SkUvHLFxoqQY0DZLnafPl2MKg8zsF+tusf3e3xmpcCSR29IfuDYH7GzuVCj3H0ScmXM0lvyQ92JpJ0AMqq2mW1nvKmgjkyugs+EMpxcFVjhibljocLU= From 3c86bf51de4ea36f8350b092df975ba1251c7ae3 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 21 Oct 2020 15:04:06 +0200 Subject: [PATCH 036/168] zonemd, unit tests for wrong NSEC RRSIGs. --- testcode/unitzonemd.c | 13 +++++++++++++ testdata/zonemd.example13.zone | 33 ++++++++++++++++++++++++++++++++ testdata/zonemd.example14.zone | 35 ++++++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 testdata/zonemd.example13.zone create mode 100644 testdata/zonemd.example14.zone diff --git a/testcode/unitzonemd.c b/testcode/unitzonemd.c index b297c44e9..558c40dd6 100644 --- a/testcode/unitzonemd.c +++ b/testcode/unitzonemd.c @@ -431,6 +431,19 @@ static void zonemd_verify_tests(void) "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", "20201020135527", "DNSSEC NSEC3 bitmap says type ZONEMD exists"); + + /* load DNSSEC zone without ZONEMD, but RRSIG on NSEC not okay */ + zonemd_verify_test("example.com", + "testdata/zonemd.example13.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "DNSSEC verify failed for NSEC RRset"); + /* load DNSSEC zone without ZONEMD, but RRSIG on NSEC3 not okay */ + zonemd_verify_test("example.com", + "testdata/zonemd.example14.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "DNSSEC verify failed for NSEC3 RRset"); } /** zonemd unit tests */ diff --git a/testdata/zonemd.example13.zone b/testdata/zonemd.example13.zone new file mode 100644 index 000000000..9f311c912 --- /dev/null +++ b/testdata/zonemd.example13.zone @@ -0,0 +1,33 @@ +; DNSSEC NSEC zone without ZONEMD, but NSEC RRSIG is wrong + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY +; old sig +;example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ROT+Kh6Y0sEf+L9c2HGPvppLL/DFP5KcX/zSjy7ovM7vXTrrdhEhOedbuccN84tk6VU8udGIixd5Usc+juZ+WsiWwaSNB5rKo6lZ9ceOJlYVzLCmawePzTsl6VAIiIVXwrMxGz/amBd+Ou/1NCuXJiWVThU9PDyJ/lQZbVJEHMA= +; wrong sig +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ROT+Kh6Y0sEf+L9c2HGPvppLL/DFP5KcX/zSjy7ovM7vXTrrdhEhOedbuccN84tk6VU8udGIixd5Usc+juZ+WsiWwaSNB5rKo6lZ9ceOJlYVzLCmawePzTsl6VAIiIVXwrMxGz/amBd+Ou/1NCuXJiWVThU9PDyJ/lQZbVAAAAA= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= diff --git a/testdata/zonemd.example14.zone b/testdata/zonemd.example14.zone new file mode 100644 index 000000000..bc4cdacdb --- /dev/null +++ b/testdata/zonemd.example14.zone @@ -0,0 +1,35 @@ +; DNSSEC NSEC3 zone without ZONEMD, but NSEC3 RRSIG is wrong + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN NSEC3PARAM 1 0 1 012345 +example.com. 3600 IN RRSIG NSEC3PARAM 8 2 3600 20201116135527 20201019135527 55566 example.com. CDbcPLDrpVUyk3v7kwQ3LNzzhDHS40e0LDv7IZrzMt2AO/6SJ7xhlG+qByhc7CFBUMvBNaOteO5th0tvotWxk0UrVhqRyyXNCr8SmDdAaPH4SGwJ2p+XPIwn0CTXDpyOcgCrW0Kt2OjubA+4fQwjkGYFuDATY5QOITe6kGJpKpw= +v4cknoe1mioduf5bmhgfjjq4dlqet8fm.example.com. 3600 IN NSEC3 1 0 1 012345 2v43f6ripfocif5h6bbi07glq6849rnj NS SOA RRSIG DNSKEY NSEC3PARAM +; old sig +;v4cknoe1mioduf5bmhgfjjq4dlqet8fm.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. J2LISTGtBe+x2pNESBOYrBHAJjEDVFkmjJf2kj0GSFYisvSuy6ZUvQZZUB9sfLmEX18FpdNTieE8MrR2nbpKWfgVBDdGtcU72x/GOIRRq586A1KNtP2eJ81vcblM5dvqvpht46tF+xy85j9G9BYxpcT1PQRpvmho9yhgCxq2kUQ= +; wrong sig +v4cknoe1mioduf5bmhgfjjq4dlqet8fm.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. J2LISTGtBe+x2pNESBOYrBHAJjEDVFkmjJf2kj0GSFYisvSuy6ZUvQZZUB9sfLmEX18FpdNTieE8MrR2nbpKWfgVBDdGtcU72x/GOIRRq586A1KNtP2eJ81vcblM5dvqvpht46tF+xy85j9G9BYxpcT1PQRpvmho9yhgCxAAAAA= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +c6ntadrd765diocebcrq6trs8npn83o3.example.com. 3600 IN NSEC3 1 0 1 012345 f0lpjkgefgrobj5pucem78r2ouo53fq8 A RRSIG +c6ntadrd765diocebcrq6trs8npn83o3.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. gTDi/2e/RPeSOwoBr6oqfoFsGXAknLX3J96EHzMmhtRR7W4pEW8uXKsMJ3rr4qgUUX+ZtzoCMYy+UBkiJfjpWvMToGtuADNOzz0rF8BESaW/8k6iDKPmqmwdGyLGMmfGjYPcb4qg3+9egLejA+fF1OSrhHuINeO80ouw++PL0ns= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +r18q2sl76hceldh0keqr7vnqc15db64a.example.com. 3600 IN NSEC3 1 0 1 012345 v4cknoe1mioduf5bmhgfjjq4dlqet8fm A RRSIG +r18q2sl76hceldh0keqr7vnqc15db64a.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. VugivzPyv5+qZhl+x0frrykYyOOdZfcKdmIA13P4OzhtiRNhCRHznhrdTlmfLw/b5Rs5jFX7Iw/hhU80Geg72cYG4KVJwtP6zTyFApDl/8x3rj3vhZOc2nwpYmjjFsyrlb7M2RhcStnS6c/2R4+dBFwwVZXyJBi3fo9NybujI9g= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +f0lpjkgefgrobj5pucem78r2ouo53fq8.example.com. 3600 IN NSEC3 1 0 1 012345 r18q2sl76hceldh0keqr7vnqc15db64a A RRSIG +f0lpjkgefgrobj5pucem78r2ouo53fq8.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. zishUbm8GxjaHOOUdbz0ZEut99dm+DQ/zvxhOTeS3kmUnL8t3ISew641JeNvvajAUk/xn6eGHjLBuHfwNG+itF2pSD8Gl6Ppo22Y0C9uO5TyRQalYpjtz1kI/VlIelcd0TyusmIMaRChswtpctPKITbr8Wl+MoZZtPQhJ5NjQlQ= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +2v43f6ripfocif5h6bbi07glq6849rnj.example.com. 3600 IN NSEC3 1 0 1 012345 91onuasouslv1so1i62id4rf0l763dss A RRSIG +2v43f6ripfocif5h6bbi07glq6849rnj.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. d9CluwN3zWfLe20J212CuwNzJVbVsDR4eijuJyLpyHzziSc10CauWtUiuHeQMXCVJNwhPSb5kQTfKtql+Jd44BQlenRt/sHfa6YZEOwClN4O8V0vZ43K4vlwwWbh5kxQbFQ/e+w4vlYb1m4PHwzDLtqocNQ9T4A8SXl3A8paZqI= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +91onuasouslv1so1i62id4rf0l763dss.example.com. 3600 IN NSEC3 1 0 1 012345 c6ntadrd765diocebcrq6trs8npn83o3 A RRSIG +91onuasouslv1so1i62id4rf0l763dss.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. czJf5HkfHLpfGcku2iZnCu9tXnM7VWOYYhGtVAwkYG0M6BO4LzRxGCV3SkUvHLFxoqQY0DZLnafPl2MKg8zsF+tusf3e3xmpcCSR29IfuDYH7GzuVCj3H0ScmXM0lvyQ92JpJ0AMqq2mW1nvKmgjkyugs+EMpxcFVjhibljocLU= From 7ac4eb229d2fb9687b2d8d2595e2c8a78be685a7 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 21 Oct 2020 15:58:47 +0200 Subject: [PATCH 037/168] zonemd, unit tests for verifying DNSKEY with trust anchor failures. --- services/authzone.c | 2 ++ testcode/unitzonemd.c | 24 +++++++++++++++++++++++ testdata/zonemd.example15.zone | 35 ++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 testdata/zonemd.example15.zone diff --git a/services/authzone.c b/services/authzone.c index e05a5d81d..5fa5408a8 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -7887,6 +7887,8 @@ zonemd_get_dnskey_from_anchor(struct auth_zone* z, struct module_env* env, } else { /* bogus */ *is_insecure = 0; + auth_zone_log(z->name, VERB_ALGO, + "zonemd: verify DNSKEY RRset with trust anchor failed: %s", *reason); } return NULL; } diff --git a/testcode/unitzonemd.c b/testcode/unitzonemd.c index 558c40dd6..090028af6 100644 --- a/testcode/unitzonemd.c +++ b/testcode/unitzonemd.c @@ -444,6 +444,30 @@ static void zonemd_verify_tests(void) "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", "20201020135527", "DNSSEC verify failed for NSEC3 RRset"); + + verbosity=4; + /* load DNSSEC zone, with ZONEMD, but DNSKEY RRSIG is not okay. */ + zonemd_verify_test("example.com", + "testdata/zonemd.example15.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "signature crypto failed"); + /* load DNSSEC zone, but trust anchor mismatches DNSKEY */ + zonemd_verify_test("example.com", + "testdata/zonemd.example5.zone", + /* okay anchor is + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", */ + "example.com. IN DS 55566 8 2 0000000000111111222223333444444dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "DS hash mismatches key"); + /* load DNSSEC zone, but trust anchor fails because the zone + * has expired signatures. We set the date for it */ + zonemd_verify_test("example.com", + "testdata/zonemd.example5.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + /* okay date: "20201020135527", */ + "20221020135527", + "signature expired"); } /** zonemd unit tests */ diff --git a/testdata/zonemd.example15.zone b/testdata/zonemd.example15.zone new file mode 100644 index 000000000..8a1068910 --- /dev/null +++ b/testdata/zonemd.example15.zone @@ -0,0 +1,35 @@ +; DNSSEC signed but DNSKEY RRSIG is wrong. + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +; old sig +;example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +; wrong sig +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2AAAAA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= From 92eb12d26bdffe04a7d93f2d6d0b6e028428a8df Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 21 Oct 2020 15:59:29 +0200 Subject: [PATCH 038/168] zonemd, unit test remove debug. --- testcode/unitzonemd.c | 1 - 1 file changed, 1 deletion(-) diff --git a/testcode/unitzonemd.c b/testcode/unitzonemd.c index 090028af6..4f8e7f479 100644 --- a/testcode/unitzonemd.c +++ b/testcode/unitzonemd.c @@ -445,7 +445,6 @@ static void zonemd_verify_tests(void) "20201020135527", "DNSSEC verify failed for NSEC3 RRset"); - verbosity=4; /* load DNSSEC zone, with ZONEMD, but DNSKEY RRSIG is not okay. */ zonemd_verify_test("example.com", "testdata/zonemd.example15.zone", From 4ba45c34ed71894beb6e23279d1f01a3627563dc Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 21 Oct 2020 16:18:28 +0200 Subject: [PATCH 039/168] zonemd, result of dnssec failures includes rrset and dnssec bogus reason. --- services/authzone.c | 72 ++++++++++++++++++++++++------------------- testcode/unitzonemd.c | 16 +++++----- 2 files changed, 49 insertions(+), 39 deletions(-) diff --git a/services/authzone.c b/services/authzone.c index 5fa5408a8..727add003 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -7539,13 +7539,12 @@ static void auth_zone_log(uint8_t* name, enum verbosity_value level, /** ZONEMD, dnssec verify the rrset with the dnskey */ static int zonemd_dnssec_verify_rrset(struct auth_zone* z, struct module_env* env, struct ub_packed_rrset_key* dnskey, - struct auth_data* node, struct auth_rrset* rrset) + struct auth_data* node, struct auth_rrset* rrset, char** why_bogus) { struct ub_packed_rrset_key pk; enum sec_status sec; struct val_env* ve; int m; - char* why_bogus = NULL; m = modstack_find(&env->mesh->mods, "validator"); if(m == -1) { auth_zone_log(z->name, VERB_ALGO, "zonemd dnssec verify: have " @@ -7568,13 +7567,13 @@ static int zonemd_dnssec_verify_rrset(struct auth_zone* z, auth_zone_log(z->name, VERB_ALGO, "zonemd: verify %s RRset with DNSKEY", typestr); } - sec = dnskeyset_verify_rrset(env, ve, &pk, dnskey, NULL, &why_bogus, + sec = dnskeyset_verify_rrset(env, ve, &pk, dnskey, NULL, why_bogus, LDNS_SECTION_ANSWER, NULL); if(sec == sec_status_secure) { return 1; } if(why_bogus) - auth_zone_log(z->name, VERB_ALGO, "DNSSEC verify was bogus: %s", why_bogus); + auth_zone_log(z->name, VERB_ALGO, "DNSSEC verify was bogus: %s", *why_bogus); return 0; } @@ -7606,7 +7605,7 @@ static int nsec3_of_param_has_type(struct auth_rrset* nsec3, int algo, * return false on failure, reason contains description of failure. */ static int zonemd_check_dnssec_absence(struct auth_zone* z, struct module_env* env, struct ub_packed_rrset_key* dnskey, - struct auth_data* apex, char** reason) + struct auth_data* apex, char** reason, char** why_bogus) { struct auth_rrset* nsec = NULL; if(!apex) { @@ -7617,7 +7616,8 @@ static int zonemd_check_dnssec_absence(struct auth_zone* z, if(nsec) { struct ub_packed_rrset_key pk; /* dnssec verify the NSEC */ - if(!zonemd_dnssec_verify_rrset(z, env, dnskey, apex, nsec)) { + if(!zonemd_dnssec_verify_rrset(z, env, dnskey, apex, nsec, + why_bogus)) { *reason = "DNSSEC verify failed for NSEC RRset"; return 0; } @@ -7659,7 +7659,8 @@ static int zonemd_check_dnssec_absence(struct auth_zone* z, return 0; } /* dnssec verify the NSEC3 */ - if(!zonemd_dnssec_verify_rrset(z, env, dnskey, match, nsec3)) { + if(!zonemd_dnssec_verify_rrset(z, env, dnskey, match, nsec3, + why_bogus)) { *reason = "DNSSEC verify failed for NSEC3 RRset"; return 0; } @@ -7680,7 +7681,7 @@ static int zonemd_check_dnssec_absence(struct auth_zone* z, static int zonemd_check_dnssec_soazonemd(struct auth_zone* z, struct module_env* env, struct ub_packed_rrset_key* dnskey, struct auth_data* apex, struct auth_rrset* zonemd_rrset, - char** reason) + char** reason, char** why_bogus) { struct auth_rrset* soa; if(!apex) { @@ -7692,11 +7693,12 @@ static int zonemd_check_dnssec_soazonemd(struct auth_zone* z, *reason = "zone has no SOA RRset"; return 0; } - if(!zonemd_dnssec_verify_rrset(z, env, dnskey, apex, soa)) { + if(!zonemd_dnssec_verify_rrset(z, env, dnskey, apex, soa, why_bogus)) { *reason = "DNSSEC verify failed for SOA RRset"; return 0; } - if(!zonemd_dnssec_verify_rrset(z, env, dnskey, apex, zonemd_rrset)) { + if(!zonemd_dnssec_verify_rrset(z, env, dnskey, apex, zonemd_rrset, + why_bogus)) { *reason = "DNSSEC verify failed for ZONEMD RRset"; return 0; } @@ -7709,10 +7711,11 @@ static int zonemd_check_dnssec_soazonemd(struct auth_zone* z, * @param z: auth zone that fails. * @param env: environment with config, to ignore failure or not. * @param reason: failure string description. + * @param why_bogus: failure string for DNSSEC verification failure. * @param result: strdup result in here if not NULL. */ static void auth_zone_zonemd_fail(struct auth_zone* z, struct module_env* env, - char* reason, char** result) + char* reason, char* why_bogus, char** result) { char zstr[255+1]; /* if fail: log reason, and depending on config also take action @@ -7720,7 +7723,14 @@ static void auth_zone_zonemd_fail(struct auth_zone* z, struct module_env* env, dname_str(z->name, zstr); if(!reason) reason = "verification failed"; if(result) { - *result = strdup(reason); + if(why_bogus) { + char res[1024]; + snprintf(res, sizeof(res), "%s: %s", reason, + why_bogus); + *result = strdup(res); + } else { + *result = strdup(reason); + } if(!*result) log_err("out of memory"); } else { log_warn("auth zone %s: ZONEMD verification failed: %s", zstr, reason); @@ -7746,7 +7756,7 @@ static void auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env, struct ub_packed_rrset_key* dnskey, int is_insecure, char** result) { - char* reason = NULL; + char* reason = NULL, *why_bogus = NULL; struct auth_data* apex = NULL; struct auth_rrset* zonemd_rrset = NULL; int zonemd_absent = 0, zonemd_absence_dnssecok = 0; @@ -7773,22 +7783,22 @@ auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env, } else if(!zonemd_rrset) { /* fetch, DNSSEC verify, and check NSEC/NSEC3 */ if(!zonemd_check_dnssec_absence(z, env, dnskey, apex, - &reason)) { - auth_zone_zonemd_fail(z, env, reason, result); + &reason, &why_bogus)) { + auth_zone_zonemd_fail(z, env, reason, why_bogus, result); return; } zonemd_absence_dnssecok = 1; } else if(zonemd_rrset && dnskey) { /* check DNSSEC verify of SOA and ZONEMD */ if(!zonemd_check_dnssec_soazonemd(z, env, dnskey, apex, - zonemd_rrset, &reason)) { - auth_zone_zonemd_fail(z, env, reason, result); + zonemd_rrset, &reason, &why_bogus)) { + auth_zone_zonemd_fail(z, env, reason, why_bogus, result); return; } } if(zonemd_absent && 0) { - auth_zone_zonemd_fail(z, env, "ZONEMD absent and that is not allowed by config", result); + auth_zone_zonemd_fail(z, env, "ZONEMD absent and that is not allowed by config", NULL, result); return; } if(zonemd_absent && zonemd_absence_dnssecok) { @@ -7810,7 +7820,7 @@ auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env, /* check ZONEMD checksum and report or else fail. */ if(!auth_zone_zonemd_check_hash(z, env, &reason)) { - auth_zone_zonemd_fail(z, env, reason, result); + auth_zone_zonemd_fail(z, env, reason, NULL, result); return; } @@ -7830,7 +7840,7 @@ auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env, * @param env: environment with time and temp buffers. * @param anchor: trust anchor to use * @param is_insecure: returned, true if the zone is securely insecure. - * @param reason: if the routine fails, returns the failure reason. + * @param why_bogus: if the routine fails, returns the failure reason. * @param keystorage: where to store the ub_packed_rrset_key that is created * on success. A pointer to it is returned on success. * @return the dnskey RRset, reference to zone data and keystorage, or @@ -7838,7 +7848,7 @@ auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env, */ static struct ub_packed_rrset_key* zonemd_get_dnskey_from_anchor(struct auth_zone* z, struct module_env* env, - struct trust_anchor* anchor, int* is_insecure, char** reason, + struct trust_anchor* anchor, int* is_insecure, char** why_bogus, struct ub_packed_rrset_key* keystorage) { struct auth_data* apex; @@ -7849,18 +7859,18 @@ zonemd_get_dnskey_from_anchor(struct auth_zone* z, struct module_env* env, apex = az_find_name(z, z->name, z->namelen); if(!apex) { - *reason = "have trust anchor, but zone has no apex domain for DNSKEY"; + *why_bogus = "have trust anchor, but zone has no apex domain for DNSKEY"; return 0; } dnskey_rrset = az_domain_rrset(apex, LDNS_RR_TYPE_DNSKEY); if(!dnskey_rrset || dnskey_rrset->data->count==0) { - *reason = "have trust anchor, but zone has no DNSKEY"; + *why_bogus = "have trust anchor, but zone has no DNSKEY"; return 0; } m = modstack_find(&env->mesh->mods, "validator"); if(m == -1) { - *reason = "have trust anchor, but no validator module"; + *why_bogus = "have trust anchor, but no validator module"; return 0; } ve = (struct val_env*)env->modinfo[m]; @@ -7875,7 +7885,7 @@ zonemd_get_dnskey_from_anchor(struct auth_zone* z, struct module_env* env, auth_zone_log(z->name, VERB_QUERY, "zonemd: verify DNSKEY RRset with trust anchor"); sec = val_verify_DNSKEY_with_TA(env, ve, keystorage, anchor->ds_rrset, - anchor->dnskey_rrset, NULL, reason, NULL); + anchor->dnskey_rrset, NULL, why_bogus, NULL); regional_free_all(env->scratch); if(sec == sec_status_secure) { /* success */ @@ -7888,7 +7898,7 @@ zonemd_get_dnskey_from_anchor(struct auth_zone* z, struct module_env* env, /* bogus */ *is_insecure = 0; auth_zone_log(z->name, VERB_ALGO, - "zonemd: verify DNSKEY RRset with trust anchor failed: %s", *reason); + "zonemd: verify DNSKEY RRset with trust anchor failed: %s", *why_bogus); } return NULL; } @@ -7965,7 +7975,7 @@ void auth_zonemd_dnskey_lookup_callback(void* arg, int rcode, sldns_buffer* buf, } if(reason) { - auth_zone_zonemd_fail(z, env, reason, NULL); + auth_zone_zonemd_fail(z, env, reason, NULL, NULL); lock_rw_unlock(&z->lock); return; } @@ -8036,7 +8046,7 @@ zonemd_lookup_dnskey(struct auth_zone* z, struct module_env* env) void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env, char** result) { - char* reason = NULL; + char* reason = NULL, *why_bogus = NULL; struct trust_anchor* anchor = NULL; struct ub_packed_rrset_key* dnskey = NULL; struct ub_packed_rrset_key keystorage; @@ -8053,10 +8063,10 @@ void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env, if(anchor && query_dname_compare(z->name, anchor->name) == 0) { /* equal to trustanchor, no need for online lookups */ dnskey = zonemd_get_dnskey_from_anchor(z, env, anchor, - &is_insecure, &reason, &keystorage); + &is_insecure, &why_bogus, &keystorage); lock_basic_unlock(&anchor->lock); if(!dnskey && !reason) { - reason = "dnskey verify with anchor failed"; + reason = "verify DNSKEY RRset with trust anchor failed"; } } else if(anchor) { lock_basic_unlock(&anchor->lock); @@ -8074,7 +8084,7 @@ void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env, } if(reason) { - auth_zone_zonemd_fail(z, env, reason, result); + auth_zone_zonemd_fail(z, env, reason, why_bogus, result); return; } diff --git a/testcode/unitzonemd.c b/testcode/unitzonemd.c index 4f8e7f479..a20a6b0b2 100644 --- a/testcode/unitzonemd.c +++ b/testcode/unitzonemd.c @@ -336,7 +336,7 @@ static void zonemd_verify_tests(void) "testdata/zonemd.example1.zone", "example.org. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", "20180302005009", - "have trust anchor, but zone has no DNSKEY"); + "verify DNSKEY RRset with trust anchor failed: have trust anchor, but zone has no DNSKEY"); zonemd_verify_test("example.org", "testdata/zonemd.example1.zone", NULL, @@ -411,13 +411,13 @@ static void zonemd_verify_tests(void) "testdata/zonemd.example9.zone", "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", "20201020135527", - "DNSSEC verify failed for ZONEMD RRset"); + "DNSSEC verify failed for ZONEMD RRset: signature crypto failed"); /* load DNSSEC zone but RRSIG on SOA is wrong */ zonemd_verify_test("example.com", "testdata/zonemd.example10.zone", "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", "20201020135527", - "DNSSEC verify failed for SOA RRset"); + "DNSSEC verify failed for SOA RRset: signature crypto failed"); /* load DNSSEC zone without ZONEMD, but NSEC bitmap says it exists */ zonemd_verify_test("example.com", @@ -437,20 +437,20 @@ static void zonemd_verify_tests(void) "testdata/zonemd.example13.zone", "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", "20201020135527", - "DNSSEC verify failed for NSEC RRset"); + "DNSSEC verify failed for NSEC RRset: signature crypto failed"); /* load DNSSEC zone without ZONEMD, but RRSIG on NSEC3 not okay */ zonemd_verify_test("example.com", "testdata/zonemd.example14.zone", "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", "20201020135527", - "DNSSEC verify failed for NSEC3 RRset"); + "DNSSEC verify failed for NSEC3 RRset: signature crypto failed"); /* load DNSSEC zone, with ZONEMD, but DNSKEY RRSIG is not okay. */ zonemd_verify_test("example.com", "testdata/zonemd.example15.zone", "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", "20201020135527", - "signature crypto failed"); + "verify DNSKEY RRset with trust anchor failed: signature crypto failed"); /* load DNSSEC zone, but trust anchor mismatches DNSKEY */ zonemd_verify_test("example.com", "testdata/zonemd.example5.zone", @@ -458,7 +458,7 @@ static void zonemd_verify_tests(void) "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", */ "example.com. IN DS 55566 8 2 0000000000111111222223333444444dfcf92595148022f2c2fd98e5deee90af", "20201020135527", - "DS hash mismatches key"); + "verify DNSKEY RRset with trust anchor failed: DS hash mismatches key"); /* load DNSSEC zone, but trust anchor fails because the zone * has expired signatures. We set the date for it */ zonemd_verify_test("example.com", @@ -466,7 +466,7 @@ static void zonemd_verify_tests(void) "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", /* okay date: "20201020135527", */ "20221020135527", - "signature expired"); + "verify DNSKEY RRset with trust anchor failed: signature expired"); } /** zonemd unit tests */ From e09873e0c8c167434667a882708cc91298c8f16e Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 22 Oct 2020 12:10:46 +0200 Subject: [PATCH 040/168] zonemd, zonemds are checked at start --- daemon/daemon.c | 10 ++-- daemon/worker.c | 2 + libunbound/context.c | 3 +- services/authzone.c | 91 ++++++++++++++++++++++++++++++++++-- services/authzone.h | 21 ++++++++- smallapp/unbound-checkconf.c | 2 +- testcode/unitzonemd.c | 2 +- 7 files changed, 117 insertions(+), 14 deletions(-) diff --git a/daemon/daemon.c b/daemon/daemon.c index f480c94e6..83a30def7 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -632,19 +632,19 @@ daemon_fork(struct daemon* daemon) fatal_exit("Could not set up per-view response IP sets"); daemon->use_response_ip = !respip_set_is_empty(daemon->respip_set) || have_view_respip_cfg; - + + /* setup modules */ + daemon_setup_modules(daemon); + /* read auth zonefiles */ if(!auth_zones_apply_cfg(daemon->env->auth_zones, daemon->cfg, 1, - &daemon->use_rpz)) + &daemon->use_rpz, daemon->env, &daemon->mods)) fatal_exit("auth_zones could not be setup"); /* Set-up EDNS tags */ if(!edns_tags_apply_cfg(daemon->env->edns_tags, daemon->cfg)) fatal_exit("Could not set up EDNS tags"); - /* setup modules */ - daemon_setup_modules(daemon); - /* response-ip-xxx options don't work as expected without the respip * module. To avoid run-time operational surprise we reject such * configuration. */ diff --git a/daemon/worker.c b/daemon/worker.c index 458afa04e..9e4ad7c75 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1906,6 +1906,8 @@ worker_init(struct worker* worker, struct config_file *cfg, #endif ) { auth_xfer_pickup_initial(worker->env.auth_zones, &worker->env); + auth_zones_pickup_zonemd_verify(worker->env.auth_zones, + &worker->env); } #ifdef USE_DNSTAP if(worker->daemon->cfg->dnstap diff --git a/libunbound/context.c b/libunbound/context.c index 713259c71..914855470 100644 --- a/libunbound/context.c +++ b/libunbound/context.c @@ -78,7 +78,8 @@ context_finalize(struct ub_ctx* ctx) return UB_NOMEM; if(!local_zones_apply_cfg(ctx->local_zones, cfg)) return UB_INITFAIL; - if(!auth_zones_apply_cfg(ctx->env->auth_zones, cfg, 1, &is_rpz)) + if(!auth_zones_apply_cfg(ctx->env->auth_zones, cfg, 1, &is_rpz, + ctx->env, &ctx->mods)) return UB_INITFAIL; if(!edns_tags_apply_cfg(ctx->env->edns_tags, cfg)) return UB_INITFAIL; diff --git a/services/authzone.c b/services/authzone.c index 727add003..4adf90c4f 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -1745,9 +1745,47 @@ int auth_zone_write_file(struct auth_zone* z, const char* fname) return 1; } +/** offline verify for zonemd, while reading a zone file to immediately + * spot bad hashes in zonefile as they are read. + * Creates temp buffers, but uses anchors and validation environment + * from the module_env. */ +static void +zonemd_offline_verify(struct auth_zone* z, struct module_env* env_for_val, + struct module_stack* mods) +{ + struct module_env env; + struct mesh_area mesh; + time_t now = 0; + env = *env_for_val; + env.scratch_buffer = sldns_buffer_new(env.cfg->msg_buffer_size); + if(!env.scratch_buffer) { + log_err("out of memory"); + goto clean_exit; + } + env.scratch = regional_create(); + memset(&mesh, 0, sizeof(mesh)); + mesh.mods = *mods; + env.mesh = &mesh; + if(!env.now) { + env.now = &now; + now = time(NULL); + } + if(!env.scratch) { + log_err("out of memory"); + goto clean_exit; + } + auth_zone_verify_zonemd(z, &env, NULL, 1, 0); + +clean_exit: + /* clean up and exit */ + sldns_buffer_free(env.scratch_buffer); + regional_destroy(env.scratch); +} + /** read all auth zones from file (if they have) */ static int -auth_zones_read_zones(struct auth_zones* az, struct config_file* cfg) +auth_zones_read_zones(struct auth_zones* az, struct config_file* cfg, + struct module_env* env, struct module_stack* mods) { struct auth_zone* z; lock_rw_wrlock(&az->lock); @@ -1758,6 +1796,8 @@ auth_zones_read_zones(struct auth_zones* az, struct config_file* cfg) lock_rw_unlock(&az->lock); return 0; } + if(z->zonefile && z->zonefile[0]!=0 && env) + zonemd_offline_verify(z, env, mods); lock_rw_unlock(&z->lock); } lock_rw_unlock(&az->lock); @@ -2103,7 +2143,8 @@ az_delete_deleted_zones(struct auth_zones* az) } int auth_zones_apply_cfg(struct auth_zones* az, struct config_file* cfg, - int setup, int* is_rpz) + int setup, int* is_rpz, struct module_env* env, + struct module_stack* mods) { struct config_auth* p; az_setall_deleted(az); @@ -2119,7 +2160,7 @@ int auth_zones_apply_cfg(struct auth_zones* az, struct config_file* cfg, } } az_delete_deleted_zones(az); - if(!auth_zones_read_zones(az, cfg)) + if(!auth_zones_read_zones(az, cfg, env, mods)) return 0; if(setup) { if(!auth_zones_setup_zones(az)) @@ -8044,7 +8085,7 @@ zonemd_lookup_dnskey(struct auth_zone* z, struct module_env* env) } void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env, - char** result) + char** result, int offline, int only_online) { char* reason = NULL, *why_bogus = NULL; struct trust_anchor* anchor = NULL; @@ -8061,6 +8102,10 @@ void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env, * otherwise we have the zone DNSKEY for the DNSSEC verification. */ anchor = anchors_lookup(env->anchors, z->name, z->namelen, z->dclass); if(anchor && query_dname_compare(z->name, anchor->name) == 0) { + if(only_online) { + lock_basic_unlock(&anchor->lock); + return; + } /* equal to trustanchor, no need for online lookups */ dnskey = zonemd_get_dnskey_from_anchor(z, env, anchor, &is_insecure, &why_bogus, &keystorage); @@ -8071,6 +8116,8 @@ void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env, } else if(anchor) { lock_basic_unlock(&anchor->lock); /* perform online lookups */ + if(offline) + return; /* setup online lookups, and wait for them */ if(zonemd_lookup_dnskey(z, env)) { /* wait for the lookup */ @@ -8079,6 +8126,8 @@ void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env, reason = "could not lookup DNSKEY for chain of trust"; } else { /* the zone is not under a trust anchor */ + if(only_online) + return; dnskey = NULL; is_insecure = 1; } @@ -8091,3 +8140,37 @@ void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env, auth_zone_verify_zonemd_with_key(z, env, dnskey, is_insecure, result); regional_free_all(env->scratch); } + +void auth_zones_pickup_zonemd_verify(struct auth_zones* az, + struct module_env* env) +{ + struct auth_zone key; + uint8_t savezname[255+1]; + size_t savezname_len; + struct auth_zone* z; + key.node.key = &key; + lock_rw_rdlock(&az->lock); + RBTREE_FOR(z, struct auth_zone*, &az->ztree) { + lock_rw_wrlock(&z->lock); + key.dclass = z->dclass; + key.namelabs = z->namelabs; + if(z->namelen > sizeof(savezname)) { + lock_rw_unlock(&z->lock); + log_err("auth_zones_pickup_zonemd_verify: zone name too long"); + continue; + } + savezname_len = z->namelen; + memmove(savezname, z->name, z->namelen); + lock_rw_unlock(&az->lock); + auth_zone_verify_zonemd(z, env, NULL, 0, 1); + lock_rw_unlock(&z->lock); + lock_rw_rdlock(&az->lock); + /* find the zone we had before, it is not deleted, + * because we have a flag for that that is processed at + * apply_cfg time */ + key.namelen = savezname_len; + key.name = savezname; + z = (struct auth_zone*)rbtree_search(&az->ztree, &key); + } + lock_rw_unlock(&az->lock); +} diff --git a/services/authzone.h b/services/authzone.h index c00598ad1..9ddc756f9 100644 --- a/services/authzone.h +++ b/services/authzone.h @@ -479,10 +479,13 @@ struct auth_zones* auth_zones_create(void); * @param cfg: config to apply. * @param setup: if true, also sets up values in the auth zones structure * @param is_rpz: set to 1 if at least one RPZ zone is configured. + * @param env: environment for offline verification. + * @param mods: modules in environment. * @return false on failure. */ int auth_zones_apply_cfg(struct auth_zones* az, struct config_file* cfg, - int setup, int* is_rpz); + int setup, int* is_rpz, struct module_env* env, + struct module_stack* mods); /** initial pick up of worker timeouts, ties events to worker event loop * @param az: auth zones structure @@ -744,13 +747,27 @@ int auth_zone_generate_zonemd_check(struct auth_zone* z, int scheme, * @param z: auth zone to check. Caller holds lock. wrlock. * @param env: with temp region, buffer and config. * @param result: if not NULL, result string strdupped in here. + * @param offline: if true, there is no spawned lookup when online is needed. + * Those zones are skipped for ZONEMD checking. + * @param only_online: if true, only for ZONEMD that need online lookup + * of DNSKEY chain of trust are processed. */ void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env, - char** result); + char** result, int offline, int only_online); /** mesh callback for zonemd on lookup of dnskey */ void auth_zonemd_dnskey_lookup_callback(void* arg, int rcode, struct sldns_buffer* buf, enum sec_status sec, char* why_bogus, int was_ratelimited); +/** + * Check the ZONEMD records that need online DNSSEC chain lookups, + * for them spawn the lookup process to get it checked out. + * Attaches the lookup process to the worker event base and mesh state. + * @param az: auth zones, every zones is checked. + * @param env: env of the worker where the task is attached. + */ +void auth_zones_pickup_zonemd_verify(struct auth_zones* az, + struct module_env* env); + #endif /* SERVICES_AUTHZONE_H */ diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index b1b7ae7ef..34a1f5bb4 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -851,7 +851,7 @@ check_auth(struct config_file* cfg) { int is_rpz = 0; struct auth_zones* az = auth_zones_create(); - if(!az || !auth_zones_apply_cfg(az, cfg, 0, &is_rpz)) { + if(!az || !auth_zones_apply_cfg(az, cfg, 0, &is_rpz, NULL, NULL)) { fatal_exit("Could not setup authority zones"); } auth_zones_delete(az); diff --git a/testcode/unitzonemd.c b/testcode/unitzonemd.c index a20a6b0b2..10c40c630 100644 --- a/testcode/unitzonemd.c +++ b/testcode/unitzonemd.c @@ -291,7 +291,7 @@ static void zonemd_verify_test(char* zname, char* zfile, char* tastr, /* test */ lock_rw_wrlock(&z->lock); - auth_zone_verify_zonemd(z, &env, &result); + auth_zone_verify_zonemd(z, &env, &result, 1, 0); lock_rw_unlock(&z->lock); if(verbosity >= VERB_ALGO) { printf("auth zone %s: ZONEMD verification %s: %s\n", zname, From 6ea1ae17f71327ad7ec21a0948d847bb1cc6fe29 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 22 Oct 2020 13:20:00 +0200 Subject: [PATCH 041/168] zonemd, fix to harden against failure in pickup zonemd lookups. --- services/authzone.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/services/authzone.c b/services/authzone.c index 4adf90c4f..29780e72f 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -8171,6 +8171,8 @@ void auth_zones_pickup_zonemd_verify(struct auth_zones* az, key.namelen = savezname_len; key.name = savezname; z = (struct auth_zone*)rbtree_search(&az->ztree, &key); + if(!z) + break; } lock_rw_unlock(&az->lock); } From 54d8473ec66babaa61e1d54a0d7c3a5e9a4a30be Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 22 Oct 2020 13:31:37 +0200 Subject: [PATCH 042/168] zonemd, pass module stack as function argument. --- services/authzone.c | 64 +++++++++++++++++++++++-------------------- services/authzone.h | 4 ++- testcode/unitzonemd.c | 2 +- 3 files changed, 38 insertions(+), 32 deletions(-) diff --git a/services/authzone.c b/services/authzone.c index 29780e72f..861a1ce22 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -1754,7 +1754,6 @@ zonemd_offline_verify(struct auth_zone* z, struct module_env* env_for_val, struct module_stack* mods) { struct module_env env; - struct mesh_area mesh; time_t now = 0; env = *env_for_val; env.scratch_buffer = sldns_buffer_new(env.cfg->msg_buffer_size); @@ -1763,9 +1762,6 @@ zonemd_offline_verify(struct auth_zone* z, struct module_env* env_for_val, goto clean_exit; } env.scratch = regional_create(); - memset(&mesh, 0, sizeof(mesh)); - mesh.mods = *mods; - env.mesh = &mesh; if(!env.now) { env.now = &now; now = time(NULL); @@ -1774,7 +1770,7 @@ zonemd_offline_verify(struct auth_zone* z, struct module_env* env_for_val, log_err("out of memory"); goto clean_exit; } - auth_zone_verify_zonemd(z, &env, NULL, 1, 0); + auth_zone_verify_zonemd(z, &env, mods, NULL, 1, 0); clean_exit: /* clean up and exit */ @@ -7579,14 +7575,15 @@ static void auth_zone_log(uint8_t* name, enum verbosity_value level, /** ZONEMD, dnssec verify the rrset with the dnskey */ static int zonemd_dnssec_verify_rrset(struct auth_zone* z, - struct module_env* env, struct ub_packed_rrset_key* dnskey, - struct auth_data* node, struct auth_rrset* rrset, char** why_bogus) + struct module_env* env, struct module_stack* mods, + struct ub_packed_rrset_key* dnskey, struct auth_data* node, + struct auth_rrset* rrset, char** why_bogus) { struct ub_packed_rrset_key pk; enum sec_status sec; struct val_env* ve; int m; - m = modstack_find(&env->mesh->mods, "validator"); + m = modstack_find(mods, "validator"); if(m == -1) { auth_zone_log(z->name, VERB_ALGO, "zonemd dnssec verify: have " "DNSKEY chain of trust, but no validator module"); @@ -7645,8 +7642,9 @@ static int nsec3_of_param_has_type(struct auth_rrset* nsec3, int algo, /** Verify the absence of ZONEMD with DNSSEC by checking NSEC, NSEC3 type flag. * return false on failure, reason contains description of failure. */ static int zonemd_check_dnssec_absence(struct auth_zone* z, - struct module_env* env, struct ub_packed_rrset_key* dnskey, - struct auth_data* apex, char** reason, char** why_bogus) + struct module_env* env, struct module_stack* mods, + struct ub_packed_rrset_key* dnskey, struct auth_data* apex, + char** reason, char** why_bogus) { struct auth_rrset* nsec = NULL; if(!apex) { @@ -7657,8 +7655,8 @@ static int zonemd_check_dnssec_absence(struct auth_zone* z, if(nsec) { struct ub_packed_rrset_key pk; /* dnssec verify the NSEC */ - if(!zonemd_dnssec_verify_rrset(z, env, dnskey, apex, nsec, - why_bogus)) { + if(!zonemd_dnssec_verify_rrset(z, env, mods, dnskey, apex, + nsec, why_bogus)) { *reason = "DNSSEC verify failed for NSEC RRset"; return 0; } @@ -7700,8 +7698,8 @@ static int zonemd_check_dnssec_absence(struct auth_zone* z, return 0; } /* dnssec verify the NSEC3 */ - if(!zonemd_dnssec_verify_rrset(z, env, dnskey, match, nsec3, - why_bogus)) { + if(!zonemd_dnssec_verify_rrset(z, env, mods, dnskey, match, + nsec3, why_bogus)) { *reason = "DNSSEC verify failed for NSEC3 RRset"; return 0; } @@ -7720,9 +7718,9 @@ static int zonemd_check_dnssec_absence(struct auth_zone* z, /** Verify the SOA and ZONEMD DNSSEC signatures. * return false on failure, reason contains description of failure. */ static int zonemd_check_dnssec_soazonemd(struct auth_zone* z, - struct module_env* env, struct ub_packed_rrset_key* dnskey, - struct auth_data* apex, struct auth_rrset* zonemd_rrset, - char** reason, char** why_bogus) + struct module_env* env, struct module_stack* mods, + struct ub_packed_rrset_key* dnskey, struct auth_data* apex, + struct auth_rrset* zonemd_rrset, char** reason, char** why_bogus) { struct auth_rrset* soa; if(!apex) { @@ -7734,12 +7732,13 @@ static int zonemd_check_dnssec_soazonemd(struct auth_zone* z, *reason = "zone has no SOA RRset"; return 0; } - if(!zonemd_dnssec_verify_rrset(z, env, dnskey, apex, soa, why_bogus)) { + if(!zonemd_dnssec_verify_rrset(z, env, mods, dnskey, apex, soa, + why_bogus)) { *reason = "DNSSEC verify failed for SOA RRset"; return 0; } - if(!zonemd_dnssec_verify_rrset(z, env, dnskey, apex, zonemd_rrset, - why_bogus)) { + if(!zonemd_dnssec_verify_rrset(z, env, mods, dnskey, apex, + zonemd_rrset, why_bogus)) { *reason = "DNSSEC verify failed for ZONEMD RRset"; return 0; } @@ -7786,6 +7785,7 @@ static void auth_zone_zonemd_fail(struct auth_zone* z, struct module_env* env, * Verify the zonemd with DNSSEC and hash check, with given key. * @param z: auth zone. * @param env: environment with config and temp buffers. + * @param mods: module stack with validator env for verification. * @param dnskey: dnskey that we can use, or NULL. If nonnull, the key * has been verified and is the start of the chain of trust. * @param is_insecure: if true, the dnskey is not used, the zone is insecure. @@ -7795,7 +7795,8 @@ static void auth_zone_zonemd_fail(struct auth_zone* z, struct module_env* env, */ static void auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env, - struct ub_packed_rrset_key* dnskey, int is_insecure, char** result) + struct module_stack* mods, struct ub_packed_rrset_key* dnskey, + int is_insecure, char** result) { char* reason = NULL, *why_bogus = NULL; struct auth_data* apex = NULL; @@ -7823,7 +7824,7 @@ auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env, /* success, zonemd is absent */ } else if(!zonemd_rrset) { /* fetch, DNSSEC verify, and check NSEC/NSEC3 */ - if(!zonemd_check_dnssec_absence(z, env, dnskey, apex, + if(!zonemd_check_dnssec_absence(z, env, mods, dnskey, apex, &reason, &why_bogus)) { auth_zone_zonemd_fail(z, env, reason, why_bogus, result); return; @@ -7831,7 +7832,7 @@ auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env, zonemd_absence_dnssecok = 1; } else if(zonemd_rrset && dnskey) { /* check DNSSEC verify of SOA and ZONEMD */ - if(!zonemd_check_dnssec_soazonemd(z, env, dnskey, apex, + if(!zonemd_check_dnssec_soazonemd(z, env, mods, dnskey, apex, zonemd_rrset, &reason, &why_bogus)) { auth_zone_zonemd_fail(z, env, reason, why_bogus, result); return; @@ -7889,7 +7890,8 @@ auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env, */ static struct ub_packed_rrset_key* zonemd_get_dnskey_from_anchor(struct auth_zone* z, struct module_env* env, - struct trust_anchor* anchor, int* is_insecure, char** why_bogus, + struct module_stack* mods, struct trust_anchor* anchor, + int* is_insecure, char** why_bogus, struct ub_packed_rrset_key* keystorage) { struct auth_data* apex; @@ -7909,7 +7911,7 @@ zonemd_get_dnskey_from_anchor(struct auth_zone* z, struct module_env* env, return 0; } - m = modstack_find(&env->mesh->mods, "validator"); + m = modstack_find(mods, "validator"); if(m == -1) { *why_bogus = "have trust anchor, but no validator module"; return 0; @@ -8021,7 +8023,8 @@ void auth_zonemd_dnskey_lookup_callback(void* arg, int rcode, sldns_buffer* buf, return; } - auth_zone_verify_zonemd_with_key(z, env, dnskey, is_insecure, NULL); + auth_zone_verify_zonemd_with_key(z, env, &env->mesh->mods, dnskey, + is_insecure, NULL); regional_free_all(env->scratch); lock_rw_unlock(&z->lock); } @@ -8085,7 +8088,7 @@ zonemd_lookup_dnskey(struct auth_zone* z, struct module_env* env) } void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env, - char** result, int offline, int only_online) + struct module_stack* mods, char** result, int offline, int only_online) { char* reason = NULL, *why_bogus = NULL; struct trust_anchor* anchor = NULL; @@ -8107,7 +8110,7 @@ void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env, return; } /* equal to trustanchor, no need for online lookups */ - dnskey = zonemd_get_dnskey_from_anchor(z, env, anchor, + dnskey = zonemd_get_dnskey_from_anchor(z, env, mods, anchor, &is_insecure, &why_bogus, &keystorage); lock_basic_unlock(&anchor->lock); if(!dnskey && !reason) { @@ -8137,7 +8140,8 @@ void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env, return; } - auth_zone_verify_zonemd_with_key(z, env, dnskey, is_insecure, result); + auth_zone_verify_zonemd_with_key(z, env, mods, dnskey, is_insecure, + result); regional_free_all(env->scratch); } @@ -8162,7 +8166,7 @@ void auth_zones_pickup_zonemd_verify(struct auth_zones* az, savezname_len = z->namelen; memmove(savezname, z->name, z->namelen); lock_rw_unlock(&az->lock); - auth_zone_verify_zonemd(z, env, NULL, 0, 1); + auth_zone_verify_zonemd(z, env, &env->mesh->mods, NULL, 0, 1); lock_rw_unlock(&z->lock); lock_rw_rdlock(&az->lock); /* find the zone we had before, it is not deleted, diff --git a/services/authzone.h b/services/authzone.h index 9ddc756f9..6f0791723 100644 --- a/services/authzone.h +++ b/services/authzone.h @@ -746,6 +746,7 @@ int auth_zone_generate_zonemd_check(struct auth_zone* z, int scheme, * This includes DNSSEC verification if applicable. * @param z: auth zone to check. Caller holds lock. wrlock. * @param env: with temp region, buffer and config. + * @param mods: module stack for validator env. * @param result: if not NULL, result string strdupped in here. * @param offline: if true, there is no spawned lookup when online is needed. * Those zones are skipped for ZONEMD checking. @@ -753,7 +754,8 @@ int auth_zone_generate_zonemd_check(struct auth_zone* z, int scheme, * of DNSKEY chain of trust are processed. */ void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env, - char** result, int offline, int only_online); + struct module_stack* mods, char** result, int offline, + int only_online); /** mesh callback for zonemd on lookup of dnskey */ void auth_zonemd_dnskey_lookup_callback(void* arg, int rcode, diff --git a/testcode/unitzonemd.c b/testcode/unitzonemd.c index 10c40c630..82ab9076d 100644 --- a/testcode/unitzonemd.c +++ b/testcode/unitzonemd.c @@ -291,7 +291,7 @@ static void zonemd_verify_test(char* zname, char* zfile, char* tastr, /* test */ lock_rw_wrlock(&z->lock); - auth_zone_verify_zonemd(z, &env, &result, 1, 0); + auth_zone_verify_zonemd(z, &env, &mods, &result, 1, 0); lock_rw_unlock(&z->lock); if(verbosity >= VERB_ALGO) { printf("auth zone %s: ZONEMD verification %s: %s\n", zname, From f854f4e8673291f730910f7037ba4152f2e25c01 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 22 Oct 2020 16:02:37 +0200 Subject: [PATCH 043/168] zonemd, test for server start with zonemd from file. --- testdata/auth_zonemd_file.rpl | 182 ++++++++++++++++++++++++++++ testdata/auth_zonemd_file_fail.rpl | 184 +++++++++++++++++++++++++++++ 2 files changed, 366 insertions(+) create mode 100644 testdata/auth_zonemd_file.rpl create mode 100644 testdata/auth_zonemd_file_fail.rpl diff --git a/testdata/auth_zonemd_file.rpl b/testdata/auth_zonemd_file.rpl new file mode 100644 index 000000000..ffccd6779 --- /dev/null +++ b/testdata/auth_zonemd_file.rpl @@ -0,0 +1,182 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with ZONEMD from zonefile + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 127.0.0.1 +ENTRY_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_file_fail.rpl b/testdata/auth_zonemd_file_fail.rpl new file mode 100644 index 000000000..4bfa81b80 --- /dev/null +++ b/testdata/auth_zonemd_file_fail.rpl @@ -0,0 +1,184 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +; good zonemd +;example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +; wrong zonemd +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D7AAAAA +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with ZONEMD failure from zonefile + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +SCENARIO_END From 1cb7d5a1941051e696f56ade1f4feb4bab9d30b9 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 23 Oct 2020 09:12:51 +0200 Subject: [PATCH 044/168] zonemd, unit test for auth zone zonemd axfr zonemd, zonemds are checked after zone transfer. --- services/authzone.c | 10 ++ testdata/auth_zonemd_xfr.rpl | 237 +++++++++++++++++++++++++++++ testdata/auth_zonemd_xfr_fail.rpl | 240 ++++++++++++++++++++++++++++++ 3 files changed, 487 insertions(+) create mode 100644 testdata/auth_zonemd_xfr.rpl create mode 100644 testdata/auth_zonemd_xfr_fail.rpl diff --git a/services/authzone.c b/services/authzone.c index 861a1ce22..0a477442c 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -5164,6 +5164,16 @@ xfr_process_chunk_list(struct auth_xfer* xfr, struct module_env* env, " (or malformed RR)", xfr->task_transfer->master->host); return 0; } + auth_zone_verify_zonemd(z, env, &env->mesh->mods, NULL, 0, 0); + if(z->zone_expired) { + char zname[256]; + dname_str(xfr->name, zname); + /* ZONEMD must have failed */ + verbose(VERB_ALGO, "xfr from %s: ZONEMD failed for %s, transfer is failed", xfr->task_transfer->master->host, zname); + xfr->zone_expired = 1; + lock_rw_unlock(&z->lock); + return 0; + } if(xfr->have_zone) xfr->lease_time = *env->now; diff --git a/testdata/auth_zonemd_xfr.rpl b/testdata/auth_zonemd_xfr.rpl new file mode 100644 index 000000000..0a4d45f92 --- /dev/null +++ b/testdata/auth_zonemd_xfr.rpl @@ -0,0 +1,237 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + master: 1.2.3.44 + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: yes + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with AXFR with ZONEMD + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN SOA +SECTION ANSWER +; serial, refresh, retry, expire, minimum +example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN AXFR +SECTION ANSWER +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +STEP 30 TIME_PASSES ELAPSE 10 +STEP 40 TRAFFIC + +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 60 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 127.0.0.1 +ENTRY_END + +; the zonefile was updated with new contents +STEP 70 CHECK_TEMPFILE example.com +FILE_BEGIN +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +bar.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN A 1.2.3.4 +ns.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN A 127.0.0.1 +FILE_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_xfr_fail.rpl b/testdata/auth_zonemd_xfr_fail.rpl new file mode 100644 index 000000000..9fdf70889 --- /dev/null +++ b/testdata/auth_zonemd_xfr_fail.rpl @@ -0,0 +1,240 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + master: 1.2.3.44 + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: yes + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with AXFR with failed ZONEMD + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN SOA +SECTION ANSWER +; serial, refresh, retry, expire, minimum +example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOTIMPL +SECTION QUESTION +example.com. IN IXFR +SECTION ANSWER +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN AXFR +SECTION ANSWER +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +; old zonemd +;example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +; wrong zonemd +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D7AAAAA +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +STEP 30 TIME_PASSES ELAPSE 10 +STEP 40 TRAFFIC + +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 60 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +; the zonefile was updated with new contents +STEP 70 CHECK_TEMPFILE example.com +FILE_BEGIN +FILE_END + +SCENARIO_END From 40e713e1219da89229f6b9a35233ed301670285f Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 23 Oct 2020 10:14:21 +0200 Subject: [PATCH 045/168] zonemd, unlock xfr lock for auth zone verify of zonemd for mesh new callback. --- services/authzone.c | 56 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 44 insertions(+), 12 deletions(-) diff --git a/services/authzone.c b/services/authzone.c index 0a477442c..470f490cf 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -5106,6 +5106,28 @@ xfr_write_after_update(struct auth_xfer* xfr, struct module_env* env) lock_rw_unlock(&z->lock); } +/** reacquire locks and structures. Starts with no locks, ends + * with xfr and z locks, if fail, no z lock */ +static int xfr_process_reacquire_locks(struct auth_xfer* xfr, + struct module_env* env, struct auth_zone** z) +{ + /* release xfr lock, then, while holding az->lock grab both + * z->lock and xfr->lock */ + lock_rw_rdlock(&env->auth_zones->lock); + *z = auth_zone_find(env->auth_zones, xfr->name, xfr->namelen, + xfr->dclass); + if(!*z) { + lock_rw_unlock(&env->auth_zones->lock); + lock_basic_lock(&xfr->lock); + *z = NULL; + return 0; + } + lock_rw_wrlock(&(*z)->lock); + lock_basic_lock(&xfr->lock); + lock_rw_unlock(&env->auth_zones->lock); + return 1; +} + /** process chunk list and update zone in memory, * return false if it did not work */ static int @@ -5115,21 +5137,12 @@ xfr_process_chunk_list(struct auth_xfer* xfr, struct module_env* env, struct auth_zone* z; /* obtain locks and structures */ - /* release xfr lock, then, while holding az->lock grab both - * z->lock and xfr->lock */ lock_basic_unlock(&xfr->lock); - lock_rw_rdlock(&env->auth_zones->lock); - z = auth_zone_find(env->auth_zones, xfr->name, xfr->namelen, - xfr->dclass); - if(!z) { - lock_rw_unlock(&env->auth_zones->lock); + if(!xfr_process_reacquire_locks(xfr, env, &z)) { /* the zone is gone, ignore xfr results */ - lock_basic_lock(&xfr->lock); return 0; } - lock_rw_wrlock(&z->lock); - lock_basic_lock(&xfr->lock); - lock_rw_unlock(&env->auth_zones->lock); + /* holding xfr and z locks */ /* apply data */ if(xfr->task_transfer->master->http) { @@ -5164,16 +5177,35 @@ xfr_process_chunk_list(struct auth_xfer* xfr, struct module_env* env, " (or malformed RR)", xfr->task_transfer->master->host); return 0; } + + /* release xfr lock while verifying zonemd because it may have + * to spawn lookups in the state machines */ + lock_basic_unlock(&xfr->lock); + /* holding z lock */ auth_zone_verify_zonemd(z, env, &env->mesh->mods, NULL, 0, 0); if(z->zone_expired) { char zname[256]; - dname_str(xfr->name, zname); /* ZONEMD must have failed */ + /* reacquire locks, so we hold xfr lock on exit of routine, + * and both xfr and z again after releasing xfr for potential + * state machine mesh callbacks */ + lock_rw_unlock(&z->lock); + if(!xfr_process_reacquire_locks(xfr, env, &z)) + return 0; + dname_str(xfr->name, zname); verbose(VERB_ALGO, "xfr from %s: ZONEMD failed for %s, transfer is failed", xfr->task_transfer->master->host, zname); xfr->zone_expired = 1; lock_rw_unlock(&z->lock); return 0; } + /* reacquire locks, so we hold xfr lock on exit of routine, + * and both xfr and z again after releasing xfr for potential + * state machine mesh callbacks */ + lock_rw_unlock(&z->lock); + if(!xfr_process_reacquire_locks(xfr, env, &z)) + return 0; + /* holding xfr and z locks */ + if(xfr->have_zone) xfr->lease_time = *env->now; From fb5f3f076dab106e6b2730b58105c481f53450dc Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 23 Oct 2020 11:20:08 +0200 Subject: [PATCH 046/168] zonemd, zonemds are checked when a zone is auth_zone_reload from file, or reload with unbound-control. --- daemon/remote.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/daemon/remote.c b/daemon/remote.c index 8324e1901..498eb2495 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -2510,6 +2510,8 @@ do_auth_zone_reload(RES* ssl, struct worker* worker, char* arg) uint8_t* nm = NULL; struct auth_zones* az = worker->env.auth_zones; struct auth_zone* z = NULL; + char* reason = NULL; + int oldexpired = 0; if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs)) return; if(az) { @@ -2530,6 +2532,17 @@ do_auth_zone_reload(RES* ssl, struct worker* worker, char* arg) (void)ssl_printf(ssl, "error failed to read %s\n", arg); return; } + oldexpired = z->zone_expired; + auth_zone_verify_zonemd(z, &worker->env, &worker->env.mesh->mods, + &reason, 0, 0); + if(reason && !oldexpired && z->zone_expired) { + (void)ssl_printf(ssl, "error zonemd for %s failed: %s\n", + arg, reason); + } else if(reason && strcmp(reason, "ZONEMD verification successful") + ==0) { + (void)ssl_printf(ssl, "%s: %s\n", arg, reason); + } + free(reason); lock_rw_unlock(&z->lock); send_ok(ssl); } From c72ca35f0817683698cbdd9e2e1e36c5cdfedaa7 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 23 Oct 2020 11:44:28 +0200 Subject: [PATCH 047/168] unbound-control auth_zone_reload sets zone to nonexpired and also updates the xfr soa values from the new zonefile contents. --- daemon/remote.c | 36 +++++++++++++++++++++++++++++++++--- services/authzone.c | 2 +- services/authzone.h | 3 +++ 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/daemon/remote.c b/daemon/remote.c index 498eb2495..8a6ede426 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -2510,8 +2510,8 @@ do_auth_zone_reload(RES* ssl, struct worker* worker, char* arg) uint8_t* nm = NULL; struct auth_zones* az = worker->env.auth_zones; struct auth_zone* z = NULL; + struct auth_xfer* xfr = NULL; char* reason = NULL; - int oldexpired = 0; if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs)) return; if(az) { @@ -2520,22 +2520,52 @@ do_auth_zone_reload(RES* ssl, struct worker* worker, char* arg) if(z) { lock_rw_wrlock(&z->lock); } + xfr = auth_xfer_find(az, nm, nmlen, LDNS_RR_CLASS_IN); + if(xfr) { + lock_basic_lock(&xfr->lock); + } lock_rw_unlock(&az->lock); } free(nm); if(!z) { + if(xfr) { + lock_basic_unlock(&xfr->lock); + } (void)ssl_printf(ssl, "error no auth-zone %s\n", arg); return; } if(!auth_zone_read_zonefile(z, worker->env.cfg)) { lock_rw_unlock(&z->lock); + if(xfr) { + lock_basic_unlock(&xfr->lock); + } (void)ssl_printf(ssl, "error failed to read %s\n", arg); return; } - oldexpired = z->zone_expired; + + z->zone_expired = 0; + if(xfr) { + xfr->zone_expired = 0; + if(!xfr_find_soa(z, xfr)) { + if(z->data.count == 0) { + lock_rw_unlock(&z->lock); + lock_basic_unlock(&xfr->lock); + (void)ssl_printf(ssl, "zone %s has no contents\n", arg); + return; + } + lock_rw_unlock(&z->lock); + lock_basic_unlock(&xfr->lock); + (void)ssl_printf(ssl, "error: no SOA in zone after read %s\n", arg); + return; + } + if(xfr->have_zone) + xfr->lease_time = *worker->env.now; + lock_basic_unlock(&xfr->lock); + } + auth_zone_verify_zonemd(z, &worker->env, &worker->env.mesh->mods, &reason, 0, 0); - if(reason && !oldexpired && z->zone_expired) { + if(reason && z->zone_expired) { (void)ssl_printf(ssl, "error zonemd for %s failed: %s\n", arg, reason); } else if(reason && strcmp(reason, "ZONEMD verification successful") diff --git a/services/authzone.c b/services/authzone.c index 470f490cf..d6931ce92 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -1918,7 +1918,7 @@ auth_zone_get_serial(struct auth_zone* z, uint32_t* serial) } /** Find auth_zone SOA and populate the values in xfr(soa values). */ -static int +int xfr_find_soa(struct auth_zone* z, struct auth_xfer* xfr) { struct auth_data* apex; diff --git a/services/authzone.h b/services/authzone.h index 6f0791723..9452a3db2 100644 --- a/services/authzone.h +++ b/services/authzone.h @@ -633,6 +633,9 @@ int auth_zone_read_zonefile(struct auth_zone* z, struct config_file* cfg); /** find serial number of zone or false if none (no SOA record) */ int auth_zone_get_serial(struct auth_zone* z, uint32_t* serial); +/** Find auth_zone SOA and populate the values in xfr(soa values). */ +int xfr_find_soa(struct auth_zone* z, struct auth_xfer* xfr); + /** compare auth_zones for sorted rbtree */ int auth_zone_cmp(const void* z1, const void* z2); From 89087ae294d2094e7cded00fc7cfebb2a95d7f40 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 23 Oct 2020 11:47:00 +0200 Subject: [PATCH 048/168] zonemd, unbound-control auth_zone_reload errors when ZONEMD fails. --- daemon/remote.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/daemon/remote.c b/daemon/remote.c index 8a6ede426..7c99e4f29 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -2566,14 +2566,17 @@ do_auth_zone_reload(RES* ssl, struct worker* worker, char* arg) auth_zone_verify_zonemd(z, &worker->env, &worker->env.mesh->mods, &reason, 0, 0); if(reason && z->zone_expired) { + lock_rw_unlock(&z->lock); (void)ssl_printf(ssl, "error zonemd for %s failed: %s\n", arg, reason); + free(reason); + return; } else if(reason && strcmp(reason, "ZONEMD verification successful") ==0) { (void)ssl_printf(ssl, "%s: %s\n", arg, reason); } - free(reason); lock_rw_unlock(&z->lock); + free(reason); send_ok(ssl); } From caee84d92ed82c0923a3bdcf74b8ad84334be9a9 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 23 Oct 2020 12:10:30 +0200 Subject: [PATCH 049/168] zonemd, unit test for unbound-control auth_zone_reload with zonemd. --- .../zonemd_reload.tdir/zonemd_reload.conf | 22 ++++++ testdata/zonemd_reload.tdir/zonemd_reload.dsc | 16 ++++ .../zonemd_reload.tdir/zonemd_reload.post | 14 ++++ testdata/zonemd_reload.tdir/zonemd_reload.pre | 35 +++++++++ .../zonemd_reload.tdir/zonemd_reload.test | 74 +++++++++++++++++++ .../zonemd_reload.tdir/zonemd_reload.testns | 27 +++++++ .../zonemd_reload.tdir/zonemd_reload.zone | 8 ++ 7 files changed, 196 insertions(+) create mode 100644 testdata/zonemd_reload.tdir/zonemd_reload.conf create mode 100644 testdata/zonemd_reload.tdir/zonemd_reload.dsc create mode 100644 testdata/zonemd_reload.tdir/zonemd_reload.post create mode 100644 testdata/zonemd_reload.tdir/zonemd_reload.pre create mode 100644 testdata/zonemd_reload.tdir/zonemd_reload.test create mode 100644 testdata/zonemd_reload.tdir/zonemd_reload.testns create mode 100644 testdata/zonemd_reload.tdir/zonemd_reload.zone diff --git a/testdata/zonemd_reload.tdir/zonemd_reload.conf b/testdata/zonemd_reload.tdir/zonemd_reload.conf new file mode 100644 index 000000000..27bdb4424 --- /dev/null +++ b/testdata/zonemd_reload.tdir/zonemd_reload.conf @@ -0,0 +1,22 @@ +server: + verbosity: 7 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + use-caps-for-id: yes +remote-control: + control-enable: yes + control-interface: @CONTROL_PATH@/controlpipe.@CONTROL_PID@ + control-use-cert: no +auth-zone: + name: "example.com" + for-upstream: yes + for-downstream: yes + zonefile: "zonemd_reload.zone" + #master: "127.0.0.1@@TOPORT@" diff --git a/testdata/zonemd_reload.tdir/zonemd_reload.dsc b/testdata/zonemd_reload.tdir/zonemd_reload.dsc new file mode 100644 index 000000000..016c3d6c7 --- /dev/null +++ b/testdata/zonemd_reload.tdir/zonemd_reload.dsc @@ -0,0 +1,16 @@ +BaseName: zonemd_reload +Version: 1.0 +Description: ZONEMD check after auth_zone_reload +CreationDate: Tue 23 Oct 12:00:00 CEST 2020 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: zonemd_reload.pre +Post: zonemd_reload.post +Test: zonemd_reload.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/zonemd_reload.tdir/zonemd_reload.post b/testdata/zonemd_reload.tdir/zonemd_reload.post new file mode 100644 index 000000000..5e315088a --- /dev/null +++ b/testdata/zonemd_reload.tdir/zonemd_reload.post @@ -0,0 +1,14 @@ +# #-- zonemd_reload.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +echo "> cat logfiles" +cat fwd.log +cat unbound.log +kill_pid $FWD_PID +kill_pid $UNBOUND_PID +rm -f $CONTROL_PATH/controlpipe.$CONTROL_PID diff --git a/testdata/zonemd_reload.tdir/zonemd_reload.pre b/testdata/zonemd_reload.tdir/zonemd_reload.pre new file mode 100644 index 000000000..fa5e4ca29 --- /dev/null +++ b/testdata/zonemd_reload.tdir/zonemd_reload.pre @@ -0,0 +1,35 @@ +# #-- zonemd_reload.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT zonemd_reload.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +CONTROL_PATH=/tmp +CONTROL_PID=$$ +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's?@CONTROL_PATH\@?'$CONTROL_PATH'?' -e 's/@CONTROL_PID@/'$CONTROL_PID'/' < zonemd_reload.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test +echo "CONTROL_PATH=$CONTROL_PATH" >> .tpkg.var.test +echo "CONTROL_PID=$CONTROL_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/zonemd_reload.tdir/zonemd_reload.test b/testdata/zonemd_reload.tdir/zonemd_reload.test new file mode 100644 index 000000000..5ae1d9b0c --- /dev/null +++ b/testdata/zonemd_reload.tdir/zonemd_reload.test @@ -0,0 +1,74 @@ +# #-- zonemd_reload.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +echo "> dig www.example.com." +dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +if grep SERVFAIL outfile; then + echo "> try again" + dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +fi +if grep SERVFAIL outfile; then + echo "> try again" + sleep 1 + dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +fi +if grep SERVFAIL outfile; then + echo "> try again" + sleep 1 + dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +fi +if grep SERVFAIL outfile; then + echo "> try again" + sleep 1 + dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +fi +if grep SERVFAIL outfile; then + echo "> try again" + sleep 10 + dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +fi +if grep SERVFAIL outfile; then + echo "> try again" + sleep 10 + dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +fi +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep www.example.com outfile | grep "127.0.0.1"; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +echo "> unbound-control status" +$PRE/unbound-control -c ub.conf status +if test $? -ne 0; then + echo "wrong exit value." + exit 1 +else + echo "exit value: OK" +fi + +echo "> unbound-control auth_zone_reload example.com" +$PRE/unbound-control -c ub.conf auth_zone_reload example.com 2>&1 | tee outfile +if test $? -ne 0; then + echo "wrong exit value." + exit 1 +fi +echo "> check unbound-control output" +if grep "example.com: ZONEMD verification successful" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/zonemd_reload.tdir/zonemd_reload.testns b/testdata/zonemd_reload.tdir/zonemd_reload.testns new file mode 100644 index 000000000..f1678a1cc --- /dev/null +++ b/testdata/zonemd_reload.tdir/zonemd_reload.testns @@ -0,0 +1,27 @@ +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN SOA +SECTION ANSWER +example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN AXFR +SECTION ANSWER +example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 +example.com. IN NS ns.example.net. +EXTRA_PACKET +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN AXFR +SECTION ANSWER +www.example.com. IN A 1.2.3.4 +example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 +ENTRY_END diff --git a/testdata/zonemd_reload.tdir/zonemd_reload.zone b/testdata/zonemd_reload.tdir/zonemd_reload.zone new file mode 100644 index 000000000..16b631c7b --- /dev/null +++ b/testdata/zonemd_reload.tdir/zonemd_reload.zone @@ -0,0 +1,8 @@ +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 From 165b048e07cc281ae1211e31a40b1d4dc9072246 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 23 Oct 2020 14:33:04 +0200 Subject: [PATCH 050/168] zonemd, zonemd-permissive-mode: yes logs the failure but does not block the zone after a ZONEMD verification failure. --- doc/example.conf.in | 3 + doc/unbound.conf.5.in | 6 + services/authzone.c | 6 + testdata/auth_zonefile_dnssec.rpl | 1 + util/config_file.c | 3 + util/config_file.h | 2 + util/configlexer.c | 4614 +++++++++++++++-------------- util/configlexer.lex | 1 + util/configparser.c | 2542 ++++++++-------- util/configparser.h | 6 +- util/configparser.y | 12 +- 11 files changed, 3633 insertions(+), 3563 deletions(-) diff --git a/doc/example.conf.in b/doc/example.conf.in index 85d475ea3..6e6bf781b 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -602,6 +602,9 @@ server: # List in ascending order the keysize and count values. # val-nsec3-keysize-iterations: "1024 150 2048 500 4096 2500" + # if enabled, ZONEMD verification failures do not block the zone. + # zonemd-permissive-mode: no + # instruct the auto-trust-anchor-file probing to add anchors after ttl. # add-holddown: 2592000 # 30 days diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 0b73480aa..6b4fbef56 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -1167,6 +1167,12 @@ be in ascending order and have at least one entry. If you set it to "1024 65535" there is no restriction to NSEC3 iteration values. This table must be kept short; a very long list could cause slower operation. .TP +.B zonemd\-permissive\-mode: \fI +If enabled the ZONEMD verification failures are only logged and do not cause +the zone to be blocked and only return servfail. Useful for testing out +if it works, or if the operator only wants to be notified of a problem without +disrupting service. Default is no. +.TP .B add\-holddown: \fI Instruct the \fBauto\-trust\-anchor\-file\fR probe mechanism for RFC5011 autotrust updates to add new trust anchors only after they have been diff --git a/services/authzone.c b/services/authzone.c index d6931ce92..4727b0546 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -7818,6 +7818,12 @@ static void auth_zone_zonemd_fail(struct auth_zone* z, struct module_env* env, log_warn("auth zone %s: ZONEMD verification failed: %s", zstr, reason); } + if(env->cfg->zonemd_permissive_mode) { + verbose(VERB_ALGO, "zonemd-permissive-mode enabled, " + "not blocking zone %s", zstr); + return; + } + /* expired means the zone gives servfail and is not used by * lookup if fallback_enabled*/ z->zone_expired = 1; diff --git a/testdata/auth_zonefile_dnssec.rpl b/testdata/auth_zonefile_dnssec.rpl index eb264ee8b..f58c52300 100644 --- a/testdata/auth_zonefile_dnssec.rpl +++ b/testdata/auth_zonefile_dnssec.rpl @@ -5,6 +5,7 @@ server: target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no + zonemd-permissive-mode: yes auth-zone: name: "example.com." diff --git a/util/config_file.c b/util/config_file.c index 406911ecc..af0aaa3c3 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -257,6 +257,7 @@ config_create(void) cfg->serve_expired_ttl_reset = 0; cfg->serve_expired_reply_ttl = 30; cfg->serve_expired_client_timeout = 0; + cfg->zonemd_permissive_mode = 0; cfg->add_holddown = 30*24*3600; cfg->del_holddown = 30*24*3600; cfg->keep_missing = 366*24*3600; /* one year plus a little leeway */ @@ -623,6 +624,7 @@ int config_set_option(struct config_file* cfg, const char* opt, { IS_NUMBER_OR_ZERO; cfg->serve_expired_reply_ttl = atoi(val); SERVE_EXPIRED_REPLY_TTL=(time_t)cfg->serve_expired_reply_ttl;} else S_NUMBER_OR_ZERO("serve-expired-client-timeout:", serve_expired_client_timeout) else S_STR("val-nsec3-keysize-iterations:", val_nsec3_key_iterations) + else S_YNO("zonemd-permissive-mode:", zonemd_permissive_mode) else S_UNSIGNED_OR_ZERO("add-holddown:", add_holddown) else S_UNSIGNED_OR_ZERO("del-holddown:", del_holddown) else S_UNSIGNED_OR_ZERO("keep-missing:", keep_missing) @@ -1037,6 +1039,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_DEC(opt, "serve-expired-reply-ttl", serve_expired_reply_ttl) else O_DEC(opt, "serve-expired-client-timeout", serve_expired_client_timeout) else O_STR(opt, "val-nsec3-keysize-iterations",val_nsec3_key_iterations) + else O_YNO(opt, "zonemd_permissive_mode", zonemd_permissive_mode) else O_UNS(opt, "add-holddown", add_holddown) else O_UNS(opt, "del-holddown", del_holddown) else O_UNS(opt, "keep-missing", keep_missing) diff --git a/util/config_file.h b/util/config_file.h index a12a078f7..d707bac19 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -388,6 +388,8 @@ struct config_file { int serve_expired_client_timeout; /** nsec3 maximum iterations per key size, string */ char* val_nsec3_key_iterations; + /** if zonemd failures are permitted, only logged */ + int zonemd_permissive_mode; /** autotrust add holddown time, in seconds */ unsigned int add_holddown; /** autotrust del holddown time, in seconds */ diff --git a/util/configlexer.c b/util/configlexer.c index 9fc565e0c..0aac2586e 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -354,8 +354,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 336 -#define YY_END_OF_BUFFER 337 +#define YY_NUM_RULES 337 +#define YY_END_OF_BUFFER 338 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,368 +363,371 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[3281] = +static const flex_int16_t yy_accept[3300] = { 0, - 1, 1, 310, 310, 314, 314, 318, 318, 322, 322, - 1, 1, 326, 326, 330, 330, 337, 334, 1, 308, - 308, 335, 2, 335, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 310, 311, 311, 312, - 335, 314, 315, 315, 316, 335, 321, 318, 319, 319, - 320, 335, 322, 323, 323, 324, 335, 333, 309, 2, - 313, 335, 333, 329, 326, 327, 327, 328, 335, 330, - 331, 331, 332, 335, 334, 0, 1, 2, 2, 2, - 2, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 1, 1, 311, 311, 315, 315, 319, 319, 323, 323, + 1, 1, 327, 327, 331, 331, 338, 335, 1, 309, + 309, 336, 2, 336, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 311, 312, 312, 313, + 336, 315, 316, 316, 317, 336, 322, 319, 320, 320, + 321, 336, 323, 324, 324, 325, 336, 334, 310, 2, + 314, 336, 334, 330, 327, 328, 328, 329, 336, 331, + 332, 332, 333, 336, 335, 0, 1, 2, 2, 2, + 2, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 310, 0, 314, - 0, 321, 0, 318, 322, 0, 333, 0, 2, 2, - 333, 329, 0, 326, 330, 0, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 311, 0, 315, + 0, 322, 0, 319, 323, 0, 334, 0, 2, 2, + 334, 330, 0, 327, 331, 0, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 333, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 334, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 124, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 133, 334, 334, 334, 334, 334, 334, - 334, 333, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 124, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 133, 335, 335, 335, 335, 335, 335, + 335, 334, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 108, 334, 334, 334, 334, 334, 334, 8, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 125, 334, 334, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 108, 335, 335, 335, 335, 335, 335, 8, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 125, 335, 335, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 138, 334, 333, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 301, 334, 334, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 138, 335, 335, + 334, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 302, 335, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 333, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 64, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 237, 334, 14, - 15, 334, 19, 18, 334, 334, 221, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 131, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 335, 334, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 64, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 238, + 335, 14, 15, 335, 19, 18, 335, 335, 222, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 131, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 219, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 3, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 333, 334, 334, 334, 334, 334, 334, - 334, 295, 334, 334, 294, 334, 334, 334, 334, 334, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 220, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 3, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 334, 335, 335, 335, + 335, 335, 335, 335, 296, 335, 335, 295, 335, 335, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 317, 334, 334, 334, 334, 334, 334, 334, - 334, 63, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 67, 334, - 268, 334, 334, 334, 334, 334, 334, 334, 334, 302, - 303, 334, 334, 334, 334, 334, 68, 334, 334, 132, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 318, 335, 335, 335, 335, + 335, 335, 335, 335, 63, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 67, 335, 269, 335, 335, 335, 335, 335, 335, + 335, 335, 303, 304, 335, 335, 335, 335, 335, 68, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 128, 334, 334, 334, 334, 334, - 334, 334, 334, 208, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 21, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 157, 334, 334, 333, 317, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 106, + 335, 335, 132, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 128, 335, 335, + 335, 335, 335, 335, 335, 335, 209, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 21, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 157, 335, 335, 335, + 334, 318, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 334, 334, 334, 334, 334, 334, 334, 276, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 180, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 156, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 105, 334, + 335, 335, 335, 106, 335, 335, 335, 335, 335, 335, + 335, 277, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 180, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 156, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 32, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 33, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 65, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 130, 333, 334, 334, 334, 334, 334, 123, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 66, 334, 334, 334, 334, 334, + 335, 335, 105, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 32, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 33, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 65, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 130, 335, 334, 335, 335, + 335, 335, 335, 123, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 66, - 334, 334, 334, 334, 334, 334, 334, 241, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 181, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 54, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 242, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 181, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 54, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 259, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 58, - 334, 59, 334, 334, 334, 334, 334, 109, 334, 110, - 334, 334, 334, 334, 107, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 7, 334, 333, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 230, 334, 334, 334, 334, 159, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 260, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 58, 335, 59, 335, 335, 335, + 335, 335, 109, 335, 110, 335, 335, 335, 335, 107, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 7, 335, + 335, 334, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 242, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 45, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 55, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 200, 334, - 199, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 231, 335, 335, 335, 335, 159, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 243, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 45, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 55, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 201, 335, 200, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 334, 334, 334, 334, 334, 334, 334, 16, 17, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 69, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 207, 334, 334, 334, 334, 334, - 334, 112, 334, 111, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 191, 334, 334, 334, 334, - 334, 334, 334, 334, 139, 333, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 100, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 89, 334, 334, 334, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 16, 17, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 69, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 208, 335, 335, 335, 335, 335, 335, 112, 335, 111, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 192, 335, 335, 335, 335, 335, 335, 335, 335, + 139, 335, 334, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 100, 335, 335, 335, 335, 335, 335, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 220, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 93, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 62, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 194, 195, 334, 334, 334, 270, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 335, 335, 335, 89, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 221, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 93, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 62, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 195, + 196, 335, 335, 335, 271, 335, 335, 335, 335, 335, - 6, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 274, 334, 334, 334, 334, 334, 334, 296, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 42, 334, 334, 334, 334, 44, 334, 334, 334, 334, - 334, 334, 334, 334, 52, 334, 334, 334, 334, 334, - 334, 334, 333, 334, 187, 334, 334, 334, 134, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 212, - 334, 188, 334, 334, 334, 227, 334, 334, 334, 334, + 335, 335, 335, 335, 335, 335, 335, 6, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 275, + 335, 335, 335, 335, 335, 335, 297, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 42, 335, 335, + 335, 335, 44, 335, 335, 335, 335, 335, 335, 335, + 335, 52, 335, 335, 335, 335, 335, 335, 335, 335, + 334, 335, 188, 335, 335, 335, 134, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 213, 335, 189, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 53, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 136, 117, 334, - 118, 334, 334, 334, 116, 334, 334, 334, 334, 334, - 334, 334, 334, 154, 334, 334, 50, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 258, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 189, 334, 334, 334, 334, 334, 192, - 334, 198, 334, 334, 334, 334, 334, 226, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 335, 335, 335, 228, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 53, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 136, 117, 335, 118, 335, + 335, 335, 116, 335, 335, 335, 335, 335, 335, 335, + 335, 154, 335, 335, 50, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 259, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 190, 335, 335, 335, 335, 335, 193, 335, 199, + 335, 335, 335, 335, 335, 227, 335, 335, 335, 335, - 334, 334, 104, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 129, 334, 334, 334, 334, 334, 334, 60, 334, - 334, 334, 26, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 20, 334, 334, 334, 334, 334, 334, 27, - 36, 334, 164, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 333, 334, 334, 334, - 334, 334, 334, 77, 79, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 278, 334, - 334, 334, 334, 238, 334, 334, 334, 334, 334, 334, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 104, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 129, + 335, 335, 335, 335, 335, 335, 60, 335, 335, 335, + 26, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 20, 335, 335, 335, 335, 335, 335, 27, 36, 335, + 164, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 334, 335, 335, 335, 335, + 335, 335, 77, 79, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 279, 335, 335, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 119, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 153, 334, 46, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 289, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 158, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 218, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 299, 334, 334, 334, 334, 334, 334, + 335, 335, 239, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 119, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 153, 335, 46, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 290, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 158, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 219, 335, 335, 335, 335, 335, 335, 335, - 334, 334, 334, 334, 334, 175, 334, 334, 334, 334, - 334, 334, 334, 334, 113, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 170, 334, 182, 334, 334, 334, - 334, 333, 334, 142, 334, 334, 334, 334, 334, 99, - 334, 334, 334, 334, 210, 334, 334, 334, 334, 334, - 334, 228, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 250, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 135, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 335, 335, 300, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 175, 335, 335, 335, 335, 335, + 335, 335, 335, 113, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 170, 335, 182, 335, 335, 335, 335, + 335, 334, 335, 142, 335, 335, 335, 335, 335, 99, + 335, 335, 335, 335, 211, 335, 335, 335, 335, 335, + 335, 229, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 251, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 135, - 334, 334, 334, 334, 174, 334, 334, 334, 334, 334, - 334, 80, 334, 81, 334, 334, 334, 334, 334, 61, - 292, 334, 334, 334, 334, 334, 88, 183, 334, 201, - 334, 231, 334, 334, 193, 271, 334, 334, 334, 334, - 334, 73, 334, 185, 334, 334, 334, 334, 334, 9, - 334, 334, 334, 103, 334, 334, 334, 334, 263, 334, - 334, 334, 334, 209, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 174, 335, 335, 335, 335, 335, + 335, 80, 335, 81, 335, 335, 335, 335, 335, 61, + 293, 335, 335, 335, 335, 335, 88, 183, 335, 202, + 335, 232, 335, 335, 194, 272, 335, 335, 335, 335, + 335, 73, 335, 185, 335, 335, 335, 335, 335, 9, + 335, 335, 335, 103, 335, 335, 335, 335, 264, 335, + 335, 335, 335, 210, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 333, - 334, 334, 334, 334, 173, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 160, 334, 277, 334, 334, - 334, 334, 334, 249, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 222, 334, 334, 306, 334, - 334, 334, 269, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 293, 334, 184, 334, 334, 334, 334, - 334, 334, 334, 72, 74, 334, 334, 334, 334, 334, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 334, 335, 335, 335, 335, 173, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 160, 335, 278, 335, + 335, 335, 335, 335, 250, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 223, 335, 335, 307, + 335, 335, 335, 270, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 294, 335, 184, 335, 335, 335, - 334, 334, 102, 334, 334, 334, 334, 261, 334, 334, - 334, 334, 273, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 214, 34, 28, 30, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 35, 334, 29, - 31, 334, 334, 334, 334, 334, 334, 334, 334, 98, - 334, 334, 334, 334, 334, 334, 333, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 216, 213, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 71, 334, - 334, 334, 137, 334, 120, 334, 334, 334, 334, 334, + 335, 335, 335, 335, 72, 74, 335, 335, 335, 335, + 335, 335, 335, 102, 335, 335, 335, 335, 262, 335, + 335, 335, 335, 274, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 215, 34, 28, 30, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 35, 335, + 29, 31, 335, 335, 335, 335, 335, 335, 335, 335, + 98, 335, 335, 335, 335, 335, 335, 335, 334, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 217, 214, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 334, 334, 334, 155, 47, 334, 334, 334, 325, 13, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 287, 334, 290, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 12, 334, 334, 22, 334, 334, 334, - 267, 334, 334, 334, 334, 275, 334, 334, 334, 75, - 334, 224, 334, 334, 334, 334, 215, 334, 334, 70, - 334, 334, 334, 334, 23, 334, 43, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 169, - 168, 325, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 217, 211, 334, 229, 334, 334, 279, 334, 334, + 71, 335, 335, 335, 137, 335, 120, 335, 335, 335, + 335, 335, 335, 335, 335, 155, 47, 335, 335, 335, + 326, 13, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 288, 335, 291, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 12, 335, 335, 22, 335, + 335, 335, 268, 335, 335, 335, 335, 276, 335, 335, + 335, 75, 335, 225, 335, 335, 335, 335, 216, 335, + 335, 70, 335, 335, 335, 335, 23, 335, 43, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 169, 168, 335, 326, 335, 335, 335, 335, 335, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 82, 334, 334, 334, 334, 262, 334, 334, 334, 334, - 197, 334, 334, 334, 334, 223, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 297, 298, 166, 334, 334, - 76, 334, 334, 334, 334, 176, 334, 334, 114, 115, - 334, 334, 334, 334, 161, 334, 163, 334, 202, 334, - 334, 334, 334, 167, 334, 334, 232, 334, 334, 334, - 334, 334, 334, 334, 144, 334, 334, 334, 334, 334, + 335, 335, 335, 335, 218, 212, 335, 230, 335, 335, + 280, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 82, 335, 335, 335, 335, 263, 335, + 335, 335, 335, 198, 335, 335, 335, 335, 224, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 298, 299, + 166, 335, 335, 76, 335, 335, 335, 335, 176, 335, + 335, 114, 115, 335, 335, 335, 335, 161, 335, 163, + 335, 203, 335, 335, 335, 335, 167, 335, 335, 335, - 334, 334, 334, 334, 334, 334, 334, 240, 334, 334, - 334, 334, 334, 334, 334, 334, 24, 334, 272, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 86, 203, 334, 334, 260, 334, 291, - 334, 196, 334, 334, 334, 334, 56, 334, 334, 334, - 334, 4, 334, 334, 334, 334, 127, 143, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 235, 37, 38, 334, - 334, 334, 334, 334, 334, 334, 280, 334, 334, 334, - 334, 334, 334, 334, 248, 334, 334, 334, 334, 334, + 233, 335, 335, 335, 335, 335, 335, 335, 144, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 241, 335, 335, 335, 335, 335, 335, 335, 335, + 24, 335, 273, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 86, 204, 335, + 335, 261, 335, 292, 335, 197, 335, 335, 335, 335, + 56, 335, 335, 335, 335, 4, 335, 335, 335, 335, + 127, 143, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 236, 37, 38, 335, 335, 335, 335, 335, 335, - 334, 334, 334, 206, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 85, 334, 57, 266, - 334, 236, 334, 334, 334, 334, 11, 334, 334, 334, - 334, 334, 334, 126, 334, 334, 334, 334, 204, 90, - 334, 40, 334, 334, 334, 334, 334, 334, 334, 334, - 172, 334, 334, 334, 334, 334, 146, 334, 334, 334, - 334, 239, 334, 334, 334, 334, 334, 247, 334, 334, - 334, 334, 140, 334, 334, 334, 121, 122, 334, 334, - 334, 92, 96, 91, 334, 334, 334, 334, 83, 334, - 334, 334, 334, 334, 10, 334, 334, 334, 264, 300, + 335, 281, 335, 335, 335, 335, 335, 335, 335, 249, + 335, 335, 335, 335, 335, 335, 335, 335, 207, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 85, 335, 57, 267, 335, 237, 335, 335, 335, + 335, 11, 335, 335, 335, 335, 335, 335, 126, 335, + 335, 335, 335, 205, 90, 335, 40, 335, 335, 335, + 335, 335, 335, 335, 335, 172, 335, 335, 335, 335, + 335, 335, 146, 335, 335, 335, 335, 240, 335, 335, + 335, 335, 335, 248, 335, 335, 335, 335, 140, 335, + 335, 335, 121, 122, 335, 335, 335, 92, 96, 91, - 334, 334, 334, 334, 305, 39, 334, 334, 334, 334, - 334, 171, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 97, 95, 334, 51, 334, - 334, 84, 288, 334, 334, 334, 334, 334, 334, 334, - 190, 334, 334, 334, 334, 334, 205, 334, 334, 334, - 334, 334, 334, 334, 334, 162, 78, 334, 334, 334, - 334, 334, 281, 334, 334, 334, 334, 334, 334, 334, - 244, 334, 334, 243, 141, 307, 334, 94, 48, 334, - 147, 148, 151, 152, 149, 150, 87, 334, 265, 334, + 335, 335, 335, 335, 83, 335, 335, 335, 335, 335, + 10, 335, 335, 335, 265, 301, 335, 335, 335, 335, + 306, 39, 335, 335, 335, 335, 335, 171, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 97, 95, 335, 51, 335, 335, 84, 289, + 335, 335, 335, 335, 335, 335, 335, 191, 335, 335, + 335, 335, 335, 206, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 162, 78, 335, 335, 335, 335, 335, + 282, 335, 335, 335, 335, 335, 335, 335, 245, 335, - 334, 334, 334, 165, 334, 334, 334, 334, 334, 234, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 178, 177, - 41, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 101, 334, 233, 334, - 257, 285, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 49, 5, 334, 334, 225, 334, - 334, 286, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 245, 25, 334, 334, 334, 334, 334, 334, 334, + 335, 244, 141, 308, 335, 94, 48, 335, 147, 148, + 151, 152, 149, 150, 87, 335, 266, 335, 335, 335, + 335, 165, 335, 335, 335, 335, 187, 335, 235, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 178, 177, 41, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 101, 335, 234, 335, 258, + 286, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 49, 5, 335, 335, 226, 335, 335, + + 287, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 246, 25, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 247, 335, 335, 335, 145, 335, + 335, 335, 335, 335, 335, 335, 335, 179, 335, 186, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 283, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 305, 335, 335, + 254, 335, 335, 335, 335, 335, 284, 335, 335, 335, + 335, 335, 335, 285, 335, 335, 335, 252, 335, 255, + 256, 335, 335, 335, 335, 335, 253, 257, 0 - 334, 334, 334, 334, 334, 246, 334, 334, 334, 145, - 334, 334, 334, 334, 334, 334, 334, 334, 179, 334, - 186, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 282, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 304, 334, - 334, 253, 334, 334, 334, 334, 334, 283, 334, 334, - 334, 334, 334, 334, 284, 334, 334, 334, 251, 334, - 254, 255, 334, 334, 334, 334, 334, 252, 256, 0 } ; static const YY_CHAR yy_ec[256] = @@ -767,17 +770,17 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[3299] = +static const flex_int16_t yy_base[3318] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 96, 118, 124, 136, 3790, 3594, 81, 6407, - 6407, 6407, 129, 52, 130, 63, 131, 152, 70, 140, + 90, 112, 96, 118, 124, 136, 3276, 3137, 81, 6447, + 6447, 6447, 129, 52, 130, 63, 131, 152, 70, 140, 149, 156, 57, 88, 76, 173, 175, 95, 184, 145, - 185, 205, 194, 204, 178, 123, 2749, 6407, 6407, 6407, - 107, 2656, 6407, 6407, 6407, 154, 2610, 2162, 6407, 6407, - 6407, 226, 2040, 6407, 6407, 6407, 163, 1972, 6407, 238, - 6407, 242, 148, 1845, 1693, 6407, 6407, 6407, 246, 1651, - 6407, 6407, 6407, 250, 1521, 254, 219, 0, 258, 0, + 185, 205, 194, 204, 178, 123, 2962, 6447, 6447, 6447, + 107, 2759, 6447, 6447, 6447, 154, 2674, 2563, 6447, 6447, + 6447, 226, 2504, 6447, 6447, 6447, 163, 2331, 6447, 238, + 6447, 242, 148, 1978, 1862, 6447, 6447, 6447, 246, 1688, + 6447, 6447, 6447, 250, 1273, 254, 219, 0, 258, 0, 0, 165, 250, 191, 215, 243, 252, 256, 92, 260, 261, 262, 264, 265, 266, 273, 270, 277, 278, 281, @@ -785,8 +788,8 @@ static const flex_int16_t yy_base[3299] = 313, 314, 307, 323, 317, 312, 328, 326, 330, 334, 337, 340, 342, 343, 344, 346, 349, 354, 348, 356, 364, 357, 361, 359, 372, 376, 365, 360, 377, 380, - 384, 385, 387, 388, 391, 399, 389, 1437, 411, 1203, - 415, 1088, 422, 1027, 689, 426, 406, 430, 434, 0, + 384, 385, 387, 388, 391, 399, 389, 1153, 411, 1093, + 415, 953, 422, 901, 689, 426, 406, 430, 434, 0, 411, 280, 438, 233, 181, 442, 430, 442, 419, 438, 439, 441, 440, 443, 444, 445, 446, 449, 463, 455, 456, 467, 471, 472, 469, 476, 474, 460, 482, 488, @@ -807,701 +810,705 @@ static const flex_int16_t yy_base[3299] = 745, 743, 747, 749, 750, 766, 754, 739, 759, 767, 758, 760, 768, 774, 793, 779, 781, 789, 790, 791, 795, 797, 805, 807, 796, 809, 803, 810, 812, 813, - 822, 818, 6407, 817, 820, 833, 826, 834, 835, 836, + 822, 818, 6447, 817, 820, 833, 826, 834, 835, 836, 841, 842, 823, 849, 847, 848, 852, 874, 856, 858, - 854, 863, 866, 6407, 864, 868, 898, 870, 872, 892, - 888, 884, 887, 889, 899, 896, 909, 902, 907, 911, - 922, 918, 919, 920, 921, 924, 930, 937, 932, 934, + 854, 863, 866, 6447, 864, 868, 898, 870, 872, 892, + 896, 884, 887, 888, 899, 904, 921, 894, 907, 911, + 922, 919, 918, 928, 929, 930, 931, 939, 936, 932, - 859, 935, 944, 942, 943, 946, 950, 952, 953, 955, - 956, 769, 958, 962, 964, 973, 957, 965, 963, 975, - 977, 981, 982, 992, 985, 984, 998, 988, 1010, 1005, - 1006, 1007, 1013, 1009, 1008, 1017, 1019, 1021, 1022, 1023, - 1024, 1035, 1030, 1031, 1033, 1037, 1038, 1039, 1041, 1044, - 1045, 1047, 1049, 1051, 1050, 1056, 1060, 1058, 1066, 1061, - 6407, 1068, 1070, 1072, 1073, 1074, 1075, 6407, 1077, 1071, - 1076, 1078, 1090, 1093, 1104, 1081, 1085, 1100, 1103, 1101, - 1105, 1113, 1109, 1114, 1116, 1112, 1118, 1119, 1121, 1124, - 1122, 1125, 1130, 1131, 1132, 1133, 1152, 6407, 1136, 1139, + 859, 940, 947, 934, 945, 950, 960, 943, 949, 951, + 956, 769, 966, 971, 972, 973, 962, 964, 977, 978, + 980, 983, 984, 988, 990, 995, 1004, 1006, 1013, 1009, + 1010, 1014, 1017, 1019, 1011, 1021, 1012, 1027, 1023, 1029, + 1032, 1040, 1035, 1036, 1037, 1038, 1041, 1044, 1047, 1048, + 1049, 1050, 1052, 1056, 1054, 1063, 1065, 1057, 1071, 1061, + 6447, 1073, 1069, 1076, 1077, 1075, 1079, 6447, 1080, 1081, + 1082, 1087, 1094, 1096, 1103, 1104, 1092, 1107, 1108, 1110, + 1112, 1119, 1114, 1117, 1122, 1121, 1123, 1125, 1129, 1085, + 1126, 1130, 1132, 1133, 1136, 1138, 1156, 6447, 1139, 1143, - 1144, 1138, 1143, 1145, 1164, 1150, 1162, 1161, 1170, 1181, - 1174, 1182, 1176, 1163, 1187, 1184, 1191, 1189, 1193, 1195, - 1194, 1196, 1197, 1198, 1200, 1201, 1206, 6407, 1208, 1211, - 1220, 1221, 1222, 1223, 1224, 1225, 1137, 1226, 1228, 1227, - 1231, 1235, 1245, 1252, 1236, 1253, 1239, 1254, 1249, 1250, - 1256, 1259, 1258, 1260, 1270, 1266, 1272, 1281, 1284, 1283, - 1286, 1293, 1295, 1275, 1288, 1298, 1268, 1290, 1291, 1302, - 1292, 1303, 1304, 1306, 1313, 1308, 1311, 1314, 1316, 1317, - 1320, 1315, 1322, 1321, 1324, 1331, 1328, 1332, 1339, 1334, - 1340, 1338, 1343, 1348, 1349, 1355, 1345, 6407, 1363, 1358, + 1142, 1141, 1152, 1144, 1169, 1165, 1161, 1167, 1154, 1179, + 1171, 1185, 1177, 1181, 1189, 1191, 1192, 1194, 1195, 1196, + 1198, 1197, 1199, 1203, 1202, 1205, 1208, 6447, 1206, 1218, + 1223, 1230, 1213, 1226, 1210, 1228, 1231, 1232, 1233, 1234, + 985, 1235, 1236, 1239, 1249, 1240, 1251, 1248, 1253, 1254, + 1255, 1257, 1258, 1263, 1264, 1275, 1265, 1267, 1277, 1287, + 1284, 1286, 1294, 1296, 1271, 1289, 1297, 1293, 1291, 1299, + 1302, 1303, 1304, 1306, 1309, 1317, 1312, 1314, 1315, 1319, + 1321, 1323, 1318, 1324, 1326, 1328, 1336, 1335, 1331, 1341, + 1337, 1346, 1343, 1334, 1351, 1354, 1357, 1358, 6447, 1366, - 1361, 1362, 1365, 1368, 1372, 1373, 1374, 1375, 1378, 1376, - 1379, 1384, 1385, 1386, 1380, 1393, 1395, 1403, 1398, 1387, - 1411, 1410, 1401, 1400, 1412, 1420, 1416, 1423, 1419, 1415, - 1424, 1431, 1428, 1432, 1433, 1442, 1427, 1434, 1439, 1435, - 1447, 1449, 1451, 1463, 1450, 1459, 1466, 1467, 1458, 1232, - 1461, 1470, 1471, 1473, 1474, 1475, 1476, 1484, 1477, 1479, - 1482, 1485, 1486, 1487, 1490, 1493, 1501, 1498, 1499, 1503, - 1505, 1509, 1507, 1510, 1514, 1515, 1516, 1518, 1517, 1519, - 1536, 1527, 1528, 1529, 1537, 1538, 1530, 1544, 1541, 1545, - 1551, 1547, 1555, 1553, 1556, 1559, 1561, 1564, 1562, 1565, + 1363, 1362, 1364, 1369, 1367, 1375, 1376, 1377, 1378, 1381, + 1379, 1382, 1387, 1388, 1389, 1383, 1391, 1393, 1404, 1401, + 1403, 1412, 1411, 1413, 1415, 1416, 1423, 1419, 1426, 1422, + 1396, 1427, 1435, 1428, 1431, 1437, 1445, 1436, 1438, 1443, + 1440, 1449, 1446, 1451, 1458, 1459, 1461, 1468, 1463, 1465, + 1470, 1473, 1474, 1475, 1477, 1478, 1479, 1480, 1487, 1482, + 1485, 1484, 1488, 1483, 1489, 1497, 1491, 1510, 1502, 1505, + 1507, 1511, 1514, 1513, 1512, 1515, 1519, 1520, 1522, 1521, + 1523, 1525, 1532, 1534, 1536, 1541, 1540, 1542, 1544, 1547, + 1543, 1552, 1553, 1555, 1549, 1562, 1563, 1564, 1565, 1568, - 1566, 1572, 1567, 1577, 1578, 1580, 1579, 1583, 1587, 1585, - 1590, 1589, 6407, 1591, 1603, 1592, 1601, 1599, 1602, 1604, - 1613, 1606, 1608, 1616, 1617, 1609, 1643, 6407, 1618, 6407, - 6407, 315, 6407, 6407, 1619, 1620, 6407, 1624, 1623, 1621, - 1631, 1638, 1640, 1625, 1646, 1644, 1647, 1656, 1668, 1649, - 1653, 1659, 1657, 1660, 1678, 1666, 1673, 1676, 1679, 1685, - 1695, 1683, 1696, 1693, 1700, 1701, 1706, 1707, 1709, 1713, - 1715, 1716, 1699, 1719, 1720, 1703, 1721, 1724, 1726, 1730, - 1731, 1727, 1734, 1733, 1742, 1738, 1748, 1757, 6407, 1749, - 1758, 1759, 1760, 1767, 1763, 1762, 1764, 1770, 1774, 1771, + 1576, 1566, 1579, 1573, 1575, 1581, 1583, 1585, 1584, 1587, + 1591, 1594, 1596, 1588, 6447, 1595, 1608, 1603, 1606, 1604, + 1607, 1609, 1617, 1612, 1615, 1613, 1618, 1619, 1644, 6447, + 1621, 6447, 6447, 315, 6447, 6447, 1624, 1628, 6447, 1629, + 1638, 1625, 1626, 1650, 1654, 1637, 1640, 1645, 1642, 1667, + 1668, 1652, 1660, 1665, 1673, 1671, 1674, 1679, 1682, 1676, + 1685, 1689, 1699, 1690, 1702, 1696, 1700, 1706, 1704, 1712, + 1708, 1717, 1718, 1714, 1719, 1721, 1722, 1724, 1723, 1727, + 1729, 1732, 1733, 1730, 1735, 1736, 1745, 1749, 1741, 1756, + 6447, 1752, 1759, 1766, 1762, 1769, 1761, 1765, 1768, 1773, - 1775, 1776, 1777, 1778, 1783, 1780, 1786, 1788, 1791, 1790, - 6407, 1792, 1795, 1796, 1798, 1799, 1802, 1806, 1800, 1807, - 1810, 1737, 1818, 1815, 1813, 1821, 1822, 1823, 1824, 6407, - 1834, 1826, 1829, 1833, 1830, 1837, 1839, 1841, 1842, 1843, - 1844, 1735, 1846, 1849, 1854, 1856, 1858, 1853, 1855, 1860, - 1861, 1871, 1874, 1877, 1878, 1879, 1880, 1881, 1882, 1883, - 1885, 1890, 1892, 1889, 1900, 1891, 1912, 1913, 1910, 1896, - 1908, 1893, 1895, 1917, 1925, 1921, 1909, 1922, 1929, 1926, - 1931, 1932, 1933, 1940, 1936, 1937, 1942, 1944, 1945, 1947, - 1948, 6407, 1949, 1954, 6407, 1956, 1955, 1953, 1976, 1957, + 1775, 1770, 1777, 1779, 1780, 1781, 1783, 1785, 1788, 1790, + 1792, 1791, 6447, 1793, 1797, 1798, 1799, 1803, 1805, 1809, + 1737, 1801, 1807, 1811, 1819, 1820, 1815, 1817, 1823, 1825, + 1828, 6447, 1827, 1834, 1835, 1837, 1838, 1840, 1841, 1843, + 1844, 1845, 1846, 1847, 1848, 1852, 1863, 1853, 1855, 1858, + 1868, 1870, 1872, 1873, 1875, 1879, 1880, 1881, 1883, 1884, + 1885, 1887, 1888, 1896, 1898, 1895, 1900, 1893, 1903, 1911, + 1910, 1902, 1912, 1915, 1916, 1917, 1925, 1923, 1922, 1928, + 1933, 1929, 1931, 1934, 1938, 1935, 1945, 1942, 1946, 1947, + 1936, 1953, 1954, 1955, 6447, 1956, 1961, 6447, 1963, 1962, - 1959, 1962, 1961, 1964, 1978, 1971, 1970, 1983, 1980, 1996, - 1991, 1993, 1998, 2001, 2003, 1999, 2004, 2005, 2006, 2010, - 2012, 2017, 2015, 2028, 2031, 2030, 2037, 2039, 2013, 2026, - 2034, 2053, 2036, 2038, 2041, 2044, 2046, 2057, 2042, 2049, - 2051, 2058, 2060, 2071, 2064, 2066, 2068, 2074, 2075, 2081, - 2083, 2082, 6407, 2091, 2089, 2084, 2094, 2088, 2104, 2095, - 2096, 6407, 2097, 2105, 2107, 2116, 2108, 2109, 2113, 2111, - 2112, 2119, 2120, 2121, 2124, 2129, 2125, 2140, 6407, 2122, - 6407, 2127, 2136, 2143, 2137, 2145, 2144, 2147, 2148, 6407, - 6407, 2149, 2146, 2157, 2166, 2161, 6407, 2164, 2171, 6407, + 1960, 1983, 1964, 1966, 1969, 1968, 1971, 1985, 1972, 1977, + 1990, 1979, 2003, 1998, 2000, 2001, 2006, 2008, 2010, 2011, + 2012, 2009, 2015, 2018, 2019, 2028, 2037, 2038, 2035, 2041, + 2045, 2020, 2024, 2040, 2059, 2044, 2046, 2047, 2050, 2048, + 2052, 2055, 2054, 2053, 2064, 2066, 2075, 2071, 2074, 2070, + 2077, 2080, 2090, 2087, 2081, 6447, 2100, 2092, 2084, 2097, + 2096, 2105, 2106, 2104, 6447, 2107, 2108, 2110, 2118, 2113, + 2114, 2115, 2119, 2121, 2124, 2125, 2127, 2129, 2128, 2130, + 2146, 6447, 2132, 6447, 2131, 2141, 2143, 2142, 2149, 2150, + 2152, 2153, 6447, 6447, 2154, 2151, 2163, 2172, 2155, 6447, - 2168, 2173, 2167, 2175, 2177, 2178, 2179, 2182, 2189, 2184, - 2191, 2186, 2194, 2188, 6407, 2187, 2198, 2200, 2203, 2206, - 2207, 2209, 2211, 6407, 2210, 2213, 2215, 2224, 2226, 2227, - 2217, 2228, 2232, 2220, 2230, 2234, 2237, 2239, 2247, 2248, - 2245, 2246, 2253, 2261, 6407, 2244, 2243, 2265, 2264, 2257, - 2266, 2267, 2260, 2268, 2270, 2271, 2272, 2277, 2279, 2280, - 2288, 2290, 2281, 2289, 2286, 2292, 2293, 2297, 2302, 2300, - 2301, 2303, 2304, 6407, 2305, 2313, 2306, 171, 2314, 2308, - 2315, 2316, 2325, 2320, 2317, 2336, 2338, 2331, 2335, 2339, - 2343, 2342, 2344, 2345, 2346, 2333, 2353, 2349, 2351, 6407, + 2169, 2176, 6447, 2173, 2178, 2179, 2171, 2180, 2182, 2184, + 2183, 2192, 2187, 2194, 2189, 2190, 2199, 6447, 2202, 2201, + 2203, 2206, 2209, 2210, 2212, 2214, 6447, 2218, 2216, 2221, + 2229, 2220, 2228, 2230, 2231, 2235, 2233, 2238, 2239, 2240, + 2241, 2250, 2252, 2242, 2253, 2255, 2262, 6447, 2245, 2249, + 2267, 2265, 2272, 2264, 2266, 2268, 2274, 2276, 2277, 2278, + 2281, 2282, 2283, 2290, 2291, 2288, 2287, 2296, 2297, 2298, + 2301, 2304, 2305, 2306, 2307, 2308, 6447, 2309, 2311, 2314, + 2317, 171, 2318, 2320, 2322, 2324, 2321, 2339, 2325, 2342, + 2346, 2327, 2344, 2348, 2347, 2341, 2351, 2353, 2354, 2356, - 2355, 2357, 2359, 2363, 2362, 2365, 2367, 6407, 2369, 2374, - 2379, 2388, 2382, 2366, 2390, 2376, 2391, 2392, 2394, 2396, - 2398, 2397, 2400, 2405, 2403, 6407, 2407, 2408, 2412, 2404, - 2418, 2421, 2411, 2419, 2426, 2427, 2428, 2429, 2430, 2431, - 2432, 2433, 2435, 2436, 2445, 2438, 2439, 2447, 2448, 2449, - 2450, 2452, 2455, 2457, 2461, 6407, 2470, 2467, 2465, 2466, - 2469, 2475, 2473, 2476, 2493, 2477, 2483, 2485, 2494, 2499, - 2490, 2501, 2511, 2513, 2515, 2516, 2523, 2519, 2521, 2527, - 2509, 2531, 2533, 2486, 2484, 2534, 2529, 2535, 2537, 2539, - 2547, 2548, 2545, 2552, 2544, 2554, 2568, 2559, 6407, 2563, + 2357, 2359, 2360, 6447, 2362, 2363, 2366, 2367, 2370, 2368, + 2373, 6447, 2381, 2371, 2386, 2394, 2383, 2395, 2396, 2397, + 2380, 2401, 2400, 2402, 2403, 2406, 2404, 2408, 2407, 6447, + 2413, 2417, 2420, 2414, 2423, 2427, 2424, 2429, 2430, 2432, + 2435, 2437, 2436, 2438, 2439, 2440, 2441, 2442, 2449, 2446, + 2453, 2454, 2455, 2456, 2457, 2460, 2462, 2465, 2468, 6447, + 2477, 2467, 2472, 2476, 2474, 2481, 2478, 2489, 2491, 2492, + 2493, 2495, 2498, 2512, 2496, 2505, 2506, 2502, 2510, 2518, + 2522, 2519, 2523, 2529, 2526, 2532, 2534, 2536, 2540, 2541, + 2542, 2538, 2545, 2546, 2554, 2555, 2552, 2561, 2560, 2566, - 2546, 2569, 2571, 2578, 2573, 2574, 2576, 2575, 2579, 2583, - 2584, 2585, 2592, 2590, 2593, 2594, 2595, 2597, 2598, 2604, - 2605, 2609, 2613, 2606, 2616, 2617, 6407, 2620, 2624, 2618, - 2625, 2627, 2628, 2632, 2635, 2633, 2639, 2640, 2642, 2643, - 2644, 2645, 2646, 2649, 2650, 2653, 6407, 2654, 2655, 2659, - 2662, 2667, 2666, 2668, 2675, 2677, 2679, 2669, 2682, 2683, - 2681, 6407, 2691, 2692, 2693, 2695, 2696, 2697, 2699, 2701, - 2702, 6407, 2703, 2704, 2706, 2713, 2714, 2709, 6407, 2717, - 2712, 2719, 2720, 2721, 2723, 2725, 2727, 2730, 2731, 2734, - 2736, 2745, 2735, 2742, 6407, 2738, 2754, 2746, 2751, 2755, + 2573, 2568, 6447, 2577, 2572, 2575, 2544, 2589, 2582, 2563, + 2590, 2584, 2592, 2586, 2594, 2596, 2603, 2599, 2604, 2602, + 2606, 2607, 2608, 2609, 2614, 2615, 2619, 2622, 2624, 2626, + 6447, 2629, 2625, 2631, 2633, 2635, 2636, 2641, 2643, 2646, + 2638, 2645, 2648, 2649, 2652, 2653, 2657, 2654, 2658, 2661, + 6447, 2664, 2665, 2670, 2668, 2671, 2677, 2678, 2681, 2687, + 2684, 2672, 2691, 2692, 2693, 6447, 2700, 2701, 2698, 2702, + 2704, 2705, 2707, 2709, 2710, 6447, 2711, 2712, 2714, 2715, + 2722, 2723, 2719, 6447, 2726, 2721, 2728, 2731, 2732, 2733, + 2736, 2739, 2737, 2742, 2743, 2745, 2753, 2746, 2755, 6447, - 2759, 2761, 2762, 2766, 2769, 2765, 2768, 6407, 2781, 2779, - 2784, 2791, 2770, 2772, 2786, 2787, 2788, 2794, 2796, 2797, - 2799, 6407, 2800, 2803, 2805, 2806, 2809, 2808, 2801, 2817, - 2810, 2815, 2818, 2824, 2825, 2827, 2828, 2829, 2830, 2831, - 2838, 2841, 2837, 2844, 2843, 2850, 2854, 2861, 2845, 2857, - 2858, 2860, 2862, 2865, 2872, 2873, 2874, 2877, 2879, 6407, - 2882, 2871, 2884, 2869, 2885, 2886, 2888, 2889, 2890, 2892, - 2894, 2899, 2895, 2898, 2907, 2911, 2908, 2913, 2915, 2916, - 2918, 2919, 2920, 2921, 2922, 2929, 2925, 2926, 2937, 2932, - 2936, 2944, 2943, 2945, 2946, 2947, 2949, 2933, 2953, 2955, + 2749, 2764, 2756, 2762, 2765, 2766, 2770, 2772, 2776, 2777, + 2789, 2778, 6447, 2788, 2775, 2783, 2799, 2795, 2796, 2797, + 2800, 2801, 2802, 2803, 2804, 2807, 6447, 2810, 2808, 2811, + 2812, 2817, 2816, 2818, 2825, 2828, 2830, 2831, 2832, 2833, + 2835, 2836, 2839, 2838, 2842, 2844, 2850, 2852, 2855, 2856, + 2857, 2865, 2868, 2861, 2870, 2866, 2863, 2871, 2873, 2880, + 2883, 2887, 2884, 2888, 6447, 2891, 2882, 2893, 2894, 2895, + 2896, 2898, 2897, 2899, 2901, 2903, 2909, 2905, 2906, 2923, + 2930, 2908, 2915, 2918, 2920, 2926, 2927, 2931, 2933, 2934, + 2942, 2938, 2940, 2947, 2944, 2945, 2954, 2946, 2949, 2955, - 2957, 2958, 2972, 2974, 2975, 2977, 2948, 2950, 2969, 2983, - 6407, 2976, 2979, 2978, 2967, 2988, 2991, 2992, 3001, 2996, - 2986, 2998, 3005, 3006, 3000, 3007, 3008, 3018, 3014, 6407, - 3015, 6407, 3016, 3017, 3023, 3027, 3019, 6407, 3030, 6407, - 3031, 3036, 3026, 3032, 6407, 3038, 3040, 3043, 3044, 3046, - 3047, 3050, 3049, 3051, 3055, 3053, 3057, 3058, 3059, 3063, - 3066, 3067, 3071, 3072, 3078, 3070, 3079, 3081, 3083, 3086, - 3088, 3089, 3090, 6407, 3094, 3091, 3096, 3098, 3100, 3101, - 3102, 3103, 3106, 3109, 3110, 3117, 3113, 3118, 3121, 3124, - 3128, 3131, 3132, 3140, 6407, 3135, 3137, 3138, 3139, 6407, + 2956, 2957, 2958, 2961, 2959, 2964, 2969, 2973, 2978, 2980, + 2982, 2970, 2984, 2987, 2988, 6447, 2991, 2992, 2989, 2995, + 2996, 2999, 3001, 3008, 3003, 3010, 3011, 3013, 3020, 3005, + 3014, 3019, 3027, 3029, 6447, 3022, 6447, 3026, 3030, 3033, + 3037, 3036, 6447, 3042, 6447, 3043, 3045, 3038, 3048, 6447, + 3049, 3050, 3051, 3057, 3053, 3055, 3059, 3061, 3063, 3071, + 3065, 3062, 3067, 3069, 3083, 3073, 3075, 3081, 3085, 3089, + 3091, 3079, 3096, 3090, 3092, 3098, 3101, 3104, 6447, 3106, + 3108, 3107, 3110, 3111, 3113, 3115, 3114, 3116, 3119, 3118, + 3122, 3127, 3131, 3130, 3134, 3141, 3144, 3151, 3136, 3152, - 3142, 3143, 3150, 3153, 3144, 3146, 3148, 3156, 3160, 3155, - 3162, 3165, 3166, 3176, 3175, 3168, 6407, 3177, 3178, 3179, - 3188, 3182, 3195, 3196, 3192, 3193, 3198, 3206, 3202, 3201, - 3203, 3205, 3208, 3209, 3216, 3217, 3213, 3225, 3215, 3222, - 3230, 3226, 3223, 3220, 3232, 3233, 3234, 3235, 3236, 3237, - 3239, 3242, 3245, 6407, 3246, 3251, 3253, 3256, 3255, 3257, - 3259, 3260, 3261, 6407, 3268, 3265, 3271, 3269, 3277, 3272, - 3270, 3280, 3283, 3286, 3288, 3289, 3290, 3291, 6407, 3293, - 6407, 3292, 3294, 3306, 3310, 3300, 3298, 3311, 3319, 3315, - 3320, 3321, 3322, 3323, 3324, 3325, 3329, 3332, 3336, 3337, + 6447, 3147, 3158, 3148, 3153, 6447, 3150, 3160, 3162, 3164, + 3166, 3168, 3170, 3169, 3173, 3171, 3175, 3176, 3188, 3183, + 3190, 3178, 6447, 3192, 3193, 3179, 3199, 3208, 3209, 3211, + 3210, 3212, 3216, 3220, 3218, 3219, 3182, 3221, 3222, 3224, + 3231, 3234, 3230, 3239, 3226, 3236, 3238, 3243, 3229, 3244, + 3245, 3246, 3252, 3253, 3250, 3251, 3254, 3255, 3256, 6447, + 3259, 3261, 3269, 3278, 3263, 3270, 3274, 3277, 3279, 6447, + 3281, 3284, 3285, 3287, 3288, 3292, 3295, 3293, 3296, 3297, + 3298, 3301, 3303, 3302, 6447, 3305, 6447, 3310, 3316, 3322, + 3324, 3326, 3311, 3327, 3332, 3328, 3333, 3334, 3337, 3336, - 3347, 3330, 3338, 3335, 3343, 3333, 3352, 6407, 6407, 3354, - 3355, 3358, 3356, 3360, 3361, 3362, 3371, 3365, 3367, 3368, - 3374, 3382, 6407, 3384, 3375, 3378, 3386, 3393, 3388, 3395, - 3402, 3399, 3403, 3401, 6407, 3405, 3408, 3415, 3410, 3411, - 3418, 6407, 3413, 6407, 3416, 3417, 3419, 3424, 3426, 3428, - 3429, 3430, 3432, 3440, 3448, 3437, 3446, 3438, 3447, 3449, - 3451, 3460, 3452, 3455, 3457, 6407, 3462, 3456, 3459, 3467, - 3473, 3477, 3470, 3466, 6407, 3469, 3480, 3484, 3485, 3486, - 3487, 3491, 3488, 3492, 3493, 3496, 6407, 3494, 3497, 3507, - 3500, 3503, 3509, 3511, 3516, 3523, 6407, 3520, 3518, 3530, + 3340, 3344, 3343, 3345, 3349, 3365, 3347, 3348, 3350, 3351, + 3360, 3361, 3364, 6447, 6447, 3366, 3367, 3370, 3372, 3373, + 3375, 3378, 3383, 3381, 3384, 3387, 3389, 3400, 6447, 3390, + 3396, 3397, 3398, 3412, 3405, 3410, 3420, 3413, 3421, 3416, + 6447, 3417, 3424, 3431, 3426, 3427, 3434, 6447, 3432, 6447, + 3429, 3433, 3435, 3441, 3442, 3444, 3445, 3446, 3454, 3462, + 3464, 3461, 3466, 3447, 3451, 3449, 3463, 3477, 3470, 3472, + 3473, 6447, 3479, 3480, 3481, 3482, 3484, 3490, 3493, 3483, + 6447, 3494, 3486, 3496, 3505, 3497, 3501, 3499, 3508, 3509, + 3510, 3512, 3514, 6447, 3515, 3519, 3527, 3520, 3522, 3525, - 3529, 3514, 3531, 3532, 3534, 3536, 3537, 3538, 3539, 3540, - 3541, 3547, 3542, 3543, 3551, 3546, 3562, 3563, 3549, 3553, - 3571, 3561, 6407, 3569, 3570, 3575, 3572, 3576, 3579, 3580, - 3584, 3586, 3577, 3599, 3600, 3587, 3589, 3603, 3605, 3612, - 3604, 6407, 3617, 3596, 3619, 3615, 3618, 3623, 3616, 3620, - 3627, 3624, 3628, 3629, 3630, 3632, 3641, 3633, 3638, 3642, - 3643, 3650, 3648, 6407, 3657, 3653, 3654, 3659, 3655, 3662, - 3670, 3665, 3671, 3672, 3676, 3673, 3678, 3680, 3681, 3682, - 3685, 3686, 6407, 6407, 3688, 3689, 3692, 6407, 3695, 3690, - 3702, 3698, 3694, 3705, 3709, 3708, 3707, 3712, 3710, 3718, + 3529, 3530, 3536, 6447, 3537, 3538, 3549, 3545, 3541, 3546, + 3551, 3550, 3552, 3555, 3557, 3556, 3558, 3559, 3560, 3562, + 3564, 3567, 3565, 3566, 3579, 3580, 3582, 3592, 3583, 6447, + 3587, 3588, 3591, 3590, 3594, 3597, 3598, 3601, 3603, 3605, + 3615, 3616, 3609, 3612, 3619, 3620, 3627, 3623, 6447, 3628, + 3629, 3637, 3632, 3635, 3640, 3634, 3636, 3643, 3644, 3645, + 3646, 3648, 3650, 3658, 3656, 3653, 3660, 3661, 3671, 3662, + 6447, 3680, 3663, 3672, 3683, 3684, 3676, 3692, 3688, 3689, + 3690, 3694, 3696, 3698, 3700, 3701, 3702, 3705, 3706, 6447, + 6447, 3708, 3710, 3712, 6447, 3715, 3713, 3725, 3717, 3718, - 6407, 3719, 3727, 3722, 3723, 3731, 3732, 3729, 3735, 3737, - 3738, 3741, 3739, 3744, 3743, 3745, 3748, 3756, 3759, 3752, - 3754, 3762, 6407, 3755, 3757, 3763, 3765, 3767, 3770, 6407, - 3773, 3774, 3777, 3780, 3788, 3790, 3784, 3797, 3781, 3791, - 3793, 3798, 3799, 3801, 3810, 3807, 3806, 3809, 3813, 3816, - 6407, 3815, 3817, 3818, 3826, 6407, 3830, 3837, 3840, 3841, - 3823, 3827, 3839, 3848, 6407, 3843, 3846, 3844, 3845, 3853, - 3852, 3860, 3857, 3859, 6407, 3861, 3858, 3863, 6407, 3864, - 3865, 3876, 3879, 3869, 3886, 3881, 3883, 3884, 3882, 6407, - 3892, 6407, 3893, 3894, 3898, 6407, 3895, 3900, 3903, 3902, + 3714, 3730, 3727, 3728, 3731, 3733, 3740, 6447, 3738, 3747, + 3742, 3744, 3752, 3755, 3758, 3745, 3760, 3748, 3753, 3761, + 3664, 3763, 3764, 3765, 3776, 3777, 3767, 3774, 3775, 6447, + 3778, 3780, 3783, 3785, 3782, 3791, 6447, 3786, 3792, 3793, + 3794, 3808, 3800, 3809, 3811, 3797, 3812, 3813, 3814, 3815, + 3816, 3823, 3822, 3824, 3828, 3830, 3834, 6447, 3833, 3839, + 3821, 3844, 6447, 3846, 3853, 3854, 3857, 3840, 3856, 3858, + 3865, 6447, 3860, 3863, 3862, 3864, 3875, 3849, 3879, 3868, + 3876, 3878, 6447, 3880, 3877, 3883, 6447, 3882, 3893, 3898, + 3900, 3884, 3901, 3902, 3886, 3903, 3905, 6447, 3906, 6447, - 3904, 3905, 3909, 3915, 3917, 3911, 3919, 3920, 3921, 3922, - 3924, 3933, 3923, 3925, 3930, 3932, 6407, 3935, 3937, 3942, - 3943, 3949, 3945, 3952, 3939, 3953, 3872, 6407, 6407, 3957, - 6407, 3959, 3961, 3963, 6407, 3965, 3967, 3972, 3968, 3969, - 3971, 3975, 3976, 6407, 3983, 3986, 6407, 3978, 3988, 3995, - 3990, 3991, 3992, 3998, 3993, 3996, 4003, 4004, 4005, 4006, - 4000, 4007, 4008, 6407, 4009, 4010, 4011, 4025, 4019, 4021, - 4028, 4030, 4032, 6407, 4034, 4036, 4040, 4042, 4043, 6407, - 4044, 6407, 4045, 4046, 4048, 4049, 4054, 6407, 4057, 4056, - 4062, 4064, 4066, 4065, 4069, 4072, 4068, 4075, 4082, 4078, + 3907, 3912, 3915, 6447, 3913, 3917, 3918, 3920, 3921, 3922, + 3926, 3932, 3934, 3928, 3936, 3937, 3938, 3939, 3941, 3950, + 3940, 3942, 3947, 3949, 6447, 3952, 3954, 3959, 3960, 3966, + 3962, 3969, 3956, 3970, 3973, 6447, 6447, 3979, 6447, 3980, + 3974, 3976, 6447, 3982, 3984, 3991, 3987, 3988, 3993, 4000, + 3994, 6447, 4006, 4007, 6447, 3996, 4003, 4016, 4011, 4001, + 4012, 4013, 4015, 4017, 4021, 4022, 4020, 4025, 4026, 4027, + 4030, 6447, 4028, 4031, 4029, 4040, 4043, 4044, 4047, 4046, + 4045, 6447, 4053, 4055, 4056, 4062, 4059, 6447, 4060, 6447, + 4063, 4068, 4070, 4071, 4072, 6447, 4076, 4075, 4080, 4083, - 4079, 4080, 6407, 4081, 4084, 4094, 4096, 4087, 4085, 4107, - 4099, 4089, 4103, 4106, 4109, 4111, 4112, 4115, 4110, 4120, - 4117, 6407, 4118, 4124, 4128, 4137, 4129, 4132, 6407, 4133, - 4134, 4141, 6407, 4140, 4142, 4143, 4148, 4150, 4151, 4154, - 4157, 4158, 6407, 4155, 4160, 4156, 4159, 4161, 4165, 6407, - 6407, 4175, 6407, 4177, 4163, 4178, 4179, 4180, 4182, 4185, - 4187, 4189, 4190, 4195, 4198, 4200, 4192, 4207, 4208, 4210, - 4212, 4211, 4216, 6407, 6407, 4218, 4220, 4222, 4224, 4225, - 4227, 4229, 4234, 4232, 4240, 4243, 4233, 4250, 6407, 4245, - 4248, 4251, 4252, 6407, 4253, 4254, 4256, 4258, 4257, 4263, + 4085, 4084, 4087, 4088, 4094, 4095, 4102, 4098, 4097, 4099, + 6447, 4100, 4104, 4106, 4113, 4101, 4108, 4117, 4120, 4121, + 4122, 4126, 4130, 4124, 4131, 4137, 4135, 4141, 4127, 6447, + 4139, 4147, 4133, 4156, 4143, 4153, 6447, 4157, 4158, 4159, + 6447, 4160, 4161, 4162, 4167, 4168, 4170, 4174, 4175, 4172, + 6447, 4179, 4180, 4176, 4177, 4178, 4184, 6447, 6447, 4194, + 6447, 4195, 4185, 4197, 4198, 4199, 4202, 4204, 4205, 4207, + 4209, 4215, 4217, 4210, 4218, 4220, 4227, 4231, 4235, 4230, + 4232, 4234, 6447, 6447, 4239, 4243, 4236, 4247, 4248, 4241, + 4250, 4257, 4255, 4261, 4264, 4265, 4272, 6447, 4252, 4259, - 4260, 4264, 4261, 4265, 4270, 4267, 4274, 4275, 4277, 4283, - 4282, 4285, 4286, 4288, 4292, 4296, 6407, 4297, 4293, 4298, - 4299, 4300, 4302, 4306, 4307, 4308, 6407, 4311, 6407, 4315, - 4309, 4314, 4316, 4331, 4332, 4333, 4325, 4334, 4339, 4340, - 4343, 4344, 4350, 4345, 4351, 4353, 4347, 4358, 4362, 4363, - 6407, 4365, 4335, 4366, 4367, 4372, 4374, 4369, 4376, 4377, - 4381, 4378, 4382, 4384, 4390, 4385, 4391, 4392, 4394, 6407, - 4396, 4398, 4402, 4404, 4405, 4408, 4407, 4411, 4416, 4409, - 4417, 4418, 4420, 6407, 4422, 4424, 4425, 4426, 4434, 4429, - 4431, 4435, 4438, 6407, 4444, 4439, 4445, 4441, 4446, 4449, + 4267, 4273, 6447, 4274, 4275, 4277, 4276, 4278, 4284, 4281, + 4285, 4282, 4286, 4289, 4290, 4292, 4296, 4295, 4303, 4304, + 4298, 4306, 4309, 4312, 4314, 6447, 4315, 4318, 4319, 4320, + 4324, 4325, 4326, 4327, 4328, 6447, 4331, 6447, 4329, 4336, + 4334, 4333, 4352, 4353, 4354, 4332, 4341, 4356, 4359, 4362, + 4363, 4367, 4364, 4368, 4370, 4373, 4375, 4377, 4378, 6447, + 4384, 4372, 4380, 4386, 4388, 4391, 4393, 4395, 4396, 4402, + 4403, 4399, 4406, 4408, 4397, 4410, 4409, 4413, 6447, 4415, + 4417, 4421, 4425, 4426, 4422, 4427, 4433, 4436, 4429, 4431, + 4437, 4439, 6447, 4441, 4442, 4443, 4447, 4453, 4445, 4450, - 4451, 4456, 4454, 4458, 4462, 6407, 4461, 4466, 4469, 4468, - 4470, 4475, 4476, 4472, 6407, 4479, 4485, 4486, 4494, 4478, - 4495, 4487, 4497, 4491, 4500, 4503, 4505, 4508, 4509, 4510, - 4507, 4526, 4528, 4511, 6407, 4504, 6407, 4523, 4529, 4531, - 4533, 4535, 4527, 6407, 4536, 4537, 4539, 4541, 4545, 6407, - 4543, 4544, 4546, 4550, 6407, 4548, 4558, 4557, 4559, 4565, - 4566, 6407, 4569, 4570, 4574, 4578, 4581, 4576, 4583, 4580, - 4586, 4584, 4588, 4589, 4590, 4598, 4593, 4595, 6407, 4597, - 4603, 4605, 4609, 4616, 4611, 4599, 4613, 4622, 4612, 6407, - 4618, 4624, 4626, 4627, 4628, 4629, 4630, 4637, 4633, 4634, + 4454, 4457, 6447, 4460, 4462, 4463, 4466, 4467, 4468, 4471, + 4473, 4475, 4476, 4487, 6447, 4477, 4483, 4491, 4479, 4481, + 4492, 4493, 4495, 6447, 4501, 4503, 4499, 4515, 4502, 4516, + 4512, 4519, 4500, 4518, 4526, 4511, 4527, 4528, 4530, 4532, + 4540, 4541, 4538, 6447, 4533, 6447, 4543, 4544, 4554, 4549, + 4547, 4555, 4551, 6447, 4559, 4561, 4563, 4557, 4565, 6447, + 4564, 4566, 4568, 4567, 6447, 4578, 4580, 4569, 4584, 4587, + 4590, 6447, 4593, 4594, 4595, 4604, 4605, 4601, 4603, 4606, + 4607, 4609, 4611, 4612, 4613, 4622, 4615, 4618, 6447, 4624, + 4627, 4633, 4634, 4641, 4617, 4636, 4638, 4644, 4637, 6447, - 4636, 4638, 4640, 4642, 6407, 4647, 4648, 4651, 4660, 4650, - 4665, 6407, 4653, 6407, 4661, 4668, 4670, 4666, 4671, 6407, - 6407, 4674, 4682, 4677, 4680, 4681, 6407, 6407, 4684, 6407, - 4685, 6407, 4686, 4688, 6407, 6407, 4691, 4687, 4693, 4694, - 4702, 6407, 4706, 6407, 4714, 4709, 4695, 4697, 4707, 6407, - 4715, 4716, 4718, 6407, 4720, 4727, 4722, 4723, 6407, 4725, - 4730, 4726, 4731, 6407, 4735, 4742, 4732, 4739, 4743, 4746, - 4748, 4744, 4747, 4753, 4754, 4755, 4762, 4764, 4769, 4771, - 4773, 4766, 4756, 4776, 4779, 4782, 4777, 4784, 4785, 4786, - 4788, 4790, 4792, 4794, 4795, 4798, 4797, 4799, 4800, 4803, + 4646, 4645, 4647, 4648, 4649, 4652, 4654, 4661, 4657, 4570, + 4658, 4660, 4664, 4666, 6447, 4668, 4670, 4671, 4681, 4674, + 4683, 6447, 4684, 6447, 4678, 4688, 4691, 4673, 4695, 6447, + 6447, 4697, 4704, 4690, 4706, 4700, 6447, 6447, 4708, 6447, + 4703, 6447, 4710, 4711, 6447, 6447, 4712, 4713, 4714, 4715, + 4723, 6447, 4726, 6447, 4734, 4729, 4716, 4718, 4731, 6447, + 4733, 4735, 4738, 6447, 4741, 4748, 4743, 4744, 6447, 4746, + 4751, 4749, 4753, 6447, 4755, 4758, 4760, 4762, 4763, 4764, + 4773, 4767, 4770, 4766, 4774, 4776, 4777, 4786, 4788, 4790, + 4792, 4783, 4793, 4794, 4797, 4800, 4802, 4803, 4804, 4805, - 4801, 4807, 4813, 4814, 4815, 4816, 4817, 4818, 4819, 4822, - 4824, 4826, 4828, 4829, 6407, 4831, 4832, 4837, 4845, 4838, - 4846, 4850, 4840, 4857, 4858, 6407, 4861, 6407, 4863, 4847, - 4866, 4853, 4867, 6407, 4868, 4869, 4870, 4871, 4874, 4873, - 4876, 4875, 4879, 4880, 4884, 6407, 4890, 4881, 6407, 4886, - 4894, 4900, 6407, 4901, 4905, 4902, 4906, 4907, 4911, 4909, - 4912, 4913, 4915, 4917, 4919, 4921, 4922, 4925, 4933, 4936, - 4943, 4928, 4923, 4939, 4942, 4944, 4945, 4947, 4948, 4950, - 4955, 4957, 4961, 6407, 4951, 6407, 4962, 4963, 4964, 4966, - 4968, 4969, 4972, 6407, 6407, 4974, 4975, 4980, 4977, 4981, + 4807, 4808, 4810, 4813, 4817, 4818, 4816, 4819, 4820, 4829, + 4822, 4825, 4833, 4826, 4836, 4837, 4838, 4839, 4841, 4843, + 4844, 4846, 4849, 4852, 4853, 6447, 4848, 4850, 4854, 4861, + 4859, 4869, 4870, 4879, 4881, 4882, 6447, 4884, 6447, 4886, + 4871, 4888, 4876, 4890, 6447, 4891, 4892, 4893, 4894, 4897, + 4896, 4898, 4901, 4902, 4904, 4907, 6447, 4913, 4903, 6447, + 4909, 4917, 4924, 6447, 4919, 4930, 4925, 4927, 4932, 4933, + 4934, 4935, 4938, 4936, 4941, 4947, 4937, 4942, 4944, 4959, + 4962, 4969, 4949, 4951, 4956, 4964, 4965, 4968, 4971, 4972, + 4974, 4980, 4981, 4985, 6447, 4973, 6447, 4986, 4982, 4987, - 4984, 4993, 6407, 4985, 4998, 4988, 4990, 6407, 4995, 4996, - 5001, 5005, 6407, 5006, 5008, 5007, 5013, 5009, 5015, 5019, - 5020, 5022, 5023, 5026, 6407, 6407, 6407, 6407, 5030, 5027, - 5033, 5034, 5037, 5036, 5039, 5041, 5042, 6407, 5044, 6407, - 6407, 5046, 5053, 5052, 5054, 5055, 5056, 5060, 5062, 6407, - 5061, 5067, 5068, 5064, 5078, 5081, 5083, 5084, 5085, 5071, - 5074, 5093, 5094, 5095, 5086, 5097, 5104, 5106, 6407, 6407, - 5098, 5108, 5109, 5116, 5113, 5114, 5117, 5126, 5121, 5122, - 5123, 5124, 5128, 5129, 5140, 5141, 5133, 5088, 6407, 5130, - 5137, 5144, 6407, 5143, 6407, 5148, 5149, 5145, 5151, 5152, + 4989, 4993, 4990, 4994, 6447, 6447, 4996, 4997, 5003, 5004, + 5005, 5007, 5008, 6447, 5011, 5014, 5021, 5015, 6447, 5017, + 5022, 5024, 5030, 6447, 5025, 5027, 5031, 5034, 5038, 5040, + 5041, 5043, 5045, 5047, 5049, 6447, 6447, 6447, 6447, 5050, + 5053, 5055, 5056, 5058, 5063, 5064, 5066, 5062, 6447, 5068, + 6447, 6447, 5074, 5076, 5070, 5078, 5080, 5082, 5085, 5087, + 6447, 5089, 5086, 5092, 5090, 5099, 5103, 5106, 5108, 5093, + 5109, 5110, 5112, 5119, 5115, 5116, 5118, 5121, 5123, 5125, + 6447, 6447, 5127, 5132, 5134, 5142, 5138, 5139, 5135, 5151, + 5146, 5147, 5148, 5153, 5154, 5155, 5164, 5165, 5156, 5160, - 5156, 5157, 5159, 6407, 6407, 5160, 5172, 5167, 6407, 6407, - 5162, 5169, 5171, 5175, 5170, 5176, 5179, 5182, 5184, 5180, - 6407, 5185, 6407, 5186, 5187, 5193, 5194, 5202, 5204, 5207, - 5209, 5203, 5205, 6407, 5212, 5213, 6407, 5214, 5215, 5216, - 6407, 5222, 5217, 5225, 5228, 6407, 5233, 5230, 5236, 6407, - 5238, 6407, 5220, 5239, 5242, 5249, 6407, 5245, 5246, 6407, - 5251, 5253, 5255, 5256, 6407, 5257, 6407, 5259, 5261, 5262, - 5267, 5268, 5271, 5264, 5272, 5273, 5280, 5282, 5284, 6407, - 6407, 135, 5292, 5276, 5278, 5285, 5289, 5300, 5293, 5297, - 5303, 6407, 6407, 5304, 6407, 5306, 5307, 6407, 5296, 5308, + 6447, 5163, 5166, 5167, 6447, 5169, 6447, 5173, 5175, 5174, + 5177, 5182, 5184, 5185, 5187, 6447, 6447, 5183, 5194, 5189, + 6447, 6447, 5197, 5198, 5200, 5203, 5199, 5204, 5205, 5207, + 5209, 5210, 6447, 5211, 6447, 5212, 5213, 5221, 5215, 5230, + 5231, 5233, 5235, 5228, 5237, 6447, 5238, 5239, 6447, 5241, + 5243, 5244, 6447, 5248, 5246, 5251, 5254, 6447, 5256, 5258, + 5260, 6447, 5267, 6447, 5261, 5263, 5270, 5275, 6447, 5271, + 5272, 6447, 5277, 5279, 5280, 5284, 6447, 5285, 6447, 5286, + 5288, 5289, 5293, 5294, 5296, 5298, 5299, 5300, 5307, 5305, + 5308, 6447, 6447, 5316, 135, 5319, 5302, 5315, 5320, 5321, - 5312, 5315, 5317, 5316, 5319, 5323, 5325, 5326, 5327, 5328, - 5329, 5335, 5341, 5351, 5336, 5347, 5352, 5356, 5358, 5360, - 5349, 5362, 5354, 5363, 5364, 5366, 5368, 5370, 5371, 5372, - 6407, 5376, 5378, 5380, 5381, 6407, 5387, 5388, 5394, 5396, - 6407, 5398, 5400, 5402, 5403, 6407, 5390, 5405, 5406, 5407, - 5413, 5420, 5417, 5415, 5418, 6407, 6407, 6407, 5421, 5432, - 6407, 5434, 5423, 5425, 5427, 6407, 5429, 5435, 6407, 6407, - 5436, 5439, 5440, 5449, 6407, 5441, 6407, 5442, 6407, 5446, - 5452, 5454, 5456, 6407, 5459, 5466, 6407, 5469, 5472, 5474, - 5475, 5458, 5462, 5477, 6407, 5485, 5483, 5486, 5490, 5476, + 5328, 5323, 5326, 5332, 6447, 6447, 5324, 6447, 5333, 5334, + 6447, 5336, 5339, 5343, 5338, 5345, 5346, 5347, 5349, 5352, + 5354, 5359, 5357, 5353, 5358, 5373, 5375, 5360, 5378, 5380, + 5382, 5384, 5386, 5388, 5389, 5390, 5365, 5392, 5393, 5395, + 5396, 5398, 5399, 6447, 5402, 5407, 5408, 5403, 6447, 5414, + 5409, 5423, 5415, 6447, 5425, 5417, 5427, 5428, 6447, 5429, + 5431, 5434, 5432, 5433, 5445, 5440, 5442, 5446, 6447, 6447, + 6447, 5449, 5456, 6447, 5458, 5452, 5435, 5443, 6447, 5459, + 5462, 6447, 6447, 5463, 5464, 5465, 5475, 6447, 5467, 6447, + 5470, 6447, 5471, 5472, 5480, 5478, 6447, 5484, 5482, 5492, - 5480, 5487, 5493, 5495, 5502, 5497, 5500, 6407, 5501, 5504, - 5506, 5514, 5507, 5503, 5510, 5512, 6407, 5517, 6407, 5520, - 5521, 5519, 5527, 5524, 5528, 5529, 5530, 5538, 5541, 5531, - 5542, 5544, 5545, 6407, 6407, 5552, 5554, 6407, 5546, 6407, - 5556, 6407, 5557, 5558, 5559, 5560, 6407, 5562, 5563, 5548, - 5566, 6407, 5569, 5572, 5576, 5578, 6407, 6407, 5579, 5587, - 5584, 5580, 5591, 5593, 5588, 5597, 5320, 5594, 5598, 5606, - 5582, 5605, 5604, 5610, 5611, 5612, 6407, 6407, 6407, 5607, - 5615, 5626, 5622, 5625, 5629, 5627, 6407, 5631, 5633, 5634, - 5630, 5643, 5638, 5641, 6407, 5642, 5644, 5646, 5647, 5651, + 6447, 5498, 5500, 5502, 5494, 5486, 5490, 5505, 6447, 5513, + 5511, 5512, 5515, 5504, 5508, 5518, 5519, 5523, 5527, 5525, + 5529, 6447, 5526, 5531, 5532, 5533, 5535, 5538, 5540, 5542, + 6447, 5544, 6447, 5545, 5546, 5547, 5548, 5549, 5552, 5556, + 5561, 5567, 5560, 5563, 5570, 5573, 5574, 6447, 6447, 5576, + 5578, 6447, 5579, 6447, 5583, 6447, 5585, 5586, 5587, 5584, + 6447, 5591, 5588, 5592, 5580, 6447, 5594, 5597, 5598, 5605, + 6447, 6447, 5606, 5613, 5609, 5610, 5619, 5621, 5616, 5623, + 5624, 5625, 5627, 5637, 5629, 5628, 5630, 5639, 5641, 5643, + 5644, 6447, 6447, 6447, 5649, 5633, 5657, 5655, 5659, 5658, - 5648, 5653, 5652, 6407, 5659, 5664, 5665, 5666, 5668, 5675, - 5677, 5679, 5669, 5672, 5687, 5683, 6407, 5685, 6407, 6407, - 5686, 6407, 5689, 5690, 5691, 5692, 6407, 5695, 5696, 5697, - 5699, 5701, 5703, 6407, 5715, 5704, 5706, 5714, 6407, 6407, - 5721, 6407, 5723, 5726, 5716, 5733, 5728, 5729, 5735, 5736, - 6407, 5718, 5732, 5739, 5742, 5743, 6407, 5745, 5746, 5747, - 5748, 6407, 5751, 5750, 5755, 5756, 5757, 6407, 5758, 5759, - 5770, 5771, 6407, 5760, 5778, 5761, 6407, 6407, 5782, 5785, - 5786, 6407, 6407, 6407, 5788, 5789, 5791, 5793, 6407, 5796, - 5800, 5804, 5808, 5799, 6407, 5812, 5807, 5809, 6407, 6407, + 5660, 6447, 5663, 5665, 5666, 5667, 5675, 5670, 5673, 6447, + 5677, 5674, 5676, 5680, 5682, 5679, 5690, 5691, 6447, 5684, + 5696, 5697, 5685, 5703, 5705, 5707, 5710, 5711, 5712, 5719, + 5715, 6447, 5717, 6447, 6447, 5714, 6447, 5718, 5721, 5722, + 5725, 6447, 5728, 5723, 5729, 5730, 5732, 5735, 6447, 5742, + 5741, 5745, 5746, 6447, 6447, 5748, 6447, 5753, 5750, 5754, + 5762, 5757, 5758, 5760, 5765, 6447, 5763, 5771, 5772, 5773, + 5774, 5775, 6447, 5776, 5777, 5779, 5780, 6447, 5783, 5782, + 5785, 5787, 5788, 6447, 5789, 5790, 5811, 5804, 6447, 5795, + 5807, 5806, 6447, 6447, 5814, 5817, 5818, 6447, 6447, 6447, - 5813, 5814, 5815, 5817, 6407, 6407, 5818, 5819, 5824, 5821, - 5822, 6407, 5827, 5829, 5831, 5836, 5840, 5841, 5842, 5846, - 5850, 5854, 5851, 5852, 5853, 5857, 5859, 5860, 5866, 5869, - 5871, 5873, 5881, 5883, 5870, 6407, 6407, 5885, 6407, 5887, - 5888, 6407, 6407, 5890, 5892, 5894, 5896, 5899, 5901, 5903, - 6407, 5904, 5906, 5907, 5908, 5909, 6407, 5911, 5915, 5910, - 5918, 5912, 5921, 5917, 5927, 6407, 6407, 5919, 5933, 5923, - 5934, 5928, 6407, 5938, 5945, 5940, 5942, 5943, 5948, 5944, - 6407, 5950, 5952, 6407, 6407, 6407, 5953, 6407, 6407, 5951, - 6407, 6407, 6407, 6407, 6407, 6407, 6407, 5955, 6407, 5957, + 5821, 5823, 5824, 5826, 6447, 5830, 5834, 5838, 5842, 5833, + 6447, 5845, 5841, 5846, 6447, 6447, 5827, 5848, 5849, 5851, + 6447, 6447, 5852, 5855, 5853, 5856, 5858, 6447, 5861, 5864, + 5863, 5866, 5871, 5875, 5876, 5878, 5880, 5887, 5888, 5884, + 5885, 5890, 5893, 5894, 5895, 5897, 5907, 5902, 5904, 5906, + 5913, 5910, 6447, 6447, 5917, 6447, 5919, 5920, 6447, 6447, + 5922, 5924, 5926, 5928, 5931, 5933, 5935, 6447, 5936, 5938, + 5939, 5940, 5941, 6447, 5943, 5947, 5942, 5950, 5944, 5953, + 5959, 5949, 5966, 6447, 6447, 5951, 5967, 5955, 5971, 5960, + 6447, 5973, 5974, 5975, 5977, 5979, 5983, 5980, 6447, 5984, - 5964, 5972, 5974, 6407, 5959, 5967, 5965, 5975, 5978, 6407, - 5979, 5980, 5981, 5382, 5983, 5984, 5987, 5988, 5990, 5989, - 5993, 5994, 5997, 5999, 5996, 6010, 6001, 6014, 6407, 6407, - 6407, 6012, 6003, 6025, 6004, 6028, 6029, 6032, 6034, 6016, - 6020, 6036, 6037, 6038, 6022, 6041, 6050, 6045, 6046, 6048, - 6049, 6052, 6055, 6057, 6060, 6062, 6407, 6063, 6407, 6064, - 6407, 6407, 6066, 6067, 6073, 6070, 6077, 6080, 6076, 6075, - 6083, 6086, 6085, 6093, 6407, 6407, 6087, 6094, 6407, 6095, - 6096, 6407, 6097, 6098, 6099, 6106, 6107, 6104, 6105, 6111, - 6113, 6407, 6407, 6101, 6115, 6122, 6125, 6126, 6134, 6129, + 5985, 6447, 6447, 6447, 5987, 6447, 6447, 5986, 6447, 6447, + 6447, 6447, 6447, 6447, 6447, 5988, 6447, 5992, 6000, 6004, + 6007, 6447, 5993, 6008, 6009, 5995, 6447, 5997, 6447, 6010, + 6014, 6018, 6019, 6020, 6026, 6024, 6022, 6028, 6029, 6030, + 6032, 6031, 6036, 6038, 6034, 6042, 6044, 6447, 6447, 6447, + 6043, 6050, 6052, 6054, 6061, 6064, 6067, 6069, 6053, 6056, + 6071, 6073, 6075, 6058, 6077, 6085, 6081, 6082, 6084, 6086, + 6088, 6091, 6093, 6096, 6098, 6447, 6099, 6447, 6100, 6447, + 6447, 6102, 6103, 6105, 6107, 6116, 6117, 6109, 6112, 6119, + 6122, 6121, 6129, 6447, 6447, 6124, 6130, 6447, 6132, 6131, - 6127, 6135, 6137, 6136, 6144, 6407, 6146, 6143, 6150, 6407, - 6147, 6139, 5861, 6152, 6153, 6160, 6156, 6157, 6407, 6161, - 6407, 6164, 6165, 6168, 6159, 6166, 6167, 6181, 6179, 6176, - 6407, 6169, 6186, 6183, 6190, 6192, 6194, 6196, 6188, 6198, - 6200, 6204, 6209, 6210, 6211, 6201, 6214, 6212, 6407, 6216, - 6213, 6407, 6221, 6222, 6223, 6224, 6228, 6407, 6234, 6225, - 6230, 6235, 6238, 6239, 6407, 6241, 6248, 6245, 6407, 6250, - 6407, 6407, 6251, 6253, 6254, 6258, 6260, 6407, 6407, 6407, - 6287, 6294, 6301, 6308, 6315, 6322, 6329, 88, 6336, 6343, - 6350, 6357, 6364, 6371, 6378, 6385, 6392, 6399 + 6447, 6133, 6134, 6136, 6141, 6143, 6140, 6137, 6144, 6148, + 6447, 6447, 6151, 6152, 6157, 6161, 6158, 6168, 6164, 6167, + 6169, 6173, 6166, 6181, 6447, 6180, 6177, 6184, 6447, 6186, + 6187, 6188, 6189, 6191, 6198, 6193, 6194, 6447, 6196, 6447, + 6200, 6202, 6204, 6201, 6203, 6205, 6215, 6219, 6213, 6447, + 6217, 6227, 6221, 6229, 6231, 6233, 6234, 6223, 6236, 6239, + 6245, 6249, 6246, 6250, 6237, 6254, 6251, 6447, 6261, 6252, + 6447, 6258, 6262, 6255, 6264, 6265, 6447, 6269, 6272, 6273, + 6275, 6278, 6279, 6447, 6281, 6285, 6282, 6447, 6288, 6447, + 6447, 6290, 6287, 6294, 6297, 6299, 6447, 6447, 6447, 6327, + 6334, 6341, 6348, 6355, 6362, 6369, 88, 6376, 6383, 6390, + 6397, 6404, 6411, 6418, 6425, 6432, 6439 } ; -static const flex_int16_t yy_def[3299] = +static const flex_int16_t yy_def[3318] = { 0, - 3280, 1, 3281, 3281, 3282, 3282, 3283, 3283, 3284, 3284, - 3285, 3285, 3286, 3286, 3287, 3287, 3280, 3288, 3280, 3280, - 3280, 3280, 3289, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3290, 3280, 3280, 3280, - 3290, 3291, 3280, 3280, 3280, 3291, 3292, 3280, 3280, 3280, - 3280, 3292, 3293, 3280, 3280, 3280, 3293, 3294, 3280, 3295, - 3280, 3294, 3294, 3296, 3280, 3280, 3280, 3280, 3296, 3297, - 3280, 3280, 3280, 3297, 3288, 3288, 3280, 3298, 3289, 3298, - 3289, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, + 3299, 1, 3300, 3300, 3301, 3301, 3302, 3302, 3303, 3303, + 3304, 3304, 3305, 3305, 3306, 3306, 3299, 3307, 3299, 3299, + 3299, 3299, 3308, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3309, 3299, 3299, 3299, + 3309, 3310, 3299, 3299, 3299, 3310, 3311, 3299, 3299, 3299, + 3299, 3311, 3312, 3299, 3299, 3299, 3312, 3313, 3299, 3314, + 3299, 3313, 3313, 3315, 3299, 3299, 3299, 3299, 3315, 3316, + 3299, 3299, 3299, 3316, 3307, 3307, 3299, 3317, 3308, 3317, + 3308, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3290, 3290, 3291, - 3291, 3292, 3292, 3280, 3293, 3293, 3294, 3294, 3295, 3295, - 3294, 3296, 3296, 3280, 3297, 3297, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3309, 3309, 3310, + 3310, 3311, 3311, 3299, 3312, 3312, 3313, 3313, 3314, 3314, + 3313, 3315, 3315, 3299, 3316, 3316, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3294, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3313, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3294, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3313, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3294, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, + 3313, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3294, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3280, - 3280, 3288, 3280, 3280, 3288, 3288, 3280, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, + 3307, 3313, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, + 3307, 3299, 3299, 3307, 3299, 3299, 3307, 3307, 3299, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3294, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3280, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3313, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3299, 3307, 3307, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, - 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, - 3280, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3280, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3299, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3299, 3299, 3307, 3307, 3307, 3307, 3307, 3299, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3280, 3288, 3288, 3294, 3294, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, + 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, + 3313, 3313, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, + 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3280, 3294, 3288, 3288, 3288, 3288, 3288, 3280, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, + 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3313, 3307, 3307, + 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, - 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3280, - 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3280, 3288, 3294, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3280, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3299, 3307, 3299, 3307, 3307, 3307, + 3307, 3307, 3299, 3307, 3299, 3307, 3307, 3307, 3307, 3299, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, + 3307, 3313, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, - 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, + 3299, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3299, 3307, 3299, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3280, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, - 3288, 3280, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3280, 3294, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3299, 3299, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3299, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3299, 3307, 3313, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3280, 3280, 3288, 3288, 3288, 3280, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, + 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, + 3299, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, - 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3280, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3280, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3294, 3288, 3280, 3288, 3288, 3288, 3280, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, - 3288, 3280, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, + 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, + 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3313, 3307, 3299, 3307, 3307, 3307, 3299, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3299, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3280, 3288, - 3280, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3280, 3288, 3288, 3280, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3280, - 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, + 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3299, 3299, 3307, 3299, 3307, + 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3299, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3299, + 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, - 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, - 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3280, - 3280, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3294, 3288, 3288, 3288, - 3288, 3288, 3288, 3280, 3280, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, - 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, + 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, + 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3299, 3307, + 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3313, 3307, 3307, 3307, 3307, + 3307, 3307, 3299, 3299, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3280, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, + 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3299, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3280, 3288, 3280, 3288, 3288, 3288, - 3288, 3294, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3280, - 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, - 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, + 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3299, 3307, 3299, 3307, 3307, 3307, 3307, + 3307, 3313, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3299, + 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, + 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, - 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, - 3288, 3280, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3280, - 3280, 3288, 3288, 3288, 3288, 3288, 3280, 3280, 3288, 3280, - 3288, 3280, 3288, 3288, 3280, 3280, 3288, 3288, 3288, 3288, - 3288, 3280, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3280, - 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3280, 3288, - 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, + 3307, 3299, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3299, + 3299, 3307, 3307, 3307, 3307, 3307, 3299, 3299, 3307, 3299, + 3307, 3299, 3307, 3307, 3299, 3299, 3307, 3307, 3307, 3307, + 3307, 3299, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3299, + 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, + 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3294, - 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3280, 3288, 3288, - 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3280, 3288, - 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3280, 3288, 3280, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3280, 3280, 3288, 3288, 3288, 3288, 3288, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3313, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3299, 3307, + 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3299, + 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3299, 3307, 3299, 3307, 3307, 3307, - 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3280, 3288, 3288, - 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3280, 3280, 3280, 3280, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3280, - 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, - 3288, 3288, 3288, 3288, 3288, 3288, 3294, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3280, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, - 3288, 3288, 3280, 3288, 3280, 3288, 3288, 3288, 3288, 3288, + 3307, 3307, 3307, 3307, 3299, 3299, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, + 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3299, 3299, 3299, 3299, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, + 3299, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3313, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3299, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3288, 3288, 3288, 3280, 3280, 3288, 3288, 3288, 3280, 3280, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3280, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3280, 3288, 3288, 3280, 3288, 3288, 3288, - 3280, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3280, - 3288, 3280, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3280, - 3288, 3288, 3288, 3288, 3280, 3288, 3280, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, - 3280, 3294, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3280, 3280, 3288, 3280, 3288, 3288, 3280, 3288, 3288, + 3299, 3307, 3307, 3307, 3299, 3307, 3299, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3299, 3299, 3307, 3307, 3307, + 3299, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3299, 3307, 3299, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3299, 3307, + 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, 3307, + 3307, 3299, 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, + 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, 3299, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3299, 3299, 3307, 3313, 3307, 3307, 3307, 3307, 3307, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3280, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, - 3280, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3280, 3280, 3280, 3288, 3288, - 3280, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3280, 3280, - 3288, 3288, 3288, 3288, 3280, 3288, 3280, 3288, 3280, 3288, - 3288, 3288, 3288, 3280, 3288, 3288, 3280, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, + 3307, 3307, 3307, 3307, 3299, 3299, 3307, 3299, 3307, 3307, + 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, + 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3299, + 3299, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, + 3307, 3299, 3299, 3307, 3307, 3307, 3307, 3299, 3307, 3299, + 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3280, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3280, 3280, 3288, 3288, 3280, 3288, 3280, - 3288, 3280, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, - 3288, 3280, 3288, 3288, 3288, 3288, 3280, 3280, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3280, 3280, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, + 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3299, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3299, 3307, + 3307, 3299, 3307, 3299, 3307, 3299, 3307, 3307, 3307, 3307, + 3299, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, + 3299, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3299, 3299, 3299, 3307, 3307, 3307, 3307, 3307, 3307, - 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3280, 3280, - 3288, 3280, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, - 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3280, 3280, - 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3280, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, - 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, - 3288, 3288, 3280, 3288, 3288, 3288, 3280, 3280, 3288, 3288, - 3288, 3280, 3280, 3280, 3288, 3288, 3288, 3288, 3280, 3288, - 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3280, 3280, + 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3299, 3307, 3299, 3299, 3307, 3299, 3307, 3307, 3307, + 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, + 3307, 3307, 3307, 3299, 3299, 3307, 3299, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, + 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, 3307, + 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, + 3307, 3307, 3299, 3299, 3307, 3307, 3307, 3299, 3299, 3299, - 3288, 3288, 3288, 3288, 3280, 3280, 3288, 3288, 3288, 3288, - 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3280, 3280, 3288, 3280, 3288, - 3288, 3280, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3280, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3280, 3280, 3288, 3288, 3288, - 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3280, 3288, 3288, 3280, 3280, 3280, 3288, 3280, 3280, 3288, - 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3288, 3280, 3288, + 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, + 3299, 3307, 3307, 3307, 3299, 3299, 3307, 3307, 3307, 3307, + 3299, 3299, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3299, 3299, 3307, 3299, 3307, 3307, 3299, 3299, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, + 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3299, 3299, 3307, 3307, 3307, 3307, 3307, + 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, - 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3280, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3280, - 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3280, 3288, - 3280, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3280, 3280, 3288, 3288, 3280, 3288, - 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3280, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, + 3307, 3299, 3299, 3299, 3307, 3299, 3299, 3307, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3307, 3299, 3307, 3307, 3307, + 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, 3299, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3299, 3299, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3299, 3307, 3299, + 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3299, 3299, 3307, 3307, 3299, 3307, 3307, - 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3280, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, - 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, - 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3280, 3288, - 3288, 3280, 3288, 3288, 3288, 3288, 3288, 3280, 3288, 3288, - 3288, 3288, 3288, 3288, 3280, 3288, 3288, 3288, 3280, 3288, - 3280, 3280, 3288, 3288, 3288, 3288, 3288, 3280, 3280, 0, - 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280, - 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280 + 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3299, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3299, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3299, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, + 3299, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, + 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3299, 3307, 3299, + 3299, 3307, 3307, 3307, 3307, 3307, 3299, 3299, 0, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299 } ; -static const flex_int16_t yy_nxt[6448] = +static const flex_int16_t yy_nxt[6488] = { 0, 18, 19, 20, 21, 22, 23, 22, 18, 18, 18, 18, 18, 22, 24, 25, 26, 27, 28, 29, 30, @@ -1540,7 +1547,7 @@ static const flex_int16_t yy_nxt[6448] = 204, 199, 86, 202, 207, 209, 86, 213, 210, 86, 86, 206, 208, 86, 216, 86, 86, 86, 86, 218, 86, 211, 212, 219, 223, 215, 86, 225, 226, 86, - 224, 86, 214, 86, 217, 919, 221, 86, 227, 220, + 224, 86, 214, 86, 217, 922, 221, 86, 227, 220, 86, 222, 228, 86, 231, 86, 86, 86, 236, 86, 233, 86, 86, 229, 234, 230, 238, 86, 248, 86, 86, 232, 86, 86, 86, 239, 235, 86, 86, 237, @@ -1588,7 +1595,7 @@ static const flex_int16_t yy_nxt[6448] = 435, 86, 86, 426, 440, 431, 86, 427, 86, 424, 86, 437, 86, 86, 433, 441, 434, 86, 439, 436, 450, 86, 86, 86, 455, 442, 449, 451, 438, 86, - 86, 86, 86, 452, 563, 453, 456, 86, 443, 458, + 86, 86, 86, 452, 564, 453, 456, 86, 443, 458, 459, 444, 86, 457, 86, 462, 445, 446, 447, 448, 460, 454, 86, 86, 86, 461, 86, 468, 86, 86, @@ -1599,622 +1606,626 @@ static const flex_int16_t yy_nxt[6448] = 482, 488, 486, 489, 86, 86, 497, 491, 487, 498, 86, 86, 86, 490, 495, 86, 499, 86, 500, 86, 492, 86, 86, 493, 501, 494, 86, 86, 502, 86, - 515, 86, 512, 86, 551, 86, 503, 86, 504, 510, + 515, 86, 512, 86, 552, 86, 503, 86, 504, 510, 505, 513, 511, 514, 526, 517, 516, 168, 525, 527, - 86, 86, 86, 506, 528, 86, 507, 529, 508, 86, - 509, 86, 86, 518, 519, 86, 535, 532, 530, 531, - 86, 533, 86, 520, 86, 521, 522, 523, 534, 539, - 524, 86, 86, 86, 86, 86, 541, 86, 538, 540, - 537, 536, 546, 86, 548, 86, 549, 86, 86, 545, - 86, 553, 543, 544, 542, 86, 86, 86, 547, 86, - 557, 558, 552, 86, 556, 86, 86, 550, 86, 86, - 86, 86, 555, 564, 565, 86, 86, 86, 86, 567, - 554, 568, 560, 562, 561, 559, 86, 570, 86, 571, - 86, 566, 573, 572, 86, 86, 569, 86, 86, 584, + 86, 86, 164, 506, 528, 86, 507, 86, 508, 86, + 509, 86, 86, 518, 519, 529, 533, 86, 531, 532, + 86, 534, 530, 520, 86, 521, 522, 523, 536, 540, + 524, 86, 86, 537, 86, 86, 535, 542, 539, 541, + 538, 86, 86, 86, 86, 86, 549, 86, 547, 86, + 550, 544, 86, 86, 554, 543, 86, 546, 86, 548, + 86, 545, 86, 86, 86, 551, 163, 553, 557, 86, + 558, 559, 555, 86, 556, 86, 560, 86, 561, 86, + 562, 565, 566, 563, 86, 86, 86, 571, 568, 569, + 86, 86, 573, 86, 572, 585, 86, 86, 86, 567, - 579, 86, 586, 576, 575, 86, 574, 585, 580, 581, - 588, 86, 582, 583, 577, 587, 578, 589, 86, 86, - 86, 86, 86, 86, 592, 591, 86, 594, 164, 593, - 86, 596, 86, 598, 86, 86, 86, 86, 601, 590, - 599, 595, 602, 86, 86, 597, 86, 603, 86, 600, - 86, 86, 86, 608, 86, 606, 607, 86, 86, 604, - 86, 609, 86, 86, 86, 614, 610, 605, 615, 86, - 617, 86, 613, 86, 86, 616, 612, 611, 618, 86, - 620, 86, 622, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 619, 624, 86, 625, 621, 633, 86, 636, + 712, 86, 580, 86, 570, 577, 574, 576, 86, 575, + 581, 582, 586, 587, 583, 584, 578, 86, 579, 86, + 590, 588, 86, 86, 86, 86, 86, 86, 589, 592, + 86, 593, 86, 594, 86, 597, 86, 595, 598, 599, + 86, 600, 86, 591, 596, 86, 602, 603, 86, 86, + 86, 86, 604, 86, 86, 601, 607, 86, 609, 608, + 86, 86, 86, 86, 605, 86, 610, 86, 615, 86, + 86, 606, 611, 616, 86, 614, 86, 618, 86, 617, + 613, 612, 86, 619, 86, 621, 86, 623, 86, 86, + 86, 620, 86, 86, 86, 86, 622, 625, 86, 626, - 627, 163, 630, 86, 623, 632, 86, 626, 628, 631, - 629, 635, 637, 86, 86, 634, 86, 86, 86, 640, - 643, 638, 86, 646, 639, 86, 86, 86, 641, 86, - 645, 86, 86, 642, 86, 86, 649, 86, 86, 648, - 653, 652, 644, 86, 86, 86, 86, 647, 655, 86, - 86, 86, 86, 654, 650, 651, 86, 86, 86, 658, - 656, 669, 672, 86, 657, 86, 659, 668, 707, 667, - 670, 660, 671, 661, 86, 86, 86, 86, 675, 662, - 676, 663, 673, 86, 664, 665, 674, 86, 680, 86, - 677, 666, 679, 678, 86, 86, 685, 86, 683, 681, + 86, 634, 653, 624, 628, 86, 161, 86, 627, 86, + 636, 629, 631, 630, 633, 632, 86, 86, 635, 638, + 86, 86, 637, 86, 641, 86, 644, 86, 639, 647, + 86, 640, 86, 646, 86, 86, 86, 642, 86, 86, + 643, 650, 86, 86, 654, 86, 86, 645, 649, 86, + 656, 86, 86, 648, 86, 86, 86, 86, 655, 670, + 651, 673, 657, 652, 659, 86, 159, 86, 658, 86, + 660, 669, 668, 671, 86, 661, 680, 662, 86, 677, + 86, 672, 86, 663, 86, 664, 681, 674, 665, 666, + 86, 675, 86, 676, 86, 667, 678, 682, 86, 679, - 86, 686, 86, 682, 86, 688, 86, 86, 86, 86, - 86, 86, 684, 86, 86, 694, 161, 689, 690, 86, - 695, 86, 687, 691, 168, 698, 692, 701, 700, 697, - 699, 693, 696, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 710, 708, 86, 86, 702, 833, 86, 86, - 703, 705, 86, 706, 709, 704, 712, 713, 86, 714, - 716, 715, 86, 86, 717, 86, 86, 86, 711, 86, - 718, 86, 86, 86, 721, 722, 719, 727, 720, 86, - 723, 86, 728, 86, 730, 86, 741, 724, 86, 726, - 725, 732, 729, 731, 86, 733, 86, 86, 734, 86, + 683, 684, 86, 687, 86, 86, 689, 86, 86, 86, + 86, 86, 86, 685, 686, 86, 86, 695, 86, 86, + 691, 86, 690, 86, 692, 696, 86, 699, 700, 688, + 693, 86, 694, 698, 697, 701, 168, 703, 704, 86, + 702, 86, 706, 86, 86, 86, 86, 86, 86, 86, + 710, 715, 86, 86, 705, 707, 716, 714, 718, 708, + 711, 86, 86, 709, 86, 717, 86, 86, 86, 720, + 86, 86, 713, 719, 724, 723, 86, 86, 86, 732, + 86, 721, 729, 722, 86, 725, 86, 730, 86, 733, + 86, 731, 726, 728, 734, 727, 735, 86, 736, 86, - 735, 86, 736, 86, 86, 86, 86, 737, 86, 738, - 745, 86, 743, 739, 740, 86, 86, 86, 744, 86, - 749, 86, 742, 748, 86, 750, 86, 86, 86, 86, - 86, 754, 752, 86, 86, 86, 747, 86, 760, 746, - 757, 86, 751, 753, 86, 86, 761, 86, 755, 756, - 758, 86, 86, 86, 768, 763, 86, 759, 86, 762, - 764, 86, 86, 765, 766, 767, 771, 772, 86, 769, - 775, 86, 770, 774, 86, 86, 86, 777, 86, 778, - 776, 86, 773, 780, 781, 86, 86, 86, 86, 86, - 782, 86, 86, 86, 787, 785, 789, 86, 86, 86, + 86, 737, 86, 738, 86, 740, 86, 86, 739, 86, + 86, 743, 86, 742, 741, 86, 86, 86, 746, 86, + 745, 747, 86, 744, 751, 86, 750, 86, 86, 752, + 86, 86, 86, 754, 86, 756, 86, 86, 749, 86, + 748, 86, 759, 762, 86, 753, 755, 86, 86, 86, + 86, 757, 758, 763, 86, 760, 86, 765, 764, 86, + 770, 761, 766, 772, 86, 767, 768, 86, 769, 773, + 86, 86, 774, 777, 771, 86, 86, 86, 779, 86, + 86, 780, 86, 783, 775, 778, 776, 782, 86, 86, + 86, 86, 86, 784, 86, 86, 86, 789, 787, 791, - 86, 779, 783, 797, 786, 784, 86, 790, 86, 792, - 795, 86, 788, 86, 86, 793, 86, 796, 791, 801, - 794, 798, 799, 86, 86, 86, 800, 804, 86, 86, - 806, 802, 86, 86, 805, 807, 86, 86, 810, 803, - 86, 86, 809, 811, 86, 86, 86, 86, 86, 817, - 159, 814, 86, 808, 812, 86, 819, 820, 813, 818, - 86, 822, 86, 86, 86, 815, 816, 824, 821, 823, - 826, 86, 86, 829, 86, 827, 86, 828, 830, 86, - 86, 831, 825, 86, 86, 835, 86, 86, 86, 86, - 86, 841, 86, 834, 842, 86, 832, 86, 86, 86, + 86, 86, 86, 781, 86, 785, 86, 788, 786, 86, + 792, 797, 794, 795, 86, 790, 86, 86, 796, 799, + 798, 793, 800, 801, 86, 86, 86, 802, 86, 86, + 806, 803, 86, 808, 810, 86, 86, 807, 809, 86, + 86, 86, 812, 805, 86, 811, 804, 813, 86, 86, + 86, 86, 819, 86, 814, 816, 86, 815, 86, 86, + 821, 822, 86, 824, 86, 828, 825, 826, 820, 817, + 818, 86, 86, 823, 86, 831, 86, 833, 86, 830, + 832, 86, 827, 86, 829, 835, 86, 86, 86, 837, + 86, 86, 86, 86, 843, 86, 86, 86, 86, 844, - 86, 843, 836, 86, 837, 838, 86, 839, 850, 840, - 844, 86, 86, 845, 86, 848, 86, 846, 86, 847, - 86, 849, 86, 86, 852, 851, 855, 86, 86, 86, - 86, 86, 86, 864, 86, 853, 862, 854, 856, 857, - 86, 86, 86, 86, 863, 858, 859, 860, 861, 86, - 86, 86, 867, 865, 86, 869, 868, 86, 86, 866, - 86, 873, 871, 874, 86, 876, 86, 870, 86, 86, - 872, 875, 86, 877, 86, 86, 879, 86, 168, 86, - 86, 880, 885, 884, 878, 86, 882, 883, 881, 886, - 86, 86, 86, 86, 887, 892, 86, 895, 86, 888, + 86, 86, 86, 834, 86, 836, 838, 845, 839, 840, + 86, 841, 846, 842, 848, 86, 847, 852, 86, 851, + 86, 849, 850, 86, 86, 86, 86, 86, 86, 853, + 854, 857, 86, 86, 86, 86, 86, 866, 86, 855, + 864, 859, 867, 856, 858, 86, 860, 86, 865, 86, + 861, 862, 863, 86, 86, 86, 86, 86, 869, 871, + 86, 876, 86, 870, 868, 86, 86, 875, 86, 872, + 874, 878, 877, 879, 873, 86, 86, 86, 86, 168, + 880, 86, 881, 886, 887, 882, 86, 884, 86, 86, + 889, 883, 86, 885, 86, 888, 86, 86, 86, 895, - 86, 893, 86, 86, 86, 86, 889, 890, 896, 894, - 899, 897, 86, 891, 86, 86, 86, 86, 901, 86, - 905, 86, 86, 898, 902, 900, 86, 906, 907, 86, - 86, 86, 86, 86, 86, 904, 86, 86, 86, 921, - 903, 920, 910, 922, 86, 923, 918, 908, 925, 928, - 924, 86, 926, 86, 927, 909, 86, 86, 911, 86, - 86, 912, 86, 932, 176, 913, 86, 940, 914, 86, - 86, 930, 86, 86, 943, 915, 916, 929, 917, 86, - 931, 86, 933, 934, 947, 935, 86, 941, 936, 86, - 942, 86, 86, 937, 174, 945, 86, 944, 86, 938, + 86, 86, 890, 891, 86, 896, 898, 86, 86, 86, + 900, 892, 893, 897, 899, 902, 86, 86, 894, 86, + 86, 86, 86, 904, 908, 86, 86, 901, 86, 905, + 86, 86, 86, 909, 86, 910, 903, 86, 86, 86, + 907, 86, 86, 928, 911, 906, 923, 924, 925, 921, + 86, 86, 913, 86, 927, 86, 912, 86, 86, 914, + 926, 931, 915, 86, 929, 86, 916, 86, 930, 917, + 943, 932, 933, 86, 935, 934, 918, 919, 86, 920, + 86, 86, 936, 937, 86, 938, 86, 86, 939, 86, + 946, 948, 86, 940, 944, 86, 945, 950, 86, 941, - 939, 951, 952, 954, 949, 948, 86, 953, 86, 86, - 955, 946, 86, 86, 86, 958, 86, 950, 957, 86, - 86, 956, 86, 960, 959, 962, 86, 961, 86, 86, - 963, 965, 86, 86, 86, 968, 966, 86, 970, 86, - 86, 964, 969, 86, 86, 973, 86, 86, 86, 977, - 86, 86, 1034, 967, 971, 86, 978, 972, 974, 975, - 979, 86, 86, 1013, 980, 983, 984, 982, 976, 981, - 86, 86, 86, 86, 986, 86, 86, 86, 985, 987, - 86, 988, 990, 86, 86, 989, 991, 86, 86, 86, - 86, 86, 992, 86, 994, 997, 86, 995, 1001, 86, + 942, 176, 86, 86, 952, 954, 955, 949, 947, 86, + 957, 956, 86, 86, 951, 86, 958, 86, 960, 86, + 961, 86, 962, 953, 959, 86, 964, 86, 963, 965, + 86, 86, 86, 966, 86, 86, 86, 86, 969, 967, + 86, 973, 86, 86, 972, 86, 86, 976, 86, 86, + 86, 968, 980, 982, 86, 970, 971, 974, 86, 975, + 978, 977, 86, 983, 1013, 86, 986, 981, 984, 86, + 985, 979, 86, 987, 86, 86, 989, 990, 86, 86, + 988, 86, 86, 86, 991, 993, 86, 994, 86, 992, + 86, 995, 86, 86, 86, 1000, 86, 997, 86, 1004, - 1000, 86, 998, 86, 86, 86, 993, 999, 86, 86, - 996, 86, 86, 86, 1003, 86, 1006, 1004, 1008, 86, - 86, 1007, 1002, 86, 1009, 1014, 86, 1010, 86, 1016, - 1015, 86, 1012, 1005, 86, 86, 86, 86, 1024, 86, - 1021, 1017, 86, 86, 1019, 1011, 86, 86, 1022, 1023, - 86, 1026, 86, 1018, 86, 86, 86, 86, 173, 86, - 1020, 1037, 86, 1025, 1027, 1032, 86, 86, 86, 86, - 1028, 86, 1029, 86, 86, 1031, 1030, 1035, 1038, 1042, - 1033, 1036, 1041, 1039, 86, 1040, 1045, 86, 1043, 1044, - 86, 86, 86, 86, 86, 86, 86, 1054, 86, 1055, + 998, 86, 1003, 86, 86, 86, 86, 1001, 996, 1002, + 86, 86, 86, 999, 86, 1006, 86, 1009, 86, 1007, + 86, 1011, 86, 1005, 86, 1010, 1017, 1012, 86, 1015, + 86, 1018, 86, 86, 1019, 1008, 86, 1016, 86, 1014, + 86, 86, 1026, 1020, 1024, 1022, 1027, 86, 86, 1021, + 86, 86, 1025, 86, 86, 1029, 86, 86, 86, 86, + 86, 86, 1023, 174, 1037, 86, 86, 1035, 86, 1028, + 1040, 86, 1030, 1031, 1032, 1041, 86, 1034, 1033, 1038, + 1042, 86, 1036, 86, 1039, 86, 86, 1048, 86, 1045, + 1043, 1047, 86, 86, 86, 1044, 86, 86, 86, 1046, - 1047, 1049, 86, 86, 86, 86, 86, 1057, 86, 86, - 1046, 1065, 1048, 86, 1050, 1052, 1056, 1051, 1053, 1059, - 1060, 86, 86, 86, 1058, 86, 86, 1061, 1062, 1066, - 86, 1067, 1068, 1063, 86, 86, 1072, 1069, 86, 86, - 1070, 1064, 86, 1074, 86, 86, 86, 1077, 1071, 86, - 86, 1076, 1078, 168, 1080, 86, 1081, 86, 86, 1073, - 86, 86, 86, 1075, 1079, 1084, 86, 86, 86, 86, - 86, 1097, 86, 1100, 86, 86, 1098, 86, 1083, 1082, - 1085, 1087, 1088, 86, 86, 168, 1086, 1090, 1089, 86, - 1099, 86, 1091, 86, 1092, 1102, 86, 1104, 1093, 1103, + 86, 86, 1050, 1057, 1052, 1058, 86, 1060, 86, 86, + 1062, 86, 1049, 86, 1051, 86, 86, 1053, 1063, 1055, + 1054, 1056, 1059, 86, 86, 86, 1061, 1064, 86, 86, + 86, 1070, 1071, 1068, 1065, 86, 86, 1066, 86, 1072, + 1075, 86, 86, 1077, 86, 1067, 86, 86, 86, 86, + 1069, 86, 1081, 1073, 1074, 86, 1079, 1082, 168, 86, + 86, 1085, 1076, 1084, 1080, 1078, 86, 86, 86, 86, + 1083, 1086, 1088, 86, 86, 86, 86, 86, 1101, 86, + 1104, 86, 86, 1102, 86, 86, 1087, 1089, 1091, 1092, + 86, 173, 86, 1090, 1094, 1093, 86, 1103, 86, 1095, - 1094, 1105, 1101, 1107, 86, 1095, 86, 1106, 1108, 86, - 1096, 86, 86, 1109, 86, 1111, 86, 86, 86, 86, - 1110, 1114, 1117, 86, 1116, 86, 86, 1112, 86, 1113, - 86, 1115, 1118, 1123, 1121, 1124, 1122, 1120, 1125, 86, - 1119, 86, 1126, 86, 86, 1127, 1128, 86, 1129, 86, - 86, 86, 86, 166, 86, 86, 1140, 86, 1130, 86, - 1143, 1139, 86, 1145, 86, 1131, 86, 1132, 1141, 1142, - 86, 86, 1133, 86, 1134, 1144, 1146, 86, 1150, 86, - 1135, 86, 1151, 1147, 86, 1136, 1137, 86, 86, 1149, - 1148, 1152, 1138, 1156, 86, 86, 86, 86, 1159, 1153, + 1107, 1096, 1106, 86, 1108, 1097, 1110, 1098, 1109, 1105, + 1111, 86, 1099, 86, 86, 1112, 86, 1100, 1115, 86, + 1113, 86, 86, 86, 86, 86, 1118, 1114, 86, 1121, + 1116, 86, 86, 86, 1117, 1120, 1119, 86, 1126, 1122, + 1125, 86, 1124, 1123, 1128, 1129, 1127, 1130, 86, 1131, + 86, 86, 1132, 86, 86, 1133, 1134, 86, 86, 86, + 86, 86, 1147, 86, 1144, 86, 86, 86, 86, 1143, + 1148, 1135, 86, 1136, 1145, 1146, 1149, 86, 1137, 86, + 1138, 1150, 1154, 86, 86, 1151, 1139, 86, 86, 1155, + 86, 1140, 1141, 86, 86, 1153, 1152, 86, 1142, 1156, - 1157, 86, 86, 1154, 86, 1160, 1155, 86, 86, 86, - 86, 1164, 1162, 1165, 1163, 1158, 1161, 86, 86, 1167, - 86, 86, 86, 1170, 86, 86, 86, 1168, 1166, 86, - 1171, 1173, 86, 86, 86, 86, 1169, 86, 86, 1175, - 86, 1172, 86, 1178, 1174, 1177, 1179, 1182, 1180, 86, - 86, 1183, 1176, 86, 1184, 1181, 86, 86, 86, 86, - 86, 86, 86, 164, 1187, 1190, 1191, 1192, 1193, 1185, - 86, 1194, 1189, 1195, 86, 1186, 1188, 86, 1198, 86, - 86, 86, 1200, 1199, 86, 1201, 86, 1196, 86, 1202, - 86, 86, 86, 1197, 1203, 86, 1209, 86, 1211, 86, + 86, 1157, 1160, 86, 1161, 86, 1158, 1163, 1164, 86, + 86, 1159, 1168, 86, 1162, 1166, 1165, 86, 86, 86, + 86, 86, 1167, 86, 1169, 1174, 86, 86, 86, 1171, + 1172, 86, 86, 1177, 86, 1175, 1170, 86, 86, 1173, + 86, 86, 86, 86, 86, 86, 1176, 1184, 1179, 1182, + 1181, 1183, 1178, 1186, 86, 86, 86, 1180, 1188, 86, + 1185, 1187, 86, 86, 86, 86, 86, 86, 86, 1191, + 1194, 1195, 1196, 1197, 1189, 1190, 86, 1198, 1193, 1199, + 1192, 1200, 86, 1202, 86, 86, 86, 1204, 1203, 86, + 1205, 86, 86, 86, 1206, 86, 86, 86, 1201, 1213, - 86, 86, 86, 1215, 86, 1207, 1205, 86, 1204, 1206, - 1208, 86, 1213, 86, 1212, 1214, 86, 1210, 1217, 86, - 86, 1218, 86, 86, 86, 1220, 86, 1221, 86, 1223, - 86, 1226, 1216, 86, 1225, 1219, 1222, 86, 1227, 86, - 86, 86, 1224, 86, 1230, 86, 1231, 86, 1229, 1228, - 86, 1232, 86, 1235, 1237, 1238, 86, 86, 86, 86, - 86, 86, 1233, 1239, 1240, 1236, 86, 1234, 1242, 1247, - 86, 1241, 1245, 86, 86, 1243, 1244, 86, 86, 86, - 86, 86, 1246, 86, 86, 86, 1252, 1253, 1248, 1249, - 86, 1250, 86, 86, 86, 1258, 1254, 1259, 1262, 86, + 86, 1215, 86, 86, 1208, 86, 1207, 86, 1217, 1209, + 1211, 1212, 86, 1210, 86, 86, 86, 1216, 1219, 86, + 1214, 1221, 86, 86, 1222, 86, 1218, 86, 1224, 86, + 1225, 86, 1231, 86, 86, 1220, 1230, 1227, 1223, 1226, + 1229, 86, 86, 86, 86, 1228, 86, 1234, 86, 1235, + 1232, 86, 86, 86, 86, 86, 1239, 1241, 86, 1242, + 1243, 1233, 86, 86, 1236, 86, 86, 1240, 86, 1246, + 1237, 1244, 1238, 1245, 1249, 86, 1247, 86, 86, 86, + 86, 86, 1248, 1250, 1251, 86, 1252, 86, 1253, 86, + 86, 86, 1256, 1257, 86, 86, 86, 1262, 1263, 1254, - 1251, 86, 86, 86, 1256, 86, 86, 1261, 1255, 1260, - 86, 1266, 1257, 86, 86, 86, 86, 86, 86, 168, - 1264, 86, 1265, 1268, 1263, 1272, 86, 86, 86, 86, - 86, 1267, 1279, 86, 1277, 1269, 1275, 1271, 86, 1273, - 1276, 1274, 1270, 1281, 86, 1282, 86, 1278, 86, 86, - 1280, 86, 86, 1284, 1285, 86, 86, 86, 86, 86, - 1283, 1286, 86, 1289, 86, 1291, 86, 1295, 86, 1287, - 86, 1288, 86, 1292, 1290, 86, 86, 1293, 86, 86, - 86, 1299, 86, 1294, 1296, 1301, 1305, 86, 1306, 86, - 1297, 1298, 86, 1310, 1302, 86, 1303, 1307, 1300, 1304, + 86, 86, 1258, 86, 86, 1265, 1255, 1260, 1266, 86, + 86, 86, 1259, 1270, 86, 1261, 1264, 86, 86, 86, + 86, 86, 86, 1276, 86, 1268, 1269, 86, 1272, 1267, + 168, 86, 1277, 86, 86, 86, 1271, 86, 86, 1273, + 86, 1275, 1282, 1283, 168, 1279, 1274, 1281, 1280, 1286, + 1278, 1284, 86, 1287, 86, 86, 1288, 86, 1285, 86, + 86, 86, 1289, 1290, 86, 1291, 86, 86, 1292, 86, + 86, 1294, 86, 86, 1300, 86, 86, 1297, 1293, 86, + 86, 86, 1295, 86, 86, 1311, 86, 1298, 1296, 1304, + 1301, 1306, 1299, 86, 86, 1303, 86, 1302, 1310, 86, - 1308, 86, 1309, 86, 86, 86, 1311, 86, 1312, 86, - 86, 86, 1315, 86, 1314, 1318, 86, 86, 86, 1322, - 86, 86, 1313, 1317, 86, 86, 1323, 1319, 1316, 1320, - 1324, 86, 86, 1328, 86, 1321, 1326, 1325, 1327, 86, - 86, 86, 86, 86, 86, 86, 86, 1329, 86, 86, - 1334, 86, 86, 1332, 1330, 1339, 1335, 1333, 86, 1331, - 86, 86, 86, 86, 1336, 86, 1338, 1337, 86, 1343, - 86, 1341, 1342, 1340, 86, 1346, 1344, 1351, 86, 86, - 86, 1345, 86, 86, 1347, 1349, 86, 1354, 86, 86, - 86, 1357, 1353, 1348, 1350, 1352, 86, 86, 86, 86, + 1307, 1305, 1308, 1314, 1312, 1309, 1313, 86, 86, 86, + 86, 1318, 1316, 86, 86, 86, 86, 86, 1320, 86, + 86, 86, 1315, 1319, 1323, 1327, 86, 86, 1322, 1317, + 86, 1324, 1325, 86, 1321, 1328, 86, 86, 1329, 1326, + 86, 1331, 86, 86, 1332, 86, 1333, 1330, 86, 86, + 86, 86, 86, 86, 86, 86, 1339, 1334, 1335, 86, + 1337, 1344, 86, 1340, 1336, 1338, 86, 86, 86, 86, + 86, 1341, 1343, 86, 1342, 86, 1348, 1345, 86, 1346, + 86, 86, 1351, 1349, 1356, 86, 1347, 86, 1350, 86, + 86, 86, 1352, 1354, 86, 1357, 1362, 1359, 1364, 1358, - 1359, 1358, 1355, 86, 1356, 1360, 86, 86, 1364, 1361, - 1362, 1363, 86, 1365, 86, 1387, 1372, 1366, 1374, 1386, - 1367, 1368, 86, 1373, 86, 1369, 86, 1375, 86, 86, - 1378, 1370, 86, 1376, 86, 1371, 86, 1379, 1377, 1380, - 86, 1381, 86, 1382, 86, 1383, 86, 86, 86, 1384, - 86, 1385, 86, 1390, 1393, 1394, 1388, 86, 86, 86, - 86, 86, 1389, 1395, 1391, 86, 1397, 86, 1402, 1396, - 1392, 1398, 86, 1399, 1407, 1400, 86, 1401, 1403, 1404, - 1406, 86, 86, 1405, 86, 1410, 86, 86, 86, 86, - 1411, 86, 86, 1409, 1414, 1412, 86, 86, 86, 1420, + 1353, 1355, 86, 1365, 86, 86, 86, 1360, 86, 86, + 1361, 86, 1369, 1379, 1363, 86, 1380, 166, 86, 86, + 1367, 1368, 1377, 86, 1366, 86, 1370, 1378, 1381, 1383, + 1371, 86, 86, 1372, 1373, 86, 86, 1384, 1374, 86, + 1382, 1385, 86, 1386, 1375, 86, 1388, 86, 1376, 86, + 1389, 86, 1390, 86, 86, 86, 1395, 86, 86, 86, + 1387, 1398, 1399, 1393, 164, 86, 1414, 86, 86, 1391, + 1400, 1392, 1396, 86, 86, 1394, 86, 1397, 1401, 86, + 1407, 86, 1402, 1408, 1409, 86, 86, 1403, 86, 1404, + 86, 1405, 1410, 1406, 1411, 86, 1415, 86, 1418, 86, - 1408, 1416, 1415, 86, 1421, 86, 86, 86, 86, 1413, - 86, 86, 1419, 1424, 1422, 1417, 1418, 86, 86, 86, - 1426, 1423, 86, 163, 1425, 1430, 86, 1429, 1432, 86, - 86, 86, 1433, 86, 1431, 1427, 1434, 86, 86, 1438, - 86, 86, 1435, 1428, 1440, 86, 86, 1437, 86, 1441, - 1436, 1442, 86, 86, 1445, 86, 86, 86, 86, 86, - 1447, 1439, 86, 86, 1449, 1451, 86, 86, 86, 161, - 1453, 1450, 86, 1443, 1444, 86, 1446, 1455, 1448, 86, - 86, 86, 86, 1454, 1452, 1457, 1459, 1458, 86, 1456, - 86, 1461, 86, 1460, 86, 86, 86, 1462, 1467, 1468, + 1412, 1416, 86, 86, 1417, 86, 1413, 86, 1419, 86, + 1425, 1420, 86, 1426, 1421, 86, 86, 86, 1422, 86, + 86, 86, 86, 1424, 1429, 1427, 1423, 86, 86, 1428, + 1431, 1435, 86, 1434, 1430, 86, 1437, 86, 86, 86, + 1432, 1438, 86, 1440, 86, 1439, 86, 1443, 86, 86, + 1436, 86, 1433, 1445, 86, 1442, 86, 1446, 86, 86, + 1450, 86, 86, 1441, 1447, 86, 86, 86, 1452, 1444, + 86, 86, 1448, 1456, 86, 1454, 1455, 86, 86, 1449, + 1458, 86, 1451, 86, 86, 86, 1453, 163, 1460, 1462, + 86, 86, 1457, 1459, 86, 1461, 1464, 86, 1463, 1465, - 1463, 1464, 1470, 1465, 86, 86, 86, 1466, 86, 86, - 86, 1469, 86, 1474, 86, 86, 168, 86, 1471, 86, - 1479, 1480, 86, 1473, 1482, 86, 86, 86, 1481, 1472, - 86, 1476, 86, 86, 86, 1475, 86, 1477, 86, 1483, - 86, 1490, 1478, 86, 86, 1484, 1487, 86, 86, 86, - 1488, 86, 1485, 1486, 1494, 86, 1489, 1495, 86, 86, - 1497, 1499, 159, 1491, 86, 1493, 1500, 86, 86, 1492, - 1498, 1496, 86, 1502, 86, 86, 1503, 1501, 86, 86, - 1511, 86, 86, 86, 1508, 86, 1504, 1509, 1513, 1505, - 1506, 1510, 86, 1507, 86, 1512, 1514, 86, 1516, 86, + 86, 1466, 1467, 1468, 86, 86, 86, 1472, 1473, 1475, + 1469, 86, 1470, 86, 86, 86, 1474, 86, 86, 1471, + 86, 1479, 86, 86, 86, 168, 1476, 86, 86, 1485, + 1486, 1478, 86, 1488, 86, 86, 86, 1477, 1487, 86, + 1482, 86, 1481, 1480, 86, 86, 86, 1483, 1489, 86, + 86, 1484, 86, 1496, 1490, 86, 86, 1493, 86, 86, + 1494, 1491, 86, 1500, 1492, 1501, 86, 1495, 86, 86, + 1497, 1505, 161, 1503, 1499, 86, 1506, 86, 86, 86, + 1498, 1504, 1502, 86, 1508, 86, 1509, 1507, 86, 86, + 86, 86, 1520, 1510, 1514, 1519, 86, 1515, 1511, 1516, - 86, 86, 1518, 1517, 86, 1521, 1522, 86, 1515, 86, - 86, 1519, 86, 86, 86, 1525, 86, 1520, 86, 86, - 1530, 86, 86, 86, 1534, 1523, 1531, 1527, 86, 1524, - 86, 86, 1526, 1533, 1528, 1535, 1529, 86, 86, 1532, - 86, 86, 86, 86, 86, 1537, 1541, 1536, 1543, 1542, - 86, 86, 1538, 1539, 86, 1546, 86, 86, 86, 1540, - 1545, 1551, 1544, 86, 1550, 1547, 1548, 86, 1552, 1554, - 86, 86, 1553, 86, 86, 86, 1549, 1555, 86, 1559, - 1560, 1561, 86, 1558, 86, 86, 86, 86, 1565, 1556, - 86, 1562, 86, 1563, 1564, 86, 1557, 86, 86, 86, + 1512, 86, 86, 1513, 1517, 1518, 1522, 1521, 86, 86, + 86, 1523, 86, 86, 86, 86, 86, 86, 1527, 1528, + 86, 86, 1531, 86, 86, 86, 1536, 1524, 1526, 86, + 86, 86, 1540, 1529, 1537, 1525, 1530, 1533, 86, 1534, + 1532, 86, 1535, 86, 86, 86, 86, 1538, 86, 86, + 1539, 86, 86, 1541, 1547, 86, 1549, 86, 1543, 1548, + 1544, 1545, 1542, 86, 1552, 86, 1551, 1546, 86, 86, + 86, 1556, 1557, 1550, 86, 1558, 86, 1554, 86, 86, + 1553, 86, 1560, 86, 86, 1561, 86, 1565, 1559, 1555, + 1566, 1564, 1562, 86, 1567, 86, 86, 86, 1568, 1571, - 1567, 86, 86, 86, 1572, 86, 1566, 86, 86, 1571, - 1568, 86, 86, 1569, 1578, 1574, 1570, 1575, 1580, 1579, - 86, 86, 1576, 1581, 86, 1573, 86, 1583, 86, 86, - 1577, 86, 86, 86, 86, 86, 1591, 1587, 86, 86, - 1586, 1582, 86, 1592, 1594, 86, 86, 1584, 1585, 86, - 86, 1597, 1588, 1590, 1589, 1596, 86, 86, 86, 86, - 86, 86, 86, 86, 1595, 1593, 86, 1603, 86, 1605, - 86, 86, 1613, 1606, 1612, 1598, 1602, 1599, 1600, 1601, - 86, 1604, 86, 1607, 1608, 86, 1609, 86, 86, 86, - 86, 86, 86, 1610, 1611, 1614, 86, 1619, 1615, 86, + 86, 86, 1569, 1570, 86, 1563, 86, 86, 86, 86, + 86, 86, 86, 1578, 86, 1572, 86, 1577, 86, 86, + 1574, 86, 86, 1575, 1580, 1573, 1576, 1581, 86, 1589, + 1584, 86, 1582, 86, 1579, 1585, 86, 1586, 1583, 86, + 86, 1588, 1587, 86, 86, 1593, 86, 86, 1592, 1597, + 1590, 86, 1591, 86, 1600, 86, 1598, 86, 86, 86, + 86, 1603, 86, 1594, 1602, 1596, 1595, 86, 86, 86, + 86, 86, 86, 1611, 86, 159, 1601, 86, 1604, 1599, + 1612, 1605, 86, 86, 1608, 1614, 86, 1606, 1607, 1610, + 1615, 86, 1609, 86, 1613, 86, 1618, 86, 1616, 1617, - 1621, 86, 1616, 1623, 86, 86, 1620, 1618, 1625, 86, - 1624, 86, 1627, 86, 86, 1617, 1628, 1622, 86, 86, - 86, 86, 1629, 1630, 1626, 1634, 1635, 86, 86, 86, - 86, 86, 86, 1631, 1640, 1638, 86, 1639, 1632, 86, - 86, 1633, 1642, 86, 86, 86, 1636, 1643, 1644, 86, - 1637, 86, 1641, 86, 1647, 1645, 86, 86, 1650, 86, - 86, 1646, 86, 86, 86, 1649, 86, 1654, 86, 1656, - 86, 86, 86, 1648, 1651, 1657, 86, 1661, 1655, 86, - 86, 1652, 1653, 86, 86, 86, 1659, 1667, 1658, 1664, - 1666, 86, 86, 1662, 86, 1669, 86, 1660, 1663, 86, + 86, 86, 86, 1621, 86, 86, 1619, 1622, 86, 86, + 1625, 1629, 86, 1620, 86, 1631, 86, 1626, 86, 1630, + 1623, 86, 1624, 86, 86, 1628, 86, 86, 1627, 1634, + 1635, 1632, 86, 86, 1640, 86, 1633, 1636, 1637, 86, + 86, 1641, 86, 86, 1646, 1638, 86, 1645, 1644, 86, + 86, 86, 1639, 1642, 1648, 86, 86, 1650, 86, 1649, + 1643, 86, 86, 86, 86, 1653, 86, 1651, 86, 1647, + 86, 1656, 86, 1655, 86, 86, 86, 1652, 86, 1660, + 86, 1657, 86, 1654, 86, 1662, 86, 1663, 86, 1658, + 1661, 1659, 86, 1664, 86, 1665, 86, 1667, 86, 1670, - 1665, 86, 86, 86, 168, 1672, 1675, 86, 1674, 86, - 1671, 86, 1668, 86, 86, 86, 86, 1683, 1670, 86, - 1676, 1673, 86, 86, 1684, 1678, 86, 1677, 1681, 1687, - 86, 86, 1679, 1680, 86, 1688, 1689, 86, 1693, 1691, - 1682, 86, 1685, 1686, 86, 86, 1692, 1695, 86, 1697, - 86, 86, 86, 86, 1690, 86, 86, 86, 1699, 86, - 1700, 86, 1696, 86, 1702, 1694, 86, 1703, 86, 86, - 1698, 1704, 1707, 86, 1708, 86, 1706, 1705, 86, 86, - 1701, 86, 1712, 1715, 1717, 1713, 1709, 1710, 86, 86, - 86, 86, 86, 1716, 1723, 86, 1720, 1714, 1711, 1719, + 1668, 1672, 86, 86, 86, 86, 1669, 1666, 1673, 86, + 1675, 86, 1674, 1671, 86, 1678, 1677, 86, 1681, 86, + 168, 86, 1680, 86, 86, 1676, 86, 86, 86, 86, + 1690, 86, 86, 1679, 1682, 86, 1683, 1691, 1685, 1694, + 86, 1684, 1688, 86, 86, 1686, 1687, 86, 1696, 86, + 86, 1692, 1689, 1695, 86, 1693, 1698, 86, 1700, 1702, + 86, 86, 1699, 86, 86, 86, 86, 1697, 1707, 1701, + 1704, 86, 1706, 86, 1703, 86, 1709, 86, 1710, 86, + 1705, 86, 86, 86, 86, 1714, 86, 1715, 86, 86, + 1722, 86, 86, 1711, 1724, 86, 86, 1708, 1713, 1712, - 1718, 86, 1724, 1725, 1722, 86, 86, 1727, 86, 86, - 1726, 86, 1728, 1729, 86, 86, 86, 1721, 86, 86, - 1730, 86, 86, 1736, 1737, 1735, 86, 1731, 86, 86, - 86, 1738, 1739, 86, 1732, 86, 86, 1733, 86, 86, - 1741, 1734, 1742, 86, 1743, 86, 86, 86, 86, 86, - 86, 1740, 86, 1745, 1744, 86, 1752, 1753, 86, 86, - 1747, 1748, 1749, 1758, 86, 1746, 86, 1750, 86, 86, - 86, 1755, 86, 86, 86, 1751, 1756, 1754, 86, 1757, - 1764, 86, 86, 86, 86, 86, 1760, 1762, 1759, 1766, - 86, 1768, 1761, 86, 1767, 1763, 86, 1770, 1765, 86, + 1717, 86, 1716, 86, 1719, 86, 86, 1720, 1723, 1718, + 1725, 1727, 86, 1739, 1726, 1729, 1731, 1728, 1732, 1721, + 1730, 86, 86, 86, 86, 86, 1734, 1736, 1733, 86, + 1735, 86, 86, 86, 86, 86, 1737, 86, 1743, 86, + 1742, 1744, 86, 86, 86, 1738, 1746, 86, 1745, 86, + 1749, 86, 86, 1740, 1748, 1741, 86, 86, 86, 86, + 1751, 1750, 1747, 86, 86, 86, 86, 86, 86, 86, + 1760, 1759, 86, 1754, 86, 3299, 86, 1752, 1753, 1755, + 1756, 1757, 86, 86, 1762, 1765, 1763, 86, 1761, 1758, + 86, 86, 86, 1771, 86, 1764, 1766, 86, 86, 1767, - 1769, 86, 86, 86, 86, 86, 86, 86, 1773, 1775, - 1782, 86, 1776, 86, 1772, 1777, 1774, 1771, 1783, 86, - 1778, 1779, 1784, 86, 86, 1785, 1780, 1787, 86, 1786, - 1781, 1788, 86, 86, 86, 86, 86, 86, 86, 1791, - 1792, 1789, 86, 86, 1800, 86, 86, 1795, 86, 86, - 86, 86, 1790, 1794, 1797, 1793, 86, 1798, 1799, 1801, - 86, 1796, 1806, 1802, 1803, 86, 1804, 86, 86, 86, - 1805, 86, 1810, 86, 86, 86, 1814, 1807, 86, 1813, - 86, 86, 1812, 1818, 86, 1811, 1809, 86, 86, 1822, - 1815, 86, 1808, 1816, 1823, 86, 1817, 86, 1819, 86, + 86, 86, 1775, 1773, 1769, 86, 86, 1768, 86, 86, + 86, 86, 1774, 1770, 86, 86, 86, 1772, 86, 1780, + 1776, 1782, 1777, 86, 86, 1783, 1781, 1779, 1784, 86, + 1778, 1785, 1789, 1786, 1790, 86, 1791, 86, 1787, 86, + 86, 86, 1793, 1794, 1795, 86, 86, 86, 1788, 86, + 86, 1792, 1798, 86, 1796, 1799, 86, 86, 86, 1808, + 86, 86, 86, 86, 86, 1797, 1802, 1804, 1800, 1801, + 1805, 1806, 1807, 86, 86, 1803, 1810, 86, 86, 86, + 86, 1809, 1811, 86, 1817, 86, 86, 1812, 86, 1814, + 1813, 86, 1821, 1820, 86, 1819, 86, 86, 1816, 1825, - 1828, 86, 1820, 1825, 1827, 1821, 86, 1830, 86, 1831, - 1833, 1824, 86, 1826, 86, 86, 86, 1832, 86, 1829, - 1834, 86, 1837, 86, 86, 1841, 86, 1839, 86, 86, - 86, 86, 86, 1840, 1842, 1836, 1838, 86, 1835, 86, - 1845, 86, 86, 86, 1851, 86, 1846, 1853, 1843, 1844, - 86, 86, 1847, 86, 1848, 1854, 1849, 1850, 1856, 86, - 86, 86, 86, 1855, 86, 86, 1852, 1861, 86, 86, - 86, 1857, 86, 86, 1865, 86, 1867, 1860, 1858, 86, - 86, 1859, 168, 86, 1863, 1868, 86, 1862, 1864, 1866, - 86, 1869, 1871, 86, 1873, 1870, 1875, 86, 86, 86, + 86, 1818, 86, 86, 1815, 1823, 1822, 1829, 1824, 86, + 86, 86, 1830, 86, 3299, 1826, 1834, 1831, 86, 1835, + 1828, 1827, 1837, 86, 1832, 86, 86, 1838, 1840, 86, + 86, 1839, 1833, 86, 86, 1841, 1836, 86, 1844, 86, + 86, 1848, 86, 1846, 86, 86, 86, 86, 86, 1847, + 1842, 1843, 1845, 1849, 86, 86, 1852, 86, 86, 86, + 86, 1850, 86, 1853, 86, 1851, 1858, 86, 1854, 1860, + 1855, 1861, 1856, 1857, 86, 86, 86, 86, 1863, 86, + 1864, 1866, 1865, 86, 1868, 86, 86, 1862, 1859, 1867, + 86, 1872, 86, 86, 86, 86, 86, 86, 1874, 168, - 86, 86, 1872, 1879, 86, 86, 86, 86, 1874, 86, - 86, 1877, 1881, 86, 1886, 1880, 86, 1876, 1882, 1878, - 86, 1883, 86, 1890, 86, 1887, 1884, 86, 1889, 86, - 1885, 86, 1891, 86, 1888, 1892, 86, 1895, 1893, 1897, - 1894, 1896, 86, 86, 86, 86, 1898, 86, 1899, 86, - 86, 86, 86, 86, 86, 86, 86, 1904, 1905, 86, - 86, 1909, 86, 1906, 86, 1917, 86, 1900, 1902, 1903, - 1908, 1901, 1907, 1910, 86, 86, 86, 1916, 1918, 1912, - 1913, 1915, 86, 86, 86, 86, 1911, 1914, 86, 86, - 86, 1924, 86, 86, 1927, 1919, 1928, 86, 1929, 86, + 1875, 1870, 1876, 86, 1871, 1869, 86, 86, 1877, 86, + 86, 1881, 86, 1873, 86, 1878, 1880, 1883, 86, 1879, + 1887, 86, 86, 86, 1882, 86, 1885, 86, 86, 1884, + 1889, 1886, 86, 86, 1894, 86, 1888, 1890, 86, 1891, + 86, 1898, 86, 86, 1897, 1895, 1899, 1892, 1900, 86, + 86, 86, 1893, 1896, 86, 1901, 1903, 1904, 86, 86, + 1902, 1906, 86, 86, 86, 86, 1905, 1907, 86, 86, + 86, 86, 86, 86, 1912, 86, 1913, 86, 86, 86, + 86, 1914, 1917, 1908, 1921, 1915, 1910, 1909, 1911, 1918, + 1916, 1922, 86, 86, 1925, 86, 86, 1923, 1920, 1926, - 86, 1920, 86, 1921, 1922, 1923, 1925, 86, 1926, 86, - 1930, 1931, 86, 86, 1932, 1935, 86, 86, 86, 1937, - 1938, 1933, 1936, 1934, 1939, 86, 1941, 1940, 86, 86, - 86, 86, 86, 86, 1943, 1944, 86, 86, 1946, 1947, - 86, 86, 86, 86, 1951, 86, 86, 1950, 1953, 1945, - 1952, 86, 1948, 1942, 86, 86, 86, 1961, 1954, 1955, - 1956, 86, 1949, 86, 1963, 1957, 86, 86, 86, 1964, - 86, 1958, 86, 1959, 1967, 86, 1960, 1970, 86, 1968, - 1965, 1962, 1966, 86, 86, 86, 86, 1971, 1974, 86, - 1969, 86, 1976, 86, 86, 86, 1979, 1980, 86, 86, + 86, 86, 1919, 86, 86, 86, 3299, 86, 1924, 1932, + 86, 86, 1935, 1936, 86, 1937, 86, 1927, 86, 1928, + 1930, 1929, 86, 1931, 1933, 86, 1934, 1939, 86, 86, + 1940, 1943, 86, 86, 1945, 1947, 86, 1944, 1938, 1946, + 86, 86, 86, 1941, 1949, 86, 1942, 86, 86, 86, + 86, 1951, 1952, 86, 1954, 1955, 86, 86, 86, 86, + 1948, 86, 1959, 86, 1958, 1961, 86, 1953, 1960, 86, + 1950, 86, 1956, 86, 86, 86, 86, 86, 1969, 1957, + 2017, 1962, 1963, 1964, 86, 86, 1966, 1971, 1965, 86, + 1973, 1967, 1972, 86, 1968, 1970, 86, 86, 1975, 1978, - 1982, 86, 86, 86, 1972, 86, 1973, 86, 86, 1987, - 1988, 86, 1975, 1977, 1984, 86, 1978, 1985, 86, 1981, - 86, 86, 86, 86, 1986, 86, 1994, 1983, 1989, 1991, - 1992, 86, 86, 1990, 1998, 86, 86, 1997, 2001, 2002, - 86, 2003, 86, 2000, 86, 86, 1993, 1996, 86, 1995, - 86, 86, 86, 2004, 86, 1999, 86, 86, 86, 2005, - 2009, 86, 2012, 2013, 2008, 86, 2014, 86, 86, 86, - 86, 2006, 86, 2007, 2010, 86, 86, 2022, 86, 2017, - 86, 2021, 2016, 86, 2011, 2015, 86, 86, 2019, 3280, - 86, 2026, 2020, 86, 86, 2018, 2027, 86, 2024, 2023, + 1974, 86, 86, 86, 1977, 86, 1982, 86, 1976, 86, + 1979, 86, 1984, 86, 86, 86, 1987, 1988, 86, 86, + 1990, 86, 1980, 86, 1981, 86, 86, 86, 86, 1996, + 86, 86, 1995, 1985, 1992, 1983, 1986, 1993, 86, 1989, + 86, 86, 1998, 86, 86, 2002, 86, 1994, 1991, 2000, + 1999, 86, 1997, 86, 2006, 86, 2005, 86, 86, 2009, + 86, 86, 2010, 2012, 2008, 86, 86, 2001, 86, 2004, + 2011, 86, 2003, 86, 86, 2007, 86, 86, 86, 2020, + 86, 2014, 2013, 2021, 2022, 2015, 2016, 86, 86, 86, + 86, 86, 2025, 86, 2018, 86, 86, 2030, 86, 86, - 2029, 86, 2028, 86, 86, 2025, 86, 2030, 2031, 2033, - 86, 86, 86, 2032, 86, 2034, 2037, 2040, 2035, 86, - 86, 2043, 86, 86, 2042, 2036, 86, 2044, 86, 86, - 86, 86, 2038, 2045, 2039, 2041, 86, 2046, 2050, 86, - 86, 2047, 2051, 86, 2052, 2057, 2048, 2054, 2055, 2053, - 86, 2049, 86, 86, 86, 2059, 86, 86, 86, 86, - 2064, 86, 2056, 2061, 2058, 86, 86, 2066, 2060, 2062, - 168, 86, 86, 86, 86, 2067, 86, 86, 86, 2073, - 2072, 2071, 86, 2063, 2068, 86, 2069, 2065, 2074, 86, - 2070, 2075, 86, 2077, 86, 86, 86, 86, 2116, 86, + 2023, 2029, 2024, 2019, 86, 86, 86, 86, 2026, 2034, + 86, 2027, 2035, 86, 2031, 2028, 2036, 2038, 2033, 2032, + 2037, 86, 86, 2041, 86, 86, 86, 86, 86, 86, + 2048, 2042, 2045, 2039, 86, 86, 86, 86, 2040, 2043, + 2051, 86, 2050, 86, 2052, 2044, 86, 86, 2046, 2047, + 2049, 2053, 86, 86, 2057, 2054, 2058, 86, 2059, 86, + 2060, 2062, 86, 2055, 2063, 2061, 86, 86, 2056, 86, + 86, 86, 2067, 86, 2065, 86, 86, 86, 86, 2064, + 2069, 86, 2072, 2066, 2073, 2068, 2074, 2070, 86, 168, + 86, 86, 86, 86, 2076, 86, 86, 86, 2081, 86, - 2078, 2079, 2076, 2080, 2081, 86, 86, 86, 86, 2083, - 2082, 86, 2085, 86, 2089, 86, 86, 86, 86, 2084, - 2086, 2088, 86, 2091, 86, 2087, 2090, 2092, 86, 2094, - 86, 2093, 86, 86, 86, 86, 86, 86, 86, 2099, - 2101, 2096, 2100, 86, 2095, 86, 86, 2103, 86, 2106, - 86, 2097, 86, 2098, 2102, 86, 86, 2110, 86, 2105, - 2107, 2104, 86, 2111, 2109, 86, 86, 2112, 2108, 2117, - 86, 2115, 86, 2114, 86, 2118, 86, 2113, 86, 2123, - 86, 86, 86, 2125, 86, 86, 2126, 2127, 86, 86, - 2119, 86, 2120, 2121, 2122, 2129, 86, 2128, 2124, 86, + 2075, 2080, 2071, 2077, 2088, 2078, 86, 2082, 2086, 2079, + 2083, 86, 2084, 86, 86, 86, 86, 2085, 86, 86, + 86, 2087, 2089, 2092, 2091, 86, 86, 2090, 86, 2094, + 86, 86, 2098, 86, 86, 86, 2097, 2093, 2095, 86, + 2100, 86, 2096, 2099, 2101, 86, 2103, 86, 2102, 86, + 86, 86, 86, 86, 86, 86, 2108, 2110, 2105, 2109, + 86, 2104, 86, 86, 2112, 86, 2115, 86, 2106, 86, + 2107, 2111, 86, 86, 2119, 86, 2114, 2116, 2113, 86, + 2120, 2118, 86, 86, 2121, 2117, 86, 86, 2124, 86, + 2123, 2126, 86, 86, 2122, 86, 2127, 86, 2132, 2125, - 2130, 86, 2133, 86, 86, 86, 86, 2132, 86, 86, - 2134, 86, 2137, 86, 2131, 2138, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 2136, 2135, 2146, 2140, 2141, - 2139, 2143, 86, 2142, 86, 2145, 2150, 2151, 86, 2144, - 2147, 86, 2148, 86, 2154, 86, 2149, 86, 2155, 86, - 2152, 2158, 2157, 86, 2153, 86, 86, 86, 86, 86, - 2160, 86, 86, 2161, 2166, 2156, 2162, 86, 2164, 86, - 86, 2159, 2168, 2165, 2170, 86, 2163, 86, 86, 86, - 2173, 86, 86, 2169, 2172, 86, 2167, 2174, 86, 2178, - 2175, 86, 86, 86, 86, 86, 2179, 86, 86, 2176, + 86, 86, 2134, 2128, 86, 2129, 86, 86, 2135, 86, + 2130, 2131, 2136, 86, 86, 2137, 86, 2133, 2138, 86, + 86, 2139, 2141, 2142, 86, 86, 86, 2146, 86, 86, + 86, 2143, 2140, 86, 86, 86, 2144, 2147, 86, 86, + 86, 86, 86, 86, 86, 2145, 2149, 2150, 2151, 2155, + 2152, 2148, 2160, 86, 2159, 2154, 86, 86, 86, 86, + 86, 2157, 2156, 2163, 2164, 2153, 86, 2158, 86, 86, + 2167, 2166, 86, 86, 2161, 86, 86, 2162, 2165, 2170, + 2169, 86, 2171, 86, 86, 86, 2175, 2168, 86, 86, + 2173, 2177, 2179, 86, 2172, 2174, 86, 86, 86, 2182, - 86, 2181, 86, 2171, 2190, 2180, 2184, 86, 2177, 86, - 2185, 2183, 86, 2182, 2188, 2186, 86, 2189, 2187, 86, - 86, 2194, 86, 86, 86, 86, 2196, 2192, 86, 2197, - 86, 86, 2198, 86, 2191, 2193, 2195, 86, 2199, 2203, - 2201, 86, 86, 2202, 2205, 86, 86, 86, 2200, 2206, - 86, 2207, 2210, 86, 86, 86, 86, 2208, 2209, 2211, - 2215, 86, 2204, 86, 86, 2214, 2212, 86, 86, 86, - 86, 86, 86, 86, 86, 2213, 86, 2224, 86, 2225, - 2221, 2216, 2217, 2218, 2219, 2222, 2220, 2226, 86, 2223, - 86, 86, 86, 86, 2227, 86, 2229, 2235, 86, 2230, + 86, 86, 2178, 2181, 2176, 2183, 2184, 86, 86, 2187, + 86, 86, 86, 86, 86, 86, 2188, 86, 2193, 86, + 2190, 86, 2180, 2189, 2197, 2185, 86, 2194, 2186, 2195, + 86, 2192, 2191, 86, 86, 86, 2199, 86, 2198, 86, + 86, 2196, 2203, 86, 86, 2205, 86, 2201, 86, 2204, + 86, 2206, 86, 2200, 86, 2202, 86, 2207, 2209, 2208, + 86, 2210, 2212, 2214, 2211, 2216, 86, 2213, 2215, 86, + 86, 86, 86, 86, 86, 86, 2219, 2220, 2217, 2224, + 86, 86, 2218, 86, 2223, 86, 2221, 86, 86, 86, + 86, 86, 86, 86, 2222, 2233, 2234, 86, 86, 2225, - 86, 2237, 86, 86, 2234, 168, 2231, 2228, 86, 2236, - 2232, 86, 2239, 86, 2243, 2245, 2240, 2246, 2233, 2244, - 86, 86, 2238, 86, 86, 86, 2241, 2242, 2247, 86, - 2250, 86, 2248, 86, 2251, 86, 2255, 86, 86, 2256, - 86, 2259, 86, 3280, 2254, 86, 86, 86, 2252, 2249, - 2260, 2263, 2257, 86, 2261, 2262, 86, 2264, 86, 2253, - 2258, 86, 2265, 86, 86, 86, 86, 86, 2267, 86, - 86, 86, 2270, 86, 86, 2273, 86, 86, 86, 2277, - 86, 2266, 2279, 86, 2280, 2268, 2272, 86, 86, 2275, - 86, 2269, 2271, 2282, 2274, 86, 86, 2276, 86, 86, + 2229, 2226, 2228, 2227, 2230, 2231, 2235, 86, 86, 2232, + 86, 86, 86, 2236, 2238, 86, 2244, 86, 86, 2246, + 86, 2239, 86, 86, 2243, 2240, 2237, 2245, 86, 2241, + 86, 86, 2248, 168, 2253, 2249, 2250, 2242, 2255, 2254, + 86, 2247, 2256, 86, 86, 86, 2257, 86, 86, 86, + 2251, 2260, 86, 2258, 86, 2252, 86, 2261, 2264, 2265, + 86, 86, 2266, 86, 2269, 86, 2267, 2259, 86, 2275, + 86, 2262, 86, 2270, 86, 2271, 2272, 86, 86, 2274, + 86, 2268, 2263, 2273, 2277, 86, 86, 86, 86, 86, + 86, 86, 2276, 2280, 86, 86, 2283, 86, 86, 86, - 2278, 86, 2281, 2284, 2287, 86, 86, 2285, 2290, 86, - 86, 86, 86, 86, 2288, 86, 2283, 2286, 2291, 86, - 86, 86, 86, 2289, 86, 2292, 3280, 86, 86, 86, - 2293, 2304, 2298, 2303, 2296, 2294, 2302, 2295, 86, 2300, - 2297, 2301, 2299, 2305, 86, 86, 86, 86, 86, 2307, - 2306, 2308, 86, 86, 2311, 2312, 86, 86, 86, 2313, - 86, 2309, 2314, 86, 86, 2310, 86, 2317, 2324, 2318, - 2320, 86, 2319, 2315, 2321, 86, 86, 2316, 86, 86, - 86, 2322, 86, 2323, 2327, 86, 2328, 86, 2330, 86, - 86, 86, 2326, 2332, 86, 86, 2335, 86, 86, 2325, + 2287, 2289, 86, 86, 2282, 86, 2278, 2290, 86, 86, + 2285, 86, 2279, 2281, 2292, 2284, 86, 86, 2286, 86, + 2291, 2288, 86, 2294, 2297, 86, 2300, 86, 86, 2295, + 2296, 86, 86, 86, 2293, 2298, 2301, 86, 86, 86, + 86, 86, 86, 2299, 86, 86, 86, 86, 2314, 86, + 2302, 2303, 2308, 2313, 86, 2311, 2304, 2306, 2318, 2310, + 2307, 2305, 2309, 2312, 2315, 86, 86, 86, 2319, 86, + 2317, 2316, 86, 2321, 2322, 86, 86, 86, 2323, 2324, + 86, 86, 2320, 86, 2327, 86, 86, 2330, 86, 2331, + 86, 86, 2325, 86, 2326, 2328, 2332, 86, 2329, 86, - 2334, 2329, 2336, 86, 86, 86, 2333, 86, 2331, 86, - 2342, 86, 2337, 2338, 2341, 86, 2344, 86, 86, 2339, - 86, 86, 86, 2347, 86, 2348, 2340, 2346, 2350, 86, - 86, 86, 2354, 86, 2343, 86, 2345, 86, 86, 86, - 2349, 2351, 86, 2358, 86, 2352, 2359, 86, 86, 2361, - 2353, 86, 86, 2357, 86, 2355, 2364, 86, 86, 86, - 2356, 2360, 86, 2362, 86, 2366, 2363, 86, 2367, 86, - 2371, 86, 2365, 2373, 86, 86, 2372, 2368, 2374, 86, - 2369, 86, 86, 86, 2378, 86, 2377, 2379, 86, 86, - 2370, 86, 86, 2375, 2383, 2376, 2381, 2385, 86, 86, + 2337, 86, 2333, 2338, 86, 2334, 86, 2340, 86, 86, + 86, 2336, 86, 2335, 2342, 86, 86, 2344, 2345, 86, + 2346, 86, 86, 86, 2347, 2339, 86, 2341, 86, 2352, + 86, 2343, 2348, 2351, 86, 86, 2349, 2354, 86, 86, + 86, 2356, 86, 2357, 86, 2350, 86, 2358, 2360, 86, + 86, 2364, 86, 2353, 86, 86, 86, 2355, 86, 2362, + 86, 2361, 2359, 86, 2368, 2369, 86, 86, 2371, 2363, + 86, 2367, 2374, 86, 2365, 86, 86, 2370, 2366, 86, + 86, 86, 2372, 2376, 86, 2373, 86, 2381, 86, 86, + 86, 2383, 86, 2377, 86, 2375, 86, 2382, 2378, 2379, - 86, 2388, 2390, 2386, 86, 2391, 2380, 86, 86, 2382, - 86, 2384, 2389, 86, 2387, 2392, 86, 86, 86, 2395, - 86, 86, 86, 86, 86, 3280, 2394, 2396, 2403, 2393, - 2397, 2398, 2399, 2401, 2400, 2402, 86, 2404, 2407, 86, - 86, 86, 86, 2406, 86, 2405, 86, 2408, 168, 86, - 86, 2415, 86, 2410, 86, 2409, 86, 86, 86, 86, - 2411, 86, 2412, 86, 2422, 2413, 2414, 2417, 2418, 2416, - 86, 86, 86, 2419, 2420, 2421, 2423, 2426, 86, 86, - 2427, 2428, 86, 86, 2425, 2431, 2429, 86, 2432, 86, - 2424, 86, 2430, 86, 86, 2434, 86, 86, 2433, 86, + 86, 2388, 2387, 2384, 86, 86, 86, 2391, 86, 2389, + 2380, 2393, 86, 86, 86, 86, 86, 2390, 2385, 2395, + 2386, 2396, 2398, 2400, 86, 86, 2392, 2397, 86, 86, + 2401, 86, 86, 2406, 2394, 3299, 2399, 2402, 2403, 86, + 86, 86, 2405, 86, 2404, 86, 86, 2411, 2412, 2407, + 2408, 86, 2409, 86, 86, 2413, 86, 86, 2416, 2410, + 86, 2417, 86, 2418, 86, 2415, 2414, 86, 168, 2420, + 86, 2419, 86, 2421, 86, 2426, 86, 86, 86, 86, + 86, 86, 86, 86, 2422, 2427, 2423, 2428, 2424, 2429, + 2425, 86, 2432, 86, 2433, 2430, 2431, 86, 2434, 2437, - 2436, 86, 86, 86, 2440, 2441, 86, 2435, 86, 2437, - 86, 86, 86, 2443, 2444, 2438, 86, 2446, 86, 2445, - 2442, 2439, 86, 2448, 86, 86, 86, 2447, 2449, 86, - 2452, 86, 2451, 2450, 2453, 86, 2455, 86, 2454, 86, - 86, 86, 86, 86, 2462, 2459, 86, 86, 2461, 86, - 86, 86, 2463, 86, 2458, 86, 3280, 2456, 2467, 2457, - 86, 86, 2460, 86, 86, 2464, 86, 2472, 2465, 2471, - 2466, 2473, 2469, 86, 86, 2475, 2468, 2470, 86, 86, - 2474, 86, 2477, 86, 86, 2480, 2478, 86, 2476, 2482, - 86, 2481, 2484, 86, 86, 86, 2486, 86, 86, 86, + 86, 2475, 2435, 86, 2438, 2439, 86, 86, 86, 2436, + 2440, 2442, 2443, 2441, 86, 2445, 86, 86, 86, 86, + 86, 2447, 86, 2444, 86, 86, 86, 2451, 86, 2452, + 86, 86, 3299, 2446, 2448, 86, 2454, 86, 2449, 2461, + 86, 2455, 2453, 2456, 2450, 2457, 86, 86, 2459, 86, + 86, 86, 2458, 2460, 86, 2463, 2464, 86, 86, 86, + 86, 86, 86, 2465, 2466, 86, 2470, 86, 2473, 2462, + 86, 86, 2472, 86, 86, 2469, 2474, 86, 2467, 86, + 2468, 86, 2478, 86, 86, 2471, 86, 86, 2483, 2482, + 2476, 86, 2477, 2480, 86, 2484, 86, 86, 2485, 2481, - 86, 86, 2483, 2485, 86, 2479, 86, 86, 86, 2490, - 86, 2492, 2493, 2488, 2494, 86, 2487, 2489, 2495, 86, - 86, 2496, 86, 2497, 2498, 2500, 2491, 86, 86, 86, - 2503, 86, 2499, 86, 2505, 86, 86, 2508, 86, 86, - 86, 2502, 2504, 86, 86, 86, 2509, 2501, 86, 2512, - 2514, 2507, 86, 2506, 2513, 86, 86, 86, 2510, 86, - 86, 86, 2511, 2518, 2517, 2516, 86, 86, 86, 86, - 2515, 2519, 2522, 3280, 2520, 86, 2525, 86, 2521, 86, - 2524, 2526, 86, 2527, 86, 2528, 86, 2530, 2523, 86, - 86, 2529, 86, 2532, 2531, 86, 2533, 86, 86, 86, + 2479, 86, 2488, 86, 86, 2487, 2486, 2489, 86, 2491, + 86, 2493, 2490, 86, 2492, 2494, 86, 86, 2495, 86, + 2497, 86, 2496, 86, 86, 86, 86, 86, 86, 86, + 2501, 86, 2503, 2504, 2498, 2505, 86, 2499, 2506, 86, + 2500, 2507, 86, 2508, 86, 2509, 86, 86, 86, 2511, + 2514, 86, 2502, 2510, 86, 2516, 86, 86, 2519, 86, + 2513, 86, 86, 2515, 86, 2512, 86, 2520, 86, 2523, + 2524, 86, 2518, 86, 2517, 86, 86, 86, 2525, 86, + 86, 2521, 2528, 86, 2522, 2527, 86, 86, 2529, 86, + 86, 2532, 2533, 2526, 2530, 2535, 86, 2531, 2536, 86, - 2538, 86, 2534, 86, 2540, 86, 2541, 86, 86, 2535, - 86, 86, 86, 86, 86, 2537, 86, 2544, 2536, 2542, - 86, 2547, 2539, 2543, 2545, 2550, 86, 86, 86, 86, - 86, 86, 86, 2546, 2548, 168, 2551, 86, 2558, 86, - 2549, 86, 86, 2554, 86, 86, 2556, 2557, 2559, 2553, - 86, 86, 2569, 86, 2552, 2555, 2560, 2561, 86, 86, - 86, 2565, 2562, 86, 2567, 2566, 86, 2563, 2568, 2570, - 86, 86, 2571, 2564, 86, 2572, 86, 2573, 2574, 86, - 86, 86, 86, 86, 86, 2576, 86, 86, 86, 86, - 2575, 2584, 86, 86, 86, 2577, 2582, 86, 2588, 86, + 2537, 86, 2538, 86, 2539, 86, 86, 86, 2540, 2534, + 86, 2543, 2542, 86, 2544, 86, 86, 86, 86, 2549, + 86, 86, 2551, 86, 2541, 2552, 86, 2545, 2546, 86, + 86, 86, 86, 86, 2548, 86, 2555, 2547, 86, 86, + 2550, 2553, 86, 2554, 2556, 2561, 86, 2558, 2562, 86, + 86, 86, 86, 2557, 86, 2559, 86, 168, 2560, 86, + 2570, 86, 86, 86, 2565, 86, 86, 86, 2567, 2569, + 2564, 2571, 86, 3299, 86, 2563, 2566, 2577, 2568, 2574, + 2572, 2573, 86, 86, 86, 2575, 2578, 2579, 2580, 86, + 2576, 2581, 86, 2582, 86, 86, 2583, 86, 2584, 86, - 2579, 2578, 2589, 86, 2581, 2580, 2583, 86, 2585, 2590, - 2586, 2587, 2593, 86, 86, 86, 2592, 2595, 86, 86, - 86, 2591, 86, 2594, 86, 86, 86, 2598, 86, 2604, - 86, 2605, 86, 2596, 86, 86, 86, 2597, 86, 2599, - 2600, 86, 2602, 2601, 2608, 2609, 86, 2603, 2610, 86, - 2611, 2613, 86, 2607, 2606, 86, 86, 86, 86, 2612, - 86, 86, 2616, 86, 86, 2620, 2619, 2621, 86, 2615, - 86, 2614, 2622, 2623, 86, 86, 86, 86, 2617, 86, - 2618, 86, 86, 2624, 2625, 86, 2629, 86, 86, 2627, - 86, 2633, 2634, 86, 86, 2626, 2637, 86, 86, 2628, + 2585, 86, 2586, 86, 86, 86, 86, 86, 2588, 86, + 86, 86, 2587, 2596, 86, 86, 86, 86, 2589, 2594, + 86, 2600, 86, 2591, 2590, 2601, 86, 2593, 2592, 2595, + 86, 2602, 86, 2598, 2597, 2599, 2605, 86, 86, 2604, + 86, 2606, 2607, 86, 2603, 86, 86, 86, 86, 86, + 86, 86, 2610, 2616, 86, 86, 2608, 86, 2609, 2617, + 86, 2611, 86, 2620, 86, 2612, 2613, 2614, 2615, 86, + 2618, 2621, 86, 2619, 2622, 86, 2623, 86, 86, 2625, + 2624, 86, 86, 2628, 86, 86, 86, 86, 2626, 2632, + 2631, 2627, 2633, 86, 86, 86, 2634, 2635, 86, 86, - 2641, 86, 2630, 86, 2631, 2635, 86, 2632, 86, 86, - 2638, 86, 2636, 2639, 86, 2640, 2642, 2646, 86, 86, - 86, 86, 86, 2643, 2649, 2650, 86, 2652, 86, 2644, - 2648, 2647, 86, 86, 2645, 86, 86, 2653, 2657, 86, - 86, 2651, 2654, 86, 2658, 2660, 86, 86, 2656, 86, - 86, 2655, 86, 2665, 86, 86, 2667, 86, 2663, 86, - 2661, 2664, 2659, 2662, 2668, 86, 86, 86, 86, 86, - 2666, 2669, 2671, 86, 86, 86, 2672, 86, 3280, 2670, - 86, 86, 2674, 2675, 86, 2677, 2678, 86, 2673, 2676, - 2680, 86, 2679, 2681, 86, 2682, 168, 86, 86, 86, + 86, 2629, 86, 86, 2630, 2636, 86, 86, 2637, 86, + 86, 2641, 2639, 2645, 2638, 2646, 86, 86, 86, 2649, + 86, 86, 2640, 2642, 86, 2650, 2643, 86, 86, 2644, + 86, 2652, 2647, 2653, 86, 86, 2648, 86, 86, 2651, + 86, 2654, 2658, 86, 86, 2655, 2662, 86, 2661, 2660, + 2659, 86, 2664, 86, 86, 2656, 86, 2657, 86, 2665, + 86, 2669, 86, 86, 2670, 2666, 86, 2672, 86, 86, + 2663, 86, 2668, 3299, 2667, 86, 86, 86, 2677, 86, + 2679, 86, 2673, 86, 2674, 2675, 2676, 86, 2671, 86, + 2678, 86, 2680, 86, 2681, 86, 2683, 2682, 86, 86, - 2687, 86, 2685, 2684, 2683, 2686, 86, 86, 86, 2689, - 86, 86, 2688, 2712, 2690, 2691, 2692, 86, 2693, 86, - 2695, 86, 86, 2697, 2694, 2696, 86, 86, 2698, 86, - 86, 2699, 2700, 2702, 86, 86, 86, 86, 2703, 86, - 2704, 86, 86, 86, 2701, 2705, 86, 2709, 2710, 2707, - 86, 2711, 2706, 86, 86, 2714, 86, 86, 86, 2713, - 2715, 86, 86, 2708, 86, 86, 2717, 2718, 2716, 86, - 86, 2723, 86, 86, 2721, 86, 2719, 2720, 2722, 2726, - 86, 2724, 86, 86, 86, 86, 2727, 2731, 86, 86, - 2732, 2725, 86, 86, 2728, 86, 2736, 86, 86, 86, + 86, 2684, 86, 86, 2689, 86, 86, 2686, 2687, 3299, + 2690, 2692, 86, 2696, 2685, 2693, 86, 2688, 2691, 86, + 2695, 168, 86, 86, 2694, 86, 2700, 2697, 86, 86, + 2702, 86, 86, 2701, 86, 2705, 86, 2706, 86, 2704, + 86, 2698, 3299, 2699, 2708, 86, 2703, 86, 86, 2710, + 2709, 86, 86, 2707, 2711, 86, 2712, 2713, 2715, 86, + 86, 86, 2714, 2716, 86, 2717, 86, 86, 86, 86, + 2718, 2722, 2723, 86, 2724, 2720, 86, 86, 86, 86, + 86, 2719, 86, 2728, 2727, 2725, 86, 86, 86, 2721, + 86, 2730, 2726, 2731, 2729, 86, 86, 86, 86, 2736, - 86, 2734, 2729, 2730, 2740, 2741, 86, 86, 2733, 2743, - 2735, 2744, 2737, 2738, 2745, 86, 86, 86, 86, 2739, - 86, 2746, 86, 2748, 2747, 86, 86, 86, 86, 86, - 86, 2751, 2742, 86, 2749, 86, 2754, 2756, 86, 2750, - 2757, 86, 2752, 86, 2753, 2758, 86, 2759, 2755, 86, - 2761, 86, 86, 2762, 2760, 86, 2765, 2763, 86, 86, - 2768, 2766, 86, 2769, 86, 2770, 86, 2764, 86, 86, - 86, 2771, 86, 2775, 86, 86, 2776, 86, 2767, 2777, - 86, 86, 2772, 2779, 86, 86, 86, 2783, 2773, 86, - 2780, 86, 2774, 86, 2784, 86, 2778, 86, 86, 2786, + 86, 2739, 86, 2733, 2734, 2732, 2735, 86, 2740, 2737, + 86, 86, 86, 86, 2738, 2744, 86, 86, 86, 2745, + 86, 2749, 86, 86, 86, 86, 86, 2747, 86, 2741, + 2753, 2742, 2743, 2754, 86, 2748, 2746, 2756, 2757, 2751, + 2758, 86, 2750, 86, 86, 2752, 86, 2759, 86, 2760, + 86, 86, 86, 2755, 86, 2761, 86, 86, 2764, 86, + 2762, 86, 2767, 2769, 86, 2763, 2770, 86, 2771, 86, + 2765, 86, 2766, 86, 86, 2772, 86, 2768, 2773, 2774, + 86, 2776, 2778, 86, 86, 86, 2781, 2779, 86, 2782, + 86, 2783, 86, 86, 2775, 2777, 2784, 86, 86, 86, - 2782, 2785, 86, 2781, 2787, 86, 86, 2792, 2791, 86, - 86, 2789, 2788, 86, 2794, 2795, 86, 86, 2790, 86, - 86, 86, 2796, 2798, 2800, 86, 2801, 2797, 86, 86, - 86, 2793, 86, 86, 2799, 2804, 86, 2808, 86, 86, - 86, 86, 86, 2810, 2944, 2802, 2803, 2805, 86, 86, - 2807, 2811, 2806, 2809, 86, 2812, 2814, 2815, 2816, 2819, - 86, 2813, 86, 2817, 86, 86, 2820, 86, 2818, 86, - 2821, 86, 2822, 86, 2823, 86, 86, 86, 2824, 86, - 2825, 86, 2828, 86, 86, 86, 2830, 2826, 2834, 86, - 2835, 86, 2831, 86, 86, 86, 2836, 3140, 2829, 2838, + 2788, 86, 86, 2789, 2780, 2790, 86, 86, 2792, 86, + 2785, 86, 86, 86, 2796, 86, 2786, 2797, 86, 2787, + 86, 86, 2791, 2799, 2793, 2798, 2800, 2795, 86, 86, + 2794, 2801, 86, 86, 86, 2806, 86, 86, 2802, 86, + 2805, 86, 2810, 2808, 2809, 86, 86, 86, 2803, 86, + 2812, 86, 86, 2804, 2811, 2814, 86, 2815, 86, 86, + 86, 2807, 86, 2818, 2822, 86, 86, 86, 2816, 2817, + 86, 86, 86, 86, 2813, 2824, 2821, 2819, 86, 2828, + 2820, 2823, 2830, 2825, 2826, 2827, 86, 2831, 86, 2829, + 2833, 86, 2832, 86, 2834, 86, 2835, 86, 2836, 86, - 86, 86, 2827, 86, 2832, 2833, 2840, 86, 2839, 86, - 2842, 86, 2837, 86, 2841, 86, 86, 2847, 86, 86, - 86, 2846, 2843, 2848, 2844, 2845, 86, 2851, 86, 2849, - 86, 86, 2852, 86, 86, 2855, 86, 2854, 86, 2856, - 86, 2850, 86, 2853, 2857, 86, 2858, 86, 86, 86, - 2859, 2862, 86, 86, 86, 86, 2867, 3280, 2861, 86, - 2863, 2865, 86, 2860, 2870, 86, 2868, 86, 2872, 86, - 2871, 86, 86, 2866, 2864, 86, 2869, 2874, 2873, 86, - 2875, 2877, 86, 2876, 2878, 86, 2879, 86, 86, 86, - 86, 2881, 2884, 86, 2882, 2883, 86, 2880, 86, 86, + 2837, 86, 86, 86, 2841, 86, 86, 2839, 86, 86, + 2842, 86, 86, 2844, 2848, 86, 86, 2838, 2845, 2849, + 86, 86, 86, 2840, 2850, 2843, 2852, 86, 86, 2853, + 86, 2846, 2847, 2855, 2851, 2854, 86, 2856, 86, 2857, + 86, 86, 86, 2861, 86, 86, 86, 86, 86, 2858, + 2859, 2862, 2865, 86, 2863, 86, 86, 2866, 86, 86, + 2860, 2864, 86, 2869, 2868, 86, 2867, 2870, 2871, 86, + 2872, 86, 86, 2874, 2875, 86, 86, 86, 86, 2873, + 86, 2876, 2881, 86, 86, 86, 2879, 2877, 86, 2884, + 2885, 86, 2882, 86, 2886, 86, 3299, 86, 2880, 86, - 86, 2885, 2887, 86, 2886, 2889, 86, 2888, 86, 2893, - 86, 2891, 2895, 86, 86, 86, 86, 86, 2896, 86, - 86, 2890, 2897, 86, 2898, 86, 2892, 86, 2899, 2904, - 86, 2901, 86, 86, 86, 2894, 2907, 86, 2902, 2900, - 86, 86, 86, 86, 86, 2903, 2905, 2906, 2912, 2908, - 2911, 86, 2913, 2909, 86, 86, 2917, 86, 86, 86, - 2910, 86, 2915, 2914, 2919, 86, 2920, 86, 2922, 86, - 86, 86, 86, 86, 2927, 86, 86, 2918, 2926, 86, - 2921, 2916, 86, 2931, 2929, 86, 2923, 2924, 2925, 86, - 2934, 86, 86, 86, 2936, 86, 2928, 86, 2930, 2932, + 2887, 2878, 2888, 86, 2883, 86, 2890, 86, 2889, 2891, + 2892, 86, 2893, 86, 2894, 86, 2895, 86, 86, 2896, + 2899, 86, 2897, 2898, 86, 86, 86, 2902, 86, 2900, + 2901, 86, 86, 2904, 2908, 2903, 86, 2906, 86, 86, + 86, 2910, 86, 2911, 86, 86, 86, 2914, 86, 2912, + 2913, 86, 2905, 86, 2907, 86, 2919, 86, 86, 86, + 86, 86, 86, 2909, 2922, 86, 2916, 2915, 2917, 86, + 2923, 2920, 2921, 86, 86, 2918, 86, 2926, 2924, 2927, + 86, 2928, 2929, 86, 2925, 2932, 86, 86, 2934, 86, + 2935, 86, 86, 86, 2930, 2937, 86, 86, 86, 86, - 86, 86, 2937, 2939, 86, 2940, 86, 86, 2933, 2942, - 86, 86, 2935, 2947, 2948, 2938, 2945, 86, 86, 86, - 86, 2941, 2951, 86, 86, 86, 2953, 2952, 86, 2943, - 2949, 2946, 2954, 2956, 2957, 86, 2959, 2950, 86, 86, - 86, 2958, 86, 86, 86, 2962, 86, 86, 2955, 2961, - 2965, 86, 2963, 2968, 86, 86, 86, 86, 2960, 86, - 86, 86, 2964, 2973, 86, 86, 86, 2969, 2966, 2967, - 2975, 2977, 86, 2972, 2976, 2970, 2978, 86, 86, 86, - 2974, 86, 86, 2979, 2971, 86, 2981, 2982, 86, 2983, - 86, 2984, 86, 2980, 2987, 2985, 86, 2989, 86, 86, + 86, 86, 2941, 2942, 86, 86, 2933, 86, 2946, 2931, + 86, 86, 2945, 2936, 2938, 2939, 2940, 2949, 86, 86, + 2951, 2943, 86, 86, 2947, 3299, 86, 2952, 2944, 86, + 2948, 2954, 86, 2955, 86, 2957, 86, 86, 86, 2950, + 86, 86, 86, 86, 2962, 2953, 86, 2960, 2959, 2956, + 86, 2966, 86, 2964, 86, 2958, 86, 86, 2969, 2968, + 2961, 2963, 86, 2965, 2972, 2975, 2971, 2973, 86, 2967, + 86, 86, 86, 86, 2970, 2974, 86, 2978, 86, 86, + 86, 2977, 2981, 86, 2979, 2984, 86, 86, 86, 86, + 86, 2976, 86, 86, 2989, 86, 2993, 86, 86, 2980, - 86, 2988, 86, 86, 86, 86, 2994, 2995, 86, 86, - 86, 2986, 86, 2999, 86, 3000, 86, 86, 2990, 86, - 3280, 2998, 3001, 2996, 2991, 2992, 2993, 86, 86, 86, - 2997, 86, 3004, 3005, 86, 3006, 86, 3002, 3003, 86, - 3009, 86, 86, 3008, 3007, 86, 86, 3012, 86, 86, - 3011, 3014, 86, 3010, 3013, 86, 86, 3016, 86, 86, - 86, 86, 3018, 86, 86, 3015, 3019, 3017, 86, 86, - 86, 86, 86, 86, 86, 3028, 3029, 3031, 3020, 3024, - 3021, 3022, 3023, 86, 86, 3025, 3026, 3035, 3280, 3032, - 3027, 86, 3030, 3033, 3036, 86, 3034, 3037, 86, 86, + 2982, 2983, 2985, 86, 86, 2986, 2988, 2991, 2994, 86, + 86, 2990, 2996, 2992, 2987, 2995, 86, 2998, 86, 2999, + 86, 2997, 3000, 86, 86, 86, 3003, 86, 86, 3005, + 86, 86, 86, 3004, 86, 86, 86, 3001, 86, 3010, + 3011, 86, 86, 86, 3015, 86, 3006, 3016, 86, 3017, + 3012, 3002, 3014, 3007, 86, 86, 3008, 3009, 86, 86, + 3021, 86, 3013, 86, 3020, 3022, 86, 86, 3023, 3025, + 86, 86, 3028, 86, 3018, 86, 86, 3019, 86, 3027, + 3030, 3024, 3026, 3029, 86, 86, 86, 86, 86, 86, + 86, 3033, 86, 86, 3035, 86, 86, 3036, 86, 3034, - 3039, 86, 86, 3038, 86, 3042, 86, 3040, 3043, 86, - 3044, 3045, 86, 86, 3046, 3047, 3050, 86, 3048, 3049, - 86, 86, 86, 3041, 3051, 86, 86, 86, 86, 3057, - 86, 86, 86, 3056, 86, 86, 3053, 86, 3052, 3059, - 86, 3060, 86, 3061, 86, 3065, 3054, 3055, 3066, 86, - 3062, 3064, 3067, 86, 86, 86, 3058, 3072, 3063, 86, - 3069, 3074, 3073, 86, 86, 86, 86, 86, 3070, 3068, - 86, 3071, 86, 86, 86, 3078, 3082, 3079, 3081, 86, - 3076, 3224, 86, 86, 86, 3084, 86, 3077, 3087, 3075, - 3083, 3280, 3080, 3085, 86, 3086, 86, 3088, 86, 3089, + 86, 86, 86, 86, 3031, 3032, 3045, 3046, 86, 3037, + 3299, 3041, 3038, 3039, 3040, 3042, 3043, 86, 3048, 86, + 86, 3044, 3049, 3047, 86, 3051, 3053, 86, 3050, 3054, + 86, 86, 3052, 3056, 86, 3055, 86, 86, 3059, 86, + 86, 3057, 3060, 86, 3061, 3062, 86, 86, 3063, 3064, + 3067, 86, 3065, 3066, 86, 86, 3058, 3068, 86, 86, + 3071, 86, 86, 3074, 86, 86, 86, 3073, 86, 86, + 3077, 86, 3069, 3070, 86, 3076, 86, 86, 3078, 86, + 3083, 3072, 3081, 3084, 86, 3082, 3079, 3085, 86, 86, + 3075, 86, 3080, 86, 3090, 3092, 3087, 86, 86, 3091, - 86, 86, 3091, 86, 3092, 86, 3093, 86, 3094, 86, - 3090, 3095, 86, 3096, 86, 3097, 86, 86, 3099, 86, - 86, 86, 86, 86, 86, 86, 3098, 3104, 86, 3100, - 86, 86, 86, 3101, 86, 3108, 86, 3107, 3105, 3110, - 86, 86, 3102, 3103, 3106, 3109, 86, 86, 3114, 3112, - 3111, 86, 3117, 86, 3116, 86, 86, 86, 86, 3115, - 3119, 86, 3113, 86, 86, 86, 86, 3118, 86, 3123, - 86, 3127, 86, 3122, 3124, 3120, 3129, 86, 86, 3121, - 86, 3125, 3134, 3128, 3130, 86, 3131, 86, 86, 3133, - 3126, 86, 86, 86, 86, 3132, 86, 86, 3142, 3139, + 86, 86, 3088, 86, 3086, 3089, 86, 86, 86, 3099, + 86, 3096, 3097, 3094, 3100, 86, 3102, 86, 3103, 86, + 86, 3101, 3093, 86, 3095, 3104, 86, 3098, 3105, 3106, + 86, 3107, 86, 86, 3109, 86, 3110, 86, 3111, 86, + 3112, 86, 3108, 3113, 86, 3114, 86, 3115, 86, 86, + 3117, 86, 86, 86, 86, 86, 86, 86, 3116, 3122, + 86, 3118, 86, 86, 86, 3119, 86, 3126, 86, 3125, + 3123, 3127, 86, 86, 3120, 3121, 3124, 3128, 3129, 86, + 86, 3136, 3130, 3131, 86, 3133, 86, 86, 86, 3135, + 86, 3134, 86, 86, 3132, 3138, 86, 86, 86, 86, - 86, 86, 86, 86, 3138, 3136, 86, 86, 3135, 86, - 86, 3141, 86, 3143, 86, 3137, 86, 86, 3146, 3149, - 3144, 3145, 3148, 86, 3150, 86, 3158, 86, 3152, 86, - 3151, 3147, 3154, 86, 3153, 86, 3156, 3157, 86, 3155, - 3159, 86, 86, 3160, 3161, 86, 3162, 86, 3163, 86, - 86, 86, 3165, 3164, 86, 3166, 3167, 3170, 86, 86, - 3168, 86, 86, 86, 3175, 86, 3173, 3176, 86, 3169, - 86, 3172, 3171, 86, 3179, 86, 86, 86, 3182, 86, - 86, 3183, 3174, 86, 3186, 3177, 86, 3187, 86, 86, - 86, 3180, 3178, 86, 3184, 3181, 86, 3192, 86, 86, + 86, 86, 3137, 3142, 3146, 86, 86, 3143, 86, 3141, + 86, 3139, 3148, 86, 3140, 3144, 3149, 86, 3147, 3150, + 86, 86, 86, 86, 3155, 3145, 3153, 86, 3154, 3151, + 3152, 86, 86, 86, 3159, 86, 3158, 86, 3157, 86, + 3161, 86, 86, 86, 86, 86, 3156, 86, 3160, 86, + 3162, 86, 3171, 3168, 3163, 86, 86, 86, 3165, 3164, + 3167, 3169, 3173, 86, 3176, 86, 86, 86, 3166, 86, + 3174, 86, 3170, 3178, 86, 3172, 3177, 86, 3179, 3180, + 86, 3181, 86, 3175, 86, 3182, 86, 3184, 86, 3183, + 86, 3185, 3189, 3186, 86, 86, 3187, 86, 86, 86, - 86, 3189, 3185, 3188, 3191, 3193, 86, 86, 86, 86, - 86, 86, 86, 3197, 86, 3190, 3199, 86, 86, 86, - 86, 3194, 3196, 3204, 86, 3206, 86, 3195, 86, 3205, - 3198, 3200, 3201, 3202, 3207, 86, 3203, 3210, 86, 86, - 86, 3212, 86, 3213, 3211, 3214, 3208, 86, 86, 86, - 86, 3218, 86, 3215, 3209, 3216, 86, 86, 3219, 86, - 86, 3220, 3221, 86, 3222, 86, 86, 3227, 3217, 86, - 86, 3223, 86, 86, 86, 3230, 3231, 86, 86, 86, - 86, 86, 86, 3229, 3225, 3226, 3234, 3232, 3228, 86, - 3233, 3235, 86, 3237, 86, 3238, 86, 3239, 3236, 86, + 3194, 86, 3192, 3195, 86, 3188, 86, 3191, 3190, 86, + 3198, 86, 86, 86, 3201, 86, 86, 3202, 86, 3193, + 86, 3196, 86, 3205, 3206, 86, 3203, 3199, 3197, 86, + 86, 3200, 86, 3211, 86, 86, 3207, 86, 3208, 3204, + 3210, 3212, 86, 86, 86, 86, 86, 86, 3216, 86, + 86, 3209, 3218, 86, 86, 3223, 86, 86, 3213, 3215, + 3225, 86, 3224, 3214, 86, 86, 3217, 3220, 3219, 3221, + 86, 86, 3222, 3229, 86, 3231, 3230, 86, 3232, 86, + 86, 86, 86, 3227, 3226, 3233, 86, 3234, 3237, 3228, + 86, 3235, 3238, 86, 86, 3239, 3240, 86, 3236, 86, - 3242, 86, 3240, 86, 3244, 86, 3245, 86, 3241, 86, - 3249, 86, 3246, 86, 86, 3243, 3247, 86, 3250, 3251, - 3248, 3252, 86, 86, 86, 86, 86, 86, 3258, 86, - 3253, 3254, 3256, 3255, 86, 86, 86, 86, 86, 3260, - 3261, 86, 3264, 86, 3257, 3259, 3265, 86, 86, 3268, - 3269, 86, 86, 3271, 86, 3262, 3263, 3266, 86, 3270, - 3272, 86, 3267, 86, 86, 3273, 86, 86, 3274, 3275, - 3278, 86, 3279, 86, 3280, 3280, 3280, 3280, 3280, 3280, - 3280, 3280, 3280, 3280, 3280, 3276, 3277, 47, 47, 47, + 86, 86, 86, 3241, 86, 3246, 86, 86, 3243, 86, + 3249, 86, 3250, 86, 86, 86, 86, 86, 86, 3242, + 3248, 3244, 3253, 3245, 3251, 3247, 86, 3252, 86, 3257, + 86, 3256, 86, 3254, 86, 3255, 86, 3258, 3299, 3259, + 86, 3261, 86, 3263, 86, 3264, 86, 86, 3268, 86, + 86, 3265, 86, 3262, 3266, 3267, 3260, 3269, 86, 86, + 3270, 3271, 86, 86, 86, 86, 3272, 86, 86, 3274, + 3273, 86, 3275, 3277, 86, 86, 3279, 86, 86, 3283, + 3280, 3284, 86, 3276, 3278, 86, 86, 3281, 86, 3287, + 3288, 86, 86, 3290, 86, 86, 3282, 3291, 86, 3289, + + 86, 86, 3292, 86, 3285, 3286, 3293, 86, 3294, 3297, + 86, 3298, 86, 3299, 3299, 3299, 3299, 3299, 3299, 3295, + 3299, 3299, 3299, 3299, 3299, 3299, 3296, 47, 47, 47, 47, 47, 47, 47, 52, 52, 52, 52, 52, 52, - 52, 57, 57, 57, 57, 57, 57, 57, 63, 63, 63, 63, 63, 63, 63, 68, 68, 68, 68, 68, 68, 68, 74, 74, 74, 74, 74, 74, 74, 80, - 80, 80, 80, 80, 80, 80, 89, 89, 3280, 89, - 89, 89, 89, 158, 158, 3280, 3280, 3280, 158, 158, - 160, 160, 3280, 3280, 160, 3280, 160, 162, 3280, 3280, - 3280, 3280, 3280, 162, 165, 165, 3280, 3280, 3280, 165, - 165, 167, 3280, 3280, 3280, 3280, 3280, 167, 169, 169, - 3280, 169, 169, 169, 169, 172, 3280, 3280, 3280, 3280, - 3280, 172, 175, 175, 3280, 3280, 3280, 175, 175, 90, + 80, 80, 80, 80, 80, 80, 89, 89, 3299, 89, + 89, 89, 89, 158, 158, 3299, 3299, 3299, 158, 158, + 160, 160, 3299, 3299, 160, 3299, 160, 162, 3299, 3299, - 90, 3280, 90, 90, 90, 90, 17, 3280, 3280, 3280, - 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280, - 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280, - 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280, - 3280, 3280, 3280, 3280, 3280, 3280, 3280 + 3299, 3299, 3299, 162, 165, 165, 3299, 3299, 3299, 165, + 165, 167, 3299, 3299, 3299, 3299, 3299, 167, 169, 169, + 3299, 169, 169, 169, 169, 172, 3299, 3299, 3299, 3299, + 3299, 172, 175, 175, 3299, 3299, 3299, 175, 175, 90, + 90, 3299, 90, 90, 90, 90, 17, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299 } ; -static const flex_int16_t yy_chk[6448] = +static const flex_int16_t yy_chk[6488] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2224,18 +2235,18 @@ static const flex_int16_t yy_chk[6448] = 5, 3, 6, 24, 4, 24, 24, 5, 24, 6, 7, 7, 7, 7, 24, 7, 8, 8, 8, 8, 33, 8, 7, 9, 9, 9, 26, 26, 8, 10, - 10, 10, 19, 29, 9, 33, 19, 29, 3288, 35, + 10, 10, 19, 29, 9, 33, 19, 29, 3307, 35, 10, 11, 11, 11, 11, 11, 11, 13, 13, 13, 13, 34, 13, 11, 35, 99, 34, 29, 38, 13, 51, 51, 11, 12, 12, 12, 12, 12, 12, 14, 14, 14, 14, 99, 14, 12, 15, 15, 15, 38, 23, 14, 23, 23, 12, 23, 46, 15, 16, 16, - 16, 23, 23, 25, 27, 27, 25, 25, 2682, 16, + 16, 23, 23, 25, 27, 27, 25, 25, 2695, 16, 25, 46, 27, 30, 30, 25, 27, 56, 40, 27, 56, 73, 31, 31, 25, 28, 67, 67, 30, 32, 28, 31, 40, 32, 28, 73, 32, 28, 92, 28, - 28, 92, 31, 32, 1078, 32, 36, 36, 37, 37, + 28, 92, 31, 32, 1082, 32, 36, 36, 37, 37, 28, 45, 45, 37, 175, 36, 45, 39, 41, 41, 45, 36, 39, 41, 94, 36, 39, 43, 43, 37, @@ -2251,9 +2262,9 @@ static const flex_int16_t yy_chk[6448] = 104, 114, 111, 113, 108, 110, 110, 113, 116, 115, 112, 109, 117, 110, 115, 117, 119, 118, 117, 120, - 123, 114, 116, 118, 120, 126, 121, 122, 732, 121, + 123, 114, 116, 118, 120, 126, 121, 122, 734, 121, 125, 117, 117, 121, 123, 119, 124, 125, 126, 128, - 124, 127, 118, 129, 120, 732, 122, 130, 127, 121, + 124, 127, 118, 129, 120, 734, 122, 130, 127, 121, 131, 122, 128, 132, 131, 133, 134, 135, 135, 136, 133, 139, 137, 129, 133, 130, 137, 138, 143, 140, 142, 132, 144, 148, 143, 137, 134, 141, 147, 136, @@ -2315,616 +2326,620 @@ static const flex_int16_t yy_chk[6448] = 375, 376, 371, 378, 401, 379, 367, 368, 368, 369, 368, 372, 370, 373, 379, 376, 375, 382, 378, 380, - 383, 381, 384, 368, 380, 380, 368, 381, 368, 386, - 368, 377, 385, 377, 377, 388, 387, 384, 382, 383, - 389, 385, 387, 377, 390, 377, 377, 377, 386, 391, - 377, 392, 393, 394, 395, 391, 392, 396, 390, 391, - 389, 388, 396, 397, 398, 399, 399, 400, 402, 395, - 398, 403, 393, 394, 392, 404, 405, 403, 397, 406, - 407, 407, 402, 407, 406, 408, 409, 400, 410, 411, - 417, 413, 405, 413, 413, 414, 419, 415, 418, 414, - 404, 415, 409, 411, 410, 408, 416, 416, 420, 417, - 421, 413, 419, 418, 422, 423, 415, 426, 425, 424, + 383, 384, 164, 368, 380, 380, 368, 388, 368, 381, + 368, 377, 385, 377, 377, 381, 384, 386, 382, 383, + 389, 385, 381, 377, 390, 377, 377, 377, 387, 391, + 377, 393, 392, 388, 387, 391, 386, 392, 390, 391, + 389, 394, 395, 396, 397, 400, 398, 404, 396, 399, + 399, 393, 398, 402, 403, 392, 408, 395, 405, 397, + 403, 394, 409, 406, 410, 400, 162, 402, 406, 411, + 407, 407, 404, 407, 405, 417, 408, 418, 409, 413, + 410, 413, 413, 411, 414, 415, 416, 416, 414, 415, + 419, 420, 418, 421, 417, 424, 422, 423, 541, 413, - 423, 428, 426, 422, 421, 424, 420, 425, 423, 423, - 428, 427, 423, 423, 422, 427, 422, 429, 430, 431, - 432, 435, 434, 429, 432, 431, 433, 434, 164, 433, - 436, 436, 437, 438, 438, 439, 440, 441, 441, 430, - 439, 435, 442, 443, 444, 437, 445, 443, 442, 440, - 446, 447, 448, 448, 449, 446, 447, 450, 451, 444, - 452, 448, 453, 455, 454, 453, 449, 445, 454, 456, - 456, 458, 452, 457, 460, 455, 451, 450, 457, 459, - 459, 462, 462, 463, 470, 464, 465, 466, 467, 471, - 469, 472, 458, 464, 476, 465, 460, 473, 477, 476, + 541, 424, 423, 425, 415, 422, 419, 421, 426, 420, + 423, 423, 425, 426, 423, 423, 422, 427, 422, 428, + 429, 427, 430, 431, 435, 437, 429, 432, 428, 431, + 433, 432, 434, 433, 436, 436, 439, 434, 437, 438, + 438, 439, 440, 430, 435, 441, 441, 442, 443, 444, + 445, 446, 443, 442, 447, 440, 446, 448, 448, 447, + 449, 450, 451, 452, 444, 453, 448, 455, 453, 454, + 458, 445, 449, 454, 460, 452, 456, 456, 457, 455, + 451, 450, 463, 457, 459, 459, 462, 462, 466, 464, + 465, 458, 467, 469, 470, 471, 460, 464, 490, 465, - 467, 162, 470, 473, 463, 472, 474, 466, 469, 471, - 469, 475, 477, 478, 480, 474, 479, 475, 481, 479, - 482, 478, 483, 485, 478, 486, 482, 484, 480, 485, - 484, 487, 488, 481, 489, 491, 487, 490, 492, 486, - 491, 490, 483, 493, 494, 495, 496, 485, 493, 499, - 537, 502, 500, 492, 488, 489, 503, 501, 504, 496, - 494, 501, 504, 506, 495, 497, 497, 500, 537, 499, - 502, 497, 503, 497, 508, 507, 514, 505, 506, 497, - 507, 497, 505, 509, 497, 497, 505, 511, 510, 513, - 508, 497, 509, 508, 510, 512, 514, 516, 512, 510, + 472, 473, 490, 463, 467, 477, 160, 473, 466, 474, + 475, 469, 470, 469, 472, 471, 475, 476, 474, 477, + 478, 479, 476, 480, 479, 481, 482, 483, 478, 485, + 484, 478, 482, 484, 486, 485, 487, 480, 488, 491, + 481, 487, 489, 492, 491, 493, 494, 483, 486, 495, + 493, 496, 499, 485, 502, 501, 500, 504, 492, 501, + 488, 504, 494, 489, 496, 503, 158, 509, 495, 497, + 497, 500, 499, 502, 507, 497, 509, 497, 506, 507, + 508, 503, 505, 497, 511, 497, 510, 505, 497, 497, + 513, 505, 510, 506, 514, 497, 508, 510, 512, 508, - 515, 515, 518, 511, 517, 517, 519, 521, 520, 522, - 523, 524, 513, 525, 526, 523, 160, 518, 519, 527, - 524, 529, 516, 520, 530, 527, 521, 531, 530, 526, - 529, 522, 525, 531, 532, 533, 534, 535, 536, 538, - 540, 539, 540, 538, 541, 650, 532, 650, 542, 545, - 533, 535, 547, 536, 539, 534, 542, 543, 543, 544, - 546, 545, 549, 550, 547, 544, 546, 548, 541, 551, - 548, 553, 552, 554, 551, 552, 549, 555, 550, 556, - 553, 567, 555, 555, 557, 557, 567, 553, 564, 554, - 553, 559, 556, 558, 558, 560, 560, 559, 561, 561, + 511, 512, 515, 515, 516, 517, 517, 518, 519, 520, + 522, 521, 523, 513, 514, 525, 524, 523, 526, 529, + 519, 527, 518, 535, 520, 524, 533, 527, 529, 516, + 521, 530, 522, 526, 525, 530, 531, 532, 533, 534, + 531, 536, 535, 532, 537, 538, 539, 540, 542, 543, + 539, 544, 544, 546, 534, 536, 545, 543, 547, 537, + 540, 548, 545, 538, 547, 546, 549, 550, 551, 549, + 552, 553, 542, 548, 553, 552, 554, 555, 557, 558, + 558, 550, 556, 551, 565, 554, 85, 556, 556, 559, + 559, 557, 554, 555, 560, 554, 561, 561, 562, 562, - 562, 565, 563, 568, 569, 571, 562, 563, 563, 564, - 571, 566, 569, 565, 566, 570, 572, 573, 570, 574, - 575, 576, 568, 574, 577, 576, 575, 578, 582, 579, - 580, 580, 578, 581, 584, 583, 573, 585, 586, 572, - 583, 587, 577, 579, 586, 588, 587, 590, 581, 582, - 584, 592, 589, 591, 591, 589, 593, 585, 597, 588, - 589, 594, 595, 589, 589, 590, 594, 595, 596, 592, - 599, 600, 593, 597, 601, 602, 599, 601, 603, 602, - 600, 604, 596, 603, 604, 605, 606, 607, 608, 610, - 605, 609, 611, 615, 610, 608, 612, 612, 613, 614, + 560, 563, 566, 564, 569, 565, 568, 563, 564, 564, + 567, 568, 570, 567, 566, 571, 572, 573, 571, 574, + 570, 572, 575, 569, 576, 577, 575, 578, 579, 577, + 576, 583, 580, 579, 581, 581, 582, 584, 574, 585, + 573, 586, 584, 587, 589, 578, 580, 594, 588, 587, + 591, 582, 583, 588, 590, 585, 593, 590, 589, 592, + 592, 586, 590, 594, 595, 590, 590, 596, 591, 595, + 597, 598, 596, 600, 593, 602, 601, 603, 602, 600, + 605, 603, 604, 605, 597, 601, 598, 604, 606, 607, + 608, 609, 611, 606, 610, 612, 616, 611, 609, 613, - 620, 602, 606, 620, 609, 607, 616, 613, 617, 615, - 618, 619, 611, 624, 623, 616, 618, 619, 614, 623, - 617, 621, 621, 622, 621, 625, 622, 626, 630, 627, - 628, 624, 629, 626, 627, 629, 628, 631, 632, 625, - 637, 633, 631, 632, 632, 634, 635, 638, 640, 636, - 158, 635, 639, 630, 633, 636, 638, 639, 634, 637, - 641, 641, 642, 645, 643, 635, 635, 643, 640, 642, - 644, 649, 646, 647, 651, 645, 644, 646, 647, 647, - 648, 648, 643, 652, 653, 652, 654, 655, 656, 657, - 659, 658, 660, 651, 659, 661, 649, 658, 662, 663, + 613, 614, 615, 603, 617, 607, 618, 610, 608, 631, + 614, 619, 616, 617, 620, 612, 621, 619, 618, 621, + 620, 615, 622, 622, 623, 622, 624, 623, 625, 626, + 627, 624, 628, 629, 631, 630, 627, 628, 630, 629, + 632, 634, 633, 626, 635, 632, 625, 633, 633, 638, + 636, 639, 637, 641, 634, 636, 640, 635, 637, 643, + 639, 640, 642, 642, 644, 645, 643, 644, 638, 636, + 636, 645, 646, 641, 647, 648, 649, 649, 650, 647, + 648, 648, 644, 651, 646, 651, 652, 653, 654, 653, + 655, 656, 657, 658, 659, 660, 664, 662, 661, 660, - 664, 660, 653, 665, 654, 655, 666, 656, 667, 657, - 661, 668, 669, 662, 667, 665, 670, 663, 671, 664, - 673, 666, 672, 674, 669, 668, 672, 675, 676, 677, - 679, 678, 680, 680, 85, 670, 678, 671, 673, 674, - 682, 683, 684, 687, 679, 675, 676, 676, 677, 681, - 685, 686, 683, 681, 689, 685, 684, 688, 690, 682, - 692, 689, 687, 690, 691, 692, 694, 686, 693, 695, - 688, 691, 696, 693, 697, 699, 695, 698, 700, 701, - 703, 696, 701, 700, 694, 702, 698, 699, 697, 702, - 704, 705, 707, 706, 703, 708, 708, 710, 710, 704, + 659, 663, 665, 650, 667, 652, 654, 661, 655, 656, + 666, 657, 662, 658, 664, 669, 663, 668, 670, 667, + 671, 665, 666, 668, 672, 675, 674, 673, 676, 669, + 670, 673, 677, 678, 680, 679, 681, 681, 682, 671, + 679, 675, 682, 672, 674, 683, 676, 684, 680, 685, + 677, 677, 678, 687, 686, 688, 691, 689, 684, 686, + 690, 691, 695, 685, 683, 692, 693, 690, 694, 687, + 689, 693, 692, 694, 688, 696, 697, 698, 699, 702, + 695, 700, 696, 701, 702, 697, 704, 699, 705, 701, + 704, 698, 703, 700, 706, 703, 707, 709, 708, 710, - 709, 709, 712, 711, 714, 716, 705, 706, 711, 709, - 715, 712, 718, 707, 717, 719, 715, 720, 717, 722, - 721, 723, 726, 714, 718, 716, 721, 722, 723, 724, - 725, 729, 735, 736, 740, 720, 739, 738, 744, 736, - 719, 735, 726, 738, 741, 739, 729, 724, 741, 744, - 740, 742, 742, 743, 743, 725, 727, 746, 727, 745, - 747, 727, 750, 748, 80, 727, 751, 750, 727, 748, - 753, 746, 752, 754, 753, 727, 727, 745, 727, 756, - 747, 749, 749, 749, 756, 749, 757, 751, 749, 758, - 752, 755, 759, 749, 75, 755, 762, 754, 760, 749, + 710, 714, 705, 706, 711, 711, 712, 712, 716, 713, + 714, 707, 708, 711, 713, 717, 718, 720, 709, 719, + 721, 717, 722, 719, 723, 724, 726, 716, 725, 720, + 723, 727, 728, 724, 731, 725, 718, 737, 742, 743, + 722, 738, 740, 743, 726, 721, 737, 738, 740, 731, + 746, 741, 728, 747, 742, 749, 727, 729, 748, 729, + 741, 746, 729, 744, 744, 752, 729, 745, 745, 729, + 752, 747, 748, 753, 750, 749, 729, 729, 754, 729, + 750, 751, 751, 751, 756, 751, 755, 757, 751, 760, + 755, 757, 758, 751, 753, 759, 754, 758, 761, 751, - 749, 760, 761, 762, 758, 757, 764, 761, 761, 763, - 763, 755, 773, 765, 766, 766, 776, 759, 765, 767, - 768, 764, 769, 768, 767, 770, 770, 769, 771, 772, - 771, 773, 774, 775, 777, 776, 774, 778, 778, 779, - 782, 772, 777, 780, 781, 781, 784, 783, 842, 785, - 822, 786, 842, 775, 779, 785, 786, 780, 782, 783, - 787, 787, 790, 822, 788, 791, 792, 790, 784, 788, - 788, 791, 792, 793, 794, 796, 795, 797, 793, 795, - 794, 796, 798, 798, 800, 797, 799, 799, 801, 802, - 803, 804, 800, 806, 802, 805, 805, 803, 809, 807, + 751, 80, 762, 764, 760, 762, 763, 757, 756, 766, + 764, 763, 763, 767, 759, 765, 765, 769, 767, 768, + 768, 771, 769, 761, 766, 770, 771, 774, 770, 772, + 772, 773, 775, 773, 776, 777, 779, 778, 776, 774, + 780, 780, 781, 784, 779, 782, 783, 783, 785, 786, + 821, 775, 787, 789, 789, 777, 778, 781, 787, 782, + 785, 784, 788, 790, 821, 792, 793, 788, 790, 790, + 792, 786, 793, 794, 797, 795, 796, 797, 798, 794, + 795, 799, 796, 802, 798, 800, 800, 801, 801, 799, + 803, 802, 804, 805, 806, 807, 807, 804, 808, 811, - 808, 808, 806, 810, 809, 812, 801, 807, 813, 814, - 804, 815, 816, 819, 812, 817, 815, 813, 817, 818, - 820, 816, 810, 821, 818, 823, 825, 819, 824, 824, - 823, 823, 821, 814, 826, 827, 828, 829, 832, 832, - 829, 825, 833, 835, 827, 820, 834, 831, 829, 831, - 836, 834, 837, 826, 838, 839, 840, 841, 74, 843, - 828, 845, 844, 833, 835, 840, 848, 845, 849, 846, - 836, 847, 837, 850, 851, 839, 838, 843, 846, 850, - 841, 844, 849, 847, 852, 848, 853, 853, 851, 852, - 854, 855, 856, 857, 858, 859, 860, 862, 861, 863, + 805, 809, 810, 810, 812, 811, 814, 808, 803, 809, + 815, 816, 817, 806, 822, 814, 818, 817, 819, 815, + 823, 819, 820, 812, 824, 818, 825, 820, 827, 823, + 828, 825, 825, 826, 826, 816, 829, 824, 830, 822, + 833, 831, 833, 827, 831, 829, 834, 834, 835, 828, + 836, 837, 831, 838, 839, 836, 840, 841, 842, 843, + 844, 845, 830, 75, 844, 846, 848, 842, 849, 835, + 847, 850, 837, 838, 839, 848, 847, 841, 840, 845, + 849, 851, 843, 852, 846, 853, 854, 855, 855, 852, + 850, 854, 856, 857, 858, 851, 859, 860, 861, 853, - 855, 857, 864, 862, 866, 863, 872, 865, 873, 870, - 854, 872, 856, 865, 858, 860, 864, 859, 861, 867, - 868, 871, 877, 869, 866, 867, 868, 869, 870, 873, - 874, 874, 875, 871, 876, 878, 879, 876, 875, 880, - 877, 871, 879, 881, 881, 882, 883, 884, 878, 885, - 886, 883, 884, 884, 886, 887, 887, 888, 889, 880, - 890, 891, 893, 882, 885, 890, 898, 894, 897, 896, - 900, 900, 901, 903, 903, 902, 901, 904, 889, 888, - 891, 894, 896, 907, 906, 68, 893, 898, 897, 899, - 902, 905, 899, 909, 899, 905, 908, 907, 899, 906, + 862, 863, 857, 864, 859, 865, 868, 867, 866, 864, + 869, 865, 856, 867, 858, 872, 869, 860, 870, 862, + 861, 863, 866, 871, 870, 873, 868, 871, 874, 875, + 876, 876, 877, 874, 872, 879, 878, 873, 877, 878, + 881, 880, 882, 883, 883, 873, 881, 884, 886, 891, + 875, 885, 887, 879, 880, 888, 885, 887, 887, 889, + 890, 890, 882, 889, 886, 884, 892, 893, 894, 896, + 888, 891, 893, 901, 897, 900, 899, 903, 903, 904, + 906, 906, 905, 904, 907, 909, 892, 894, 897, 899, + 910, 74, 912, 896, 901, 900, 902, 905, 908, 902, - 899, 908, 904, 910, 911, 899, 912, 909, 910, 910, - 899, 913, 916, 911, 914, 913, 915, 917, 918, 919, - 912, 915, 917, 920, 916, 921, 929, 913, 923, 914, - 922, 915, 918, 923, 921, 924, 922, 920, 925, 930, - 919, 924, 926, 926, 925, 927, 928, 931, 929, 933, - 927, 934, 928, 63, 935, 939, 934, 936, 930, 937, - 937, 933, 940, 939, 941, 931, 932, 932, 935, 936, - 938, 942, 932, 943, 932, 938, 940, 945, 944, 946, - 932, 947, 945, 941, 944, 932, 932, 948, 949, 943, - 942, 946, 932, 950, 950, 952, 951, 956, 954, 947, + 909, 902, 908, 911, 910, 902, 912, 902, 911, 907, + 913, 914, 902, 915, 916, 913, 913, 902, 916, 917, + 914, 918, 922, 919, 920, 921, 918, 915, 923, 920, + 916, 924, 925, 932, 917, 919, 918, 933, 925, 921, + 924, 926, 923, 922, 927, 928, 926, 929, 929, 930, + 927, 928, 931, 934, 930, 932, 933, 936, 931, 937, + 938, 940, 940, 939, 937, 941, 944, 943, 942, 936, + 941, 934, 935, 935, 938, 939, 942, 945, 935, 946, + 935, 943, 947, 950, 948, 944, 935, 949, 947, 948, + 951, 935, 935, 952, 955, 946, 945, 959, 935, 949, - 951, 958, 955, 948, 954, 955, 949, 957, 960, 961, - 963, 959, 957, 960, 958, 952, 956, 959, 964, 963, - 965, 967, 968, 966, 970, 971, 969, 964, 961, 966, - 967, 969, 972, 973, 974, 980, 965, 975, 977, 971, - 982, 968, 976, 974, 970, 973, 975, 978, 976, 983, - 985, 980, 972, 978, 982, 977, 984, 987, 986, 993, - 988, 989, 992, 58, 985, 988, 989, 992, 993, 983, - 994, 994, 987, 995, 996, 984, 986, 998, 999, 995, - 1003, 1001, 1001, 999, 999, 1001, 1002, 996, 1004, 1002, - 1005, 1006, 1007, 998, 1003, 1008, 1009, 1010, 1011, 1012, + 954, 950, 953, 953, 954, 958, 951, 957, 958, 961, + 960, 952, 962, 957, 955, 960, 959, 964, 962, 963, + 966, 967, 961, 968, 963, 969, 970, 971, 972, 966, + 967, 969, 973, 972, 974, 970, 964, 975, 976, 968, + 977, 979, 978, 980, 985, 983, 971, 979, 974, 977, + 976, 978, 973, 981, 986, 988, 987, 975, 985, 981, + 980, 983, 989, 990, 996, 991, 992, 995, 999, 988, + 991, 992, 995, 996, 986, 987, 997, 997, 990, 998, + 989, 999, 1001, 1002, 1007, 998, 1004, 1004, 1002, 1002, + 1004, 1005, 1006, 1008, 1005, 1009, 1011, 1010, 1001, 1012, - 1016, 1014, 1009, 1016, 1011, 1007, 1005, 1013, 1004, 1006, - 1008, 1017, 1013, 1018, 1012, 1014, 1019, 1010, 1018, 1020, - 1021, 1019, 1022, 1025, 1023, 1021, 1026, 1022, 1027, 1025, - 1031, 1028, 1017, 1034, 1027, 1020, 1023, 1028, 1029, 1029, - 1030, 1032, 1026, 1035, 1032, 1033, 1033, 1036, 1031, 1030, - 1037, 1034, 1038, 1037, 1039, 1040, 1047, 1046, 1041, 1042, - 1039, 1040, 1035, 1041, 1042, 1038, 1043, 1036, 1044, 1050, - 1050, 1043, 1048, 1053, 1044, 1046, 1047, 1049, 1048, 1051, - 1052, 1054, 1049, 1055, 1056, 1057, 1055, 1056, 1051, 1052, - 1058, 1053, 1059, 1060, 1063, 1061, 1057, 1062, 1065, 1065, + 1013, 1014, 1015, 1016, 1007, 1012, 1006, 1014, 1016, 1008, + 1010, 1011, 1017, 1009, 1020, 1019, 1021, 1015, 1019, 1022, + 1013, 1021, 1023, 1024, 1022, 1025, 1017, 1026, 1024, 1029, + 1025, 1028, 1032, 1032, 1030, 1020, 1031, 1028, 1023, 1026, + 1030, 1033, 1031, 1034, 1035, 1029, 1037, 1035, 1036, 1036, + 1033, 1038, 1039, 1040, 1041, 1044, 1040, 1042, 1049, 1043, + 1044, 1034, 1050, 1042, 1037, 1043, 1045, 1041, 1046, 1047, + 1038, 1045, 1039, 1046, 1051, 1047, 1049, 1054, 1052, 1055, + 1051, 1056, 1050, 1052, 1053, 1053, 1054, 1057, 1055, 1058, + 1059, 1060, 1058, 1059, 1061, 1062, 1063, 1064, 1065, 1056, - 1054, 1061, 1064, 1062, 1059, 1066, 1067, 1064, 1058, 1063, - 1068, 1069, 1060, 1070, 1071, 1069, 1072, 1073, 1075, 1077, - 1067, 1080, 1068, 1071, 1066, 1076, 1076, 1079, 1081, 1082, - 1085, 1070, 1084, 1084, 1082, 1072, 1080, 1075, 1083, 1077, - 1081, 1079, 1073, 1086, 1088, 1087, 1096, 1083, 1089, 1086, - 1085, 1087, 1090, 1089, 1090, 1092, 1091, 1093, 1094, 1095, - 1088, 1091, 1098, 1094, 1099, 1096, 1097, 1101, 1101, 1092, - 1102, 1093, 1103, 1097, 1095, 1105, 1104, 1098, 1106, 1114, - 1107, 1105, 1109, 1099, 1102, 1107, 1109, 1110, 1110, 1116, - 1103, 1104, 1111, 1114, 1107, 1113, 1107, 1111, 1106, 1107, + 1067, 1066, 1060, 1064, 1065, 1067, 1057, 1062, 1068, 1068, + 1069, 1070, 1061, 1072, 1071, 1063, 1066, 1072, 1073, 1074, + 1075, 1076, 1078, 1079, 1079, 1070, 1071, 1080, 1074, 1069, + 1081, 1083, 1080, 1084, 1087, 1085, 1073, 1086, 1089, 1075, + 1092, 1078, 1086, 1087, 68, 1083, 1076, 1085, 1084, 1090, + 1081, 1088, 1088, 1091, 1096, 1090, 1092, 1093, 1089, 1091, + 1095, 1094, 1093, 1094, 1097, 1095, 1098, 1099, 1096, 1100, + 1101, 1098, 1102, 1103, 1105, 1105, 1106, 1101, 1097, 1107, + 1108, 1110, 1099, 1109, 1114, 1114, 1111, 1102, 1100, 1109, + 1106, 1111, 1103, 1121, 1113, 1108, 1117, 1107, 1113, 1115, - 1112, 1112, 1113, 1115, 1117, 1118, 1115, 1119, 1116, 1120, - 1122, 1121, 1119, 1123, 1118, 1122, 1125, 1130, 1124, 1127, - 1127, 1128, 1117, 1121, 1133, 1129, 1128, 1123, 1120, 1124, - 1129, 1131, 1134, 1133, 1132, 1125, 1131, 1130, 1132, 1135, - 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1134, 1143, 1144, - 1139, 1146, 1147, 1137, 1135, 1144, 1140, 1138, 1145, 1136, - 1148, 1149, 1150, 1151, 1141, 1152, 1143, 1142, 1153, 1148, - 1154, 1146, 1147, 1145, 1155, 1151, 1149, 1157, 1159, 1160, - 1158, 1150, 1161, 1157, 1152, 1154, 1163, 1160, 1162, 1164, - 1166, 1163, 1159, 1153, 1155, 1158, 1167, 1185, 1168, 1184, + 1111, 1110, 1111, 1117, 1115, 1111, 1116, 1116, 1118, 1119, + 1120, 1121, 1119, 1123, 1122, 1124, 1125, 1127, 1123, 1126, + 1129, 1128, 1118, 1122, 1126, 1131, 1131, 1134, 1125, 1120, + 1132, 1127, 1128, 1133, 1124, 1132, 1135, 1137, 1133, 1129, + 1136, 1135, 1138, 1139, 1136, 1140, 1137, 1134, 1141, 1143, + 1142, 1144, 1145, 1146, 1147, 1148, 1143, 1138, 1139, 1150, + 1141, 1148, 1149, 1144, 1140, 1142, 1151, 1152, 1153, 1154, + 1155, 1145, 1147, 1156, 1146, 1157, 1152, 1149, 1158, 1150, + 1162, 1159, 1155, 1153, 1161, 1163, 1151, 1165, 1154, 1164, + 1161, 1167, 1156, 1158, 1166, 1162, 1167, 1164, 1169, 1163, - 1165, 1164, 1161, 1171, 1162, 1165, 1165, 1169, 1169, 1166, - 1167, 1168, 1170, 1170, 1172, 1185, 1171, 1170, 1173, 1184, - 1170, 1170, 1181, 1172, 1173, 1170, 1174, 1174, 1175, 1176, - 1177, 1170, 1178, 1175, 1179, 1170, 1177, 1178, 1176, 1179, - 1180, 1180, 1187, 1181, 1182, 1182, 1183, 1186, 1188, 1183, - 1189, 1183, 1190, 1188, 1191, 1192, 1186, 1195, 1193, 1201, - 1191, 1192, 1187, 1193, 1189, 1194, 1195, 1196, 1196, 1194, - 1190, 1195, 1198, 1195, 1201, 1195, 1200, 1195, 1197, 1197, - 1200, 1197, 1202, 1198, 1203, 1204, 1205, 1206, 1208, 1207, - 1204, 1204, 1209, 1203, 1207, 1205, 1210, 1211, 1212, 1213, + 1157, 1159, 1168, 1169, 1169, 1170, 1171, 1165, 1172, 1175, + 1166, 1173, 1173, 1177, 1168, 1178, 1178, 63, 1176, 1177, + 1171, 1172, 1175, 1179, 1170, 1174, 1174, 1176, 1179, 1181, + 1174, 1180, 1182, 1174, 1174, 1181, 1183, 1182, 1174, 1185, + 1180, 1183, 1184, 1184, 1174, 1186, 1186, 1187, 1174, 1188, + 1187, 1192, 1187, 1189, 1190, 1191, 1192, 1207, 1193, 1194, + 1185, 1195, 1196, 1190, 58, 1197, 1207, 1195, 1196, 1188, + 1197, 1189, 1193, 1199, 1198, 1191, 1210, 1194, 1198, 1200, + 1200, 1202, 1199, 1201, 1201, 1205, 1201, 1199, 1206, 1199, + 1204, 1199, 1202, 1199, 1204, 1209, 1208, 1212, 1210, 1214, - 1202, 1209, 1208, 1214, 1214, 1213, 1215, 1216, 1217, 1206, - 1218, 1219, 1212, 1217, 1215, 1210, 1211, 1220, 1221, 1224, - 1219, 1216, 1222, 57, 1218, 1223, 1223, 1222, 1225, 1225, - 1226, 1230, 1226, 1228, 1224, 1220, 1228, 1229, 1231, 1232, - 1232, 1233, 1229, 1221, 1234, 1234, 1236, 1231, 1235, 1235, - 1230, 1236, 1237, 1238, 1239, 1239, 1240, 1241, 1242, 1243, - 1241, 1233, 1244, 1245, 1243, 1245, 1246, 1248, 1249, 52, - 1248, 1244, 1250, 1237, 1238, 1251, 1240, 1250, 1242, 1253, - 1252, 1254, 1258, 1249, 1246, 1252, 1254, 1253, 1255, 1251, - 1256, 1256, 1257, 1255, 1261, 1259, 1260, 1257, 1263, 1264, + 1205, 1208, 1208, 1211, 1209, 1213, 1206, 1215, 1211, 1216, + 1217, 1212, 1218, 1218, 1213, 1220, 1217, 1219, 1214, 1221, + 1222, 1223, 1224, 1216, 1221, 1219, 1215, 1225, 1226, 1220, + 1223, 1227, 1227, 1226, 1222, 1228, 1229, 1229, 1233, 1230, + 1224, 1230, 1232, 1233, 1234, 1232, 1235, 1236, 1236, 1237, + 1228, 1241, 1225, 1238, 1238, 1235, 1239, 1239, 1242, 1240, + 1243, 1243, 1244, 1234, 1240, 1245, 1246, 1248, 1245, 1237, + 1247, 1249, 1241, 1249, 1250, 1247, 1248, 1252, 1253, 1242, + 1252, 1255, 1244, 1254, 1256, 1262, 1246, 57, 1254, 1256, + 1257, 1258, 1250, 1253, 1259, 1255, 1258, 1261, 1257, 1259, - 1258, 1259, 1266, 1260, 1263, 1264, 1265, 1261, 1266, 1267, - 1268, 1265, 1269, 1270, 1270, 1271, 1273, 1274, 1267, 1275, - 1276, 1277, 1278, 1269, 1280, 1281, 1276, 1277, 1278, 1268, - 1280, 1273, 1282, 1283, 1284, 1271, 1285, 1274, 1286, 1281, - 1287, 1287, 1275, 1288, 1289, 1281, 1284, 1290, 1293, 1291, - 1285, 1296, 1282, 1283, 1291, 1294, 1286, 1292, 1292, 1298, - 1294, 1297, 47, 1288, 1299, 1290, 1297, 1297, 1300, 1289, - 1296, 1293, 1301, 1299, 1302, 1303, 1300, 1298, 1306, 1304, - 1306, 1307, 1305, 1313, 1304, 1314, 1301, 1304, 1309, 1302, - 1303, 1305, 1310, 1303, 1309, 1307, 1310, 1311, 1312, 1315, + 1260, 1260, 1261, 1262, 1263, 1264, 1265, 1267, 1268, 1270, + 1263, 1269, 1264, 1267, 1268, 1270, 1269, 1271, 1272, 1265, + 1273, 1274, 1274, 1275, 1277, 1278, 1271, 1279, 1280, 1281, + 1282, 1273, 1283, 1285, 1286, 1281, 1282, 1272, 1283, 1285, + 1278, 1287, 1277, 1275, 1288, 1289, 1290, 1279, 1286, 1291, + 1293, 1280, 1292, 1292, 1286, 1294, 1295, 1289, 1296, 1298, + 1290, 1287, 1301, 1296, 1288, 1297, 1297, 1291, 1299, 1303, + 1293, 1302, 52, 1299, 1295, 1304, 1302, 1302, 1305, 1306, + 1294, 1301, 1298, 1307, 1304, 1308, 1305, 1303, 1315, 1309, + 1310, 1312, 1315, 1306, 1309, 1314, 1316, 1309, 1307, 1310, - 1316, 1317, 1313, 1312, 1312, 1316, 1317, 1318, 1311, 1319, - 1320, 1314, 1321, 1323, 1329, 1320, 1324, 1315, 1325, 1326, - 1326, 1328, 1327, 1331, 1330, 1318, 1327, 1323, 1332, 1319, - 1330, 1333, 1321, 1329, 1324, 1331, 1325, 1334, 1335, 1328, - 1336, 1337, 1338, 1339, 1340, 1333, 1337, 1332, 1339, 1338, - 1343, 1341, 1334, 1335, 1342, 1342, 1345, 1344, 1349, 1336, - 1341, 1347, 1340, 1346, 1346, 1343, 1344, 1347, 1348, 1350, - 1350, 1351, 1349, 1352, 1348, 1353, 1345, 1351, 1354, 1355, - 1356, 1357, 1364, 1354, 1362, 1355, 1356, 1357, 1362, 1352, - 1358, 1358, 1359, 1359, 1361, 1361, 1353, 1363, 1365, 1366, + 1308, 1314, 1311, 1308, 1311, 1312, 1317, 1316, 1318, 1319, + 1320, 1317, 1317, 1321, 1322, 1323, 1324, 1325, 1321, 1322, + 1326, 1329, 1325, 1328, 1330, 1331, 1331, 1318, 1320, 1333, + 1332, 1334, 1335, 1323, 1332, 1319, 1324, 1328, 1335, 1329, + 1326, 1336, 1330, 1337, 1338, 1339, 1340, 1333, 1341, 1342, + 1334, 1344, 1343, 1336, 1342, 1345, 1344, 1346, 1338, 1343, + 1339, 1340, 1337, 1347, 1347, 1348, 1346, 1341, 1349, 1350, + 1351, 1351, 1352, 1345, 1354, 1353, 1357, 1349, 1352, 1356, + 1348, 1353, 1355, 1355, 1358, 1356, 1359, 1360, 1354, 1350, + 1361, 1359, 1357, 1360, 1362, 1367, 1361, 1363, 1363, 1367, - 1364, 1367, 1368, 1369, 1369, 1370, 1363, 1371, 1373, 1368, - 1365, 1374, 1372, 1366, 1375, 1371, 1367, 1372, 1376, 1375, - 1375, 1377, 1373, 1376, 1376, 1370, 1378, 1378, 1379, 1380, - 1374, 1381, 1382, 1383, 1384, 1385, 1386, 1382, 1387, 1388, - 1381, 1377, 1386, 1387, 1389, 1390, 1398, 1379, 1380, 1391, - 1389, 1392, 1383, 1385, 1384, 1391, 1393, 1392, 1394, 1395, - 1396, 1407, 1397, 1408, 1390, 1388, 1399, 1398, 1400, 1400, - 1401, 1402, 1408, 1401, 1407, 1393, 1397, 1394, 1395, 1396, - 1415, 1399, 1409, 1402, 1403, 1403, 1404, 1404, 1405, 1412, - 1406, 1414, 1413, 1405, 1406, 1409, 1410, 1413, 1410, 1421, + 1362, 1364, 1364, 1366, 1366, 1358, 1368, 1369, 1370, 1371, + 1373, 1372, 1374, 1374, 1375, 1368, 1376, 1373, 1378, 1379, + 1370, 1382, 1377, 1371, 1376, 1369, 1372, 1377, 1383, 1383, + 1380, 1384, 1378, 1385, 1375, 1380, 1380, 1381, 1379, 1386, + 1387, 1382, 1381, 1381, 1388, 1387, 1389, 1390, 1386, 1391, + 1384, 1392, 1385, 1393, 1394, 1391, 1392, 1395, 1396, 1398, + 1394, 1397, 1399, 1388, 1396, 1390, 1389, 1397, 1400, 1401, + 1402, 1403, 1405, 1405, 1404, 47, 1395, 1406, 1398, 1393, + 1406, 1399, 1407, 1412, 1402, 1408, 1408, 1400, 1401, 1404, + 1409, 1409, 1403, 1410, 1407, 1411, 1412, 1413, 1410, 1411, - 1415, 1416, 1410, 1417, 1417, 1418, 1414, 1412, 1419, 1420, - 1418, 1422, 1421, 1425, 1419, 1410, 1422, 1416, 1423, 1424, - 1426, 1427, 1423, 1424, 1420, 1428, 1429, 1429, 1431, 1433, - 1434, 1428, 1437, 1425, 1436, 1434, 1435, 1435, 1426, 1443, - 1436, 1427, 1439, 1439, 1441, 1444, 1431, 1441, 1442, 1442, - 1433, 1446, 1437, 1447, 1446, 1443, 1448, 1449, 1449, 1450, - 1451, 1444, 1453, 1452, 1454, 1448, 1456, 1453, 1455, 1455, - 1457, 1458, 1459, 1447, 1450, 1456, 1460, 1460, 1454, 1461, - 1462, 1451, 1452, 1466, 1463, 1464, 1458, 1466, 1457, 1463, - 1465, 1465, 1467, 1461, 1468, 1468, 1469, 1459, 1462, 1470, + 1414, 1415, 1419, 1415, 1417, 1418, 1413, 1415, 1420, 1421, + 1418, 1422, 1422, 1414, 1423, 1424, 1425, 1419, 1430, 1423, + 1415, 1424, 1417, 1426, 1427, 1421, 1428, 1431, 1420, 1427, + 1428, 1425, 1432, 1429, 1433, 1436, 1426, 1429, 1430, 1438, + 1433, 1434, 1434, 1439, 1441, 1431, 1440, 1440, 1439, 1442, + 1441, 1448, 1432, 1436, 1444, 1444, 1446, 1447, 1447, 1446, + 1438, 1449, 1451, 1452, 1453, 1451, 1455, 1448, 1456, 1442, + 1454, 1454, 1457, 1453, 1458, 1462, 1459, 1449, 1461, 1458, + 1463, 1455, 1464, 1452, 1460, 1460, 1466, 1461, 1467, 1456, + 1459, 1457, 1472, 1462, 1468, 1463, 1465, 1465, 1469, 1468, - 1464, 1471, 1472, 1473, 1476, 1471, 1475, 1475, 1473, 1477, - 1470, 1478, 1467, 1479, 1480, 1481, 1482, 1482, 1469, 1483, - 1476, 1472, 1484, 1485, 1483, 1478, 1487, 1477, 1480, 1486, - 1486, 1488, 1479, 1479, 1489, 1487, 1488, 1490, 1492, 1490, - 1481, 1491, 1484, 1485, 1492, 1493, 1491, 1494, 1496, 1497, - 1497, 1498, 1499, 1494, 1489, 1501, 1502, 1505, 1499, 1506, - 1501, 1507, 1496, 1503, 1503, 1493, 1504, 1504, 1510, 1508, - 1498, 1505, 1508, 1509, 1509, 1511, 1507, 1506, 1512, 1513, - 1502, 1516, 1513, 1514, 1516, 1513, 1510, 1511, 1515, 1514, - 1518, 1519, 1520, 1515, 1522, 1522, 1519, 1513, 1512, 1518, + 1466, 1470, 1470, 1474, 1471, 1475, 1467, 1464, 1471, 1473, + 1473, 1476, 1472, 1469, 1477, 1476, 1475, 1478, 1480, 1480, + 1482, 1481, 1478, 1483, 1484, 1474, 1485, 1487, 1486, 1488, + 1488, 1490, 1489, 1477, 1481, 1491, 1482, 1489, 1484, 1492, + 1492, 1483, 1486, 1494, 1493, 1485, 1485, 1495, 1494, 1499, + 18, 1490, 1487, 1493, 1496, 1491, 1496, 1497, 1498, 1500, + 1502, 1504, 1497, 1507, 1498, 1500, 1505, 1495, 1507, 1499, + 1503, 1503, 1505, 1508, 1502, 1509, 1509, 1510, 1510, 1511, + 1504, 1512, 1514, 1513, 1516, 1514, 1515, 1515, 1517, 1518, + 1520, 1522, 1526, 1511, 1522, 1537, 1520, 1508, 1513, 1512, - 1516, 1521, 1523, 1524, 1521, 1525, 1526, 1526, 1523, 1524, - 1525, 1527, 1527, 1528, 1530, 1529, 1531, 1520, 1532, 1528, - 1529, 1533, 1534, 1535, 1536, 1534, 1537, 1530, 1539, 1535, - 1536, 1537, 1538, 1544, 1531, 1540, 1543, 1532, 1538, 1542, - 1540, 1533, 1541, 1541, 1542, 1545, 1546, 1547, 1548, 1549, - 1550, 1539, 1551, 1544, 1543, 1552, 1551, 1552, 1553, 1555, - 1546, 1547, 1548, 1558, 1556, 1545, 1557, 1549, 1559, 1558, - 1560, 1555, 1561, 1562, 1563, 1550, 1556, 1553, 1566, 1557, - 1565, 1565, 1568, 1571, 1567, 1570, 1560, 1562, 1559, 1567, - 1569, 1569, 1561, 1572, 1568, 1563, 1573, 1571, 1566, 1574, + 1517, 1519, 1516, 1521, 1519, 1524, 1525, 1519, 1521, 1518, + 1522, 1525, 1527, 1537, 1524, 1527, 1529, 1526, 1530, 1519, + 1528, 1528, 1529, 1531, 1530, 1532, 1532, 1534, 1531, 1533, + 1533, 1535, 1536, 1534, 1538, 1539, 1535, 1540, 1541, 1545, + 1540, 1542, 1549, 1543, 1541, 1536, 1544, 1542, 1543, 1546, + 1547, 1547, 1544, 1538, 1546, 1539, 1548, 1550, 1551, 1552, + 1549, 1548, 1545, 1555, 1556, 1553, 1554, 1557, 1558, 1559, + 1558, 1557, 1561, 1552, 1562, 17, 1565, 1550, 1551, 1553, + 1554, 1555, 1563, 1566, 1561, 1564, 1562, 1567, 1559, 1556, + 1568, 1564, 1569, 1571, 1571, 1563, 1565, 1572, 1573, 1566, - 1570, 1575, 1576, 1577, 1578, 1582, 1580, 1583, 1574, 1576, - 1583, 1587, 1577, 1586, 1573, 1577, 1575, 1572, 1584, 1584, - 1578, 1580, 1585, 1585, 1588, 1586, 1580, 1588, 1590, 1587, - 1582, 1589, 1589, 1591, 1592, 1593, 1594, 1595, 1596, 1592, - 1593, 1590, 1597, 1602, 1600, 1598, 1606, 1596, 1604, 1599, - 1600, 1603, 1591, 1595, 1598, 1594, 1605, 1598, 1599, 1601, - 1601, 1597, 1606, 1602, 1603, 1607, 1604, 1610, 1611, 1613, - 1605, 1612, 1612, 1614, 1615, 1616, 1616, 1607, 1618, 1615, - 1619, 1620, 1614, 1618, 1617, 1613, 1611, 1621, 1625, 1622, - 1616, 1626, 1610, 1617, 1622, 1622, 1617, 1624, 1619, 1627, + 1574, 1575, 1575, 1573, 1568, 1576, 1578, 1567, 1577, 1579, + 1580, 1581, 1574, 1569, 1582, 1584, 1583, 1572, 1586, 1580, + 1576, 1582, 1577, 1588, 1593, 1583, 1581, 1579, 1583, 1589, + 1578, 1584, 1589, 1586, 1590, 1590, 1591, 1591, 1586, 1592, + 1594, 1596, 1593, 1594, 1595, 1595, 1597, 1598, 1588, 1600, + 1599, 1592, 1598, 1601, 1596, 1599, 1603, 1602, 1604, 1607, + 1607, 1608, 1605, 1609, 1610, 1597, 1602, 1604, 1600, 1601, + 1604, 1605, 1606, 1611, 1612, 1603, 1609, 1613, 1606, 1616, + 1617, 1608, 1610, 1618, 1618, 1619, 1620, 1611, 1621, 1613, + 1612, 1622, 1622, 1621, 1624, 1620, 1623, 1625, 1617, 1624, - 1628, 1629, 1620, 1625, 1627, 1621, 1628, 1630, 1630, 1631, - 1633, 1624, 1632, 1626, 1634, 1631, 1633, 1632, 1636, 1629, - 1634, 1637, 1638, 1639, 1640, 1641, 1643, 1640, 1638, 1645, - 1646, 1641, 1647, 1640, 1643, 1637, 1639, 1648, 1636, 1649, - 1647, 1650, 1651, 1652, 1653, 1653, 1648, 1654, 1645, 1646, - 1656, 1658, 1649, 1654, 1650, 1655, 1651, 1652, 1657, 1657, - 1659, 1655, 1660, 1656, 1661, 1663, 1653, 1662, 1664, 1668, - 1665, 1658, 1669, 1662, 1667, 1667, 1669, 1661, 1659, 1674, - 1670, 1660, 1676, 1673, 1664, 1670, 1671, 1663, 1665, 1668, - 1672, 1671, 1673, 1677, 1676, 1672, 1678, 1678, 1679, 1680, + 1626, 1619, 1627, 1630, 1616, 1623, 1622, 1628, 1623, 1631, + 1632, 1633, 1628, 1628, 0, 1625, 1633, 1630, 1635, 1634, + 1627, 1626, 1636, 1636, 1631, 1634, 1638, 1637, 1639, 1640, + 1642, 1638, 1632, 1637, 1639, 1640, 1635, 1643, 1644, 1645, + 1646, 1647, 1651, 1646, 1644, 1649, 1652, 1647, 1653, 1646, + 1642, 1643, 1645, 1649, 1654, 1655, 1653, 1656, 1657, 1658, + 1664, 1651, 1666, 1654, 1665, 1652, 1659, 1659, 1655, 1660, + 1656, 1661, 1657, 1658, 1662, 1660, 1667, 1661, 1663, 1663, + 1664, 1666, 1665, 1669, 1668, 1670, 1671, 1662, 1659, 1667, + 1668, 1673, 1673, 1674, 1675, 1676, 1680, 1677, 1675, 1683, - 1681, 1683, 1674, 1682, 1682, 1684, 1685, 1688, 1677, 1686, - 1689, 1680, 1684, 1691, 1690, 1683, 1692, 1679, 1685, 1681, - 1690, 1686, 1693, 1694, 1694, 1691, 1688, 1702, 1693, 1695, - 1689, 1699, 1695, 1698, 1692, 1696, 1696, 1700, 1698, 1702, - 1699, 1701, 1701, 1700, 1703, 1704, 1703, 1705, 1704, 1706, - 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1709, 1710, 1716, - 1712, 1714, 1719, 1711, 1715, 1720, 1720, 1705, 1707, 1708, - 1713, 1706, 1712, 1715, 1722, 1717, 1718, 1719, 1721, 1716, - 1717, 1718, 1724, 1725, 1721, 1727, 1715, 1717, 1726, 1728, - 1733, 1728, 1729, 1730, 1730, 1722, 1731, 1731, 1732, 1732, + 1676, 1670, 1677, 1678, 1671, 1669, 1679, 1682, 1678, 1684, + 1686, 1683, 1688, 1674, 1687, 1679, 1682, 1685, 1685, 1680, + 1689, 1689, 1690, 1691, 1684, 1692, 1687, 1693, 1695, 1686, + 1691, 1688, 1696, 1698, 1697, 1699, 1690, 1692, 1700, 1693, + 1697, 1701, 1701, 1702, 1700, 1698, 1702, 1695, 1703, 1703, + 1705, 1706, 1696, 1699, 1709, 1705, 1707, 1708, 1708, 1710, + 1706, 1710, 1707, 1712, 1711, 1713, 1709, 1711, 1714, 1716, + 1715, 1717, 1718, 1719, 1716, 1720, 1717, 1721, 1723, 1724, + 1722, 1718, 1721, 1712, 1724, 1719, 1714, 1713, 1715, 1722, + 1720, 1724, 1725, 1726, 1727, 1727, 1729, 1725, 1723, 1728, - 1736, 1724, 1737, 1725, 1726, 1727, 1729, 18, 1729, 1744, - 1733, 1734, 1734, 1735, 1735, 1738, 1738, 1741, 1739, 1740, - 1741, 1736, 1739, 1737, 1743, 1740, 1745, 1744, 1746, 1749, - 1743, 1747, 1745, 1750, 1747, 1748, 1748, 1752, 1750, 1751, - 1751, 1753, 1754, 1755, 1755, 1756, 1758, 1754, 1757, 1749, - 1756, 1759, 1752, 1746, 1757, 1760, 1761, 1762, 1758, 1758, - 1758, 1763, 1753, 1762, 1765, 1758, 1766, 1767, 1769, 1765, - 1765, 1759, 1768, 1760, 1768, 1770, 1761, 1771, 1772, 1769, - 1766, 1763, 1767, 1771, 1773, 1774, 1776, 1772, 1775, 1775, - 1770, 1777, 1777, 1778, 1779, 1780, 1780, 1781, 1781, 1782, + 1731, 1732, 1722, 1734, 1733, 1728, 0, 1735, 1726, 1735, + 1736, 1737, 1737, 1738, 1738, 1739, 1739, 1729, 1740, 1731, + 1733, 1732, 1743, 1734, 1736, 1744, 1736, 1741, 1741, 1742, + 1742, 1745, 1745, 1746, 1747, 1750, 1748, 1746, 1740, 1748, + 1747, 1750, 1751, 1743, 1752, 1753, 1744, 1756, 1754, 1757, + 1752, 1754, 1755, 1755, 1757, 1758, 1758, 1759, 1760, 1761, + 1751, 1762, 1762, 1763, 1761, 1764, 1766, 1756, 1763, 1765, + 1753, 1764, 1759, 1767, 1768, 1770, 1773, 1821, 1769, 1760, + 1821, 1765, 1765, 1765, 1769, 1774, 1766, 1772, 1765, 1777, + 1773, 1767, 1772, 1772, 1768, 1770, 1775, 1776, 1775, 1778, - 1785, 1785, 1786, 1790, 1773, 1787, 1774, 1793, 1789, 1791, - 1792, 1792, 1776, 1778, 1787, 1791, 1779, 1789, 1794, 1782, - 1797, 1796, 1795, 1799, 1790, 1798, 1798, 1786, 1793, 1795, - 1796, 1800, 1802, 1794, 1803, 1804, 1805, 1802, 1806, 1807, - 1803, 1808, 1808, 1805, 1806, 1807, 1797, 1800, 1809, 1799, - 1810, 1811, 1813, 1809, 1812, 1804, 1815, 1814, 1816, 1810, - 1814, 1817, 1817, 1818, 1813, 1820, 1819, 1821, 1824, 1818, - 1825, 1811, 1819, 1812, 1815, 1822, 1826, 1827, 1827, 1822, - 1828, 1826, 1821, 1829, 1816, 1820, 1831, 1832, 1824, 17, - 1833, 1832, 1825, 1834, 1839, 1822, 1833, 1837, 1829, 1828, + 1774, 1779, 1780, 1781, 1777, 1778, 1782, 1782, 1776, 1783, + 1779, 1784, 1784, 1785, 1786, 1787, 1787, 1788, 1788, 1789, + 1792, 1792, 1780, 1793, 1781, 1794, 1797, 1801, 1796, 1799, + 1799, 1800, 1798, 1785, 1794, 1783, 1786, 1796, 1798, 1789, + 1803, 1804, 1801, 1802, 1805, 1805, 1806, 1797, 1793, 1803, + 1802, 1809, 1800, 1807, 1810, 1811, 1809, 1812, 1816, 1813, + 1810, 1818, 1814, 1816, 1812, 1813, 1819, 1804, 1814, 1807, + 1815, 1815, 1806, 1817, 1820, 1811, 1822, 1823, 1824, 1824, + 1827, 1818, 1817, 1825, 1826, 1819, 1820, 1828, 1829, 1825, + 1826, 1831, 1829, 1832, 1822, 1835, 1833, 1834, 1834, 1838, - 1835, 1835, 1834, 1836, 1840, 1831, 1841, 1836, 1837, 1838, - 1838, 1842, 1843, 1837, 1844, 1839, 1842, 1845, 1840, 1847, - 1846, 1848, 1848, 1845, 1847, 1841, 1849, 1849, 1852, 1850, - 1853, 1854, 1843, 1850, 1844, 1846, 1861, 1852, 1855, 1855, - 1862, 1853, 1857, 1857, 1858, 1862, 1853, 1859, 1860, 1858, - 1858, 1854, 1863, 1859, 1860, 1864, 1866, 1868, 1869, 1867, - 1870, 1864, 1861, 1867, 1863, 1871, 1870, 1872, 1866, 1868, - 1873, 1877, 1874, 1872, 1876, 1873, 1878, 1880, 1881, 1881, - 1880, 1878, 1884, 1869, 1874, 1927, 1876, 1871, 1882, 1882, - 1877, 1883, 1883, 1885, 1886, 1889, 1887, 1888, 1927, 1885, + 1827, 1833, 1828, 1823, 1836, 1839, 1840, 1841, 1829, 1839, + 1846, 1831, 1840, 1843, 1835, 1832, 1841, 1843, 1838, 1836, + 1842, 1842, 1844, 1845, 1845, 1847, 1848, 1849, 1850, 1851, + 1852, 1846, 1849, 1844, 1861, 1853, 1852, 1854, 1844, 1847, + 1855, 1855, 1854, 1856, 1856, 1848, 1859, 1857, 1850, 1851, + 1853, 1857, 1860, 1868, 1861, 1859, 1862, 1862, 1864, 1864, + 1865, 1866, 1878, 1860, 1867, 1865, 1865, 1866, 1860, 1869, + 1867, 1870, 1871, 1873, 1869, 1875, 1874, 1876, 1871, 1868, + 1874, 1880, 1877, 1870, 1878, 1873, 1879, 1875, 1877, 1881, + 1885, 1882, 1879, 1884, 1881, 1888, 1886, 1892, 1888, 1895, - 1886, 1887, 1884, 1888, 1889, 1891, 1893, 1894, 1897, 1893, - 1891, 1895, 1895, 1898, 1900, 1900, 1899, 1901, 1902, 1894, - 1897, 1899, 1903, 1902, 1906, 1898, 1901, 1903, 1904, 1905, - 1905, 1904, 1907, 1908, 1909, 1910, 1913, 1911, 1914, 1910, - 1912, 1907, 1911, 1915, 1906, 1916, 1912, 1914, 1918, 1918, - 1919, 1908, 1925, 1909, 1913, 1920, 1921, 1921, 1923, 1916, - 1918, 1915, 1922, 1922, 1920, 1924, 1926, 1923, 1919, 1930, - 1930, 1926, 1932, 1925, 1933, 1932, 1934, 1924, 1936, 1938, - 1937, 1939, 1940, 1940, 1941, 1938, 1941, 1942, 1942, 1943, - 1933, 1948, 1934, 1936, 1937, 1945, 1945, 1943, 1939, 1946, + 1880, 1886, 1876, 1882, 1895, 1884, 1889, 1889, 1893, 1885, + 1890, 1890, 1891, 1891, 1893, 1894, 1896, 1892, 1897, 1899, + 1901, 1894, 1896, 1901, 1899, 1902, 1905, 1897, 1903, 1903, + 1906, 1907, 1908, 1908, 1909, 1910, 1907, 1902, 1905, 1911, + 1910, 1914, 1906, 1909, 1911, 1912, 1913, 1913, 1912, 1915, + 1916, 1917, 1918, 1921, 1919, 1922, 1918, 1920, 1915, 1919, + 1923, 1914, 1924, 1920, 1922, 1926, 1926, 1927, 1916, 1933, + 1917, 1921, 1928, 1929, 1929, 1931, 1924, 1926, 1923, 1930, + 1930, 1928, 1932, 1934, 1931, 1927, 1935, 1941, 1934, 1942, + 1933, 1938, 1938, 1940, 1932, 1944, 1940, 1945, 1946, 1935, - 1946, 1949, 1950, 1951, 1952, 1953, 1955, 1949, 1950, 1956, - 1951, 1954, 1954, 1961, 1948, 1955, 1957, 1958, 1959, 1960, - 1962, 1963, 1965, 1966, 1967, 1953, 1952, 1963, 1957, 1958, - 1956, 1960, 1969, 1959, 1970, 1962, 1967, 1968, 1968, 1961, - 1963, 1971, 1965, 1972, 1971, 1973, 1966, 1975, 1972, 1976, - 1969, 1976, 1975, 1977, 1970, 1978, 1979, 1981, 1983, 1984, - 1978, 1985, 1986, 1979, 1986, 1973, 1981, 1987, 1984, 1990, - 1989, 1977, 1989, 1985, 1991, 1991, 1983, 1992, 1994, 1993, - 1994, 1997, 1995, 1990, 1993, 1996, 1987, 1995, 1998, 1999, - 1996, 2000, 2001, 2002, 2004, 1999, 2000, 2005, 2009, 1997, + 1947, 1948, 1948, 1941, 1946, 1942, 1949, 1951, 1949, 1956, + 1944, 1945, 1950, 1950, 1960, 1951, 1957, 1947, 1953, 1953, + 1954, 1954, 1957, 1958, 1959, 1961, 1962, 1962, 1963, 1958, + 1964, 1959, 1956, 1967, 1965, 1966, 1960, 1963, 1968, 1969, + 1970, 1973, 1975, 1971, 1974, 1961, 1965, 1966, 1967, 1971, + 1968, 1964, 1976, 1976, 1975, 1970, 1977, 1978, 1981, 1980, + 1979, 1973, 1971, 1979, 1980, 1969, 1983, 1974, 1984, 1985, + 1984, 1983, 1987, 1989, 1977, 1986, 1991, 1978, 1981, 1987, + 1986, 1992, 1989, 1993, 1994, 1995, 1994, 1985, 1998, 1997, + 1992, 1997, 1999, 1999, 1991, 1993, 2000, 2002, 2001, 2002, - 2008, 2002, 2012, 1992, 2012, 2001, 2006, 2006, 1998, 2007, - 2007, 2005, 2011, 2004, 2010, 2008, 2013, 2011, 2009, 2014, - 2010, 2015, 2015, 2019, 2016, 2017, 2017, 2014, 2018, 2018, - 2021, 2023, 2019, 2020, 2013, 2014, 2016, 2024, 2020, 2024, - 2023, 2025, 2027, 2023, 2026, 2028, 2030, 2031, 2021, 2026, - 2026, 2027, 2031, 2034, 2032, 2035, 2036, 2028, 2030, 2032, - 2037, 2037, 2025, 2038, 2039, 2036, 2034, 2040, 2044, 2046, - 2041, 2042, 2047, 2045, 2048, 2035, 2055, 2047, 2049, 2048, - 2044, 2038, 2039, 2040, 2041, 2045, 2042, 2049, 2052, 2046, - 2054, 2056, 2057, 2058, 2052, 2059, 2054, 2060, 2060, 2055, + 2003, 2004, 1998, 2001, 1995, 2003, 2004, 2005, 2006, 2007, + 2009, 2008, 2010, 2012, 2016, 2007, 2008, 2013, 2014, 2014, + 2010, 2017, 2000, 2009, 2018, 2005, 2015, 2015, 2006, 2016, + 2018, 2013, 2012, 2019, 2020, 2021, 2020, 2024, 2019, 2022, + 2029, 2017, 2023, 2023, 2025, 2025, 2033, 2022, 2027, 2024, + 2026, 2026, 2031, 2021, 2028, 2022, 2035, 2027, 2029, 2028, + 2032, 2031, 2032, 2034, 2031, 2035, 2036, 2033, 2034, 2034, + 2038, 2039, 2040, 2042, 2043, 2044, 2039, 2040, 2036, 2045, + 2045, 2046, 2038, 2047, 2044, 2050, 2042, 2048, 2049, 2054, + 2055, 2056, 2052, 2053, 2043, 2055, 2056, 2057, 2063, 2046, - 2061, 2062, 2062, 2063, 2059, 2067, 2056, 2052, 2064, 2061, - 2057, 2065, 2064, 2066, 2068, 2069, 2065, 2070, 2058, 2068, - 2068, 2069, 2063, 2070, 2072, 2071, 2066, 2067, 2071, 2073, - 2076, 2076, 2072, 2077, 2077, 2078, 2079, 2079, 2080, 2080, - 2081, 2083, 2082, 0, 2078, 2084, 2087, 2083, 2077, 2073, - 2084, 2087, 2081, 2085, 2085, 2086, 2086, 2088, 2090, 2077, - 2082, 2091, 2090, 2088, 2092, 2093, 2095, 2096, 2092, 2097, - 2099, 2098, 2096, 2101, 2103, 2099, 2100, 2102, 2104, 2103, - 2106, 2091, 2105, 2105, 2106, 2093, 2098, 2107, 2108, 2101, - 2109, 2095, 2097, 2108, 2100, 2111, 2110, 2102, 2112, 2113, + 2050, 2047, 2049, 2048, 2052, 2053, 2057, 2060, 2062, 2054, + 2064, 2065, 2066, 2060, 2062, 2067, 2068, 2068, 2069, 2070, + 2070, 2063, 2071, 2074, 2067, 2064, 2060, 2069, 2072, 2065, + 2073, 2075, 2072, 2076, 2077, 2073, 2074, 2066, 2078, 2077, + 2077, 2071, 2079, 2080, 2078, 2081, 2080, 2082, 2079, 2087, + 2075, 2085, 2085, 2081, 2090, 2076, 2086, 2086, 2087, 2088, + 2088, 2089, 2089, 2091, 2092, 2099, 2090, 2082, 2093, 2099, + 2092, 2086, 2100, 2093, 2094, 2094, 2095, 2095, 2096, 2097, + 2101, 2091, 2086, 2096, 2101, 2097, 2102, 2104, 2105, 2107, + 2106, 2108, 2100, 2105, 2110, 2112, 2108, 2109, 2111, 2113, - 2104, 2114, 2107, 2110, 2113, 2115, 2119, 2111, 2116, 2116, - 2118, 2120, 2121, 2122, 2114, 2123, 2109, 2112, 2118, 2124, - 2125, 2126, 2131, 2115, 2128, 2119, 0, 2132, 2130, 2133, - 2120, 2133, 2125, 2132, 2123, 2121, 2131, 2122, 2137, 2128, - 2124, 2130, 2126, 2134, 2134, 2135, 2136, 2138, 2153, 2136, - 2135, 2137, 2139, 2140, 2140, 2141, 2141, 2142, 2144, 2142, - 2147, 2138, 2143, 2143, 2145, 2139, 2146, 2146, 2153, 2147, - 2148, 2148, 2147, 2144, 2149, 2149, 2150, 2145, 2152, 2154, - 2155, 2150, 2158, 2152, 2156, 2156, 2157, 2157, 2159, 2159, - 2160, 2162, 2155, 2161, 2161, 2163, 2164, 2164, 2166, 2154, + 2112, 2114, 2114, 2115, 2107, 2116, 2102, 2115, 2118, 2117, + 2110, 2121, 2104, 2106, 2117, 2109, 2119, 2120, 2111, 2122, + 2116, 2113, 2123, 2119, 2122, 2124, 2125, 2125, 2127, 2120, + 2121, 2128, 2129, 2130, 2118, 2123, 2127, 2131, 2132, 2133, + 2134, 2135, 2139, 2124, 2137, 2146, 2142, 2141, 2142, 2140, + 2128, 2129, 2134, 2141, 2147, 2139, 2130, 2132, 2146, 2137, + 2133, 2131, 2135, 2140, 2143, 2143, 2144, 2145, 2147, 2148, + 2145, 2144, 2149, 2149, 2150, 2150, 2151, 2153, 2151, 2152, + 2152, 2154, 2148, 2155, 2155, 2162, 2156, 2157, 2157, 2158, + 2158, 2159, 2153, 2163, 2154, 2156, 2159, 2161, 2156, 2164, - 2163, 2158, 2165, 2165, 2167, 2168, 2162, 2169, 2160, 2171, - 2172, 2172, 2166, 2167, 2171, 2173, 2174, 2174, 2175, 2168, - 2177, 2176, 2180, 2177, 2178, 2178, 2169, 2176, 2179, 2179, - 2181, 2182, 2183, 2183, 2173, 2185, 2175, 2186, 2187, 2188, - 2178, 2180, 2190, 2188, 2191, 2181, 2189, 2189, 2192, 2191, - 2182, 2193, 2196, 2187, 2198, 2185, 2195, 2195, 2197, 2199, - 2186, 2190, 2200, 2192, 2201, 2197, 2193, 2203, 2198, 2202, - 2202, 2204, 2196, 2204, 2207, 2205, 2203, 2199, 2205, 2208, - 2200, 2210, 2209, 2211, 2208, 2214, 2207, 2209, 2212, 2213, - 2201, 2220, 2216, 2205, 2213, 2205, 2211, 2216, 2217, 2218, + 2165, 2165, 2161, 2166, 2166, 2162, 2167, 2168, 2168, 2169, + 2175, 2164, 2172, 2163, 2170, 2170, 2171, 2172, 2173, 2173, + 2174, 2174, 2177, 2176, 2175, 2167, 2178, 2169, 2180, 2181, + 2181, 2171, 2176, 2180, 2182, 2185, 2177, 2183, 2183, 2184, + 2186, 2185, 2189, 2186, 2190, 2178, 2187, 2187, 2188, 2188, + 2191, 2192, 2192, 2182, 2194, 2195, 2196, 2184, 2199, 2190, + 2197, 2189, 2187, 2200, 2197, 2198, 2198, 2201, 2200, 2191, + 2202, 2196, 2204, 2204, 2194, 2205, 2206, 2199, 2195, 2207, + 2208, 2209, 2201, 2206, 2210, 2202, 2211, 2211, 2212, 2213, + 2216, 2213, 2219, 2207, 2220, 2205, 2217, 2212, 2208, 2209, - 2222, 2219, 2221, 2217, 2224, 2222, 2210, 2219, 2221, 2212, - 2223, 2214, 2220, 2225, 2218, 2223, 2226, 2236, 2227, 2226, - 2231, 2228, 2229, 2230, 2234, 0, 2225, 2227, 2234, 2224, - 2228, 2229, 2230, 2232, 2231, 2233, 2238, 2236, 2240, 2232, - 2243, 2233, 2239, 2239, 2240, 2238, 2241, 2241, 2242, 2245, - 2246, 2247, 2247, 2242, 2248, 2241, 2251, 2252, 2249, 2253, - 2243, 2256, 2243, 2254, 2256, 2245, 2246, 2249, 2251, 2248, - 2258, 2257, 2259, 2252, 2253, 2254, 2257, 2260, 2260, 2261, - 2261, 2263, 2263, 2264, 2259, 2266, 2264, 2265, 2267, 2268, - 2258, 2266, 2265, 2270, 2267, 2269, 2269, 2272, 2268, 2271, + 2214, 2217, 2216, 2214, 2218, 2221, 2222, 2220, 2223, 2218, + 2210, 2222, 2227, 2233, 2225, 2229, 2226, 2219, 2214, 2225, + 2214, 2226, 2228, 2230, 2236, 2231, 2221, 2227, 2228, 2230, + 2231, 2234, 2232, 2236, 2223, 0, 2229, 2232, 2233, 2235, + 2237, 2238, 2235, 2239, 2234, 2240, 2245, 2241, 2242, 2237, + 2238, 2243, 2239, 2241, 2242, 2243, 2247, 2248, 2248, 2240, + 2251, 2249, 2250, 2250, 2253, 2247, 2245, 2249, 2252, 2251, + 2258, 2250, 2255, 2252, 2256, 2257, 2257, 2261, 2259, 2262, + 2264, 2263, 2268, 2310, 2253, 2258, 2253, 2259, 2255, 2261, + 2256, 2266, 2264, 2267, 2266, 2262, 2263, 2269, 2267, 2270, - 2271, 2273, 2274, 2275, 2275, 2276, 2277, 2270, 2278, 2272, - 2280, 2276, 2286, 2278, 2280, 2273, 2281, 2282, 2282, 2281, - 2277, 2274, 2283, 2284, 2285, 2289, 2287, 2283, 2284, 2284, - 2287, 2291, 2286, 2285, 2288, 2288, 2291, 2292, 2289, 2293, - 2294, 2295, 2296, 2297, 2298, 2295, 2299, 2300, 2297, 2301, - 2298, 2302, 2299, 2303, 2294, 2304, 0, 2292, 2303, 2293, - 2306, 2307, 2296, 2310, 2308, 2300, 2313, 2309, 2301, 2308, - 2302, 2310, 2306, 2309, 2315, 2313, 2304, 2307, 2311, 2318, - 2311, 2316, 2316, 2317, 2319, 2319, 2317, 2322, 2315, 2323, - 2324, 2322, 2325, 2325, 2326, 2323, 2329, 2329, 2331, 2333, + 2270, 2310, 2268, 2271, 2271, 2273, 2273, 2274, 2275, 2269, + 2274, 2276, 2277, 2275, 2278, 2279, 2279, 2276, 2277, 2280, + 2281, 2281, 2282, 2278, 2283, 2284, 2285, 2285, 2287, 2286, + 2295, 2288, 0, 2280, 2282, 2286, 2288, 2290, 2283, 2295, + 2291, 2290, 2287, 2291, 2284, 2292, 2292, 2293, 2294, 2296, + 2299, 2297, 2293, 2294, 2294, 2297, 2298, 2298, 2302, 2301, + 2303, 2304, 2305, 2299, 2301, 2306, 2305, 2307, 2308, 2296, + 2309, 2311, 2307, 2312, 2308, 2304, 2309, 2313, 2302, 2314, + 2303, 2316, 2313, 2317, 2318, 2306, 2328, 2320, 2319, 2318, + 2311, 2325, 2312, 2316, 2319, 2320, 2321, 2323, 2321, 2317, - 2338, 2334, 2324, 2326, 2337, 2318, 2339, 2340, 2347, 2337, - 2348, 2339, 2340, 2333, 2341, 2341, 2331, 2334, 2343, 2343, - 2349, 2345, 2346, 2346, 2347, 2349, 2338, 2345, 2351, 2352, - 2353, 2353, 2348, 2355, 2356, 2357, 2358, 2360, 2360, 2362, - 2356, 2352, 2355, 2361, 2363, 2367, 2361, 2351, 2365, 2365, - 2367, 2358, 2368, 2357, 2366, 2366, 2369, 2372, 2362, 2370, - 2373, 2371, 2363, 2371, 2370, 2369, 2374, 2375, 2376, 2383, - 2368, 2372, 2375, 0, 2373, 2377, 2378, 2378, 2374, 2382, - 2377, 2379, 2379, 2380, 2380, 2381, 2381, 2383, 2376, 2384, - 2387, 2382, 2385, 2385, 2384, 2386, 2386, 2388, 2389, 2390, + 2314, 2326, 2326, 2334, 2327, 2325, 2323, 2327, 2329, 2329, + 2332, 2333, 2328, 2336, 2332, 2334, 2341, 2333, 2335, 2335, + 2339, 2339, 2336, 2343, 2344, 2347, 2348, 2349, 2350, 2357, + 2347, 2358, 2349, 2350, 2341, 2351, 2351, 2343, 2353, 2353, + 2344, 2355, 2356, 2356, 2359, 2357, 2361, 2355, 2362, 2359, + 2363, 2363, 2348, 2358, 2365, 2366, 2367, 2368, 2370, 2370, + 2362, 2366, 2372, 2365, 2371, 2361, 2373, 2371, 2375, 2375, + 2376, 2376, 2368, 2377, 2367, 2378, 2379, 2380, 2377, 2384, + 2382, 2372, 2380, 2383, 2373, 2379, 2381, 2385, 2381, 2386, + 2387, 2384, 2385, 2378, 2382, 2387, 2392, 2383, 2388, 2388, - 2391, 2391, 2387, 2392, 2393, 2393, 2394, 2394, 2395, 2388, - 2397, 2396, 2398, 2399, 2401, 2390, 2400, 2397, 2389, 2395, - 2402, 2400, 2392, 2396, 2398, 2403, 2403, 2404, 2405, 2406, - 2407, 2408, 2409, 2399, 2401, 2410, 2404, 2411, 2411, 2412, - 2402, 2413, 2414, 2407, 2416, 2417, 2409, 2410, 2412, 2406, - 2418, 2420, 2423, 2423, 2405, 2408, 2413, 2414, 2419, 2421, - 2430, 2419, 2416, 2422, 2421, 2420, 2432, 2417, 2422, 2424, - 2424, 2425, 2425, 2418, 2427, 2427, 2429, 2429, 2430, 2431, - 2433, 2435, 2436, 2437, 2438, 2432, 2440, 2439, 2442, 2441, - 2431, 2441, 2443, 2444, 2448, 2433, 2439, 2445, 2445, 2450, + 2389, 2389, 2390, 2390, 2391, 2391, 2393, 2394, 2392, 2386, + 2395, 2395, 2394, 2396, 2396, 2397, 2398, 2399, 2400, 2401, + 2401, 2402, 2403, 2403, 2393, 2404, 2404, 2397, 2398, 2407, + 2405, 2406, 2408, 2409, 2400, 2411, 2407, 2399, 2412, 2414, + 2402, 2405, 2410, 2406, 2408, 2413, 2413, 2410, 2414, 2415, + 2416, 2417, 2418, 2409, 2419, 2411, 2420, 2421, 2412, 2422, + 2422, 2427, 2423, 2428, 2417, 2424, 2425, 2429, 2419, 2421, + 2416, 2423, 2431, 0, 2430, 2415, 2418, 2430, 2420, 2427, + 2424, 2425, 2432, 2433, 2441, 2428, 2431, 2432, 2433, 2443, + 2429, 2434, 2434, 2435, 2435, 2436, 2436, 2438, 2438, 2440, - 2436, 2435, 2447, 2447, 2438, 2437, 2440, 2451, 2442, 2448, - 2443, 2444, 2452, 2452, 2454, 2456, 2451, 2455, 2455, 2457, - 2458, 2450, 2460, 2454, 2459, 2461, 2462, 2458, 2463, 2464, - 2464, 2465, 2465, 2456, 2466, 2467, 2473, 2457, 2468, 2459, - 2460, 2472, 2462, 2461, 2468, 2469, 2469, 2463, 2470, 2470, - 2471, 2473, 2474, 2467, 2466, 2475, 2471, 2476, 2477, 2472, - 2478, 2479, 2476, 2480, 2485, 2480, 2479, 2481, 2481, 2475, - 2482, 2474, 2482, 2483, 2483, 2487, 2488, 2489, 2477, 2490, - 2478, 2491, 2492, 2485, 2487, 2493, 2491, 2496, 2497, 2489, - 2499, 2497, 2498, 2498, 2500, 2488, 2501, 2501, 2504, 2490, + 2440, 2442, 2441, 2444, 2446, 2447, 2448, 2449, 2443, 2451, + 2450, 2452, 2442, 2452, 2453, 2454, 2459, 2455, 2444, 2450, + 2456, 2456, 2461, 2447, 2446, 2458, 2458, 2449, 2448, 2451, + 2462, 2459, 2465, 2454, 2453, 2455, 2463, 2463, 2467, 2462, + 2468, 2465, 2466, 2466, 2461, 2469, 2470, 2471, 2472, 2474, + 2477, 2473, 2469, 2475, 2475, 2478, 2467, 2479, 2468, 2476, + 2476, 2470, 2483, 2479, 2484, 2471, 2472, 2473, 2474, 2485, + 2477, 2480, 2480, 2478, 2481, 2481, 2482, 2486, 2487, 2484, + 2483, 2488, 2482, 2487, 2489, 2490, 2496, 2491, 2485, 2491, + 2490, 2486, 2492, 2492, 2493, 2499, 2493, 2494, 2494, 2498, - 2506, 2506, 2492, 2507, 2493, 2499, 2502, 2496, 2509, 2510, - 2502, 2505, 2500, 2504, 2511, 2505, 2507, 2512, 2512, 2514, - 2516, 2515, 2518, 2509, 2516, 2517, 2517, 2519, 2519, 2510, - 2515, 2514, 2520, 2521, 2511, 2522, 2523, 2520, 2524, 2524, - 2530, 2518, 2521, 2529, 2529, 2531, 2531, 2532, 2523, 2534, - 2533, 2522, 2535, 2536, 2536, 2537, 2539, 2539, 2534, 2542, - 2532, 2535, 2530, 2533, 2542, 2544, 2543, 2545, 2546, 2547, - 2537, 2543, 2545, 2548, 2551, 2549, 2546, 2554, 0, 2544, - 2552, 2553, 2548, 2549, 2560, 2552, 2553, 2561, 2547, 2551, - 2555, 2555, 2554, 2556, 2556, 2557, 2557, 2558, 2559, 2565, + 2500, 2488, 2501, 2503, 2489, 2496, 2502, 2504, 2498, 2507, + 2508, 2502, 2500, 2508, 2499, 2509, 2509, 2510, 2511, 2512, + 2512, 2513, 2501, 2503, 2515, 2513, 2504, 2516, 2518, 2507, + 2520, 2516, 2510, 2517, 2517, 2521, 2511, 2522, 2525, 2515, + 2526, 2518, 2523, 2523, 2527, 2520, 2528, 2528, 2527, 2526, + 2525, 2529, 2530, 2530, 2531, 2521, 2532, 2522, 2533, 2531, + 2534, 2535, 2535, 2540, 2540, 2532, 2541, 2542, 2542, 2543, + 2529, 2544, 2534, 0, 2533, 2548, 2545, 2546, 2547, 2547, + 2550, 2550, 2543, 2555, 2544, 2545, 2546, 2553, 2541, 2554, + 2548, 2556, 2553, 2557, 2554, 2558, 2556, 2555, 2559, 2563, - 2562, 2588, 2560, 2559, 2558, 2561, 2562, 2563, 2564, 2564, - 2566, 2571, 2563, 2588, 2565, 2566, 2567, 2567, 2568, 2568, - 2572, 2572, 2573, 2574, 2571, 2573, 2575, 2576, 2574, 2574, - 2577, 2575, 2576, 2578, 2579, 2580, 2581, 2582, 2579, 2578, - 2580, 2583, 2584, 2590, 2577, 2581, 2587, 2585, 2586, 2583, - 2591, 2587, 2582, 2585, 2586, 2591, 2594, 2592, 2598, 2590, - 2592, 2596, 2597, 2584, 2599, 2600, 2596, 2597, 2594, 2601, - 2602, 2602, 2603, 2606, 2600, 2611, 2598, 2599, 2601, 2607, - 2608, 2603, 2612, 2615, 2613, 2607, 2608, 2614, 2614, 2616, - 2615, 2606, 2617, 2620, 2611, 2618, 2619, 2619, 2622, 2624, + 2560, 2557, 2562, 2565, 2563, 2564, 2570, 2559, 2560, 0, + 2564, 2566, 2566, 2570, 2558, 2567, 2567, 2562, 2565, 2568, + 2569, 2569, 2571, 2572, 2568, 2573, 2574, 2571, 2575, 2576, + 2576, 2577, 2574, 2575, 2578, 2579, 2579, 2580, 2580, 2578, + 2583, 2572, 0, 2573, 2584, 2584, 2577, 2585, 2589, 2586, + 2585, 2587, 2588, 2583, 2586, 2586, 2587, 2588, 2590, 2591, + 2592, 2593, 2589, 2591, 2590, 2592, 2594, 2595, 2596, 2599, + 2593, 2597, 2598, 2600, 2599, 2595, 2602, 2597, 2598, 2603, + 2604, 2594, 2606, 2604, 2603, 2600, 2608, 2610, 2609, 2596, + 2611, 2608, 2602, 2609, 2606, 2612, 2618, 2613, 2614, 2614, - 2625, 2617, 2612, 2613, 2625, 2626, 2626, 2627, 2616, 2628, - 2618, 2629, 2620, 2622, 2630, 2628, 2632, 2629, 2633, 2624, - 2630, 2631, 2631, 2633, 2632, 2635, 2636, 2638, 2639, 2640, - 2643, 2638, 2627, 2653, 2635, 2642, 2642, 2644, 2644, 2636, - 2645, 2645, 2639, 2648, 2640, 2647, 2647, 2648, 2643, 2649, - 2651, 2651, 2654, 2653, 2649, 2655, 2656, 2654, 2658, 2659, - 2659, 2656, 2656, 2661, 2661, 2662, 2662, 2655, 2663, 2664, - 2666, 2663, 2668, 2669, 2669, 2670, 2670, 2674, 2658, 2671, - 2671, 2672, 2664, 2673, 2673, 2675, 2676, 2677, 2666, 2684, - 2674, 2685, 2668, 2677, 2678, 2678, 2672, 2679, 2686, 2683, + 2615, 2619, 2620, 2611, 2612, 2610, 2613, 2619, 2620, 2615, + 2623, 2624, 2627, 2625, 2618, 2626, 2626, 2628, 2629, 2627, + 2630, 2631, 2631, 2632, 2634, 2636, 2637, 2629, 2639, 2623, + 2637, 2624, 2625, 2638, 2638, 2630, 2628, 2640, 2641, 2634, + 2642, 2644, 2632, 2640, 2641, 2636, 2642, 2643, 2643, 2644, + 2645, 2647, 2648, 2639, 2650, 2645, 2651, 2652, 2650, 2655, + 2647, 2654, 2654, 2656, 2656, 2648, 2657, 2657, 2659, 2659, + 2651, 2660, 2652, 2661, 2665, 2660, 2666, 2655, 2661, 2663, + 2663, 2666, 2668, 2667, 2670, 2671, 2671, 2668, 2668, 2673, + 2673, 2674, 2674, 2675, 2665, 2667, 2675, 2676, 2678, 2680, - 2676, 2679, 2687, 2675, 2683, 2683, 2689, 2688, 2687, 2699, - 2690, 2685, 2684, 2688, 2690, 2691, 2691, 2694, 2686, 2696, - 2697, 2700, 2694, 2697, 2700, 2701, 2701, 2696, 2702, 2704, - 2703, 2689, 2705, 2867, 2699, 2703, 2706, 2707, 2707, 2708, - 2709, 2710, 2711, 2709, 2867, 2702, 2702, 2704, 2712, 2715, - 2706, 2709, 2705, 2708, 2713, 2710, 2712, 2713, 2714, 2716, - 2716, 2711, 2721, 2714, 2714, 2717, 2717, 2723, 2715, 2718, - 2718, 2719, 2719, 2720, 2720, 2722, 2724, 2725, 2721, 2726, - 2722, 2727, 2725, 2728, 2729, 2730, 2727, 2723, 2732, 2732, - 2733, 2733, 2728, 2734, 2735, 3114, 2734, 3114, 2726, 2737, + 2681, 2681, 2682, 2682, 2670, 2683, 2683, 2684, 2685, 2685, + 2676, 2686, 2687, 2688, 2689, 2697, 2678, 2690, 2690, 2680, + 2689, 2691, 2684, 2694, 2686, 2691, 2696, 2688, 2698, 2694, + 2687, 2696, 2696, 2699, 2700, 2701, 2702, 2707, 2697, 2703, + 2700, 2701, 2707, 2703, 2704, 2704, 2709, 2710, 2698, 2712, + 2710, 2715, 2713, 2699, 2709, 2713, 2714, 2714, 2716, 2717, + 2718, 2702, 2719, 2716, 2720, 2720, 2724, 2721, 2715, 2715, + 2723, 2725, 2722, 2728, 2712, 2722, 2719, 2717, 2737, 2725, + 2718, 2721, 2727, 2722, 2723, 2724, 2726, 2727, 2727, 2726, + 2729, 2729, 2728, 2730, 2730, 2731, 2731, 2732, 2732, 2733, - 2737, 2738, 2724, 2747, 2729, 2730, 2739, 2739, 2738, 2740, - 2742, 2742, 2735, 2743, 2740, 2744, 2745, 2748, 2748, 2749, - 2750, 2747, 2743, 2749, 2744, 2745, 2751, 2752, 2754, 2750, - 2753, 2755, 2752, 2752, 2759, 2755, 2763, 2754, 2764, 2759, - 2765, 2751, 2767, 2753, 2760, 2760, 2762, 2762, 2768, 2771, - 2763, 2767, 2772, 2773, 2776, 2778, 2774, 0, 2765, 2780, - 2768, 2772, 2774, 2764, 2780, 2781, 2776, 2782, 2782, 2783, - 2781, 2792, 2785, 2773, 2771, 2793, 2778, 2785, 2783, 2786, - 2786, 2788, 2788, 2786, 2789, 2789, 2790, 2790, 2791, 2800, - 2794, 2792, 2796, 2801, 2793, 2794, 2797, 2791, 2796, 2798, + 2733, 2734, 2735, 2736, 2737, 2738, 2739, 2735, 2740, 2741, + 2738, 2742, 2743, 2740, 2745, 2745, 2748, 2734, 2741, 2746, + 2746, 2747, 2751, 2736, 2747, 2739, 2750, 2750, 2753, 2751, + 2756, 2742, 2743, 2753, 2748, 2752, 2752, 2755, 2755, 2756, + 2757, 2758, 2760, 2761, 2761, 2763, 2764, 2762, 2777, 2757, + 2758, 2762, 2765, 2766, 2763, 2767, 2778, 2765, 2765, 2768, + 2760, 2764, 2772, 2768, 2767, 2776, 2766, 2772, 2773, 2773, + 2775, 2775, 2780, 2777, 2778, 2781, 2784, 2785, 2786, 2776, + 2789, 2780, 2787, 2791, 2793, 2794, 2785, 2781, 2787, 2793, + 2794, 2796, 2789, 2795, 2795, 2799, 0, 2798, 2786, 2806, - 2802, 2797, 2799, 2799, 2798, 2801, 2803, 2800, 2804, 2805, - 2806, 2803, 2807, 2807, 2809, 2805, 2814, 2810, 2809, 2811, - 2813, 2802, 2810, 2815, 2811, 2816, 2804, 2812, 2812, 2818, - 2818, 2814, 2822, 2820, 2821, 2806, 2822, 2824, 2815, 2813, - 2823, 2825, 2826, 2827, 2830, 2816, 2820, 2821, 2827, 2823, - 2826, 2828, 2828, 2824, 2829, 2831, 2832, 2832, 2833, 2839, - 2825, 2850, 2830, 2829, 2836, 2836, 2837, 2837, 2841, 2841, - 2843, 2844, 2845, 2846, 2848, 2848, 2849, 2833, 2846, 2851, - 2839, 2831, 2853, 2853, 2850, 2854, 2843, 2844, 2845, 2855, - 2856, 2856, 2859, 2862, 2860, 2871, 2849, 2861, 2851, 2854, + 2796, 2784, 2798, 2807, 2791, 2800, 2800, 2805, 2799, 2800, + 2802, 2802, 2803, 2803, 2804, 2804, 2805, 2814, 2808, 2806, + 2810, 2815, 2807, 2808, 2811, 2812, 2810, 2813, 2813, 2811, + 2812, 2816, 2817, 2815, 2819, 2814, 2818, 2817, 2820, 2823, + 2819, 2821, 2821, 2823, 2824, 2825, 2826, 2826, 2827, 2824, + 2825, 2828, 2816, 2829, 2818, 2830, 2832, 2832, 2834, 2835, + 2836, 2837, 2838, 2820, 2836, 2839, 2828, 2827, 2829, 2840, + 2837, 2834, 2835, 2843, 2841, 2830, 2844, 2840, 2838, 2841, + 2842, 2842, 2843, 2845, 2839, 2846, 2846, 2847, 2850, 2850, + 2851, 2851, 2853, 2865, 2844, 2855, 2855, 2860, 2857, 2858, - 2860, 2865, 2861, 2863, 2863, 2864, 2864, 2868, 2855, 2866, - 2866, 2869, 2859, 2870, 2871, 2862, 2868, 2873, 2872, 2870, - 2880, 2865, 2874, 2874, 2875, 2876, 2876, 2875, 2881, 2866, - 2872, 2869, 2880, 2882, 2883, 2883, 2885, 2873, 2884, 2882, - 2886, 2884, 2885, 2891, 2888, 2889, 2889, 2890, 2881, 2888, - 2892, 2893, 2890, 2894, 2894, 2896, 2892, 2897, 2886, 2898, - 2899, 2901, 2891, 2900, 2900, 2903, 2902, 2896, 2893, 2893, - 2902, 2905, 2905, 2899, 2903, 2897, 2906, 2906, 2907, 2908, - 2901, 2909, 2913, 2907, 2898, 2914, 2909, 2910, 2910, 2911, - 2911, 2912, 2912, 2908, 2915, 2913, 2916, 2918, 2918, 2921, + 2859, 2863, 2860, 2862, 2862, 2864, 2847, 2867, 2867, 2845, + 2868, 2869, 2865, 2853, 2857, 2858, 2859, 2870, 2870, 2873, + 2874, 2863, 2875, 2876, 2868, 0, 2874, 2875, 2864, 2879, + 2869, 2877, 2877, 2878, 2878, 2880, 2880, 2881, 2882, 2873, + 2883, 2886, 2885, 2887, 2884, 2876, 2896, 2882, 2881, 2879, + 2884, 2888, 2888, 2886, 2889, 2880, 2890, 2891, 2891, 2890, + 2883, 2885, 2895, 2887, 2897, 2900, 2896, 2898, 2898, 2889, + 2897, 2900, 2899, 2901, 2895, 2899, 2903, 2904, 2904, 2905, + 2906, 2903, 2907, 2908, 2905, 2909, 2909, 2912, 2907, 2913, + 2911, 2901, 2916, 2914, 2915, 2915, 2920, 2920, 2923, 2906, - 2915, 2916, 2923, 2924, 2925, 2926, 2926, 2928, 2928, 2929, - 2930, 2914, 2931, 2932, 2932, 2933, 2933, 2936, 2921, 2937, - 0, 2931, 2935, 2929, 2923, 2924, 2925, 2938, 2935, 2945, - 2930, 2952, 2938, 2941, 2941, 2943, 2943, 2936, 2937, 2944, - 2946, 2947, 2948, 2945, 2944, 2953, 2946, 2949, 2949, 2950, - 2948, 2952, 2954, 2947, 2950, 2955, 2956, 2954, 2958, 2959, - 2960, 2961, 2956, 2964, 2963, 2953, 2958, 2955, 2965, 2966, - 2967, 2969, 2970, 2974, 2976, 2967, 2969, 2971, 2959, 2964, - 2960, 2961, 2963, 2971, 2972, 2965, 2965, 2976, 0, 2972, - 2966, 2975, 2970, 2974, 2979, 2979, 2975, 2980, 2980, 2981, + 2908, 2908, 2911, 2917, 2918, 2912, 2914, 2917, 2921, 2921, + 2922, 2916, 2923, 2918, 2913, 2922, 2924, 2925, 2925, 2926, + 2926, 2924, 2927, 2927, 2928, 2929, 2930, 2936, 2931, 2933, + 2933, 2938, 2930, 2931, 2939, 2940, 2944, 2928, 2941, 2941, + 2943, 2943, 2945, 2946, 2947, 2947, 2936, 2948, 2948, 2950, + 2944, 2929, 2946, 2938, 2951, 2950, 2939, 2940, 2952, 2953, + 2956, 2956, 2945, 2959, 2953, 2958, 2958, 2960, 2959, 2961, + 2962, 2963, 2964, 2964, 2951, 2961, 2967, 2952, 2965, 2963, + 2967, 2960, 2962, 2965, 2968, 2969, 2970, 2971, 2972, 2974, + 2975, 2970, 2976, 2977, 2972, 2980, 2979, 2974, 2981, 2971, - 2985, 2985, 2986, 2981, 2987, 2988, 2988, 2986, 2990, 2990, - 2991, 2991, 2994, 2991, 2992, 2992, 2994, 2992, 2993, 2993, - 2997, 2993, 2998, 2987, 2996, 2996, 3001, 3002, 3003, 3004, - 3004, 3007, 3008, 3003, 3010, 3011, 2998, 3009, 2997, 3008, - 3013, 3009, 3014, 3010, 3015, 3015, 3001, 3002, 3016, 3016, - 3011, 3014, 3017, 3017, 3018, 3019, 3007, 3021, 3013, 3020, - 3019, 3022, 3021, 3021, 3023, 3024, 3025, 3022, 3020, 3018, - 3026, 3020, 3027, 3028, 3213, 3026, 3030, 3027, 3029, 3029, - 3024, 3213, 3030, 3035, 3031, 3032, 3032, 3025, 3035, 3023, - 3031, 0, 3028, 3033, 3033, 3034, 3034, 3038, 3038, 3040, + 2982, 2983, 2985, 2986, 2968, 2969, 2983, 2985, 2990, 2975, + 0, 2980, 2976, 2977, 2979, 2981, 2981, 2988, 2987, 2992, + 2991, 2982, 2988, 2986, 2987, 2991, 2995, 2995, 2990, 2996, + 2996, 2997, 2992, 3001, 3001, 2997, 3002, 3003, 3004, 3004, + 3017, 3002, 3006, 3006, 3007, 3007, 3010, 3007, 3008, 3008, + 3010, 3008, 3009, 3009, 3013, 3009, 3003, 3012, 3012, 3014, + 3017, 3018, 3019, 3020, 3020, 3023, 3025, 3019, 3024, 3026, + 3025, 3027, 3013, 3014, 3029, 3024, 3031, 3030, 3026, 3032, + 3032, 3018, 3030, 3033, 3033, 3031, 3027, 3034, 3034, 3035, + 3023, 3036, 3029, 3037, 3038, 3039, 3036, 3040, 3041, 3038, - 3040, 3041, 3044, 3044, 3045, 3045, 3046, 3046, 3047, 3047, - 3041, 3048, 3048, 3049, 3049, 3050, 3050, 3052, 3053, 3053, - 3054, 3055, 3056, 3060, 3058, 3062, 3052, 3059, 3059, 3054, - 3064, 3061, 3068, 3055, 3063, 3063, 3070, 3062, 3060, 3065, - 3065, 3072, 3056, 3058, 3061, 3064, 3069, 3071, 3071, 3069, - 3068, 3074, 3075, 3076, 3074, 3077, 3078, 3080, 3075, 3072, - 3077, 3079, 3070, 3082, 3090, 3083, 3087, 3076, 3098, 3082, - 3100, 3098, 3105, 3080, 3083, 3078, 3101, 3101, 3107, 3079, - 3106, 3087, 3107, 3100, 3102, 3102, 3103, 3103, 3108, 3106, - 3090, 3109, 3111, 3112, 3113, 3105, 3115, 3116, 3116, 3113, + 3038, 3039, 3037, 3042, 3035, 3037, 3043, 3044, 3045, 3046, + 3046, 3043, 3044, 3041, 3047, 3048, 3049, 3049, 3050, 3050, + 3047, 3048, 3040, 3052, 3042, 3051, 3051, 3045, 3052, 3055, + 3055, 3057, 3057, 3058, 3061, 3061, 3062, 3062, 3063, 3063, + 3064, 3064, 3058, 3065, 3065, 3066, 3066, 3067, 3067, 3069, + 3070, 3070, 3071, 3072, 3073, 3077, 3075, 3079, 3069, 3076, + 3076, 3071, 3082, 3078, 3086, 3072, 3080, 3080, 3088, 3079, + 3077, 3081, 3081, 3090, 3073, 3075, 3078, 3082, 3083, 3083, + 3087, 3093, 3086, 3087, 3089, 3089, 3092, 3093, 3094, 3092, + 3095, 3090, 3096, 3098, 3088, 3095, 3097, 3100, 3101, 3108, - 3117, 3118, 3120, 3119, 3112, 3109, 3121, 3122, 3108, 3125, - 3123, 3115, 3124, 3117, 3127, 3111, 3133, 3135, 3120, 3123, - 3118, 3119, 3122, 3126, 3124, 3132, 3135, 3128, 3126, 3140, - 3125, 3121, 3128, 3141, 3127, 3145, 3133, 3134, 3134, 3132, - 3136, 3136, 3137, 3137, 3138, 3138, 3139, 3139, 3140, 3142, - 3143, 3144, 3142, 3141, 3146, 3143, 3144, 3147, 3148, 3149, - 3145, 3150, 3151, 3147, 3152, 3152, 3150, 3153, 3153, 3146, - 3154, 3149, 3148, 3155, 3156, 3156, 3158, 3160, 3163, 3163, - 3164, 3164, 3151, 3166, 3167, 3154, 3165, 3168, 3170, 3169, - 3167, 3158, 3155, 3168, 3165, 3160, 3171, 3173, 3173, 3172, + 3105, 3116, 3094, 3100, 3116, 3118, 3123, 3101, 3126, 3098, + 3128, 3096, 3119, 3119, 3097, 3105, 3120, 3120, 3118, 3121, + 3121, 3124, 3125, 3130, 3128, 3108, 3125, 3131, 3126, 3123, + 3124, 3132, 3133, 3134, 3133, 3137, 3132, 3136, 3131, 3135, + 3135, 3138, 3139, 3140, 3142, 3141, 3130, 3145, 3134, 3143, + 3136, 3144, 3145, 3142, 3137, 3146, 3151, 3147, 3139, 3138, + 3141, 3143, 3147, 3152, 3153, 3153, 3159, 3154, 3140, 3160, + 3151, 3164, 3144, 3155, 3155, 3146, 3154, 3156, 3156, 3157, + 3157, 3158, 3158, 3152, 3161, 3159, 3162, 3161, 3163, 3160, + 3165, 3162, 3166, 3163, 3167, 3168, 3164, 3169, 3166, 3170, - 3177, 3170, 3166, 3169, 3172, 3174, 3174, 3178, 3180, 3181, - 3183, 3184, 3185, 3181, 3194, 3171, 3184, 3188, 3189, 3186, - 3187, 3177, 3180, 3189, 3190, 3191, 3191, 3178, 3195, 3190, - 3183, 3185, 3186, 3187, 3194, 3196, 3188, 3197, 3197, 3198, - 3201, 3199, 3200, 3200, 3198, 3201, 3195, 3199, 3202, 3204, - 3203, 3205, 3212, 3202, 3196, 3203, 3208, 3205, 3207, 3207, - 3211, 3208, 3209, 3209, 3211, 3214, 3215, 3216, 3204, 3217, - 3218, 3212, 3225, 3216, 3220, 3220, 3222, 3222, 3223, 3226, - 3227, 3224, 3232, 3218, 3214, 3215, 3224, 3223, 3217, 3230, - 3223, 3225, 3229, 3227, 3228, 3228, 3234, 3229, 3226, 3233, + 3171, 3171, 3169, 3172, 3172, 3165, 3173, 3168, 3167, 3174, + 3175, 3175, 3177, 3179, 3182, 3182, 3183, 3183, 3184, 3170, + 3185, 3173, 3188, 3186, 3187, 3189, 3184, 3177, 3174, 3186, + 3187, 3179, 3190, 3192, 3192, 3191, 3188, 3196, 3189, 3185, + 3191, 3193, 3193, 3197, 3200, 3199, 3202, 3203, 3200, 3204, + 3208, 3190, 3203, 3207, 3205, 3208, 3206, 3209, 3196, 3199, + 3210, 3210, 3209, 3197, 3213, 3214, 3202, 3205, 3204, 3206, + 3215, 3217, 3207, 3216, 3216, 3218, 3217, 3219, 3219, 3223, + 3220, 3218, 3221, 3214, 3213, 3220, 3222, 3221, 3224, 3215, + 3227, 3222, 3226, 3226, 3224, 3227, 3228, 3228, 3223, 3230, - 3233, 3239, 3230, 3235, 3235, 3236, 3236, 3237, 3232, 3238, - 3240, 3240, 3237, 3241, 3246, 3234, 3238, 3242, 3241, 3242, - 3239, 3243, 3243, 3244, 3245, 3248, 3251, 3247, 3250, 3250, - 3244, 3245, 3247, 3246, 3253, 3254, 3255, 3256, 3260, 3253, - 3254, 3257, 3257, 3261, 3248, 3251, 3259, 3259, 3262, 3262, - 3263, 3263, 3264, 3266, 3266, 3255, 3256, 3260, 3268, 3264, - 3267, 3267, 3261, 3270, 3273, 3268, 3274, 3275, 3270, 3273, - 3276, 3276, 3277, 3277, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3274, 3275, 3281, 3281, 3281, - 3281, 3281, 3281, 3281, 3282, 3282, 3282, 3282, 3282, 3282, + 3231, 3232, 3233, 3230, 3234, 3235, 3236, 3237, 3232, 3239, + 3239, 3235, 3241, 3241, 3244, 3242, 3245, 3243, 3246, 3231, + 3237, 3233, 3243, 3234, 3242, 3236, 3249, 3242, 3247, 3247, + 3251, 3246, 3248, 3244, 3253, 3245, 3258, 3248, 0, 3249, + 3252, 3252, 3254, 3254, 3255, 3255, 3256, 3257, 3259, 3259, + 3265, 3256, 3260, 3253, 3257, 3258, 3251, 3260, 3261, 3263, + 3261, 3262, 3262, 3264, 3267, 3270, 3263, 3266, 3274, 3265, + 3264, 3272, 3266, 3269, 3269, 3273, 3272, 3275, 3276, 3276, + 3273, 3278, 3278, 3267, 3270, 3279, 3280, 3274, 3281, 3281, + 3282, 3282, 3283, 3285, 3285, 3287, 3275, 3286, 3286, 3283, - 3282, 3283, 3283, 3283, 3283, 3283, 3283, 3283, 3284, 3284, - 3284, 3284, 3284, 3284, 3284, 3285, 3285, 3285, 3285, 3285, - 3285, 3285, 3286, 3286, 3286, 3286, 3286, 3286, 3286, 3287, - 3287, 3287, 3287, 3287, 3287, 3287, 3289, 3289, 0, 3289, - 3289, 3289, 3289, 3290, 3290, 0, 0, 0, 3290, 3290, - 3291, 3291, 0, 0, 3291, 0, 3291, 3292, 0, 0, - 0, 0, 0, 3292, 3293, 3293, 0, 0, 0, 3293, - 3293, 3294, 0, 0, 0, 0, 0, 3294, 3295, 3295, - 0, 3295, 3295, 3295, 3295, 3296, 0, 0, 0, 0, - 0, 3296, 3297, 3297, 0, 0, 0, 3297, 3297, 3298, + 3293, 3289, 3287, 3292, 3279, 3280, 3289, 3294, 3292, 3295, + 3295, 3296, 3296, 0, 0, 0, 0, 0, 0, 3293, + 0, 0, 0, 0, 0, 0, 3294, 3300, 3300, 3300, + 3300, 3300, 3300, 3300, 3301, 3301, 3301, 3301, 3301, 3301, + 3301, 3302, 3302, 3302, 3302, 3302, 3302, 3302, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3304, 3304, 3304, 3304, 3304, + 3304, 3304, 3305, 3305, 3305, 3305, 3305, 3305, 3305, 3306, + 3306, 3306, 3306, 3306, 3306, 3306, 3308, 3308, 0, 3308, + 3308, 3308, 3308, 3309, 3309, 0, 0, 0, 3309, 3309, + 3310, 3310, 0, 0, 3310, 0, 3310, 3311, 0, 0, - 3298, 0, 3298, 3298, 3298, 3298, 3280, 3280, 3280, 3280, - 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280, - 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280, - 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280, - 3280, 3280, 3280, 3280, 3280, 3280, 3280 + 0, 0, 0, 3311, 3312, 3312, 0, 0, 0, 3312, + 3312, 3313, 0, 0, 0, 0, 0, 3313, 3314, 3314, + 0, 3314, 3314, 3314, 3314, 3315, 0, 0, 0, 0, + 0, 3315, 3316, 3316, 0, 0, 0, 3316, 3316, 3317, + 3317, 0, 3317, 3317, 3317, 3317, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3299, 3299 } ; static yy_state_type yy_last_accepting_state; @@ -3130,7 +3145,7 @@ static void config_end_include(void) } #endif -#line 3131 "" +#line 3146 "" #define YY_NO_INPUT 1 #line 191 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -3139,9 +3154,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 3140 "" +#line 3155 "" -#line 3142 "" +#line 3157 "" #define INITIAL 0 #define quotedstring 1 @@ -3365,7 +3380,7 @@ YY_DECL { #line 211 "./util/configlexer.lex" -#line 3366 "" +#line 3381 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3398,13 +3413,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3281 ) + if ( yy_current_state >= 3300 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 6407 ); + while ( yy_base[yy_current_state] != 6447 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -4365,430 +4380,430 @@ YY_RULE_SETUP case 187: YY_RULE_SETUP #line 402 "./util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +{ YDVAR(1, VAR_ZONEMD_PERMISSIVE_MODE) } YY_BREAK case 188: YY_RULE_SETUP #line 403 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 189: YY_RULE_SETUP #line 404 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 190: YY_RULE_SETUP #line 405 "./util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 191: YY_RULE_SETUP #line 406 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 192: YY_RULE_SETUP #line 407 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 193: YY_RULE_SETUP #line 408 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 194: YY_RULE_SETUP #line 409 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 195: YY_RULE_SETUP #line 410 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 196: YY_RULE_SETUP #line 411 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 197: YY_RULE_SETUP #line 412 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } +{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 198: YY_RULE_SETUP #line 413 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_SERVFAIL) } +{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 199: YY_RULE_SETUP #line 414 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 200: YY_RULE_SETUP #line 415 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 201: YY_RULE_SETUP #line 416 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 202: YY_RULE_SETUP #line 417 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 203: YY_RULE_SETUP #line 418 "./util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 204: YY_RULE_SETUP #line 419 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 205: YY_RULE_SETUP #line 420 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 206: YY_RULE_SETUP #line 421 "./util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 207: YY_RULE_SETUP #line 422 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 208: YY_RULE_SETUP #line 423 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 209: YY_RULE_SETUP #line 424 "./util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 210: YY_RULE_SETUP #line 425 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 211: YY_RULE_SETUP #line 426 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 212: YY_RULE_SETUP #line 427 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 213: YY_RULE_SETUP #line 428 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 214: YY_RULE_SETUP #line 429 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 215: YY_RULE_SETUP #line 430 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 216: YY_RULE_SETUP #line 431 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 217: YY_RULE_SETUP #line 432 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 218: YY_RULE_SETUP #line 433 "./util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 219: YY_RULE_SETUP #line 434 "./util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 220: YY_RULE_SETUP #line 435 "./util/configlexer.lex" -{ YDVAR(1, VAR_DYNLIB_FILE) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 221: YY_RULE_SETUP #line 436 "./util/configlexer.lex" -{ YDVAR(0, VAR_DYNLIB) } +{ YDVAR(1, VAR_DYNLIB_FILE) } YY_BREAK case 222: YY_RULE_SETUP #line 437 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(0, VAR_DYNLIB) } YY_BREAK case 223: YY_RULE_SETUP #line 438 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 224: YY_RULE_SETUP #line 439 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 225: YY_RULE_SETUP #line 440 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 226: YY_RULE_SETUP #line 441 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 227: YY_RULE_SETUP #line 442 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 228: YY_RULE_SETUP #line 443 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 229: YY_RULE_SETUP #line 444 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 230: YY_RULE_SETUP #line 445 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 231: YY_RULE_SETUP #line 446 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 232: YY_RULE_SETUP #line 447 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 233: YY_RULE_SETUP #line 448 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 234: YY_RULE_SETUP #line 449 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 235: YY_RULE_SETUP #line 450 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 236: YY_RULE_SETUP #line 451 "./util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 237: YY_RULE_SETUP #line 452 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 238: YY_RULE_SETUP #line 453 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 239: YY_RULE_SETUP #line 454 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 240: YY_RULE_SETUP #line 455 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) } YY_BREAK case 241: YY_RULE_SETUP #line 456 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IP) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 242: YY_RULE_SETUP #line 457 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS) } +{ YDVAR(1, VAR_DNSTAP_IP) } YY_BREAK case 243: YY_RULE_SETUP #line 458 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } +{ YDVAR(1, VAR_DNSTAP_TLS) } YY_BREAK case 244: YY_RULE_SETUP #line 459 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } +{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } YY_BREAK case 245: YY_RULE_SETUP #line 460 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } +{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } YY_BREAK case 246: YY_RULE_SETUP -#line 462 "./util/configlexer.lex" +#line 461 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } YY_BREAK case 247: YY_RULE_SETUP -#line 464 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +#line 463 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } YY_BREAK case 248: YY_RULE_SETUP #line 465 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 249: YY_RULE_SETUP #line 466 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 250: YY_RULE_SETUP #line 467 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 251: YY_RULE_SETUP #line 468 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 252: YY_RULE_SETUP -#line 470 "./util/configlexer.lex" +#line 469 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 253: YY_RULE_SETUP -#line 472 "./util/configlexer.lex" +#line 471 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 254: YY_RULE_SETUP -#line 474 "./util/configlexer.lex" +#line 473 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 255: YY_RULE_SETUP -#line 476 "./util/configlexer.lex" +#line 475 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 256: YY_RULE_SETUP -#line 478 "./util/configlexer.lex" +#line 477 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 257: YY_RULE_SETUP -#line 480 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 479 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 258: YY_RULE_SETUP #line 481 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 259: YY_RULE_SETUP #line 482 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 260: YY_RULE_SETUP #line 483 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 261: YY_RULE_SETUP #line 484 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 262: YY_RULE_SETUP #line 485 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 263: YY_RULE_SETUP #line 486 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 264: YY_RULE_SETUP #line 487 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 265: YY_RULE_SETUP #line 488 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 266: YY_RULE_SETUP #line 489 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 267: YY_RULE_SETUP #line 490 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 268: YY_RULE_SETUP #line 491 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 269: YY_RULE_SETUP #line 492 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 270: YY_RULE_SETUP #line 493 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 271: YY_RULE_SETUP @@ -4803,99 +4818,99 @@ YY_RULE_SETUP case 273: YY_RULE_SETUP #line 496 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 274: YY_RULE_SETUP #line 497 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 275: YY_RULE_SETUP #line 498 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 276: YY_RULE_SETUP #line 499 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 277: YY_RULE_SETUP #line 500 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 278: YY_RULE_SETUP #line 501 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 279: YY_RULE_SETUP #line 502 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 280: YY_RULE_SETUP #line 503 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 281: YY_RULE_SETUP #line 504 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 282: YY_RULE_SETUP #line 505 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 283: YY_RULE_SETUP #line 506 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 284: YY_RULE_SETUP -#line 508 "./util/configlexer.lex" +#line 507 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 285: YY_RULE_SETUP -#line 510 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 509 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 286: YY_RULE_SETUP #line 511 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 287: YY_RULE_SETUP #line 512 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 288: YY_RULE_SETUP #line 513 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 289: YY_RULE_SETUP #line 514 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 290: YY_RULE_SETUP #line 515 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 291: YY_RULE_SETUP #line 516 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 292: YY_RULE_SETUP @@ -4905,113 +4920,118 @@ YY_RULE_SETUP case 293: YY_RULE_SETUP #line 518 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 294: YY_RULE_SETUP #line 519 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 295: YY_RULE_SETUP #line 520 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 296: YY_RULE_SETUP #line 521 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 297: YY_RULE_SETUP #line 522 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 298: YY_RULE_SETUP #line 523 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 299: YY_RULE_SETUP #line 524 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 300: YY_RULE_SETUP #line 525 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 301: YY_RULE_SETUP #line 526 "./util/configlexer.lex" -{ YDVAR(0, VAR_IPSET) } +{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } YY_BREAK case 302: YY_RULE_SETUP #line 527 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V4) } +{ YDVAR(0, VAR_IPSET) } YY_BREAK case 303: YY_RULE_SETUP #line 528 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V6) } +{ YDVAR(1, VAR_IPSET_NAME_V4) } YY_BREAK case 304: YY_RULE_SETUP #line 529 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_IPSET_NAME_V6) } YY_BREAK case 305: YY_RULE_SETUP #line 530 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } YY_BREAK case 306: YY_RULE_SETUP #line 531 "./util/configlexer.lex" -{ YDVAR(2, VAR_EDNS_CLIENT_TAG) } +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } YY_BREAK case 307: YY_RULE_SETUP #line 532 "./util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_CLIENT_TAG_OPCODE) } +{ YDVAR(2, VAR_EDNS_CLIENT_TAG) } YY_BREAK case 308: -/* rule 308 can match eol */ YY_RULE_SETUP #line 533 "./util/configlexer.lex" +{ YDVAR(1, VAR_EDNS_CLIENT_TAG_OPCODE) } + YY_BREAK +case 309: +/* rule 309 can match eol */ +YY_RULE_SETUP +#line 534 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 309: +case 310: YY_RULE_SETUP -#line 536 "./util/configlexer.lex" +#line 537 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 537 "./util/configlexer.lex" +#line 538 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 310: -YY_RULE_SETUP -#line 542 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 311: -/* rule 311 can match eol */ YY_RULE_SETUP #line 543 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 312: +/* rule 312 can match eol */ +YY_RULE_SETUP +#line 544 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 312: +case 313: YY_RULE_SETUP -#line 545 "./util/configlexer.lex" +#line 546 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -5024,34 +5044,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 313: +case 314: YY_RULE_SETUP -#line 557 "./util/configlexer.lex" +#line 558 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 558 "./util/configlexer.lex" +#line 559 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 314: -YY_RULE_SETUP -#line 563 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 315: -/* rule 315 can match eol */ YY_RULE_SETUP #line 564 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 316: +/* rule 316 can match eol */ +YY_RULE_SETUP +#line 565 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 316: +case 317: YY_RULE_SETUP -#line 566 "./util/configlexer.lex" +#line 567 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -5064,38 +5084,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 317: +case 318: YY_RULE_SETUP -#line 578 "./util/configlexer.lex" +#line 579 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 580 "./util/configlexer.lex" +#line 581 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 318: -YY_RULE_SETUP -#line 584 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK case 319: -/* rule 319 can match eol */ YY_RULE_SETUP #line 585 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 320: +/* rule 320 can match eol */ YY_RULE_SETUP #line 586 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK case 321: YY_RULE_SETUP #line 587 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 322: +YY_RULE_SETUP +#line 588 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 0); @@ -5103,27 +5123,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 592 "./util/configlexer.lex" +#line 593 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 322: -YY_RULE_SETUP -#line 596 "./util/configlexer.lex" -{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } - YY_BREAK case 323: -/* rule 323 can match eol */ YY_RULE_SETUP #line 597 "./util/configlexer.lex" +{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } + YY_BREAK +case 324: +/* rule 324 can match eol */ +YY_RULE_SETUP +#line 598 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 324: +case 325: YY_RULE_SETUP -#line 599 "./util/configlexer.lex" +#line 600 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -5133,7 +5153,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 605 "./util/configlexer.lex" +#line 606 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -5148,39 +5168,39 @@ case YY_STATE_EOF(val): } YY_BREAK /* include-toplevel: directive */ -case 325: +case 326: YY_RULE_SETUP -#line 619 "./util/configlexer.lex" +#line 620 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include_toplevel); } YY_BREAK case YY_STATE_EOF(include_toplevel): -#line 622 "./util/configlexer.lex" +#line 623 "./util/configlexer.lex" { yyerror("EOF inside include_toplevel directive"); BEGIN(inc_prev); } YY_BREAK -case 326: -YY_RULE_SETUP -#line 626 "./util/configlexer.lex" -{ LEXOUT(("ITSP ")); /* ignore */ } - YY_BREAK case 327: -/* rule 327 can match eol */ YY_RULE_SETUP #line 627 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++; } +{ LEXOUT(("ITSP ")); /* ignore */ } YY_BREAK case 328: +/* rule 328 can match eol */ YY_RULE_SETUP #line 628 "./util/configlexer.lex" -{ LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } +{ LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK case 329: YY_RULE_SETUP #line 629 "./util/configlexer.lex" +{ LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } + YY_BREAK +case 330: +YY_RULE_SETUP +#line 630 "./util/configlexer.lex" { LEXOUT(("ITunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 1); @@ -5189,29 +5209,29 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_toplevel_quoted): -#line 635 "./util/configlexer.lex" +#line 636 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 330: -YY_RULE_SETUP -#line 639 "./util/configlexer.lex" -{ LEXOUT(("ITSTR(%s) ", yytext)); yymore(); } - YY_BREAK case 331: -/* rule 331 can match eol */ YY_RULE_SETUP #line 640 "./util/configlexer.lex" +{ LEXOUT(("ITSTR(%s) ", yytext)); yymore(); } + YY_BREAK +case 332: +/* rule 332 can match eol */ +YY_RULE_SETUP +#line 641 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 332: +case 333: YY_RULE_SETUP -#line 644 "./util/configlexer.lex" +#line 645 "./util/configlexer.lex" { LEXOUT(("ITQE ")); yytext[yyleng - 1] = '\0'; @@ -5220,33 +5240,33 @@ YY_RULE_SETUP return (VAR_FORCE_TOPLEVEL); } YY_BREAK -case 333: +case 334: YY_RULE_SETUP -#line 652 "./util/configlexer.lex" +#line 653 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 334: +case 335: YY_RULE_SETUP -#line 656 "./util/configlexer.lex" +#line 657 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 335: +case 336: YY_RULE_SETUP -#line 660 "./util/configlexer.lex" +#line 661 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 336: +case 337: YY_RULE_SETUP -#line 664 "./util/configlexer.lex" +#line 665 "./util/configlexer.lex" ECHO; YY_BREAK -#line 5247 "" +#line 5267 "" case YY_END_OF_BUFFER: { @@ -5541,7 +5561,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3281 ) + if ( yy_current_state >= 3300 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5569,11 +5589,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3281 ) + if ( yy_current_state >= 3300 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 3280); + yy_is_jam = (yy_current_state == 3299); return yy_is_jam ? 0 : yy_current_state; } @@ -6212,6 +6232,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 664 "./util/configlexer.lex" +#line 665 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index 4e0bf240f..460cce2c2 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -399,6 +399,7 @@ key-cache-slabs{COLON} { YDVAR(1, VAR_KEY_CACHE_SLABS) } neg-cache-size{COLON} { YDVAR(1, VAR_NEG_CACHE_SIZE) } val-nsec3-keysize-iterations{COLON} { YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +zonemd-permissive-mode{COLON} { YDVAR(1, VAR_ZONEMD_PERMISSIVE_MODE) } add-holddown{COLON} { YDVAR(1, VAR_ADD_HOLDDOWN) } del-holddown{COLON} { YDVAR(1, VAR_DEL_HOLDDOWN) } keep-missing{COLON} { YDVAR(1, VAR_KEEP_MISSING) } diff --git a/util/configparser.c b/util/configparser.c index 0ce58427e..d527cdf9c 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -432,7 +432,8 @@ extern int yydebug; VAR_DYNLIB = 553, VAR_DYNLIB_FILE = 554, VAR_EDNS_CLIENT_TAG = 555, - VAR_EDNS_CLIENT_TAG_OPCODE = 556 + VAR_EDNS_CLIENT_TAG_OPCODE = 556, + VAR_ZONEMD_PERMISSIVE_MODE = 557 }; #endif /* Tokens. */ @@ -735,6 +736,7 @@ extern int yydebug; #define VAR_DYNLIB_FILE 554 #define VAR_EDNS_CLIENT_TAG 555 #define VAR_EDNS_CLIENT_TAG_OPCODE 556 +#define VAR_ZONEMD_PERMISSIVE_MODE 557 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -744,7 +746,7 @@ union YYSTYPE char* str; -#line 748 "util/configparser.c" +#line 750 "util/configparser.c" }; typedef union YYSTYPE YYSTYPE; @@ -994,19 +996,19 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 639 +#define YYLAST 640 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 302 +#define YYNTOKENS 303 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 327 +#define YYNNTS 328 /* YYNRULES -- Number of rules. */ -#define YYNRULES 630 +#define YYNRULES 632 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 936 +#define YYNSTATES 939 #define YYUNDEFTOK 2 -#define YYMAXUTOK 556 +#define YYMAXUTOK 557 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ @@ -1072,77 +1074,77 @@ static const yytype_uint16 yytranslate[] = 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301 + 295, 296, 297, 298, 299, 300, 301, 302 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 184, 184, 184, 185, 185, 186, 186, 187, 187, - 187, 188, 188, 189, 189, 190, 190, 191, 193, 199, - 204, 205, 206, 206, 206, 207, 207, 208, 208, 208, - 209, 209, 210, 210, 210, 211, 211, 212, 212, 212, - 213, 213, 213, 214, 214, 215, 215, 216, 216, 217, - 217, 218, 218, 219, 219, 220, 220, 221, 221, 222, - 222, 222, 223, 223, 223, 224, 224, 224, 225, 225, - 226, 226, 227, 227, 228, 228, 229, 229, 229, 230, - 230, 231, 231, 232, 232, 232, 233, 233, 234, 234, - 235, 235, 236, 236, 236, 237, 237, 238, 238, 239, - 239, 240, 240, 241, 241, 242, 242, 242, 243, 243, - 244, 244, 244, 245, 245, 245, 246, 246, 246, 247, - 247, 247, 247, 248, 249, 249, 249, 250, 250, 250, - 251, 251, 252, 252, 253, 253, 253, 254, 254, 255, - 255, 256, 256, 256, 257, 257, 258, 258, 258, 259, - 259, 260, 260, 261, 261, 262, 263, 263, 264, 264, - 265, 265, 266, 267, 267, 268, 268, 269, 269, 270, - 270, 271, 271, 272, 272, 272, 273, 273, 274, 274, - 275, 275, 276, 276, 277, 277, 278, 278, 279, 279, - 279, 280, 280, 280, 281, 281, 281, 282, 282, 283, - 284, 284, 285, 285, 286, 286, 287, 287, 288, 288, - 288, 289, 289, 289, 290, 290, 290, 291, 291, 292, - 292, 293, 293, 294, 294, 295, 297, 309, 310, 311, - 311, 311, 311, 311, 312, 312, 314, 326, 327, 328, - 328, 328, 328, 329, 329, 331, 345, 346, 347, 347, - 347, 347, 348, 348, 348, 350, 367, 368, 369, 369, - 369, 369, 370, 370, 370, 371, 374, 393, 410, 418, - 428, 436, 453, 454, 455, 455, 455, 455, 455, 456, - 456, 456, 457, 457, 459, 468, 477, 488, 497, 506, - 515, 526, 535, 547, 561, 576, 587, 604, 621, 638, - 655, 670, 685, 698, 713, 722, 731, 740, 749, 758, - 767, 776, 785, 794, 803, 812, 821, 830, 839, 852, - 861, 874, 883, 892, 901, 908, 915, 924, 931, 940, - 948, 955, 962, 970, 979, 987, 1003, 1011, 1019, 1027, - 1035, 1043, 1052, 1061, 1075, 1084, 1093, 1102, 1111, 1120, - 1129, 1136, 1143, 1169, 1177, 1184, 1191, 1198, 1205, 1213, - 1221, 1229, 1236, 1247, 1258, 1265, 1274, 1283, 1292, 1299, - 1306, 1314, 1322, 1332, 1342, 1352, 1366, 1374, 1387, 1398, - 1406, 1419, 1428, 1437, 1446, 1456, 1466, 1474, 1487, 1496, - 1504, 1513, 1521, 1534, 1543, 1553, 1560, 1570, 1580, 1590, - 1600, 1610, 1620, 1630, 1640, 1647, 1654, 1661, 1670, 1679, - 1688, 1697, 1704, 1714, 1734, 1741, 1759, 1772, 1785, 1794, - 1803, 1812, 1821, 1831, 1841, 1852, 1861, 1870, 1879, 1888, - 1897, 1906, 1919, 1932, 1941, 1948, 1957, 1966, 1975, 1984, - 1992, 2005, 2013, 2054, 2061, 2076, 2086, 2096, 2103, 2110, - 2117, 2126, 2134, 2148, 2169, 2190, 2202, 2214, 2226, 2235, - 2256, 2266, 2275, 2283, 2291, 2304, 2317, 2332, 2347, 2356, - 2365, 2371, 2380, 2389, 2399, 2409, 2422, 2435, 2447, 2461, - 2473, 2487, 2502, 2513, 2523, 2530, 2537, 2546, 2555, 2565, - 2575, 2585, 2592, 2599, 2608, 2617, 2627, 2637, 2644, 2651, - 2658, 2666, 2676, 2686, 2696, 2706, 2745, 2755, 2763, 2771, - 2786, 2795, 2800, 2801, 2802, 2802, 2802, 2803, 2803, 2803, - 2804, 2804, 2806, 2816, 2825, 2832, 2839, 2846, 2853, 2860, - 2867, 2872, 2873, 2874, 2874, 2874, 2875, 2875, 2875, 2876, - 2877, 2877, 2878, 2878, 2879, 2879, 2880, 2881, 2882, 2883, - 2884, 2885, 2887, 2896, 2906, 2913, 2920, 2929, 2936, 2943, - 2950, 2957, 2966, 2975, 2982, 2989, 2999, 3009, 3019, 3029, - 3039, 3049, 3054, 3055, 3056, 3058, 3064, 3069, 3070, 3071, - 3073, 3079, 3089, 3096, 3105, 3113, 3118, 3119, 3121, 3121, - 3121, 3122, 3122, 3123, 3124, 3125, 3126, 3127, 3129, 3139, - 3148, 3155, 3164, 3171, 3180, 3188, 3201, 3209, 3222, 3227, - 3228, 3229, 3229, 3230, 3230, 3230, 3231, 3233, 3245, 3257, - 3269, 3284, 3297, 3310, 3321, 3326, 3327, 3328, 3328, 3330, - 3345 + 0, 185, 185, 185, 186, 186, 187, 187, 188, 188, + 188, 189, 189, 190, 190, 191, 191, 192, 194, 200, + 205, 206, 207, 207, 207, 208, 208, 209, 209, 209, + 210, 210, 211, 211, 211, 212, 212, 213, 213, 213, + 214, 214, 214, 215, 215, 216, 216, 217, 217, 218, + 218, 219, 219, 220, 220, 221, 221, 222, 222, 223, + 223, 223, 224, 224, 224, 225, 225, 225, 226, 226, + 227, 227, 228, 228, 229, 229, 230, 230, 230, 231, + 231, 232, 232, 233, 233, 233, 234, 234, 235, 235, + 236, 236, 237, 237, 237, 238, 238, 239, 239, 240, + 240, 241, 241, 242, 242, 243, 243, 243, 244, 244, + 245, 245, 245, 246, 246, 246, 247, 247, 247, 248, + 248, 248, 248, 249, 250, 250, 250, 251, 251, 251, + 252, 252, 253, 253, 254, 254, 254, 255, 255, 256, + 256, 257, 257, 257, 258, 258, 259, 259, 259, 260, + 260, 261, 261, 262, 262, 263, 264, 264, 265, 265, + 266, 266, 267, 268, 268, 269, 269, 270, 270, 271, + 271, 272, 272, 273, 273, 273, 274, 274, 275, 275, + 276, 276, 277, 277, 278, 278, 279, 279, 280, 280, + 280, 281, 281, 281, 282, 282, 282, 283, 283, 284, + 285, 285, 286, 286, 287, 287, 288, 288, 289, 289, + 289, 290, 290, 290, 291, 291, 291, 292, 292, 293, + 293, 294, 294, 295, 295, 296, 296, 298, 310, 311, + 312, 312, 312, 312, 312, 313, 313, 315, 327, 328, + 329, 329, 329, 329, 330, 330, 332, 346, 347, 348, + 348, 348, 348, 349, 349, 349, 351, 368, 369, 370, + 370, 370, 370, 371, 371, 371, 372, 375, 394, 411, + 419, 429, 437, 454, 455, 456, 456, 456, 456, 456, + 457, 457, 457, 458, 458, 460, 469, 478, 489, 498, + 507, 516, 527, 536, 548, 562, 577, 588, 605, 622, + 639, 656, 671, 686, 699, 714, 723, 732, 741, 750, + 759, 768, 777, 786, 795, 804, 813, 822, 831, 840, + 853, 862, 875, 884, 893, 902, 909, 916, 925, 932, + 941, 949, 956, 963, 971, 980, 988, 1004, 1012, 1020, + 1028, 1036, 1044, 1053, 1062, 1076, 1085, 1094, 1103, 1112, + 1121, 1130, 1137, 1144, 1170, 1178, 1185, 1192, 1199, 1206, + 1214, 1222, 1230, 1237, 1248, 1259, 1266, 1275, 1284, 1293, + 1300, 1307, 1315, 1323, 1333, 1343, 1353, 1367, 1375, 1388, + 1399, 1407, 1420, 1429, 1438, 1447, 1457, 1467, 1475, 1488, + 1497, 1505, 1514, 1522, 1535, 1544, 1554, 1561, 1571, 1581, + 1591, 1601, 1611, 1621, 1631, 1641, 1648, 1655, 1662, 1671, + 1680, 1689, 1698, 1705, 1715, 1735, 1742, 1760, 1773, 1786, + 1795, 1804, 1813, 1822, 1832, 1842, 1853, 1862, 1871, 1880, + 1889, 1898, 1907, 1920, 1933, 1942, 1949, 1958, 1967, 1976, + 1985, 1994, 2002, 2015, 2023, 2064, 2071, 2086, 2096, 2106, + 2113, 2120, 2127, 2136, 2144, 2158, 2179, 2200, 2212, 2224, + 2236, 2245, 2266, 2276, 2285, 2293, 2301, 2314, 2327, 2342, + 2357, 2366, 2375, 2381, 2390, 2399, 2409, 2419, 2432, 2445, + 2457, 2471, 2483, 2497, 2512, 2523, 2533, 2540, 2547, 2556, + 2565, 2575, 2585, 2595, 2602, 2609, 2618, 2627, 2637, 2647, + 2654, 2661, 2668, 2676, 2686, 2696, 2706, 2716, 2755, 2765, + 2773, 2781, 2796, 2805, 2810, 2811, 2812, 2812, 2812, 2813, + 2813, 2813, 2814, 2814, 2816, 2826, 2835, 2842, 2849, 2856, + 2863, 2870, 2877, 2882, 2883, 2884, 2884, 2884, 2885, 2885, + 2885, 2886, 2887, 2887, 2888, 2888, 2889, 2889, 2890, 2891, + 2892, 2893, 2894, 2895, 2897, 2906, 2916, 2923, 2930, 2939, + 2946, 2953, 2960, 2967, 2976, 2985, 2992, 2999, 3009, 3019, + 3029, 3039, 3049, 3059, 3064, 3065, 3066, 3068, 3074, 3079, + 3080, 3081, 3083, 3089, 3099, 3106, 3115, 3123, 3128, 3129, + 3131, 3131, 3131, 3132, 3132, 3133, 3134, 3135, 3136, 3137, + 3139, 3149, 3158, 3165, 3174, 3181, 3190, 3198, 3211, 3219, + 3232, 3237, 3238, 3239, 3239, 3240, 3240, 3240, 3241, 3243, + 3255, 3267, 3279, 3294, 3307, 3320, 3331, 3336, 3337, 3338, + 3338, 3340, 3355 }; #endif @@ -1263,17 +1265,17 @@ static const char *const yytname[] = "VAR_RPZ", "VAR_TAGS", "VAR_RPZ_ACTION_OVERRIDE", "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", "VAR_RPZ_LOG_NAME", "VAR_DYNLIB", "VAR_DYNLIB_FILE", "VAR_EDNS_CLIENT_TAG", - "VAR_EDNS_CLIENT_TAG_OPCODE", "$accept", "toplevelvars", "toplevelvar", - "force_toplevel", "serverstart", "contents_server", "content_server", - "stubstart", "contents_stub", "content_stub", "forwardstart", - "contents_forward", "content_forward", "viewstart", "contents_view", - "content_view", "authstart", "contents_auth", "content_auth", "rpz_tag", - "rpz_action_override", "rpz_cname_override", "rpz_log", "rpz_log_name", - "rpzstart", "contents_rpz", "content_rpz", "server_num_threads", - "server_verbosity", "server_statistics_interval", - "server_statistics_cumulative", "server_extended_statistics", - "server_shm_enable", "server_shm_key", "server_port", - "server_send_client_subnet", "server_client_subnet_zone", + "VAR_EDNS_CLIENT_TAG_OPCODE", "VAR_ZONEMD_PERMISSIVE_MODE", "$accept", + "toplevelvars", "toplevelvar", "force_toplevel", "serverstart", + "contents_server", "content_server", "stubstart", "contents_stub", + "content_stub", "forwardstart", "contents_forward", "content_forward", + "viewstart", "contents_view", "content_view", "authstart", + "contents_auth", "content_auth", "rpz_tag", "rpz_action_override", + "rpz_cname_override", "rpz_log", "rpz_log_name", "rpzstart", + "contents_rpz", "content_rpz", "server_num_threads", "server_verbosity", + "server_statistics_interval", "server_statistics_cumulative", + "server_extended_statistics", "server_shm_enable", "server_shm_key", + "server_port", "server_send_client_subnet", "server_client_subnet_zone", "server_client_subnet_always_forward", "server_client_subnet_opcode", "server_max_client_subnet_ipv4", "server_max_client_subnet_ipv6", "server_min_client_subnet_ipv4", "server_min_client_subnet_ipv6", @@ -1336,8 +1338,8 @@ static const char *const yytname[] = "server_serve_expired_ttl_reset", "server_serve_expired_reply_ttl", "server_serve_expired_client_timeout", "server_fake_dsa", "server_fake_sha1", "server_val_log_level", - "server_val_nsec3_keysize_iterations", "server_add_holddown", - "server_del_holddown", "server_keep_missing", + "server_val_nsec3_keysize_iterations", "server_zonemd_permissive_mode", + "server_add_holddown", "server_del_holddown", "server_keep_missing", "server_permit_small_holddown", "server_key_cache_size", "server_key_cache_slabs", "server_neg_cache_size", "server_local_zone", "server_local_data", "server_local_data_ptr", "server_minimal_responses", @@ -1432,7 +1434,7 @@ static const yytype_uint16 yytoknum[] = 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, - 555, 556 + 555, 556, 557 }; # endif @@ -1474,7 +1476,7 @@ static const yytype_int16 yypact[] = 251, 252, 253, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 279, 280, 281, 283, - 284, 285, 287, 321, 322, 323, 324, 328, 329, -290, + 284, 285, 287, 321, 322, 323, 324, 328, 329, 330, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, @@ -1495,55 +1497,55 @@ static const yytype_int16 yypact[] = -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, 330, 372, 373, 374, 375, 376, - 377, -290, -290, -290, -290, -290, -290, -290, -290, 378, - 379, 380, 384, 388, 389, -290, -290, -290, -290, -290, - -290, -290, 414, 415, 416, 425, 437, 438, 439, -290, - -290, -290, -290, -290, -290, -290, -290, 440, 441, 442, - 443, 444, 445, 446, 447, -290, -290, -290, -290, -290, - -290, -290, -290, -290, 448, 449, 450, 451, 452, -290, + -290, -290, -290, -290, -290, -290, 372, 373, 374, 375, + 376, 377, 378, -290, -290, -290, -290, -290, -290, -290, + -290, 379, 380, 384, 388, 389, 414, -290, -290, -290, + -290, -290, -290, -290, 415, 416, 425, 437, 438, 439, + 440, -290, -290, -290, -290, -290, -290, -290, -290, 441, + 442, 443, 444, 445, 446, 447, 448, -290, -290, -290, + -290, -290, -290, -290, -290, -290, 449, 450, 451, 452, + 453, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, 454, 455, 456, 496, 498, 514, 515, 516, + -290, -290, -290, -290, -290, -290, -290, -290, -290, 517, + 518, 519, 520, 521, 522, 523, 524, 531, 532, 533, + 534, 535, 536, 537, 539, 540, 541, 542, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - 453, 454, 455, 456, 496, 498, 514, 515, -290, -290, - -290, -290, -290, -290, -290, -290, -290, 516, 517, 518, - 519, 520, 521, 522, 523, 524, 531, 532, 533, 534, - 535, 536, 537, 539, 540, 541, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, 542, -290, -290, 543, - -290, -290, 544, 545, 548, 551, 554, 555, 564, 565, - 566, 568, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, 569, 570, 571, 572, 573, 574, -290, - -290, -290, -290, -290, -290, -290, 575, 578, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, 543, -290, + -290, 544, -290, -290, 545, 548, 551, 554, 555, 564, + 565, 566, 568, 569, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, 570, 571, 572, 573, 574, + 575, -290, -290, -290, -290, -290, -290, -290, 579, 580, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, 579, 580, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, 581, 582, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, 581, 582, 583, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, 584, + -290, -290, -290, -290, -290, -290, -290, -290, 583, 584, 585, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, 586, 587, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - 586, 587, 588, 589, 590, 591, -290, -290, -290, -290, + -290, -290, 588, 589, 590, 591, 592, 593, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, 592, -290, -290, -290, -290, -290, -290, - -290, -290, -290, 593, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, 594, - -290, -290, 595, 596, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, 594, -290, -290, -290, -290, + -290, -290, -290, -290, -290, 595, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, 596, -290, -290, 597, 598, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, 597, 598, 599, -290, -290, -290, - -290, -290, -290, -290, -290, -290 + -290, -290, -290, -290, -290, -290, -290, 599, 600, 601, + -290, -290, -290, -290, -290, -290, -290, -290, -290 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1551,10 +1553,10 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 18, 19, 226, 236, 511, 571, 530, - 245, 585, 608, 255, 624, 271, 576, 3, 17, 21, - 228, 238, 247, 257, 273, 513, 532, 573, 578, 587, - 610, 626, 4, 5, 6, 10, 14, 15, 8, 9, + 2, 0, 1, 18, 19, 227, 237, 513, 573, 532, + 246, 587, 610, 256, 626, 272, 578, 3, 17, 21, + 229, 239, 248, 258, 274, 515, 534, 575, 580, 589, + 612, 628, 4, 5, 6, 10, 14, 15, 8, 9, 7, 16, 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1575,76 +1577,76 @@ static const yytype_uint16 yydefact[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, - 22, 23, 86, 89, 98, 194, 195, 24, 159, 160, - 161, 162, 163, 164, 165, 166, 167, 168, 37, 77, - 25, 90, 91, 48, 70, 85, 26, 27, 30, 31, - 28, 29, 32, 33, 34, 35, 36, 121, 206, 122, - 124, 125, 126, 208, 213, 209, 220, 221, 222, 223, - 127, 128, 129, 130, 131, 132, 133, 190, 87, 76, - 102, 119, 120, 218, 215, 123, 38, 39, 40, 41, - 42, 78, 92, 93, 108, 64, 74, 65, 198, 199, - 103, 58, 59, 197, 60, 61, 112, 116, 137, 146, - 173, 149, 219, 113, 71, 43, 44, 45, 100, 138, - 139, 140, 46, 47, 49, 50, 52, 53, 51, 144, - 150, 54, 55, 56, 62, 81, 117, 95, 145, 88, - 169, 96, 97, 114, 115, 216, 101, 57, 79, 82, - 63, 66, 104, 105, 80, 170, 106, 67, 68, 69, - 207, 118, 183, 184, 185, 186, 187, 188, 196, 107, - 75, 109, 110, 111, 171, 72, 73, 94, 83, 84, - 99, 134, 135, 217, 136, 141, 142, 143, 174, 175, - 177, 179, 180, 178, 181, 191, 147, 148, 153, 154, - 151, 152, 155, 156, 158, 157, 210, 212, 211, 172, - 182, 200, 202, 201, 203, 204, 205, 224, 225, 176, - 189, 192, 193, 214, 0, 0, 0, 0, 0, 0, - 0, 227, 229, 230, 231, 233, 234, 235, 232, 0, - 0, 0, 0, 0, 0, 237, 239, 240, 241, 242, - 243, 244, 0, 0, 0, 0, 0, 0, 0, 246, - 248, 249, 252, 253, 250, 254, 251, 0, 0, 0, - 0, 0, 0, 0, 0, 256, 258, 259, 260, 261, - 265, 262, 263, 264, 0, 0, 0, 0, 0, 276, - 280, 281, 282, 283, 272, 274, 275, 277, 278, 279, - 0, 0, 0, 0, 0, 0, 0, 0, 512, 514, - 516, 515, 521, 517, 518, 519, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 531, 533, 535, 534, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 0, 572, 574, 0, - 577, 579, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 586, 588, 589, 590, 592, 593, 591, 594, - 595, 596, 597, 0, 0, 0, 0, 0, 0, 609, - 611, 612, 613, 614, 615, 616, 0, 0, 625, 627, - 628, 285, 284, 291, 304, 302, 314, 310, 311, 315, - 312, 313, 316, 317, 318, 319, 320, 350, 351, 352, - 353, 354, 379, 380, 381, 386, 387, 307, 388, 389, - 392, 390, 391, 395, 396, 397, 411, 365, 366, 368, - 369, 398, 414, 359, 361, 415, 421, 422, 423, 308, - 378, 439, 440, 360, 434, 343, 303, 355, 412, 418, - 399, 0, 0, 443, 309, 286, 342, 403, 287, 305, - 306, 356, 357, 441, 401, 405, 406, 288, 444, 382, - 410, 344, 364, 416, 417, 420, 433, 358, 437, 435, - 436, 370, 377, 407, 408, 371, 372, 400, 425, 345, - 346, 349, 321, 323, 324, 325, 326, 327, 334, 335, - 336, 337, 338, 339, 340, 445, 446, 448, 383, 384, - 385, 393, 394, 449, 450, 451, 0, 0, 0, 402, - 373, 375, 581, 460, 464, 462, 461, 465, 463, 0, - 0, 468, 469, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 404, 419, 438, 473, 474, 374, 452, - 0, 0, 0, 0, 0, 0, 426, 427, 428, 429, - 430, 431, 432, 582, 367, 362, 424, 341, 289, 290, - 363, 475, 477, 476, 478, 479, 480, 322, 329, 470, - 472, 471, 328, 0, 348, 409, 447, 347, 376, 330, - 331, 333, 332, 0, 482, 483, 484, 485, 489, 488, - 486, 487, 490, 491, 492, 493, 495, 494, 504, 0, - 508, 509, 0, 0, 510, 496, 502, 497, 498, 499, - 501, 503, 500, 266, 267, 268, 269, 270, 522, 524, - 523, 526, 527, 528, 529, 525, 552, 554, 555, 556, - 557, 558, 559, 560, 561, 562, 553, 563, 564, 565, - 566, 567, 568, 569, 570, 575, 580, 598, 599, 600, - 603, 601, 602, 604, 605, 606, 607, 617, 618, 619, - 620, 621, 622, 629, 630, 413, 442, 459, 583, 584, - 466, 467, 453, 454, 0, 0, 0, 458, 623, 481, - 505, 506, 507, 457, 455, 456 + 20, 22, 23, 86, 89, 98, 194, 195, 24, 159, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 37, + 77, 25, 90, 91, 48, 70, 85, 26, 27, 30, + 31, 28, 29, 32, 33, 34, 35, 36, 121, 206, + 122, 124, 125, 126, 208, 213, 209, 220, 221, 222, + 223, 127, 128, 129, 130, 131, 132, 133, 190, 87, + 76, 102, 119, 120, 218, 215, 123, 38, 39, 40, + 41, 42, 78, 92, 93, 108, 64, 74, 65, 198, + 199, 103, 58, 59, 197, 60, 61, 112, 116, 137, + 146, 173, 149, 219, 113, 71, 43, 44, 45, 100, + 138, 139, 140, 46, 47, 49, 50, 52, 53, 51, + 144, 150, 54, 55, 56, 62, 81, 117, 95, 145, + 88, 169, 96, 97, 114, 115, 216, 101, 57, 79, + 82, 63, 66, 104, 105, 80, 170, 106, 67, 68, + 69, 207, 118, 183, 184, 185, 186, 187, 188, 196, + 107, 75, 226, 109, 110, 111, 171, 72, 73, 94, + 83, 84, 99, 134, 135, 217, 136, 141, 142, 143, + 174, 175, 177, 179, 180, 178, 181, 191, 147, 148, + 153, 154, 151, 152, 155, 156, 158, 157, 210, 212, + 211, 172, 182, 200, 202, 201, 203, 204, 205, 224, + 225, 176, 189, 192, 193, 214, 0, 0, 0, 0, + 0, 0, 0, 228, 230, 231, 232, 234, 235, 236, + 233, 0, 0, 0, 0, 0, 0, 238, 240, 241, + 242, 243, 244, 245, 0, 0, 0, 0, 0, 0, + 0, 247, 249, 250, 253, 254, 251, 255, 252, 0, + 0, 0, 0, 0, 0, 0, 0, 257, 259, 260, + 261, 262, 266, 263, 264, 265, 0, 0, 0, 0, + 0, 277, 281, 282, 283, 284, 273, 275, 276, 278, + 279, 280, 0, 0, 0, 0, 0, 0, 0, 0, + 514, 516, 518, 517, 523, 519, 520, 521, 522, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 533, 535, + 537, 536, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 547, 548, 549, 550, 551, 552, 553, 0, 574, + 576, 0, 579, 581, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 588, 590, 591, 592, 594, 595, + 593, 596, 597, 598, 599, 0, 0, 0, 0, 0, + 0, 611, 613, 614, 615, 616, 617, 618, 0, 0, + 627, 629, 630, 286, 285, 292, 305, 303, 315, 311, + 312, 316, 313, 314, 317, 318, 319, 320, 321, 351, + 352, 353, 354, 355, 380, 381, 382, 387, 388, 308, + 389, 390, 393, 391, 392, 396, 397, 398, 412, 366, + 367, 369, 370, 399, 415, 360, 362, 416, 422, 423, + 424, 309, 379, 441, 442, 361, 435, 344, 304, 356, + 413, 419, 400, 0, 0, 445, 310, 287, 343, 404, + 288, 306, 307, 357, 358, 443, 402, 406, 407, 289, + 446, 383, 411, 345, 365, 417, 418, 421, 434, 359, + 439, 437, 438, 371, 378, 408, 409, 372, 373, 401, + 426, 346, 347, 350, 322, 324, 325, 326, 327, 328, + 335, 336, 337, 338, 339, 340, 341, 447, 448, 450, + 384, 385, 386, 394, 395, 451, 452, 453, 0, 0, + 0, 403, 374, 376, 583, 462, 466, 464, 463, 467, + 465, 0, 0, 470, 471, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 405, 420, 440, 475, 476, + 375, 454, 0, 0, 0, 0, 0, 0, 427, 428, + 429, 430, 431, 432, 433, 584, 368, 363, 425, 342, + 290, 291, 364, 477, 479, 478, 480, 481, 482, 323, + 330, 472, 474, 473, 329, 0, 349, 410, 449, 348, + 377, 331, 332, 334, 333, 0, 484, 436, 485, 486, + 487, 491, 490, 488, 489, 492, 493, 494, 495, 497, + 496, 506, 0, 510, 511, 0, 0, 512, 498, 504, + 499, 500, 501, 503, 505, 502, 267, 268, 269, 270, + 271, 524, 526, 525, 528, 529, 530, 531, 527, 554, + 556, 557, 558, 559, 560, 561, 562, 563, 564, 555, + 565, 566, 567, 568, 569, 570, 571, 572, 577, 582, + 600, 601, 602, 605, 603, 604, 606, 607, 608, 609, + 619, 620, 621, 622, 623, 624, 631, 632, 414, 444, + 461, 585, 586, 468, 469, 455, 456, 0, 0, 0, + 460, 625, 483, 507, 508, 509, 459, 457, 458 }; /* YYPGOTO[NTERM-NUM]. */ @@ -1673,8 +1675,8 @@ static const yytype_int16 yypgoto[] = -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, 576, - 577, 600, 601, 602, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + 576, 577, 578, 602, 603, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, @@ -1682,45 +1684,45 @@ static const yytype_int16 yypgoto[] = -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290 + -290, -290, -290, -290, -290, -290, -290, -290 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 17, 18, 19, 32, 249, 20, 33, 461, - 21, 34, 475, 22, 35, 489, 23, 36, 505, 519, - 520, 521, 522, 523, 24, 37, 524, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, - 443, 444, 445, 446, 447, 448, 462, 463, 464, 465, - 466, 467, 468, 476, 477, 478, 479, 480, 481, 506, - 507, 508, 509, 510, 511, 512, 513, 490, 491, 492, - 493, 494, 495, 496, 25, 38, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 26, 39, 566, 567, 568, - 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, - 579, 580, 581, 582, 583, 584, 585, 27, 40, 587, - 588, 28, 41, 590, 591, 449, 450, 451, 452, 29, - 42, 602, 603, 604, 605, 606, 607, 608, 609, 610, - 611, 612, 30, 43, 619, 620, 621, 622, 623, 624, - 625, 453, 31, 44, 628, 629, 630 + -1, 1, 17, 18, 19, 32, 250, 20, 33, 463, + 21, 34, 477, 22, 35, 491, 23, 36, 507, 521, + 522, 523, 524, 525, 24, 37, 526, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 464, 465, 466, + 467, 468, 469, 470, 478, 479, 480, 481, 482, 483, + 508, 509, 510, 511, 512, 513, 514, 515, 492, 493, + 494, 495, 496, 497, 498, 25, 38, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 26, 39, 568, 569, + 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, + 580, 581, 582, 583, 584, 585, 586, 587, 27, 40, + 589, 590, 28, 41, 592, 593, 451, 452, 453, 454, + 29, 42, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 614, 30, 43, 621, 622, 623, 624, 625, + 626, 627, 455, 31, 44, 630, 631, 632 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1728,70 +1730,71 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint16 yytable[] = { - 2, 497, 482, 454, 586, 455, 456, 469, 626, 627, - 589, 3, 4, 631, 632, 470, 471, 613, 614, 615, - 616, 617, 618, 633, 497, 592, 593, 594, 595, 596, - 597, 598, 599, 600, 601, 634, 635, 636, 483, 484, - 637, 638, 639, 640, 641, 642, 5, 643, 644, 645, - 646, 647, 6, 648, 649, 650, 651, 652, 653, 654, - 655, 656, 657, 485, 658, 659, 457, 547, 548, 549, - 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, - 560, 561, 562, 563, 564, 565, 530, 531, 532, 533, - 534, 535, 536, 537, 660, 661, 7, 458, 662, 663, - 472, 664, 473, 665, 666, 667, 668, 459, 669, 670, - 671, 672, 8, 673, 674, 675, 676, 677, 678, 679, - 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, - 690, 691, 692, 693, 694, 695, 696, 697, 698, 486, - 487, 699, 700, 701, 702, 703, 704, 705, 706, 707, - 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, - 718, 9, 719, 720, 721, 722, 723, 724, 725, 726, - 727, 728, 729, 730, 731, 732, 733, 734, 735, 488, - 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, - 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, - 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, - 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, - 10, 499, 500, 501, 776, 777, 778, 779, 780, 781, - 782, 504, 783, 784, 785, 786, 787, 460, 11, 788, - 474, 789, 498, 790, 499, 500, 501, 502, 503, 514, - 515, 516, 517, 518, 504, 12, 791, 792, 793, 794, - 795, 796, 797, 798, 13, 799, 800, 801, 802, 803, - 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, - 814, 815, 816, 817, 818, 819, 820, 821, 14, 822, - 823, 824, 15, 825, 826, 827, 0, 828, 16, 45, + 2, 499, 484, 456, 588, 457, 458, 471, 628, 629, + 591, 3, 4, 633, 634, 472, 473, 615, 616, 617, + 618, 619, 620, 635, 499, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 636, 637, 638, 485, 486, + 639, 640, 641, 642, 643, 644, 5, 645, 646, 647, + 648, 649, 6, 650, 651, 652, 653, 654, 655, 656, + 657, 658, 659, 487, 660, 661, 459, 549, 550, 551, + 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, + 562, 563, 564, 565, 566, 567, 532, 533, 534, 535, + 536, 537, 538, 539, 662, 663, 7, 460, 664, 665, + 474, 666, 475, 667, 668, 669, 670, 461, 671, 672, + 673, 674, 8, 675, 676, 677, 678, 679, 680, 681, + 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, + 692, 693, 694, 695, 696, 697, 698, 699, 700, 488, + 489, 701, 702, 703, 704, 705, 706, 707, 708, 709, + 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 9, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 490, + 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, + 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, + 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, + 10, 501, 502, 503, 778, 779, 780, 781, 782, 783, + 784, 506, 785, 786, 787, 788, 789, 462, 11, 790, + 476, 791, 500, 792, 501, 502, 503, 504, 505, 516, + 517, 518, 519, 520, 506, 12, 793, 794, 795, 796, + 797, 798, 799, 800, 13, 801, 802, 803, 804, 805, + 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, + 816, 817, 818, 819, 820, 821, 822, 823, 14, 824, + 825, 826, 15, 827, 828, 829, 0, 830, 16, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 829, 830, 831, 832, 77, 78, 79, 833, 834, - 835, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 76, 831, 832, 833, 834, 77, 78, 79, 835, 836, + 837, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 836, 837, 838, 839, 840, 841, 842, 843, - 844, 121, 122, 123, 845, 124, 125, 126, 846, 847, + 119, 120, 838, 839, 840, 841, 842, 843, 844, 845, + 846, 121, 122, 123, 847, 124, 125, 126, 848, 849, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 150, 848, 849, 850, 151, 152, 153, - 154, 155, 156, 157, 158, 851, 159, 160, 161, 162, - 163, 164, 165, 166, 167, 168, 169, 852, 853, 854, - 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, - 865, 866, 867, 868, 869, 870, 871, 170, 171, 172, + 147, 148, 149, 150, 850, 851, 852, 151, 152, 153, + 154, 155, 156, 157, 158, 853, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, + 867, 868, 869, 870, 871, 872, 873, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 208, 872, 209, 873, 210, + 203, 204, 205, 206, 207, 208, 874, 209, 875, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 874, 875, 876, 877, 878, 879, - 880, 881, 882, 883, 884, 225, 226, 227, 228, 229, - 230, 885, 886, 887, 888, 889, 890, 891, 231, 892, - 893, 894, 895, 896, 897, 898, 232, 233, 899, 234, - 235, 900, 236, 237, 901, 902, 238, 239, 240, 241, - 242, 243, 244, 245, 903, 904, 905, 246, 906, 907, - 908, 909, 910, 911, 912, 913, 247, 248, 914, 915, - 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, - 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, - 0, 0, 0, 525, 526, 0, 0, 0, 0, 0, + 221, 222, 223, 224, 876, 877, 878, 879, 880, 881, + 882, 883, 884, 885, 886, 225, 226, 227, 228, 229, + 230, 887, 888, 889, 890, 891, 892, 893, 231, 894, + 895, 896, 897, 898, 899, 900, 232, 233, 901, 234, + 235, 902, 236, 237, 903, 904, 238, 239, 240, 241, + 242, 243, 244, 245, 905, 906, 907, 246, 908, 909, + 910, 911, 912, 913, 914, 915, 247, 248, 249, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, + 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, + 937, 938, 0, 527, 528, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 527, 528, 529 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, + 531 }; static const yytype_int16 yycheck[] = @@ -1854,23 +1857,24 @@ static const yytype_int16 yycheck[] = 10, 10, 10, 10, 10, 10, 270, 271, 10, 273, 274, 10, 276, 277, 10, 10, 280, 281, 282, 283, 284, 285, 286, 287, 10, 10, 10, 291, 10, 10, - 10, 10, 10, 10, 10, 10, 300, 301, 10, 10, + 10, 10, 10, 10, 10, 10, 300, 301, 302, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - -1, -1, -1, 37, 37, -1, -1, -1, -1, -1, + 10, 10, -1, 37, 37, 37, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 37, 37, 37 + -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, + 37 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 303, 0, 11, 12, 46, 52, 96, 112, 161, - 220, 238, 255, 264, 288, 292, 298, 304, 305, 306, - 309, 312, 315, 318, 326, 556, 567, 589, 593, 601, - 614, 624, 307, 310, 313, 316, 319, 327, 557, 568, - 590, 594, 602, 615, 625, 13, 14, 15, 16, 17, + 0, 304, 0, 11, 12, 46, 52, 96, 112, 161, + 220, 238, 255, 264, 288, 292, 298, 305, 306, 307, + 310, 313, 316, 319, 327, 558, 569, 591, 595, 603, + 616, 626, 308, 311, 314, 317, 320, 328, 559, 570, + 592, 596, 604, 617, 627, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 49, 50, 51, @@ -1890,8 +1894,8 @@ static const yytype_uint16 yystos[] = 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 249, 250, 251, 252, 253, 254, 262, 270, 271, 273, 274, 276, 277, 280, 281, - 282, 283, 284, 285, 286, 287, 291, 300, 301, 308, - 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 282, 283, 284, 285, 286, 287, 291, 300, 301, 302, + 309, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, @@ -1910,26 +1914,26 @@ static const yytype_uint16 yystos[] = 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 524, 525, 526, 527, 597, - 598, 599, 600, 623, 45, 47, 48, 108, 139, 149, - 279, 311, 528, 529, 530, 531, 532, 533, 534, 45, - 53, 54, 138, 140, 278, 314, 535, 536, 537, 538, - 539, 540, 45, 81, 82, 106, 182, 183, 222, 317, - 549, 550, 551, 552, 553, 554, 555, 45, 263, 265, - 266, 267, 268, 269, 275, 320, 541, 542, 543, 544, - 545, 546, 547, 548, 293, 294, 295, 296, 297, 321, - 322, 323, 324, 325, 328, 541, 542, 543, 544, 545, - 97, 98, 99, 100, 101, 102, 103, 104, 558, 559, - 560, 561, 562, 563, 564, 565, 566, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 569, 570, 571, 572, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, + 529, 599, 600, 601, 602, 625, 45, 47, 48, 108, + 139, 149, 279, 312, 530, 531, 532, 533, 534, 535, + 536, 45, 53, 54, 138, 140, 278, 315, 537, 538, + 539, 540, 541, 542, 45, 81, 82, 106, 182, 183, + 222, 318, 551, 552, 553, 554, 555, 556, 557, 45, + 263, 265, 266, 267, 268, 269, 275, 321, 543, 544, + 545, 546, 547, 548, 549, 550, 293, 294, 295, 296, + 297, 322, 323, 324, 325, 326, 329, 543, 544, 545, + 546, 547, 97, 98, 99, 100, 101, 102, 103, 104, + 560, 561, 562, 563, 564, 565, 566, 567, 568, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, - 583, 584, 585, 586, 587, 588, 113, 591, 592, 299, - 595, 596, 239, 240, 241, 242, 243, 244, 245, 246, - 247, 248, 603, 604, 605, 606, 607, 608, 609, 610, - 611, 612, 613, 256, 257, 258, 259, 260, 261, 616, - 617, 618, 619, 620, 621, 622, 289, 290, 626, 627, - 628, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 583, 584, 585, 586, 587, 588, 589, 590, 113, 593, + 594, 299, 597, 598, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 605, 606, 607, 608, 609, 610, + 611, 612, 613, 614, 615, 256, 257, 258, 259, 260, + 261, 618, 619, 620, 621, 622, 623, 624, 289, 290, + 628, 629, 630, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1959,41 +1963,41 @@ static const yytype_uint16 yystos[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10 + 10, 10, 10, 10, 10, 10, 10, 10, 10 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 302, 303, 303, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 305, 306, - 307, 307, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 309, 310, 310, 311, - 311, 311, 311, 311, 311, 311, 312, 313, 313, 314, - 314, 314, 314, 314, 314, 315, 316, 316, 317, 317, - 317, 317, 317, 317, 317, 318, 319, 319, 320, 320, - 320, 320, 320, 320, 320, 320, 321, 322, 323, 324, - 325, 326, 327, 327, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 329, 330, 331, 332, 333, 334, + 0, 303, 304, 304, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 306, 307, + 308, 308, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 310, 311, 311, + 312, 312, 312, 312, 312, 312, 312, 313, 314, 314, + 315, 315, 315, 315, 315, 315, 316, 317, 317, 318, + 318, 318, 318, 318, 318, 318, 319, 320, 320, 321, + 321, 321, 321, 321, 321, 321, 321, 322, 323, 324, + 325, 326, 327, 328, 328, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, @@ -2016,19 +2020,19 @@ static const yytype_uint16 yyr1[] = 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, - 555, 556, 557, 557, 558, 558, 558, 558, 558, 558, - 558, 558, 559, 560, 561, 562, 563, 564, 565, 566, - 567, 568, 568, 569, 569, 569, 569, 569, 569, 569, - 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, - 569, 569, 570, 571, 572, 573, 574, 575, 576, 577, + 555, 556, 557, 558, 559, 559, 560, 560, 560, 560, + 560, 560, 560, 560, 561, 562, 563, 564, 565, 566, + 567, 568, 569, 570, 570, 571, 571, 571, 571, 571, + 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, + 571, 571, 571, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, - 588, 589, 590, 590, 591, 592, 593, 594, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 602, 603, 603, - 603, 603, 603, 603, 603, 603, 603, 603, 604, 605, + 588, 589, 590, 591, 592, 592, 593, 594, 595, 596, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 604, + 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, - 615, 616, 616, 616, 616, 616, 616, 617, 618, 619, - 620, 621, 622, 623, 624, 625, 625, 626, 626, 627, - 628 + 616, 617, 617, 618, 618, 618, 618, 618, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 627, 627, 628, + 628, 629, 630 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -2056,13 +2060,13 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, - 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -2075,29 +2079,29 @@ static const yytype_uint8 yyr2[] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 3, 3, 4, 4, 4, + 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 3, 3, 4, 4, 4, 3, 3, - 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 3, 3, 3, 2, 2, - 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, + 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 2, 0, 1, 2, 1, 2, 0, 1, - 2, 2, 2, 3, 3, 1, 2, 0, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, - 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 3, 1, 2, 0, 1, 1, 2, - 2 + 2, 2, 2, 1, 2, 0, 1, 2, 1, 2, + 0, 1, 2, 2, 2, 3, 3, 1, 2, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 2, 0, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 2, 3, 1, 2, 0, 1, + 1, 2, 2 }; @@ -2782,23 +2786,23 @@ yyreduce: switch (yyn) { case 18: -#line 194 "./util/configparser.y" +#line 195 "./util/configparser.y" { OUTYY(("\nP(force-toplevel)\n")); } -#line 2790 "util/configparser.c" +#line 2794 "util/configparser.c" break; case 19: -#line 200 "./util/configparser.y" +#line 201 "./util/configparser.y" { OUTYY(("\nP(server:)\n")); } -#line 2798 "util/configparser.c" +#line 2802 "util/configparser.c" break; - case 226: -#line 298 "./util/configparser.y" + case 227: +#line 299 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2809,11 +2813,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2813 "util/configparser.c" +#line 2817 "util/configparser.c" break; - case 236: -#line 315 "./util/configparser.y" + case 237: +#line 316 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2824,11 +2828,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2828 "util/configparser.c" +#line 2832 "util/configparser.c" break; - case 245: -#line 332 "./util/configparser.y" + case 246: +#line 333 "./util/configparser.y" { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2841,11 +2845,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2845 "util/configparser.c" +#line 2849 "util/configparser.c" break; - case 255: -#line 351 "./util/configparser.y" + case 256: +#line 352 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -2861,11 +2865,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2865 "util/configparser.c" +#line 2869 "util/configparser.c" break; - case 266: -#line 375 "./util/configparser.y" + case 267: +#line 376 "./util/configparser.y" { uint8_t* bitlist; size_t len = 0; @@ -2882,11 +2886,11 @@ yyreduce: } } -#line 2886 "util/configparser.c" +#line 2890 "util/configparser.c" break; - case 267: -#line 394 "./util/configparser.y" + case 268: +#line 395 "./util/configparser.y" { OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 && @@ -2901,21 +2905,21 @@ yyreduce: cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } -#line 2905 "util/configparser.c" +#line 2909 "util/configparser.c" break; - case 268: -#line 411 "./util/configparser.y" + case 269: +#line 412 "./util/configparser.y" { OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_cname); cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str); } -#line 2915 "util/configparser.c" +#line 2919 "util/configparser.c" break; - case 269: -#line 419 "./util/configparser.y" + case 270: +#line 420 "./util/configparser.y" { OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2923,21 +2927,21 @@ yyreduce: else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2927 "util/configparser.c" +#line 2931 "util/configparser.c" break; - case 270: -#line 429 "./util/configparser.y" + case 271: +#line 430 "./util/configparser.y" { OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_log_name); cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str); } -#line 2937 "util/configparser.c" +#line 2941 "util/configparser.c" break; - case 271: -#line 437 "./util/configparser.y" + case 272: +#line 438 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -2953,11 +2957,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2957 "util/configparser.c" +#line 2961 "util/configparser.c" break; - case 284: -#line 460 "./util/configparser.y" + case 285: +#line 461 "./util/configparser.y" { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2965,11 +2969,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2969 "util/configparser.c" +#line 2973 "util/configparser.c" break; - case 285: -#line 469 "./util/configparser.y" + case 286: +#line 470 "./util/configparser.y" { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2977,11 +2981,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2981 "util/configparser.c" +#line 2985 "util/configparser.c" break; - case 286: -#line 478 "./util/configparser.y" + case 287: +#line 479 "./util/configparser.y" { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2991,11 +2995,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2995 "util/configparser.c" +#line 2999 "util/configparser.c" break; - case 287: -#line 489 "./util/configparser.y" + case 288: +#line 490 "./util/configparser.y" { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3003,11 +3007,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3007 "util/configparser.c" +#line 3011 "util/configparser.c" break; - case 288: -#line 498 "./util/configparser.y" + case 289: +#line 499 "./util/configparser.y" { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3015,11 +3019,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3019 "util/configparser.c" +#line 3023 "util/configparser.c" break; - case 289: -#line 507 "./util/configparser.y" + case 290: +#line 508 "./util/configparser.y" { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3027,11 +3031,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3031 "util/configparser.c" +#line 3035 "util/configparser.c" break; - case 290: -#line 516 "./util/configparser.y" + case 291: +#line 517 "./util/configparser.y" { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -3041,11 +3045,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3045 "util/configparser.c" +#line 3049 "util/configparser.c" break; - case 291: -#line 527 "./util/configparser.y" + case 292: +#line 528 "./util/configparser.y" { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3053,11 +3057,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3057 "util/configparser.c" +#line 3061 "util/configparser.c" break; - case 292: -#line 536 "./util/configparser.y" + case 293: +#line 537 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -3068,11 +3072,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 3072 "util/configparser.c" +#line 3076 "util/configparser.c" break; - case 293: -#line 548 "./util/configparser.y" + case 294: +#line 549 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -3084,11 +3088,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 3088 "util/configparser.c" +#line 3092 "util/configparser.c" break; - case 294: -#line 562 "./util/configparser.y" + case 295: +#line 563 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -3102,11 +3106,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3106 "util/configparser.c" +#line 3110 "util/configparser.c" break; - case 295: -#line 577 "./util/configparser.y" + case 296: +#line 578 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -3116,11 +3120,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3120 "util/configparser.c" +#line 3124 "util/configparser.c" break; - case 296: -#line 588 "./util/configparser.y" + case 297: +#line 589 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3136,11 +3140,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3140 "util/configparser.c" +#line 3144 "util/configparser.c" break; - case 297: -#line 605 "./util/configparser.y" + case 298: +#line 606 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3156,11 +3160,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3160 "util/configparser.c" +#line 3164 "util/configparser.c" break; - case 298: -#line 622 "./util/configparser.y" + case 299: +#line 623 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3176,11 +3180,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3180 "util/configparser.c" +#line 3184 "util/configparser.c" break; - case 299: -#line 639 "./util/configparser.y" + case 300: +#line 640 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3196,11 +3200,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3200 "util/configparser.c" +#line 3204 "util/configparser.c" break; - case 300: -#line 656 "./util/configparser.y" + case 301: +#line 657 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -3214,11 +3218,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3218 "util/configparser.c" +#line 3222 "util/configparser.c" break; - case 301: -#line 671 "./util/configparser.y" + case 302: +#line 672 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -3232,11 +3236,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3236 "util/configparser.c" +#line 3240 "util/configparser.c" break; - case 302: -#line 686 "./util/configparser.y" + case 303: +#line 687 "./util/configparser.y" { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3248,11 +3252,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3252 "util/configparser.c" +#line 3256 "util/configparser.c" break; - case 303: -#line 699 "./util/configparser.y" + case 304: +#line 700 "./util/configparser.y" { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3266,11 +3270,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3270 "util/configparser.c" +#line 3274 "util/configparser.c" break; - case 304: -#line 714 "./util/configparser.y" + case 305: +#line 715 "./util/configparser.y" { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3278,11 +3282,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3282 "util/configparser.c" +#line 3286 "util/configparser.c" break; - case 305: -#line 723 "./util/configparser.y" + case 306: +#line 724 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3290,11 +3294,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3294 "util/configparser.c" +#line 3298 "util/configparser.c" break; - case 306: -#line 732 "./util/configparser.y" + case 307: +#line 733 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3302,11 +3306,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3306 "util/configparser.c" +#line 3310 "util/configparser.c" break; - case 307: -#line 741 "./util/configparser.y" + case 308: +#line 742 "./util/configparser.y" { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3314,11 +3318,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3318 "util/configparser.c" +#line 3322 "util/configparser.c" break; - case 308: -#line 750 "./util/configparser.y" + case 309: +#line 751 "./util/configparser.y" { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3326,11 +3330,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3330 "util/configparser.c" +#line 3334 "util/configparser.c" break; - case 309: -#line 759 "./util/configparser.y" + case 310: +#line 760 "./util/configparser.y" { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3338,11 +3342,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3342 "util/configparser.c" +#line 3346 "util/configparser.c" break; - case 310: -#line 768 "./util/configparser.y" + case 311: +#line 769 "./util/configparser.y" { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3350,11 +3354,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3354 "util/configparser.c" +#line 3358 "util/configparser.c" break; - case 311: -#line 777 "./util/configparser.y" + case 312: +#line 778 "./util/configparser.y" { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3362,11 +3366,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3366 "util/configparser.c" +#line 3370 "util/configparser.c" break; - case 312: -#line 786 "./util/configparser.y" + case 313: +#line 787 "./util/configparser.y" { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3374,11 +3378,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3378 "util/configparser.c" +#line 3382 "util/configparser.c" break; - case 313: -#line 795 "./util/configparser.y" + case 314: +#line 796 "./util/configparser.y" { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3386,11 +3390,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3390 "util/configparser.c" +#line 3394 "util/configparser.c" break; - case 314: -#line 804 "./util/configparser.y" + case 315: +#line 805 "./util/configparser.y" { OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3398,11 +3402,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3402 "util/configparser.c" +#line 3406 "util/configparser.c" break; - case 315: -#line 813 "./util/configparser.y" + case 316: +#line 814 "./util/configparser.y" { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3410,11 +3414,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3414 "util/configparser.c" +#line 3418 "util/configparser.c" break; - case 316: -#line 822 "./util/configparser.y" + case 317: +#line 823 "./util/configparser.y" { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3422,11 +3426,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3426 "util/configparser.c" +#line 3430 "util/configparser.c" break; - case 317: -#line 831 "./util/configparser.y" + case 318: +#line 832 "./util/configparser.y" { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3434,11 +3438,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3438 "util/configparser.c" +#line 3442 "util/configparser.c" break; - case 318: -#line 840 "./util/configparser.y" + case 319: +#line 841 "./util/configparser.y" { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3450,11 +3454,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3454 "util/configparser.c" +#line 3458 "util/configparser.c" break; - case 319: -#line 853 "./util/configparser.y" + case 320: +#line 854 "./util/configparser.y" { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3462,11 +3466,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3466 "util/configparser.c" +#line 3470 "util/configparser.c" break; - case 320: -#line 862 "./util/configparser.y" + case 321: +#line 863 "./util/configparser.y" { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3478,11 +3482,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3482 "util/configparser.c" +#line 3486 "util/configparser.c" break; - case 321: -#line 875 "./util/configparser.y" + case 322: +#line 876 "./util/configparser.y" { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3490,11 +3494,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3494 "util/configparser.c" +#line 3498 "util/configparser.c" break; - case 322: -#line 884 "./util/configparser.y" + case 323: +#line 885 "./util/configparser.y" { OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3502,11 +3506,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3506 "util/configparser.c" +#line 3510 "util/configparser.c" break; - case 323: -#line 893 "./util/configparser.y" + case 324: +#line 894 "./util/configparser.y" { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3514,31 +3518,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3518 "util/configparser.c" +#line 3522 "util/configparser.c" break; - case 324: -#line 902 "./util/configparser.y" + case 325: +#line 903 "./util/configparser.y" { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } -#line 3528 "util/configparser.c" +#line 3532 "util/configparser.c" break; - case 325: -#line 909 "./util/configparser.y" + case 326: +#line 910 "./util/configparser.y" { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } -#line 3538 "util/configparser.c" +#line 3542 "util/configparser.c" break; - case 326: -#line 916 "./util/configparser.y" + case 327: +#line 917 "./util/configparser.y" { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3546,21 +3550,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3550 "util/configparser.c" +#line 3554 "util/configparser.c" break; - case 327: -#line 925 "./util/configparser.y" + case 328: +#line 926 "./util/configparser.y" { OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_cert_bundle); cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str); } -#line 3560 "util/configparser.c" +#line 3564 "util/configparser.c" break; - case 328: -#line 932 "./util/configparser.y" + case 329: +#line 933 "./util/configparser.y" { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3568,53 +3572,53 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3572 "util/configparser.c" +#line 3576 "util/configparser.c" break; - case 329: -#line 941 "./util/configparser.y" + case 330: +#line 942 "./util/configparser.y" { OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3583 "util/configparser.c" +#line 3587 "util/configparser.c" break; - case 330: -#line 949 "./util/configparser.y" + case 331: +#line 950 "./util/configparser.y" { OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphers); cfg_parser->cfg->tls_ciphers = (yyvsp[0].str); } -#line 3593 "util/configparser.c" +#line 3597 "util/configparser.c" break; - case 331: -#line 956 "./util/configparser.y" + case 332: +#line 957 "./util/configparser.y" { OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphersuites); cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str); } -#line 3603 "util/configparser.c" +#line 3607 "util/configparser.c" break; - case 332: -#line 963 "./util/configparser.y" + case 333: +#line 964 "./util/configparser.y" { OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3614 "util/configparser.c" +#line 3618 "util/configparser.c" break; - case 333: -#line 971 "./util/configparser.y" + case 334: +#line 972 "./util/configparser.y" { OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3622,11 +3626,11 @@ yyreduce: else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3626 "util/configparser.c" +#line 3630 "util/configparser.c" break; - case 334: -#line 980 "./util/configparser.y" + case 335: +#line 981 "./util/configparser.y" { OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3634,11 +3638,11 @@ yyreduce: else cfg_parser->cfg->https_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3638 "util/configparser.c" +#line 3642 "util/configparser.c" break; - case 335: -#line 988 "./util/configparser.y" + case 336: +#line 989 "./util/configparser.y" { OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->http_endpoint); @@ -3654,11 +3658,11 @@ yyreduce: cfg_parser->cfg->http_endpoint = (yyvsp[0].str); } } -#line 3658 "util/configparser.c" +#line 3662 "util/configparser.c" break; - case 336: -#line 1004 "./util/configparser.y" + case 337: +#line 1005 "./util/configparser.y" { OUTYY(("P(server_http_max_streams:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3666,11 +3670,11 @@ yyreduce: else cfg_parser->cfg->http_max_streams = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3670 "util/configparser.c" +#line 3674 "util/configparser.c" break; - case 337: -#line 1012 "./util/configparser.y" + case 338: +#line 1013 "./util/configparser.y" { OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), @@ -3678,11 +3682,11 @@ yyreduce: yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3682 "util/configparser.c" +#line 3686 "util/configparser.c" break; - case 338: -#line 1020 "./util/configparser.y" + case 339: +#line 1021 "./util/configparser.y" { OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), @@ -3690,11 +3694,11 @@ yyreduce: yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3694 "util/configparser.c" +#line 3698 "util/configparser.c" break; - case 339: -#line 1028 "./util/configparser.y" + case 340: +#line 1029 "./util/configparser.y" { OUTYY(("P(server_http_nodelay:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3702,11 +3706,11 @@ yyreduce: else cfg_parser->cfg->http_nodelay = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3706 "util/configparser.c" +#line 3710 "util/configparser.c" break; - case 340: -#line 1036 "./util/configparser.y" + case 341: +#line 1037 "./util/configparser.y" { OUTYY(("P(server_http_notls_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3714,11 +3718,11 @@ yyreduce: else cfg_parser->cfg->http_notls_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3718 "util/configparser.c" +#line 3722 "util/configparser.c" break; - case 341: -#line 1044 "./util/configparser.y" + case 342: +#line 1045 "./util/configparser.y" { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3726,11 +3730,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3730 "util/configparser.c" +#line 3734 "util/configparser.c" break; - case 342: -#line 1053 "./util/configparser.y" + case 343: +#line 1054 "./util/configparser.y" { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3738,11 +3742,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3742 "util/configparser.c" +#line 3746 "util/configparser.c" break; - case 343: -#line 1062 "./util/configparser.y" + case 344: +#line 1063 "./util/configparser.y" { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3755,11 +3759,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3759 "util/configparser.c" +#line 3763 "util/configparser.c" break; - case 344: -#line 1076 "./util/configparser.y" + case 345: +#line 1077 "./util/configparser.y" { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3767,11 +3771,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3771 "util/configparser.c" +#line 3775 "util/configparser.c" break; - case 345: -#line 1085 "./util/configparser.y" + case 346: +#line 1086 "./util/configparser.y" { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3779,11 +3783,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3783 "util/configparser.c" +#line 3787 "util/configparser.c" break; - case 346: -#line 1094 "./util/configparser.y" + case 347: +#line 1095 "./util/configparser.y" { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3791,11 +3795,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3795 "util/configparser.c" +#line 3799 "util/configparser.c" break; - case 347: -#line 1103 "./util/configparser.y" + case 348: +#line 1104 "./util/configparser.y" { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3803,11 +3807,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3807 "util/configparser.c" +#line 3811 "util/configparser.c" break; - case 348: -#line 1112 "./util/configparser.y" + case 349: +#line 1113 "./util/configparser.y" { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3815,11 +3819,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3819 "util/configparser.c" +#line 3823 "util/configparser.c" break; - case 349: -#line 1121 "./util/configparser.y" + case 350: +#line 1122 "./util/configparser.y" { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3827,31 +3831,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3831 "util/configparser.c" +#line 3835 "util/configparser.c" break; - case 350: -#line 1130 "./util/configparser.y" + case 351: +#line 1131 "./util/configparser.y" { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3841 "util/configparser.c" +#line 3845 "util/configparser.c" break; - case 351: -#line 1137 "./util/configparser.y" + case 352: +#line 1138 "./util/configparser.y" { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3851 "util/configparser.c" +#line 3855 "util/configparser.c" break; - case 352: -#line 1144 "./util/configparser.y" + case 353: +#line 1145 "./util/configparser.y" { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3876,105 +3880,105 @@ yyreduce: } } } -#line 3880 "util/configparser.c" +#line 3884 "util/configparser.c" break; - case 353: -#line 1170 "./util/configparser.y" + case 354: +#line 1171 "./util/configparser.y" { OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } -#line 3891 "util/configparser.c" +#line 3895 "util/configparser.c" break; - case 354: -#line 1178 "./util/configparser.y" + case 355: +#line 1179 "./util/configparser.y" { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3901 "util/configparser.c" +#line 3905 "util/configparser.c" break; - case 355: -#line 1185 "./util/configparser.y" + case 356: +#line 1186 "./util/configparser.y" { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3911 "util/configparser.c" +#line 3915 "util/configparser.c" break; - case 356: -#line 1192 "./util/configparser.y" + case 357: +#line 1193 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); log_warn("option dlv-anchor-file ignored: DLV is decommissioned"); free((yyvsp[0].str)); } -#line 3921 "util/configparser.c" +#line 3925 "util/configparser.c" break; - case 357: -#line 1199 "./util/configparser.y" + case 358: +#line 1200 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); log_warn("option dlv-anchor ignored: DLV is decommissioned"); free((yyvsp[0].str)); } -#line 3931 "util/configparser.c" +#line 3935 "util/configparser.c" break; - case 358: -#line 1206 "./util/configparser.y" + case 359: +#line 1207 "./util/configparser.y" { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3942 "util/configparser.c" +#line 3946 "util/configparser.c" break; - case 359: -#line 1214 "./util/configparser.y" + case 360: +#line 1215 "./util/configparser.y" { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3953 "util/configparser.c" +#line 3957 "util/configparser.c" break; - case 360: -#line 1222 "./util/configparser.y" + case 361: +#line 1223 "./util/configparser.y" { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3964 "util/configparser.c" +#line 3968 "util/configparser.c" break; - case 361: -#line 1230 "./util/configparser.y" + case 362: +#line 1231 "./util/configparser.y" { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3974 "util/configparser.c" +#line 3978 "util/configparser.c" break; - case 362: -#line 1237 "./util/configparser.y" + case 363: +#line 1238 "./util/configparser.y" { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3984,11 +3988,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3988 "util/configparser.c" +#line 3992 "util/configparser.c" break; - case 363: -#line 1248 "./util/configparser.y" + case 364: +#line 1249 "./util/configparser.y" { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3998,21 +4002,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4002 "util/configparser.c" +#line 4006 "util/configparser.c" break; - case 364: -#line 1259 "./util/configparser.y" + case 365: +#line 1260 "./util/configparser.y" { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4012 "util/configparser.c" +#line 4016 "util/configparser.c" break; - case 365: -#line 1266 "./util/configparser.y" + case 366: +#line 1267 "./util/configparser.y" { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4020,11 +4024,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4024 "util/configparser.c" +#line 4028 "util/configparser.c" break; - case 366: -#line 1275 "./util/configparser.y" + case 367: +#line 1276 "./util/configparser.y" { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4032,11 +4036,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4036 "util/configparser.c" +#line 4040 "util/configparser.c" break; - case 367: -#line 1284 "./util/configparser.y" + case 368: +#line 1285 "./util/configparser.y" { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4044,53 +4048,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4048 "util/configparser.c" +#line 4052 "util/configparser.c" break; - case 368: -#line 1293 "./util/configparser.y" + case 369: +#line 1294 "./util/configparser.y" { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 4058 "util/configparser.c" +#line 4062 "util/configparser.c" break; - case 369: -#line 1300 "./util/configparser.y" + case 370: +#line 1301 "./util/configparser.y" { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 4068 "util/configparser.c" +#line 4072 "util/configparser.c" break; - case 370: -#line 1307 "./util/configparser.y" + case 371: +#line 1308 "./util/configparser.y" { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 4079 "util/configparser.c" +#line 4083 "util/configparser.c" break; - case 371: -#line 1315 "./util/configparser.y" + case 372: +#line 1316 "./util/configparser.y" { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 4090 "util/configparser.c" +#line 4094 "util/configparser.c" break; - case 372: -#line 1323 "./util/configparser.y" + case 373: +#line 1324 "./util/configparser.y" { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4099,11 +4103,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4103 "util/configparser.c" +#line 4107 "util/configparser.c" break; - case 373: -#line 1333 "./util/configparser.y" + case 374: +#line 1334 "./util/configparser.y" { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4112,11 +4116,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4116 "util/configparser.c" +#line 4120 "util/configparser.c" break; - case 374: -#line 1343 "./util/configparser.y" + case 375: +#line 1344 "./util/configparser.y" { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4125,11 +4129,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4129 "util/configparser.c" +#line 4133 "util/configparser.c" break; - case 375: -#line 1353 "./util/configparser.y" + case 376: +#line 1354 "./util/configparser.y" { OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4142,22 +4146,22 @@ yyreduce: cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4146 "util/configparser.c" +#line 4150 "util/configparser.c" break; - case 376: -#line 1367 "./util/configparser.y" + case 377: +#line 1368 "./util/configparser.y" { OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4157 "util/configparser.c" +#line 4161 "util/configparser.c" break; - case 377: -#line 1375 "./util/configparser.y" + case 378: +#line 1376 "./util/configparser.y" { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4169,11 +4173,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4173 "util/configparser.c" +#line 4177 "util/configparser.c" break; - case 378: -#line 1388 "./util/configparser.y" + case 379: +#line 1389 "./util/configparser.y" { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4183,22 +4187,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4187 "util/configparser.c" +#line 4191 "util/configparser.c" break; - case 379: -#line 1399 "./util/configparser.y" + case 380: +#line 1400 "./util/configparser.y" { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4198 "util/configparser.c" +#line 4202 "util/configparser.c" break; - case 380: -#line 1407 "./util/configparser.y" + case 381: +#line 1408 "./util/configparser.y" { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4210,11 +4214,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4214 "util/configparser.c" +#line 4218 "util/configparser.c" break; - case 381: -#line 1420 "./util/configparser.y" + case 382: +#line 1421 "./util/configparser.y" { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4222,11 +4226,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4226 "util/configparser.c" +#line 4230 "util/configparser.c" break; - case 382: -#line 1429 "./util/configparser.y" + case 383: +#line 1430 "./util/configparser.y" { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4234,11 +4238,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4238 "util/configparser.c" +#line 4242 "util/configparser.c" break; - case 383: -#line 1438 "./util/configparser.y" + case 384: +#line 1439 "./util/configparser.y" { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4246,11 +4250,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4250 "util/configparser.c" +#line 4254 "util/configparser.c" break; - case 384: -#line 1447 "./util/configparser.y" + case 385: +#line 1448 "./util/configparser.y" { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4259,11 +4263,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4263 "util/configparser.c" +#line 4267 "util/configparser.c" break; - case 385: -#line 1457 "./util/configparser.y" + case 386: +#line 1458 "./util/configparser.y" { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4272,22 +4276,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4276 "util/configparser.c" +#line 4280 "util/configparser.c" break; - case 386: -#line 1467 "./util/configparser.y" + case 387: +#line 1468 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4287 "util/configparser.c" +#line 4291 "util/configparser.c" break; - case 387: -#line 1475 "./util/configparser.y" + case 388: +#line 1476 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4299,11 +4303,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4303 "util/configparser.c" +#line 4307 "util/configparser.c" break; - case 388: -#line 1488 "./util/configparser.y" + case 389: +#line 1489 "./util/configparser.y" { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4311,22 +4315,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4315 "util/configparser.c" +#line 4319 "util/configparser.c" break; - case 389: -#line 1497 "./util/configparser.y" + case 390: +#line 1498 "./util/configparser.y" { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " "removed, use infra-host-ttl)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4326 "util/configparser.c" +#line 4330 "util/configparser.c" break; - case 390: -#line 1505 "./util/configparser.y" + case 391: +#line 1506 "./util/configparser.y" { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4334,22 +4338,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4338 "util/configparser.c" +#line 4342 "util/configparser.c" break; - case 391: -#line 1514 "./util/configparser.y" + case 392: +#line 1515 "./util/configparser.y" { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4349 "util/configparser.c" +#line 4353 "util/configparser.c" break; - case 392: -#line 1522 "./util/configparser.y" + case 393: +#line 1523 "./util/configparser.y" { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4361,11 +4365,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4365 "util/configparser.c" +#line 4369 "util/configparser.c" break; - case 393: -#line 1535 "./util/configparser.y" + case 394: +#line 1536 "./util/configparser.y" { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4373,11 +4377,11 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4377 "util/configparser.c" +#line 4381 "util/configparser.c" break; - case 394: -#line 1544 "./util/configparser.y" + case 395: +#line 1545 "./util/configparser.y" { OUTYY(("P(server_infra_keep_probing:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4386,21 +4390,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4390 "util/configparser.c" +#line 4394 "util/configparser.c" break; - case 395: -#line 1554 "./util/configparser.y" + case 396: +#line 1555 "./util/configparser.y" { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); } -#line 4400 "util/configparser.c" +#line 4404 "util/configparser.c" break; - case 396: -#line 1561 "./util/configparser.y" + case 397: +#line 1562 "./util/configparser.y" { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4409,11 +4413,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4413 "util/configparser.c" +#line 4417 "util/configparser.c" break; - case 397: -#line 1571 "./util/configparser.y" + case 398: +#line 1572 "./util/configparser.y" { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4422,11 +4426,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4426 "util/configparser.c" +#line 4430 "util/configparser.c" break; - case 398: -#line 1581 "./util/configparser.y" + case 399: +#line 1582 "./util/configparser.y" { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4435,11 +4439,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4439 "util/configparser.c" +#line 4443 "util/configparser.c" break; - case 399: -#line 1591 "./util/configparser.y" + case 400: +#line 1592 "./util/configparser.y" { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4448,11 +4452,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4452 "util/configparser.c" +#line 4456 "util/configparser.c" break; - case 400: -#line 1601 "./util/configparser.y" + case 401: +#line 1602 "./util/configparser.y" { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4461,11 +4465,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4465 "util/configparser.c" +#line 4469 "util/configparser.c" break; - case 401: -#line 1611 "./util/configparser.y" + case 402: +#line 1612 "./util/configparser.y" { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4474,11 +4478,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4478 "util/configparser.c" +#line 4482 "util/configparser.c" break; - case 402: -#line 1621 "./util/configparser.y" + case 403: +#line 1622 "./util/configparser.y" { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4487,11 +4491,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4491 "util/configparser.c" +#line 4495 "util/configparser.c" break; - case 403: -#line 1631 "./util/configparser.y" + case 404: +#line 1632 "./util/configparser.y" { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4500,41 +4504,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4504 "util/configparser.c" +#line 4508 "util/configparser.c" break; - case 404: -#line 1641 "./util/configparser.y" + case 405: +#line 1642 "./util/configparser.y" { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4514 "util/configparser.c" +#line 4518 "util/configparser.c" break; - case 405: -#line 1648 "./util/configparser.y" + case 406: +#line 1649 "./util/configparser.y" { OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4524 "util/configparser.c" +#line 4528 "util/configparser.c" break; - case 406: -#line 1655 "./util/configparser.y" + case 407: +#line 1656 "./util/configparser.y" { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4534 "util/configparser.c" +#line 4538 "util/configparser.c" break; - case 407: -#line 1662 "./util/configparser.y" + case 408: +#line 1663 "./util/configparser.y" { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4542,11 +4546,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4546 "util/configparser.c" +#line 4550 "util/configparser.c" break; - case 408: -#line 1671 "./util/configparser.y" + case 409: +#line 1672 "./util/configparser.y" { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4554,11 +4558,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4558 "util/configparser.c" +#line 4562 "util/configparser.c" break; - case 409: -#line 1680 "./util/configparser.y" + case 410: +#line 1681 "./util/configparser.y" { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4566,11 +4570,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4570 "util/configparser.c" +#line 4574 "util/configparser.c" break; - case 410: -#line 1689 "./util/configparser.y" + case 411: +#line 1690 "./util/configparser.y" { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4578,21 +4582,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4582 "util/configparser.c" +#line 4586 "util/configparser.c" break; - case 411: -#line 1698 "./util/configparser.y" + case 412: +#line 1699 "./util/configparser.y" { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4592 "util/configparser.c" +#line 4596 "util/configparser.c" break; - case 412: -#line 1705 "./util/configparser.y" + case 413: +#line 1706 "./util/configparser.y" { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4601,11 +4605,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4605 "util/configparser.c" +#line 4609 "util/configparser.c" break; - case 413: -#line 1715 "./util/configparser.y" + case 414: +#line 1716 "./util/configparser.y" { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4624,21 +4628,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4628 "util/configparser.c" +#line 4632 "util/configparser.c" break; - case 414: -#line 1735 "./util/configparser.y" + case 415: +#line 1736 "./util/configparser.y" { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = (yyvsp[0].str); } -#line 4638 "util/configparser.c" +#line 4642 "util/configparser.c" break; - case 415: -#line 1742 "./util/configparser.y" + case 416: +#line 1743 "./util/configparser.y" { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4655,11 +4659,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4659 "util/configparser.c" +#line 4663 "util/configparser.c" break; - case 416: -#line 1760 "./util/configparser.y" + case 417: +#line 1761 "./util/configparser.y" { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4671,11 +4675,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4675 "util/configparser.c" +#line 4679 "util/configparser.c" break; - case 417: -#line 1773 "./util/configparser.y" + case 418: +#line 1774 "./util/configparser.y" { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4687,11 +4691,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4691 "util/configparser.c" +#line 4695 "util/configparser.c" break; - case 418: -#line 1786 "./util/configparser.y" + case 419: +#line 1787 "./util/configparser.y" { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4699,11 +4703,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4703 "util/configparser.c" +#line 4707 "util/configparser.c" break; - case 419: -#line 1795 "./util/configparser.y" + case 420: +#line 1796 "./util/configparser.y" { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4711,11 +4715,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4715 "util/configparser.c" +#line 4719 "util/configparser.c" break; - case 420: -#line 1804 "./util/configparser.y" + case 421: +#line 1805 "./util/configparser.y" { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4723,11 +4727,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4727 "util/configparser.c" +#line 4731 "util/configparser.c" break; - case 421: -#line 1813 "./util/configparser.y" + case 422: +#line 1814 "./util/configparser.y" { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4735,11 +4739,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4739 "util/configparser.c" +#line 4743 "util/configparser.c" break; - case 422: -#line 1822 "./util/configparser.y" + case 423: +#line 1823 "./util/configparser.y" { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4748,11 +4752,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4752 "util/configparser.c" +#line 4756 "util/configparser.c" break; - case 423: -#line 1832 "./util/configparser.y" + case 424: +#line 1833 "./util/configparser.y" { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4761,11 +4765,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4765 "util/configparser.c" +#line 4769 "util/configparser.c" break; - case 424: -#line 1842 "./util/configparser.y" + case 425: +#line 1843 "./util/configparser.y" { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4775,11 +4779,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4779 "util/configparser.c" +#line 4783 "util/configparser.c" break; - case 425: -#line 1853 "./util/configparser.y" + case 426: +#line 1854 "./util/configparser.y" { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4787,11 +4791,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4791 "util/configparser.c" +#line 4795 "util/configparser.c" break; - case 426: -#line 1862 "./util/configparser.y" + case 427: +#line 1863 "./util/configparser.y" { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4799,11 +4803,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4803 "util/configparser.c" +#line 4807 "util/configparser.c" break; - case 427: -#line 1871 "./util/configparser.y" + case 428: +#line 1872 "./util/configparser.y" { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4811,11 +4815,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4815 "util/configparser.c" +#line 4819 "util/configparser.c" break; - case 428: -#line 1880 "./util/configparser.y" + case 429: +#line 1881 "./util/configparser.y" { OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4823,11 +4827,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4827 "util/configparser.c" +#line 4831 "util/configparser.c" break; - case 429: -#line 1889 "./util/configparser.y" + case 430: +#line 1890 "./util/configparser.y" { OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4835,11 +4839,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4839 "util/configparser.c" +#line 4843 "util/configparser.c" break; - case 430: -#line 1898 "./util/configparser.y" + case 431: +#line 1899 "./util/configparser.y" { OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4847,11 +4851,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4851 "util/configparser.c" +#line 4855 "util/configparser.c" break; - case 431: -#line 1907 "./util/configparser.y" + case 432: +#line 1908 "./util/configparser.y" { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4863,11 +4867,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4867 "util/configparser.c" +#line 4871 "util/configparser.c" break; - case 432: -#line 1920 "./util/configparser.y" + case 433: +#line 1921 "./util/configparser.y" { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4879,11 +4883,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4883 "util/configparser.c" +#line 4887 "util/configparser.c" break; - case 433: -#line 1933 "./util/configparser.y" + case 434: +#line 1934 "./util/configparser.y" { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4891,21 +4895,33 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4895 "util/configparser.c" +#line 4899 "util/configparser.c" break; - case 434: -#line 1942 "./util/configparser.y" + case 435: +#line 1943 "./util/configparser.y" { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); } -#line 4905 "util/configparser.c" +#line 4909 "util/configparser.c" break; - case 435: -#line 1949 "./util/configparser.y" + case 436: +#line 1950 "./util/configparser.y" + { + OUTYY(("P(server_zonemd_permissive_mode:%s)\n", (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->zonemd_permissive_mode = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 4921 "util/configparser.c" + break; + + case 437: +#line 1959 "./util/configparser.y" { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4913,11 +4929,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4917 "util/configparser.c" +#line 4933 "util/configparser.c" break; - case 436: -#line 1958 "./util/configparser.y" + case 438: +#line 1968 "./util/configparser.y" { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4925,11 +4941,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4929 "util/configparser.c" +#line 4945 "util/configparser.c" break; - case 437: -#line 1967 "./util/configparser.y" + case 439: +#line 1977 "./util/configparser.y" { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4937,11 +4953,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4941 "util/configparser.c" +#line 4957 "util/configparser.c" break; - case 438: -#line 1976 "./util/configparser.y" + case 440: +#line 1986 "./util/configparser.y" { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4950,22 +4966,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4954 "util/configparser.c" +#line 4970 "util/configparser.c" break; - case 439: -#line 1985 "./util/configparser.y" + case 441: +#line 1995 "./util/configparser.y" { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4965 "util/configparser.c" +#line 4981 "util/configparser.c" break; - case 440: -#line 1993 "./util/configparser.y" + case 442: +#line 2003 "./util/configparser.y" { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4977,22 +4993,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4981 "util/configparser.c" +#line 4997 "util/configparser.c" break; - case 441: -#line 2006 "./util/configparser.y" + case 443: +#line 2016 "./util/configparser.y" { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4992 "util/configparser.c" +#line 5008 "util/configparser.c" break; - case 442: -#line 2014 "./util/configparser.y" + case 444: +#line 2024 "./util/configparser.y" { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -5032,21 +5048,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5036 "util/configparser.c" +#line 5052 "util/configparser.c" break; - case 443: -#line 2055 "./util/configparser.y" + case 445: +#line 2065 "./util/configparser.y" { OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) fatal_exit("out of memory adding local-data"); } -#line 5046 "util/configparser.c" +#line 5062 "util/configparser.c" break; - case 444: -#line 2062 "./util/configparser.y" + case 446: +#line 2072 "./util/configparser.y" { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5060,11 +5076,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5064 "util/configparser.c" +#line 5080 "util/configparser.c" break; - case 445: -#line 2077 "./util/configparser.y" + case 447: +#line 2087 "./util/configparser.y" { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5073,11 +5089,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5077 "util/configparser.c" +#line 5093 "util/configparser.c" break; - case 446: -#line 2087 "./util/configparser.y" + case 448: +#line 2097 "./util/configparser.y" { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5086,41 +5102,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5090 "util/configparser.c" +#line 5106 "util/configparser.c" break; - case 447: -#line 2097 "./util/configparser.y" + case 449: +#line 2107 "./util/configparser.y" { OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5100 "util/configparser.c" +#line 5116 "util/configparser.c" break; - case 448: -#line 2104 "./util/configparser.y" + case 450: +#line 2114 "./util/configparser.y" { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5110 "util/configparser.c" +#line 5126 "util/configparser.c" break; - case 449: -#line 2111 "./util/configparser.y" + case 451: +#line 2121 "./util/configparser.y" { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 5120 "util/configparser.c" +#line 5136 "util/configparser.c" break; - case 450: -#line 2118 "./util/configparser.y" + case 452: +#line 2128 "./util/configparser.y" { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5128,22 +5144,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5132 "util/configparser.c" +#line 5148 "util/configparser.c" break; - case 451: -#line 2127 "./util/configparser.y" + case 453: +#line 2137 "./util/configparser.y" { OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, (yyvsp[0].str))) fatal_exit("out of memory adding dns64-ignore-aaaa"); } -#line 5143 "util/configparser.c" +#line 5159 "util/configparser.c" break; - case 452: -#line 2135 "./util/configparser.y" + case 454: +#line 2145 "./util/configparser.y" { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -5156,11 +5172,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5160 "util/configparser.c" +#line 5176 "util/configparser.c" break; - case 453: -#line 2149 "./util/configparser.y" + case 455: +#line 2159 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5180,11 +5196,11 @@ yyreduce: } } } -#line 5184 "util/configparser.c" +#line 5200 "util/configparser.c" break; - case 454: -#line 2170 "./util/configparser.y" + case 456: +#line 2180 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5204,11 +5220,11 @@ yyreduce: } } } -#line 5208 "util/configparser.c" +#line 5224 "util/configparser.c" break; - case 455: -#line 2191 "./util/configparser.y" + case 457: +#line 2201 "./util/configparser.y" { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, @@ -5219,11 +5235,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5223 "util/configparser.c" +#line 5239 "util/configparser.c" break; - case 456: -#line 2203 "./util/configparser.y" + case 458: +#line 2213 "./util/configparser.y" { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, @@ -5234,11 +5250,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5238 "util/configparser.c" +#line 5254 "util/configparser.c" break; - case 457: -#line 2215 "./util/configparser.y" + case 459: +#line 2225 "./util/configparser.y" { OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, @@ -5249,11 +5265,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5253 "util/configparser.c" +#line 5269 "util/configparser.c" break; - case 458: -#line 2227 "./util/configparser.y" + case 460: +#line 2237 "./util/configparser.y" { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -5261,11 +5277,11 @@ yyreduce: yyerror("out of memory"); } } -#line 5265 "util/configparser.c" +#line 5281 "util/configparser.c" break; - case 459: -#line 2236 "./util/configparser.y" + case 461: +#line 2246 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5285,11 +5301,11 @@ yyreduce: } } } -#line 5289 "util/configparser.c" +#line 5305 "util/configparser.c" break; - case 460: -#line 2257 "./util/configparser.y" + case 462: +#line 2267 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5297,11 +5313,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5301 "util/configparser.c" +#line 5317 "util/configparser.c" break; - case 461: -#line 2267 "./util/configparser.y" + case 463: +#line 2277 "./util/configparser.y" { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5309,33 +5325,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5313 "util/configparser.c" +#line 5329 "util/configparser.c" break; - case 462: -#line 2276 "./util/configparser.y" + case 464: +#line 2286 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5324 "util/configparser.c" +#line 5340 "util/configparser.c" break; - case 463: -#line 2284 "./util/configparser.y" + case 465: +#line 2294 "./util/configparser.y" { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5335 "util/configparser.c" +#line 5351 "util/configparser.c" break; - case 464: -#line 2292 "./util/configparser.y" + case 466: +#line 2302 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5347,11 +5363,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5351 "util/configparser.c" +#line 5367 "util/configparser.c" break; - case 465: -#line 2305 "./util/configparser.y" + case 467: +#line 2315 "./util/configparser.y" { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5363,11 +5379,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5367 "util/configparser.c" +#line 5383 "util/configparser.c" break; - case 466: -#line 2318 "./util/configparser.y" + case 468: +#line 2328 "./util/configparser.y" { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -5381,11 +5397,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 5385 "util/configparser.c" +#line 5401 "util/configparser.c" break; - case 467: -#line 2333 "./util/configparser.y" + case 469: +#line 2343 "./util/configparser.y" { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -5399,11 +5415,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 5403 "util/configparser.c" +#line 5419 "util/configparser.c" break; - case 468: -#line 2348 "./util/configparser.y" + case 470: +#line 2358 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5411,11 +5427,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5415 "util/configparser.c" +#line 5431 "util/configparser.c" break; - case 469: -#line 2357 "./util/configparser.y" + case 471: +#line 2367 "./util/configparser.y" { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5423,20 +5439,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5427 "util/configparser.c" +#line 5443 "util/configparser.c" break; - case 470: -#line 2366 "./util/configparser.y" + case 472: +#line 2376 "./util/configparser.y" { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5436 "util/configparser.c" +#line 5452 "util/configparser.c" break; - case 471: -#line 2372 "./util/configparser.y" + case 473: +#line 2382 "./util/configparser.y" { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -5444,11 +5460,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5448 "util/configparser.c" +#line 5464 "util/configparser.c" break; - case 472: -#line 2381 "./util/configparser.y" + case 474: +#line 2391 "./util/configparser.y" { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5456,11 +5472,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5460 "util/configparser.c" +#line 5476 "util/configparser.c" break; - case 473: -#line 2390 "./util/configparser.y" + case 475: +#line 2400 "./util/configparser.y" { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5469,11 +5485,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5473 "util/configparser.c" +#line 5489 "util/configparser.c" break; - case 474: -#line 2400 "./util/configparser.y" + case 476: +#line 2410 "./util/configparser.y" { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5482,11 +5498,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5486 "util/configparser.c" +#line 5502 "util/configparser.c" break; - case 475: -#line 2410 "./util/configparser.y" + case 477: +#line 2420 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5498,11 +5514,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5502 "util/configparser.c" +#line 5518 "util/configparser.c" break; - case 476: -#line 2423 "./util/configparser.y" + case 478: +#line 2433 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5514,11 +5530,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5518 "util/configparser.c" +#line 5534 "util/configparser.c" break; - case 477: -#line 2436 "./util/configparser.y" + case 479: +#line 2446 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5529,11 +5545,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5533 "util/configparser.c" +#line 5549 "util/configparser.c" break; - case 478: -#line 2448 "./util/configparser.y" + case 480: +#line 2458 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5546,11 +5562,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5550 "util/configparser.c" +#line 5566 "util/configparser.c" break; - case 479: -#line 2462 "./util/configparser.y" + case 481: +#line 2472 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5561,11 +5577,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5565 "util/configparser.c" +#line 5581 "util/configparser.c" break; - case 480: -#line 2474 "./util/configparser.y" + case 482: +#line 2484 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5578,11 +5594,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5582 "util/configparser.c" +#line 5598 "util/configparser.c" break; - case 481: -#line 2488 "./util/configparser.y" + case 483: +#line 2498 "./util/configparser.y" { int tag_data; OUTYY(("P(server_edns_client_tag:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); @@ -5596,11 +5612,11 @@ yyreduce: fatal_exit("out of memory adding " "edns-client-tag"); } -#line 5600 "util/configparser.c" +#line 5616 "util/configparser.c" break; - case 482: -#line 2503 "./util/configparser.y" + case 484: +#line 2513 "./util/configparser.y" { OUTYY(("P(edns_client_tag_opcode:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5610,11 +5626,11 @@ yyreduce: else cfg_parser->cfg->edns_client_tag_opcode = atoi((yyvsp[0].str)); } -#line 5614 "util/configparser.c" +#line 5630 "util/configparser.c" break; - case 483: -#line 2514 "./util/configparser.y" + case 485: +#line 2524 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5623,31 +5639,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5627 "util/configparser.c" +#line 5643 "util/configparser.c" break; - case 484: -#line 2524 "./util/configparser.y" + case 486: +#line 2534 "./util/configparser.y" { OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5637 "util/configparser.c" +#line 5653 "util/configparser.c" break; - case 485: -#line 2531 "./util/configparser.y" + case 487: +#line 2541 "./util/configparser.y" { OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5647 "util/configparser.c" +#line 5663 "util/configparser.c" break; - case 486: -#line 2538 "./util/configparser.y" + case 488: +#line 2548 "./util/configparser.y" { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5655,11 +5671,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5659 "util/configparser.c" +#line 5675 "util/configparser.c" break; - case 487: -#line 2547 "./util/configparser.y" + case 489: +#line 2557 "./util/configparser.y" { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5667,11 +5683,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5671 "util/configparser.c" +#line 5687 "util/configparser.c" break; - case 488: -#line 2556 "./util/configparser.y" + case 490: +#line 2566 "./util/configparser.y" { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5680,11 +5696,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5684 "util/configparser.c" +#line 5700 "util/configparser.c" break; - case 489: -#line 2566 "./util/configparser.y" + case 491: +#line 2576 "./util/configparser.y" { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5693,11 +5709,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5697 "util/configparser.c" +#line 5713 "util/configparser.c" break; - case 490: -#line 2576 "./util/configparser.y" + case 492: +#line 2586 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5706,31 +5722,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5710 "util/configparser.c" +#line 5726 "util/configparser.c" break; - case 491: -#line 2586 "./util/configparser.y" + case 493: +#line 2596 "./util/configparser.y" { OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5720 "util/configparser.c" +#line 5736 "util/configparser.c" break; - case 492: -#line 2593 "./util/configparser.y" + case 494: +#line 2603 "./util/configparser.y" { OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5730 "util/configparser.c" +#line 5746 "util/configparser.c" break; - case 493: -#line 2600 "./util/configparser.y" + case 495: +#line 2610 "./util/configparser.y" { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5738,11 +5754,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5742 "util/configparser.c" +#line 5758 "util/configparser.c" break; - case 494: -#line 2609 "./util/configparser.y" + case 496: +#line 2619 "./util/configparser.y" { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5750,11 +5766,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5754 "util/configparser.c" +#line 5770 "util/configparser.c" break; - case 495: -#line 2618 "./util/configparser.y" + case 497: +#line 2628 "./util/configparser.y" { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5763,11 +5779,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5767 "util/configparser.c" +#line 5783 "util/configparser.c" break; - case 496: -#line 2628 "./util/configparser.y" + case 498: +#line 2638 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5776,52 +5792,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5780 "util/configparser.c" +#line 5796 "util/configparser.c" break; - case 497: -#line 2638 "./util/configparser.y" + case 499: +#line 2648 "./util/configparser.y" { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 5790 "util/configparser.c" +#line 5806 "util/configparser.c" break; - case 498: -#line 2645 "./util/configparser.y" + case 500: +#line 2655 "./util/configparser.y" { OUTYY(("P(master:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5800 "util/configparser.c" +#line 5816 "util/configparser.c" break; - case 499: -#line 2652 "./util/configparser.y" + case 501: +#line 2662 "./util/configparser.y" { OUTYY(("P(url:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5810 "util/configparser.c" +#line 5826 "util/configparser.c" break; - case 500: -#line 2659 "./util/configparser.y" + case 502: +#line 2669 "./util/configparser.y" { OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5821 "util/configparser.c" +#line 5837 "util/configparser.c" break; - case 501: -#line 2667 "./util/configparser.y" + case 503: +#line 2677 "./util/configparser.y" { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5830,11 +5846,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5834 "util/configparser.c" +#line 5850 "util/configparser.c" break; - case 502: -#line 2677 "./util/configparser.y" + case 504: +#line 2687 "./util/configparser.y" { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5843,11 +5859,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5847 "util/configparser.c" +#line 5863 "util/configparser.c" break; - case 503: -#line 2687 "./util/configparser.y" + case 505: +#line 2697 "./util/configparser.y" { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5856,11 +5872,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5860 "util/configparser.c" +#line 5876 "util/configparser.c" break; - case 504: -#line 2697 "./util/configparser.y" + case 506: +#line 2707 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5869,11 +5885,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5873 "util/configparser.c" +#line 5889 "util/configparser.c" break; - case 505: -#line 2707 "./util/configparser.y" + case 507: +#line 2717 "./util/configparser.y" { OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -5911,11 +5927,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5915 "util/configparser.c" +#line 5931 "util/configparser.c" break; - case 506: -#line 2746 "./util/configparser.y" + case 508: +#line 2756 "./util/configparser.y" { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5924,33 +5940,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5928 "util/configparser.c" +#line 5944 "util/configparser.c" break; - case 507: -#line 2756 "./util/configparser.y" + case 509: +#line 2766 "./util/configparser.y" { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 5939 "util/configparser.c" +#line 5955 "util/configparser.c" break; - case 508: -#line 2764 "./util/configparser.y" + case 510: +#line 2774 "./util/configparser.y" { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { fatal_exit("out of memory adding local-data"); } } -#line 5950 "util/configparser.c" +#line 5966 "util/configparser.c" break; - case 509: -#line 2772 "./util/configparser.y" + case 511: +#line 2782 "./util/configparser.y" { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5964,11 +5980,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5968 "util/configparser.c" +#line 5984 "util/configparser.c" break; - case 510: -#line 2787 "./util/configparser.y" + case 512: +#line 2797 "./util/configparser.y" { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5976,19 +5992,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5980 "util/configparser.c" +#line 5996 "util/configparser.c" break; - case 511: -#line 2796 "./util/configparser.y" + case 513: +#line 2806 "./util/configparser.y" { OUTYY(("\nP(remote-control:)\n")); } -#line 5988 "util/configparser.c" +#line 6004 "util/configparser.c" break; - case 522: -#line 2807 "./util/configparser.y" + case 524: +#line 2817 "./util/configparser.y" { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5997,11 +6013,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6001 "util/configparser.c" +#line 6017 "util/configparser.c" break; - case 523: -#line 2817 "./util/configparser.y" + case 525: +#line 2827 "./util/configparser.y" { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6009,79 +6025,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6013 "util/configparser.c" +#line 6029 "util/configparser.c" break; - case 524: -#line 2826 "./util/configparser.y" + case 526: +#line 2836 "./util/configparser.y" { OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6023 "util/configparser.c" +#line 6039 "util/configparser.c" break; - case 525: -#line 2833 "./util/configparser.y" + case 527: +#line 2843 "./util/configparser.y" { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6033 "util/configparser.c" +#line 6049 "util/configparser.c" break; - case 526: -#line 2840 "./util/configparser.y" + case 528: +#line 2850 "./util/configparser.y" { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = (yyvsp[0].str); } -#line 6043 "util/configparser.c" +#line 6059 "util/configparser.c" break; - case 527: -#line 2847 "./util/configparser.y" + case 529: +#line 2857 "./util/configparser.y" { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } -#line 6053 "util/configparser.c" +#line 6069 "util/configparser.c" break; - case 528: -#line 2854 "./util/configparser.y" + case 530: +#line 2864 "./util/configparser.y" { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = (yyvsp[0].str); } -#line 6063 "util/configparser.c" +#line 6079 "util/configparser.c" break; - case 529: -#line 2861 "./util/configparser.y" + case 531: +#line 2871 "./util/configparser.y" { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } -#line 6073 "util/configparser.c" +#line 6089 "util/configparser.c" break; - case 530: -#line 2868 "./util/configparser.y" + case 532: +#line 2878 "./util/configparser.y" { OUTYY(("\nP(dnstap:)\n")); } -#line 6081 "util/configparser.c" +#line 6097 "util/configparser.c" break; - case 552: -#line 2888 "./util/configparser.y" + case 554: +#line 2898 "./util/configparser.y" { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6089,11 +6105,11 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6093 "util/configparser.c" +#line 6109 "util/configparser.c" break; - case 553: -#line 2897 "./util/configparser.y" + case 555: +#line 2907 "./util/configparser.y" { OUTYY(("P(dt_dnstap_bidirectional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6102,31 +6118,31 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6106 "util/configparser.c" +#line 6122 "util/configparser.c" break; - case 554: -#line 2907 "./util/configparser.y" + case 556: +#line 2917 "./util/configparser.y" { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } -#line 6116 "util/configparser.c" +#line 6132 "util/configparser.c" break; - case 555: -#line 2914 "./util/configparser.y" + case 557: +#line 2924 "./util/configparser.y" { OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_ip); cfg_parser->cfg->dnstap_ip = (yyvsp[0].str); } -#line 6126 "util/configparser.c" +#line 6142 "util/configparser.c" break; - case 556: -#line 2921 "./util/configparser.y" + case 558: +#line 2931 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6134,51 +6150,51 @@ yyreduce: else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6138 "util/configparser.c" +#line 6154 "util/configparser.c" break; - case 557: -#line 2930 "./util/configparser.y" + case 559: +#line 2940 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_server_name); cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str); } -#line 6148 "util/configparser.c" +#line 6164 "util/configparser.c" break; - case 558: -#line 2937 "./util/configparser.y" + case 560: +#line 2947 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_cert_bundle); cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str); } -#line 6158 "util/configparser.c" +#line 6174 "util/configparser.c" break; - case 559: -#line 2944 "./util/configparser.y" + case 561: +#line 2954 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_key_file); cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str); } -#line 6168 "util/configparser.c" +#line 6184 "util/configparser.c" break; - case 560: -#line 2951 "./util/configparser.y" + case 562: +#line 2961 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_cert_file); cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str); } -#line 6178 "util/configparser.c" +#line 6194 "util/configparser.c" break; - case 561: -#line 2958 "./util/configparser.y" + case 563: +#line 2968 "./util/configparser.y" { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6186,11 +6202,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6190 "util/configparser.c" +#line 6206 "util/configparser.c" break; - case 562: -#line 2967 "./util/configparser.y" + case 564: +#line 2977 "./util/configparser.y" { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6198,31 +6214,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6202 "util/configparser.c" +#line 6218 "util/configparser.c" break; - case 563: -#line 2976 "./util/configparser.y" + case 565: +#line 2986 "./util/configparser.y" { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } -#line 6212 "util/configparser.c" +#line 6228 "util/configparser.c" break; - case 564: -#line 2983 "./util/configparser.y" + case 566: +#line 2993 "./util/configparser.y" { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } -#line 6222 "util/configparser.c" +#line 6238 "util/configparser.c" break; - case 565: -#line 2990 "./util/configparser.y" + case 567: +#line 3000 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6231,11 +6247,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6235 "util/configparser.c" +#line 6251 "util/configparser.c" break; - case 566: -#line 3000 "./util/configparser.y" + case 568: +#line 3010 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6244,11 +6260,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6248 "util/configparser.c" +#line 6264 "util/configparser.c" break; - case 567: -#line 3010 "./util/configparser.y" + case 569: +#line 3020 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6257,11 +6273,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6261 "util/configparser.c" +#line 6277 "util/configparser.c" break; - case 568: -#line 3020 "./util/configparser.y" + case 570: +#line 3030 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6270,11 +6286,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6274 "util/configparser.c" +#line 6290 "util/configparser.c" break; - case 569: -#line 3030 "./util/configparser.y" + case 571: +#line 3040 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6283,11 +6299,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6287 "util/configparser.c" +#line 6303 "util/configparser.c" break; - case 570: -#line 3040 "./util/configparser.y" + case 572: +#line 3050 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6296,47 +6312,47 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6300 "util/configparser.c" +#line 6316 "util/configparser.c" break; - case 571: -#line 3050 "./util/configparser.y" + case 573: +#line 3060 "./util/configparser.y" { OUTYY(("\nP(python:)\n")); } -#line 6308 "util/configparser.c" +#line 6324 "util/configparser.c" break; - case 575: -#line 3059 "./util/configparser.y" + case 577: +#line 3069 "./util/configparser.y" { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6318 "util/configparser.c" +#line 6334 "util/configparser.c" break; - case 576: -#line 3065 "./util/configparser.y" + case 578: +#line 3075 "./util/configparser.y" { OUTYY(("\nP(dynlib:)\n")); } -#line 6326 "util/configparser.c" +#line 6342 "util/configparser.c" break; - case 580: -#line 3074 "./util/configparser.y" + case 582: +#line 3084 "./util/configparser.y" { OUTYY(("P(dynlib-file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6336 "util/configparser.c" +#line 6352 "util/configparser.c" break; - case 581: -#line 3080 "./util/configparser.y" + case 583: +#line 3090 "./util/configparser.y" { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6345,21 +6361,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6349 "util/configparser.c" +#line 6365 "util/configparser.c" break; - case 582: -#line 3090 "./util/configparser.y" + case 584: +#line 3100 "./util/configparser.y" { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = (yyvsp[0].str); } -#line 6359 "util/configparser.c" +#line 6375 "util/configparser.c" break; - case 583: -#line 3097 "./util/configparser.y" + case 585: +#line 3107 "./util/configparser.y" { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -6367,30 +6383,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 6371 "util/configparser.c" +#line 6387 "util/configparser.c" break; - case 584: -#line 3106 "./util/configparser.y" + case 586: +#line 3116 "./util/configparser.y" { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 6382 "util/configparser.c" +#line 6398 "util/configparser.c" break; - case 585: -#line 3114 "./util/configparser.y" + case 587: +#line 3124 "./util/configparser.y" { OUTYY(("\nP(dnscrypt:)\n")); } -#line 6390 "util/configparser.c" +#line 6406 "util/configparser.c" break; - case 598: -#line 3130 "./util/configparser.y" + case 600: +#line 3140 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6398,11 +6414,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6402 "util/configparser.c" +#line 6418 "util/configparser.c" break; - case 599: -#line 3140 "./util/configparser.y" + case 601: +#line 3150 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6410,21 +6426,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6414 "util/configparser.c" +#line 6430 "util/configparser.c" break; - case 600: -#line 3149 "./util/configparser.y" + case 602: +#line 3159 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } -#line 6424 "util/configparser.c" +#line 6440 "util/configparser.c" break; - case 601: -#line 3156 "./util/configparser.y" + case 603: +#line 3166 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -6432,21 +6448,21 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 6436 "util/configparser.c" +#line 6452 "util/configparser.c" break; - case 602: -#line 3165 "./util/configparser.y" + case 604: +#line 3175 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); } -#line 6446 "util/configparser.c" +#line 6462 "util/configparser.c" break; - case 603: -#line 3172 "./util/configparser.y" + case 605: +#line 3182 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -6454,22 +6470,22 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 6458 "util/configparser.c" +#line 6474 "util/configparser.c" break; - case 604: -#line 3181 "./util/configparser.y" + case 606: +#line 3191 "./util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6469 "util/configparser.c" +#line 6485 "util/configparser.c" break; - case 605: -#line 3189 "./util/configparser.y" + case 607: +#line 3199 "./util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6481,22 +6497,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6485 "util/configparser.c" +#line 6501 "util/configparser.c" break; - case 606: -#line 3202 "./util/configparser.y" + case 608: +#line 3212 "./util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6496 "util/configparser.c" +#line 6512 "util/configparser.c" break; - case 607: -#line 3210 "./util/configparser.y" + case 609: +#line 3220 "./util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6508,19 +6524,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6512 "util/configparser.c" +#line 6528 "util/configparser.c" break; - case 608: -#line 3223 "./util/configparser.y" + case 610: +#line 3233 "./util/configparser.y" { OUTYY(("\nP(cachedb:)\n")); } -#line 6520 "util/configparser.c" +#line 6536 "util/configparser.c" break; - case 617: -#line 3234 "./util/configparser.y" + case 619: +#line 3244 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -6531,11 +6547,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6535 "util/configparser.c" +#line 6551 "util/configparser.c" break; - case 618: -#line 3246 "./util/configparser.y" + case 620: +#line 3256 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -6546,11 +6562,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6550 "util/configparser.c" +#line 6566 "util/configparser.c" break; - case 619: -#line 3258 "./util/configparser.y" + case 621: +#line 3268 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -6561,11 +6577,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6565 "util/configparser.c" +#line 6581 "util/configparser.c" break; - case 620: -#line 3270 "./util/configparser.y" + case 622: +#line 3280 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -6579,11 +6595,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6583 "util/configparser.c" +#line 6599 "util/configparser.c" break; - case 621: -#line 3285 "./util/configparser.y" + case 623: +#line 3295 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -6595,11 +6611,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6599 "util/configparser.c" +#line 6615 "util/configparser.c" break; - case 622: -#line 3298 "./util/configparser.y" + case 624: +#line 3308 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str))); @@ -6611,11 +6627,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6615 "util/configparser.c" +#line 6631 "util/configparser.c" break; - case 623: -#line 3311 "./util/configparser.y" + case 625: +#line 3321 "./util/configparser.y" { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -6625,19 +6641,19 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6629 "util/configparser.c" +#line 6645 "util/configparser.c" break; - case 624: -#line 3322 "./util/configparser.y" + case 626: +#line 3332 "./util/configparser.y" { OUTYY(("\nP(ipset:)\n")); } -#line 6637 "util/configparser.c" +#line 6653 "util/configparser.c" break; - case 629: -#line 3331 "./util/configparser.y" + case 631: +#line 3341 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); @@ -6651,11 +6667,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6655 "util/configparser.c" +#line 6671 "util/configparser.c" break; - case 630: -#line 3346 "./util/configparser.y" + case 632: +#line 3356 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); @@ -6669,11 +6685,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6673 "util/configparser.c" +#line 6689 "util/configparser.c" break; -#line 6677 "util/configparser.c" +#line 6693 "util/configparser.c" default: break; } @@ -6905,7 +6921,7 @@ yyreturn: #endif return yyresult; } -#line 3360 "./util/configparser.y" +#line 3370 "./util/configparser.y" /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 79ed369c4..bf8fa618a 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -347,7 +347,8 @@ extern int yydebug; VAR_DYNLIB = 553, VAR_DYNLIB_FILE = 554, VAR_EDNS_CLIENT_TAG = 555, - VAR_EDNS_CLIENT_TAG_OPCODE = 556 + VAR_EDNS_CLIENT_TAG_OPCODE = 556, + VAR_ZONEMD_PERMISSIVE_MODE = 557 }; #endif /* Tokens. */ @@ -650,6 +651,7 @@ extern int yydebug; #define VAR_DYNLIB_FILE 554 #define VAR_EDNS_CLIENT_TAG 555 #define VAR_EDNS_CLIENT_TAG_OPCODE 556 +#define VAR_ZONEMD_PERMISSIVE_MODE 557 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -659,7 +661,7 @@ union YYSTYPE char* str; -#line 663 "util/configparser.h" +#line 665 "util/configparser.h" }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index 340fc0f5d..8067d04ef 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -179,6 +179,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_TLS_SESSION_TICKET_KEYS VAR_RPZ VAR_TAGS VAR_RPZ_ACTION_OVERRIDE %token VAR_RPZ_CNAME_OVERRIDE VAR_RPZ_LOG VAR_RPZ_LOG_NAME %token VAR_DYNLIB VAR_DYNLIB_FILE VAR_EDNS_CLIENT_TAG VAR_EDNS_CLIENT_TAG_OPCODE +%token VAR_ZONEMD_PERMISSIVE_MODE %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -292,7 +293,7 @@ content_server: server_num_threads | server_verbosity | server_port | server_stream_wait_size | server_tls_ciphers | server_tls_ciphersuites | server_tls_session_ticket_keys | server_tls_use_sni | server_edns_client_tag | - server_edns_client_tag_opcode + server_edns_client_tag_opcode | server_zonemd_permissive_mode ; stubstart: VAR_STUB_ZONE { @@ -1945,6 +1946,15 @@ server_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG cfg_parser->cfg->val_nsec3_key_iterations = $2; } ; +server_zonemd_permissive_mode: VAR_ZONEMD_PERMISSIVE_MODE STRING_ARG + { + OUTYY(("P(server_zonemd_permissive_mode:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->zonemd_permissive_mode = (strcmp($2, "yes")==0); + free($2); + } + ; server_add_holddown: VAR_ADD_HOLDDOWN STRING_ARG { OUTYY(("P(server_add_holddown:%s)\n", $2)); From 2b9569c7feeac7d6d2e98dd30291582952f89d32 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 23 Oct 2020 14:38:57 +0200 Subject: [PATCH 051/168] zonemd, fix config_get_option for zonemd-permissive-mode and unit test for zonemd-permissive-mode. --- testdata/auth_zonemd_permissive_mode.rpl | 186 +++++++++++++++++++++++ util/config_file.c | 2 +- 2 files changed, 187 insertions(+), 1 deletion(-) create mode 100644 testdata/auth_zonemd_permissive_mode.rpl diff --git a/testdata/auth_zonemd_permissive_mode.rpl b/testdata/auth_zonemd_permissive_mode.rpl new file mode 100644 index 000000000..4c75504f3 --- /dev/null +++ b/testdata/auth_zonemd_permissive_mode.rpl @@ -0,0 +1,186 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + zonemd-permissive-mode: yes + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +; good zonemd +;example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +; wrong zonemd +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D7AAAAA +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with ZONEMD failure from zonefile + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 127.0.0.1 +ENTRY_END + +SCENARIO_END diff --git a/util/config_file.c b/util/config_file.c index af0aaa3c3..97aa01896 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -1039,7 +1039,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_DEC(opt, "serve-expired-reply-ttl", serve_expired_reply_ttl) else O_DEC(opt, "serve-expired-client-timeout", serve_expired_client_timeout) else O_STR(opt, "val-nsec3-keysize-iterations",val_nsec3_key_iterations) - else O_YNO(opt, "zonemd_permissive_mode", zonemd_permissive_mode) + else O_YNO(opt, "zonemd-permissive-mode", zonemd_permissive_mode) else O_UNS(opt, "add-holddown", add_holddown) else O_UNS(opt, "del-holddown", del_holddown) else O_UNS(opt, "keep-missing", keep_missing) From 8e53f0b14f0ddf863e4b21451b04ea42722a26de Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 23 Oct 2020 14:40:00 +0200 Subject: [PATCH 052/168] zonemd, unit test with correct title. --- testdata/auth_zonemd_permissive_mode.rpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testdata/auth_zonemd_permissive_mode.rpl b/testdata/auth_zonemd_permissive_mode.rpl index 4c75504f3..0df0a2951 100644 --- a/testdata/auth_zonemd_permissive_mode.rpl +++ b/testdata/auth_zonemd_permissive_mode.rpl @@ -47,7 +47,7 @@ stub-zone: stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END -SCENARIO_BEGIN Test authority zone with ZONEMD failure from zonefile +SCENARIO_BEGIN Test zonemd permissive mode ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 From 94ac072f9b27d5e0ab175fb9ed528fe977ea1de3 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 26 Oct 2020 15:37:43 +0100 Subject: [PATCH 053/168] zonemd, zonemd-reject-absence config for an auth-zone rejects the zone if no ZONEMD is present. --- doc/example.conf.in | 1 + doc/unbound.conf.5.in | 13 + services/authzone.c | 3 +- services/authzone.h | 2 + util/config_file.h | 2 + util/configlexer.c | 4185 +++++++++++++++++++++-------------------- util/configlexer.lex | 1 + util/configparser.c | 2521 +++++++++++++------------ util/configparser.h | 6 +- util/configparser.y | 15 +- 10 files changed, 3411 insertions(+), 3338 deletions(-) diff --git a/doc/example.conf.in b/doc/example.conf.in index 6e6bf781b..ce8b22e57 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -998,6 +998,7 @@ remote-control: # name: "example.org" # for-downstream: yes # for-upstream: yes +# zonemd-reject-absence: no # zonefile: "example.org.zone" # Views diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 6b4fbef56..d5128f1c4 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -1829,6 +1829,19 @@ to the authority servers for this zone, it'll fetch the data directly from the zone data. Turn it on when you want unbound to provide recursion for downstream clients, and use the zone data as a local copy to speed up lookups. .TP +.B zonemd\-reject\-absence: \fI +Enable this option to reject the absence of the ZONEMD record. Without it, +when zonemd is not there it is not checked. It is useful to enable for a +nonDNSSEC signed zone where the operator wants to require the verification +of a ZONEMD, hence a missing ZONEMD is a failure. The action upon +failure is controlled by the \fBzonemd\-permissive\-mode\fR option, for +log only or also block the zone. The default is no. +.IP +Without the option absence of a ZONEMD is only a failure when the zone is +DNSSEC signed, and we have a trust anchor, and the DNSSEC verification of +the absence of the ZONEMD fails. With the option enabled, the absence of +a ZONEMD is always a failure, also for nonDNSSEC signed zones. +.TP .B zonefile: \fI The filename where the zone is stored. If not given then no zonefile is used. If the file does not exist or is empty, unbound will attempt to fetch zone diff --git a/services/authzone.c b/services/authzone.c index 4727b0546..252d2884c 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -2047,6 +2047,7 @@ auth_zones_cfg(struct auth_zones* az, struct config_auth* c) z->for_downstream = c->for_downstream; z->for_upstream = c->for_upstream; z->fallback_enabled = c->fallback_enabled; + z->zonemd_reject_absence = c->zonemd_reject_absence; if(c->isrpz && !z->rpz){ if(!(z->rpz = rpz_create(c))){ fatal_exit("Could not setup RPZ zones"); @@ -7887,7 +7888,7 @@ auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env, } } - if(zonemd_absent && 0) { + if(zonemd_absent && z->zonemd_reject_absence) { auth_zone_zonemd_fail(z, env, "ZONEMD absent and that is not allowed by config", NULL, result); return; } diff --git a/services/authzone.h b/services/authzone.h index 9452a3db2..b162b4ef5 100644 --- a/services/authzone.h +++ b/services/authzone.h @@ -132,6 +132,8 @@ struct auth_zone { /** for upstream: this zone answers queries that unbound intends to * send upstream. */ int for_upstream; + /** reject absence of ZONEMD records */ + int zonemd_reject_absence; /** RPZ zones */ struct rpz* rpz; /** store the env (worker thread specific) for the zonemd callbacks diff --git a/util/config_file.h b/util/config_file.h index d707bac19..1e71b9367 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -710,6 +710,8 @@ struct config_auth { /** Always reply with this CNAME target if the cname override action is * used */ char* rpz_cname; + /** Reject absence of ZONEMD records, zone must have one */ + int zonemd_reject_absence; }; /** diff --git a/util/configlexer.c b/util/configlexer.c index 0aac2586e..003978879 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -354,8 +354,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 337 -#define YY_END_OF_BUFFER 338 +#define YY_NUM_RULES 338 +#define YY_END_OF_BUFFER 339 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,371 +363,373 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[3300] = +static const flex_int16_t yy_accept[3315] = { 0, - 1, 1, 311, 311, 315, 315, 319, 319, 323, 323, - 1, 1, 327, 327, 331, 331, 338, 335, 1, 309, - 309, 336, 2, 336, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 311, 312, 312, 313, - 336, 315, 316, 316, 317, 336, 322, 319, 320, 320, - 321, 336, 323, 324, 324, 325, 336, 334, 310, 2, - 314, 336, 334, 330, 327, 328, 328, 329, 336, 331, - 332, 332, 333, 336, 335, 0, 1, 2, 2, 2, - 2, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 1, 1, 312, 312, 316, 316, 320, 320, 324, 324, + 1, 1, 328, 328, 332, 332, 339, 336, 1, 310, + 310, 337, 2, 337, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 312, 313, 313, 314, + 337, 316, 317, 317, 318, 337, 323, 320, 321, 321, + 322, 337, 324, 325, 325, 326, 337, 335, 311, 2, + 315, 337, 335, 331, 328, 329, 329, 330, 337, 332, + 333, 333, 334, 337, 336, 0, 1, 2, 2, 2, + 2, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 311, 0, 315, - 0, 322, 0, 319, 323, 0, 334, 0, 2, 2, - 334, 330, 0, 327, 331, 0, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 312, 0, 316, + 0, 323, 0, 320, 324, 0, 335, 0, 2, 2, + 335, 331, 0, 328, 332, 0, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 334, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 335, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 124, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 133, 335, 335, 335, 335, 335, 335, - 335, 334, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 124, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 133, 336, 336, 336, 336, 336, 336, + 336, 335, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 108, 335, 335, 335, 335, 335, 335, 8, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 125, 335, 335, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 108, 336, 336, 336, 336, 336, 336, 8, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 125, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 138, 335, 335, - 334, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 302, 335, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 138, 336, 336, + 335, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 303, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 334, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 64, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 238, - 335, 14, 15, 335, 19, 18, 335, 335, 222, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 131, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 336, 335, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 64, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 239, + 336, 14, 15, 336, 19, 18, 336, 336, 223, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 131, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 220, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 3, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 334, 335, 335, 335, - 335, 335, 335, 335, 296, 335, 335, 295, 335, 335, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 221, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 3, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 335, 336, 336, 336, + 336, 336, 336, 336, 297, 336, 336, 296, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 318, 335, 335, 335, 335, - 335, 335, 335, 335, 63, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 67, 335, 269, 335, 335, 335, 335, 335, 335, - 335, 335, 303, 304, 335, 335, 335, 335, 335, 68, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 319, 336, 336, 336, 336, + 336, 336, 336, 336, 63, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 67, 336, 270, 336, 336, 336, 336, 336, 336, + 336, 336, 304, 305, 336, 336, 336, 336, 336, 68, - 335, 335, 132, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 128, 335, 335, - 335, 335, 335, 335, 335, 335, 209, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 21, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 157, 335, 335, 335, - 334, 318, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 336, 336, 132, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 128, 336, 336, + 336, 336, 336, 336, 336, 336, 210, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 21, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 157, 336, 336, 336, + 336, 335, 319, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 106, 335, 335, 335, 335, 335, 335, - 335, 277, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 180, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 156, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 336, 336, 336, 336, 106, 336, 336, 336, 336, 336, + 336, 336, 278, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 180, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 156, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 105, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 32, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 33, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 65, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 130, 335, 334, 335, 335, - 335, 335, 335, 123, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 66, + 336, 336, 336, 105, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 32, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 33, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 65, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 130, 336, 336, 335, + 336, 336, 336, 336, 336, 123, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 242, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 181, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 54, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 336, 66, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 243, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 181, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 54, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 260, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 58, 335, 59, 335, 335, 335, - 335, 335, 109, 335, 110, 335, 335, 335, 335, 107, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 7, 335, - 335, 334, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 261, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 58, 336, 59, 336, + 336, 336, 336, 336, 109, 336, 110, 336, 336, 336, + 336, 107, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 7, 336, 336, 336, 335, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 231, 335, 335, 335, 335, 159, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 243, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 45, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 55, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 201, 335, 200, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 336, 336, 336, 232, 336, 336, 336, 336, 159, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 244, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 45, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 55, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 202, 336, 201, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 16, 17, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 69, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 208, 335, 335, 335, 335, 335, 335, 112, 335, 111, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 192, 335, 335, 335, 335, 335, 335, 335, 335, - 139, 335, 334, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 100, 335, 335, 335, 335, 335, 335, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 16, 17, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 69, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 209, 336, 336, 336, 336, 336, 336, + 112, 336, 111, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 193, 336, 336, 336, 336, 336, + 336, 336, 336, 139, 336, 336, 335, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 100, 336, 336, - 335, 335, 335, 89, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 221, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 93, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 62, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 195, - 196, 335, 335, 335, 271, 335, 335, 335, 335, 335, + 336, 336, 336, 336, 336, 336, 336, 89, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 222, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 93, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 62, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 196, 197, 336, 336, 336, 272, 336, - 335, 335, 335, 335, 335, 335, 335, 6, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 275, - 335, 335, 335, 335, 335, 335, 297, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 42, 335, 335, - 335, 335, 44, 335, 335, 335, 335, 335, 335, 335, - 335, 52, 335, 335, 335, 335, 335, 335, 335, 335, - 334, 335, 188, 335, 335, 335, 134, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 213, 335, 189, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 6, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 276, 336, 336, 336, 336, 336, 336, + 298, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 42, 336, 336, 336, 336, 44, 336, 336, 336, + 336, 336, 336, 336, 336, 52, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 335, 336, 189, 336, 336, + 336, 134, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 228, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 53, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 136, 117, 335, 118, 335, - 335, 335, 116, 335, 335, 335, 335, 335, 335, 335, - 335, 154, 335, 335, 50, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 259, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 190, 335, 335, 335, 335, 335, 193, 335, 199, - 335, 335, 335, 335, 335, 227, 335, 335, 335, 335, + 336, 336, 214, 336, 190, 336, 336, 336, 229, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 53, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 136, 117, 336, 118, 336, 336, 336, 116, 336, 336, + 336, 336, 336, 336, 336, 336, 154, 336, 336, 50, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 260, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 191, 336, 336, 336, + 336, 336, 194, 336, 200, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 104, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 129, - 335, 335, 335, 335, 335, 335, 60, 335, 335, 335, - 26, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 20, 335, 335, 335, 335, 335, 335, 27, 36, 335, - 164, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 334, 335, 335, 335, 335, - 335, 335, 77, 79, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 279, 335, 335, + 228, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 104, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 129, 336, 336, 336, 336, 336, + 336, 60, 336, 336, 336, 26, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 20, 336, 336, 336, 336, + 336, 336, 27, 36, 336, 164, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 335, 336, 336, 336, 336, 336, 336, 77, 79, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 239, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 119, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 153, 335, 46, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 290, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 158, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 219, 335, 335, 335, 335, 335, 335, 335, + 336, 336, 336, 280, 336, 336, 336, 336, 240, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 119, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 153, 336, 46, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 291, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 158, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 220, 336, - 335, 335, 300, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 175, 335, 335, 335, 335, 335, - 335, 335, 335, 113, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 170, 335, 182, 335, 335, 335, 335, - 335, 334, 335, 142, 335, 335, 335, 335, 335, 99, - 335, 335, 335, 335, 211, 335, 335, 335, 335, 335, - 335, 229, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 251, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 135, + 336, 336, 336, 336, 336, 336, 336, 336, 301, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 175, 336, 336, 336, 336, 336, 336, 336, 336, 113, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 170, + 336, 182, 336, 336, 336, 336, 336, 336, 335, 336, + 142, 336, 336, 336, 336, 336, 99, 336, 336, 336, + 336, 212, 336, 336, 336, 336, 336, 336, 230, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 252, 336, 336, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 174, 335, 335, 335, 335, 335, - 335, 80, 335, 81, 335, 335, 335, 335, 335, 61, - 293, 335, 335, 335, 335, 335, 88, 183, 335, 202, - 335, 232, 335, 335, 194, 272, 335, 335, 335, 335, - 335, 73, 335, 185, 335, 335, 335, 335, 335, 9, - 335, 335, 335, 103, 335, 335, 335, 335, 264, 335, - 335, 335, 335, 210, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 336, 336, 336, 336, 336, 336, 135, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 174, 336, 336, 336, 336, 336, 336, 80, 336, + 81, 336, 336, 336, 336, 336, 61, 294, 336, 336, + 336, 336, 336, 88, 183, 336, 203, 336, 233, 336, + 336, 195, 273, 336, 336, 336, 336, 336, 73, 336, + 185, 336, 336, 336, 336, 336, 9, 336, 336, 336, + 103, 336, 336, 336, 336, 265, 336, 336, 336, 336, + 211, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 334, 335, 335, 335, 335, 173, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 160, 335, 278, 335, - 335, 335, 335, 335, 250, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 223, 335, 335, 307, - 335, 335, 335, 270, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 294, 335, 184, 335, 335, 335, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 335, 336, + 336, 336, 336, 173, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 160, 336, 279, 336, 336, 336, + 336, 336, 251, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 224, 336, 336, 308, 336, 336, + 336, 271, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 72, 74, 335, 335, 335, 335, - 335, 335, 335, 102, 335, 335, 335, 335, 262, 335, - 335, 335, 335, 274, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 215, 34, 28, 30, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 35, 335, - 29, 31, 335, 335, 335, 335, 335, 335, 335, 335, - 98, 335, 335, 335, 335, 335, 335, 335, 334, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 217, 214, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 336, 336, 295, 336, 184, 336, 336, 336, 336, 336, + 336, 336, 72, 74, 336, 336, 336, 336, 336, 336, + 336, 102, 336, 336, 336, 336, 263, 336, 336, 336, + 336, 275, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 216, 34, 28, 30, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 35, 336, 29, 31, + 336, 336, 336, 336, 336, 336, 336, 336, 98, 336, + 336, 336, 336, 336, 336, 336, 336, 335, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 218, + 215, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 71, 335, 335, 335, 137, 335, 120, 335, 335, 335, - 335, 335, 335, 335, 335, 155, 47, 335, 335, 335, - 326, 13, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 288, 335, 291, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 12, 335, 335, 22, 335, - 335, 335, 268, 335, 335, 335, 335, 276, 335, 335, - 335, 75, 335, 225, 335, 335, 335, 335, 216, 335, - 335, 70, 335, 335, 335, 335, 23, 335, 43, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 169, 168, 335, 326, 335, 335, 335, 335, 335, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 71, + 336, 336, 336, 137, 336, 120, 336, 336, 336, 336, + 336, 336, 336, 336, 155, 47, 336, 336, 336, 327, + 13, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 289, 336, 292, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 12, 336, 336, 22, 336, 336, + 336, 269, 336, 336, 336, 336, 277, 336, 336, 336, + 75, 336, 226, 336, 336, 336, 336, 217, 336, 336, + 70, 336, 336, 336, 336, 23, 336, 43, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 218, 212, 335, 230, 335, 335, - 280, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 82, 335, 335, 335, 335, 263, 335, - 335, 335, 335, 198, 335, 335, 335, 335, 224, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 298, 299, - 166, 335, 335, 76, 335, 335, 335, 335, 176, 335, - 335, 114, 115, 335, 335, 335, 335, 161, 335, 163, - 335, 203, 335, 335, 335, 335, 167, 335, 335, 335, + 169, 168, 336, 336, 327, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 219, 213, 336, 231, 336, 336, + 281, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 82, 336, 336, 336, 336, 264, 336, + 336, 336, 336, 199, 336, 336, 336, 336, 225, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 299, 300, + 166, 336, 336, 76, 336, 336, 336, 336, 176, 336, + 336, 114, 115, 336, 336, 336, 336, 161, 336, 163, - 233, 335, 335, 335, 335, 335, 335, 335, 144, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 241, 335, 335, 335, 335, 335, 335, 335, 335, - 24, 335, 273, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 86, 204, 335, - 335, 261, 335, 292, 335, 197, 335, 335, 335, 335, - 56, 335, 335, 335, 335, 4, 335, 335, 335, 335, - 127, 143, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 236, 37, 38, 335, 335, 335, 335, 335, 335, + 336, 204, 336, 336, 336, 336, 167, 336, 336, 336, + 336, 234, 336, 336, 336, 336, 336, 336, 336, 144, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 242, 336, 336, 336, 336, 336, 336, 336, + 336, 24, 336, 274, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 86, 205, + 336, 336, 262, 336, 293, 336, 198, 336, 336, 336, + 336, 56, 336, 336, 336, 336, 4, 336, 336, 336, + 336, 127, 143, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 281, 335, 335, 335, 335, 335, 335, 335, 249, - 335, 335, 335, 335, 335, 335, 335, 335, 207, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 85, 335, 57, 267, 335, 237, 335, 335, 335, - 335, 11, 335, 335, 335, 335, 335, 335, 126, 335, - 335, 335, 335, 205, 90, 335, 40, 335, 335, 335, - 335, 335, 335, 335, 335, 172, 335, 335, 335, 335, - 335, 335, 146, 335, 335, 335, 335, 240, 335, 335, - 335, 335, 335, 248, 335, 335, 335, 335, 140, 335, - 335, 335, 121, 122, 335, 335, 335, 92, 96, 91, + 336, 336, 336, 237, 37, 38, 336, 336, 336, 336, + 336, 336, 336, 282, 336, 336, 336, 336, 336, 336, + 336, 250, 336, 336, 336, 336, 336, 336, 336, 336, + 208, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 85, 336, 57, 268, 336, 238, 336, + 336, 336, 336, 11, 336, 336, 336, 336, 336, 336, + 126, 336, 336, 336, 336, 206, 90, 336, 40, 336, + 336, 336, 336, 336, 336, 336, 336, 172, 336, 336, + 336, 336, 336, 336, 336, 146, 336, 336, 336, 336, + 241, 336, 336, 336, 336, 336, 249, 336, 336, 336, - 335, 335, 335, 335, 83, 335, 335, 335, 335, 335, - 10, 335, 335, 335, 265, 301, 335, 335, 335, 335, - 306, 39, 335, 335, 335, 335, 335, 171, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 97, 95, 335, 51, 335, 335, 84, 289, - 335, 335, 335, 335, 335, 335, 335, 191, 335, 335, - 335, 335, 335, 206, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 162, 78, 335, 335, 335, 335, 335, - 282, 335, 335, 335, 335, 335, 335, 335, 245, 335, + 336, 140, 336, 336, 336, 121, 122, 336, 336, 336, + 92, 96, 91, 336, 336, 336, 336, 83, 336, 336, + 336, 336, 336, 10, 336, 336, 336, 266, 302, 336, + 336, 336, 336, 307, 39, 336, 336, 336, 336, 336, + 171, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 97, 95, 336, 51, + 336, 336, 84, 290, 336, 336, 336, 336, 336, 336, + 336, 192, 336, 336, 336, 336, 336, 207, 336, 336, + 336, 336, 336, 336, 336, 188, 336, 336, 162, 78, - 335, 244, 141, 308, 335, 94, 48, 335, 147, 148, - 151, 152, 149, 150, 87, 335, 266, 335, 335, 335, - 335, 165, 335, 335, 335, 335, 187, 335, 235, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 178, 177, 41, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 101, 335, 234, 335, 258, - 286, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 49, 5, 335, 335, 226, 335, 335, + 336, 336, 336, 336, 336, 283, 336, 336, 336, 336, + 336, 336, 336, 246, 336, 336, 245, 141, 309, 336, + 94, 48, 336, 147, 148, 151, 152, 149, 150, 87, + 336, 267, 336, 336, 336, 336, 165, 336, 336, 336, + 336, 187, 336, 236, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 178, 177, 41, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 101, 336, 235, 336, 259, 287, 336, 336, 336, 336, - 287, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 246, 25, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 247, 335, 335, 335, 145, 335, - 335, 335, 335, 335, 335, 335, 335, 179, 335, 186, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 283, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 305, 335, 335, - 254, 335, 335, 335, 335, 335, 284, 335, 335, 335, - 335, 335, 335, 285, 335, 335, 335, 252, 335, 255, - 256, 335, 335, 335, 335, 335, 253, 257, 0 + 336, 336, 336, 336, 336, 336, 336, 336, 49, 5, + 336, 336, 227, 336, 336, 288, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 247, 25, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 248, + 336, 336, 336, 145, 336, 336, 336, 336, 336, 336, + 336, 336, 179, 336, 186, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 284, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 306, 336, 336, 255, 336, 336, 336, 336, + 336, 285, 336, 336, 336, 336, 336, 336, 286, 336, + 336, 336, 253, 336, 256, 257, 336, 336, 336, 336, + 336, 254, 258, 0 } ; static const YY_CHAR yy_ec[256] = @@ -770,17 +772,17 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[3318] = +static const flex_int16_t yy_base[3333] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 96, 118, 124, 136, 3276, 3137, 81, 6447, - 6447, 6447, 129, 52, 130, 63, 131, 152, 70, 140, + 90, 112, 96, 118, 124, 136, 3501, 3446, 81, 6475, + 6475, 6475, 129, 52, 130, 63, 131, 152, 70, 140, 149, 156, 57, 88, 76, 173, 175, 95, 184, 145, - 185, 205, 194, 204, 178, 123, 2962, 6447, 6447, 6447, - 107, 2759, 6447, 6447, 6447, 154, 2674, 2563, 6447, 6447, - 6447, 226, 2504, 6447, 6447, 6447, 163, 2331, 6447, 238, - 6447, 242, 148, 1978, 1862, 6447, 6447, 6447, 246, 1688, - 6447, 6447, 6447, 250, 1273, 254, 219, 0, 258, 0, + 185, 205, 194, 204, 178, 123, 3377, 6475, 6475, 6475, + 107, 3198, 6475, 6475, 6475, 154, 3006, 2683, 6475, 6475, + 6475, 226, 2556, 6475, 6475, 6475, 163, 2418, 6475, 238, + 6475, 242, 148, 2195, 2165, 6475, 6475, 6475, 246, 1973, + 6475, 6475, 6475, 250, 1850, 254, 219, 0, 258, 0, 0, 165, 250, 191, 215, 243, 252, 256, 92, 260, 261, 262, 264, 265, 266, 273, 270, 277, 278, 281, @@ -788,9 +790,9 @@ static const flex_int16_t yy_base[3318] = 313, 314, 307, 323, 317, 312, 328, 326, 330, 334, 337, 340, 342, 343, 344, 346, 349, 354, 348, 356, 364, 357, 361, 359, 372, 376, 365, 360, 377, 380, - 384, 385, 387, 388, 391, 399, 389, 1153, 411, 1093, - 415, 953, 422, 901, 689, 426, 406, 430, 434, 0, - 411, 280, 438, 233, 181, 442, 430, 442, 419, 438, + 384, 385, 387, 388, 391, 399, 389, 1688, 411, 1273, + 415, 1153, 422, 1105, 953, 426, 889, 430, 434, 0, + 411, 689, 438, 418, 280, 442, 430, 442, 419, 438, 439, 441, 440, 443, 444, 445, 446, 449, 463, 455, 456, 467, 471, 472, 469, 476, 474, 460, 482, 488, @@ -810,9 +812,9 @@ static const flex_int16_t yy_base[3318] = 745, 743, 747, 749, 750, 766, 754, 739, 759, 767, 758, 760, 768, 774, 793, 779, 781, 789, 790, 791, 795, 797, 805, 807, 796, 809, 803, 810, 812, 813, - 822, 818, 6447, 817, 820, 833, 826, 834, 835, 836, + 822, 818, 6475, 817, 820, 833, 826, 834, 835, 836, 841, 842, 823, 849, 847, 848, 852, 874, 856, 858, - 854, 863, 866, 6447, 864, 868, 898, 870, 872, 892, + 854, 863, 866, 6475, 864, 868, 898, 870, 872, 892, 896, 884, 887, 888, 899, 904, 921, 894, 907, 911, 922, 919, 918, 928, 929, 930, 931, 939, 936, 932, @@ -822,21 +824,21 @@ static const flex_int16_t yy_base[3318] = 1010, 1014, 1017, 1019, 1011, 1021, 1012, 1027, 1023, 1029, 1032, 1040, 1035, 1036, 1037, 1038, 1041, 1044, 1047, 1048, 1049, 1050, 1052, 1056, 1054, 1063, 1065, 1057, 1071, 1061, - 6447, 1073, 1069, 1076, 1077, 1075, 1079, 6447, 1080, 1081, + 6475, 1073, 1069, 1076, 1077, 1075, 1079, 6475, 1080, 1081, 1082, 1087, 1094, 1096, 1103, 1104, 1092, 1107, 1108, 1110, 1112, 1119, 1114, 1117, 1122, 1121, 1123, 1125, 1129, 1085, - 1126, 1130, 1132, 1133, 1136, 1138, 1156, 6447, 1139, 1143, + 1126, 1130, 1132, 1133, 1136, 1138, 1156, 6475, 1139, 1143, 1142, 1141, 1152, 1144, 1169, 1165, 1161, 1167, 1154, 1179, 1171, 1185, 1177, 1181, 1189, 1191, 1192, 1194, 1195, 1196, - 1198, 1197, 1199, 1203, 1202, 1205, 1208, 6447, 1206, 1218, + 1198, 1197, 1199, 1203, 1202, 1205, 1208, 6475, 1206, 1218, 1223, 1230, 1213, 1226, 1210, 1228, 1231, 1232, 1233, 1234, 985, 1235, 1236, 1239, 1249, 1240, 1251, 1248, 1253, 1254, 1255, 1257, 1258, 1263, 1264, 1275, 1265, 1267, 1277, 1287, 1284, 1286, 1294, 1296, 1271, 1289, 1297, 1293, 1291, 1299, 1302, 1303, 1304, 1306, 1309, 1317, 1312, 1314, 1315, 1319, 1321, 1323, 1318, 1324, 1326, 1328, 1336, 1335, 1331, 1341, - 1337, 1346, 1343, 1334, 1351, 1354, 1357, 1358, 6447, 1366, + 1337, 1346, 1343, 1334, 1351, 1354, 1357, 1358, 6475, 1366, 1363, 1362, 1364, 1369, 1367, 1375, 1376, 1377, 1378, 1381, 1379, 1382, 1387, 1388, 1389, 1383, 1391, 1393, 1404, 1401, @@ -850,665 +852,669 @@ static const flex_int16_t yy_base[3318] = 1543, 1552, 1553, 1555, 1549, 1562, 1563, 1564, 1565, 1568, 1576, 1566, 1579, 1573, 1575, 1581, 1583, 1585, 1584, 1587, - 1591, 1594, 1596, 1588, 6447, 1595, 1608, 1603, 1606, 1604, - 1607, 1609, 1617, 1612, 1615, 1613, 1618, 1619, 1644, 6447, - 1621, 6447, 6447, 315, 6447, 6447, 1624, 1628, 6447, 1629, + 1591, 1594, 1596, 1588, 6475, 1595, 1608, 1603, 1606, 1604, + 1607, 1609, 1617, 1612, 1615, 1613, 1618, 1619, 1644, 6475, + 1621, 6475, 6475, 315, 6475, 6475, 1624, 1628, 6475, 1629, 1638, 1625, 1626, 1650, 1654, 1637, 1640, 1645, 1642, 1667, 1668, 1652, 1660, 1665, 1673, 1671, 1674, 1679, 1682, 1676, 1685, 1689, 1699, 1690, 1702, 1696, 1700, 1706, 1704, 1712, 1708, 1717, 1718, 1714, 1719, 1721, 1722, 1724, 1723, 1727, 1729, 1732, 1733, 1730, 1735, 1736, 1745, 1749, 1741, 1756, - 6447, 1752, 1759, 1766, 1762, 1769, 1761, 1765, 1768, 1773, + 6475, 1752, 1759, 1766, 1762, 1769, 1761, 1765, 1768, 1773, 1775, 1770, 1777, 1779, 1780, 1781, 1783, 1785, 1788, 1790, - 1792, 1791, 6447, 1793, 1797, 1798, 1799, 1803, 1805, 1809, + 1792, 1791, 6475, 1793, 1797, 1798, 1799, 1803, 1805, 1809, 1737, 1801, 1807, 1811, 1819, 1820, 1815, 1817, 1823, 1825, - 1828, 6447, 1827, 1834, 1835, 1837, 1838, 1840, 1841, 1843, + 1828, 6475, 1827, 1834, 1835, 1837, 1838, 1840, 1841, 1843, 1844, 1845, 1846, 1847, 1848, 1852, 1863, 1853, 1855, 1858, 1868, 1870, 1872, 1873, 1875, 1879, 1880, 1881, 1883, 1884, 1885, 1887, 1888, 1896, 1898, 1895, 1900, 1893, 1903, 1911, 1910, 1902, 1912, 1915, 1916, 1917, 1925, 1923, 1922, 1928, 1933, 1929, 1931, 1934, 1938, 1935, 1945, 1942, 1946, 1947, - 1936, 1953, 1954, 1955, 6447, 1956, 1961, 6447, 1963, 1962, + 1936, 1954, 1955, 1956, 6475, 1959, 1962, 6475, 1964, 1961, - 1960, 1983, 1964, 1966, 1969, 1968, 1971, 1985, 1972, 1977, - 1990, 1979, 2003, 1998, 2000, 2001, 2006, 2008, 2010, 2011, - 2012, 2009, 2015, 2018, 2019, 2028, 2037, 2038, 2035, 2041, - 2045, 2020, 2024, 2040, 2059, 2044, 2046, 2047, 2050, 2048, - 2052, 2055, 2054, 2053, 2064, 2066, 2075, 2071, 2074, 2070, - 2077, 2080, 2090, 2087, 2081, 6447, 2100, 2092, 2084, 2097, - 2096, 2105, 2106, 2104, 6447, 2107, 2108, 2110, 2118, 2113, - 2114, 2115, 2119, 2121, 2124, 2125, 2127, 2129, 2128, 2130, - 2146, 6447, 2132, 6447, 2131, 2141, 2143, 2142, 2149, 2150, - 2152, 2153, 6447, 6447, 2154, 2151, 2163, 2172, 2155, 6447, + 1963, 1985, 1965, 1967, 1972, 1969, 1970, 1978, 1989, 1979, + 1986, 1997, 2008, 2000, 1998, 1999, 2005, 2013, 1980, 2014, + 2010, 2016, 2017, 2021, 2023, 2022, 2032, 2039, 2035, 2041, + 2044, 2025, 2040, 2042, 2061, 2043, 2045, 2049, 2046, 2051, + 2048, 2056, 2054, 2057, 2065, 2066, 2077, 2073, 2074, 2070, + 2079, 2072, 2092, 2085, 2083, 6475, 2099, 2094, 2096, 2100, + 2098, 2107, 2104, 2102, 6475, 2108, 2110, 2106, 2118, 2114, + 2113, 2120, 2116, 2124, 2126, 2127, 2128, 2131, 2129, 2130, + 2148, 6475, 2133, 6475, 2141, 2134, 2143, 2144, 2145, 2150, + 2151, 2152, 6475, 6475, 2159, 2160, 2166, 2174, 2170, 6475, - 2169, 2176, 6447, 2173, 2178, 2179, 2171, 2180, 2182, 2184, - 2183, 2192, 2187, 2194, 2189, 2190, 2199, 6447, 2202, 2201, - 2203, 2206, 2209, 2210, 2212, 2214, 6447, 2218, 2216, 2221, - 2229, 2220, 2228, 2230, 2231, 2235, 2233, 2238, 2239, 2240, - 2241, 2250, 2252, 2242, 2253, 2255, 2262, 6447, 2245, 2249, - 2267, 2265, 2272, 2264, 2266, 2268, 2274, 2276, 2277, 2278, - 2281, 2282, 2283, 2290, 2291, 2288, 2287, 2296, 2297, 2298, - 2301, 2304, 2305, 2306, 2307, 2308, 6447, 2309, 2311, 2314, - 2317, 171, 2318, 2320, 2322, 2324, 2321, 2339, 2325, 2342, - 2346, 2327, 2344, 2348, 2347, 2341, 2351, 2353, 2354, 2356, + 2161, 2179, 6475, 2171, 2181, 2176, 2180, 2182, 2185, 2186, + 2187, 2194, 2189, 2197, 2192, 2196, 2204, 6475, 2205, 2193, + 2206, 2210, 2212, 2216, 2217, 2213, 6475, 2220, 2219, 2223, + 2230, 2232, 2227, 2233, 2234, 2238, 2240, 2241, 2242, 2243, + 2244, 2253, 2254, 2245, 2256, 2259, 2255, 6475, 2252, 2263, + 2271, 2267, 2269, 2266, 2273, 2274, 2276, 2277, 2278, 2279, + 2284, 2285, 2286, 2293, 2294, 2289, 2291, 2299, 2300, 2301, + 2306, 2307, 2308, 2311, 2309, 2310, 6475, 2312, 2314, 2316, + 2317, 2323, 221, 2324, 2325, 2327, 2329, 2332, 2337, 2330, + 2348, 2351, 2333, 2347, 2344, 2353, 2354, 2355, 2356, 2357, - 2357, 2359, 2360, 6447, 2362, 2363, 2366, 2367, 2370, 2368, - 2373, 6447, 2381, 2371, 2386, 2394, 2383, 2395, 2396, 2397, - 2380, 2401, 2400, 2402, 2403, 2406, 2404, 2408, 2407, 6447, - 2413, 2417, 2420, 2414, 2423, 2427, 2424, 2429, 2430, 2432, - 2435, 2437, 2436, 2438, 2439, 2440, 2441, 2442, 2449, 2446, - 2453, 2454, 2455, 2456, 2457, 2460, 2462, 2465, 2468, 6447, - 2477, 2467, 2472, 2476, 2474, 2481, 2478, 2489, 2491, 2492, - 2493, 2495, 2498, 2512, 2496, 2505, 2506, 2502, 2510, 2518, - 2522, 2519, 2523, 2529, 2526, 2532, 2534, 2536, 2540, 2541, - 2542, 2538, 2545, 2546, 2554, 2555, 2552, 2561, 2560, 2566, + 2359, 2360, 2362, 2363, 6475, 2365, 2366, 2370, 2371, 2373, + 2374, 2376, 6475, 2383, 2384, 2391, 2398, 2393, 2375, 2399, + 2401, 2403, 2404, 2405, 2406, 2407, 2409, 2408, 2412, 2411, + 6475, 2416, 2424, 2426, 2417, 2427, 2434, 2433, 2428, 2435, + 2436, 2439, 2441, 2440, 2445, 2444, 2446, 2448, 2452, 2449, + 2453, 2454, 2459, 2460, 2461, 2465, 2462, 2469, 2470, 2471, + 6475, 2478, 2482, 2476, 2479, 2483, 2484, 2488, 2486, 2502, + 2489, 2492, 2499, 2504, 2513, 2507, 2510, 2515, 2516, 2523, + 2524, 2531, 2529, 2530, 2537, 2527, 2539, 2541, 2542, 2543, + 2545, 2547, 2550, 2549, 2551, 2558, 2559, 2560, 2564, 2557, - 2573, 2568, 6447, 2577, 2572, 2575, 2544, 2589, 2582, 2563, - 2590, 2584, 2592, 2586, 2594, 2596, 2603, 2599, 2604, 2602, - 2606, 2607, 2608, 2609, 2614, 2615, 2619, 2622, 2624, 2626, - 6447, 2629, 2625, 2631, 2633, 2635, 2636, 2641, 2643, 2646, - 2638, 2645, 2648, 2649, 2652, 2653, 2657, 2654, 2658, 2661, - 6447, 2664, 2665, 2670, 2668, 2671, 2677, 2678, 2681, 2687, - 2684, 2672, 2691, 2692, 2693, 6447, 2700, 2701, 2698, 2702, - 2704, 2705, 2707, 2709, 2710, 6447, 2711, 2712, 2714, 2715, - 2722, 2723, 2719, 6447, 2726, 2721, 2728, 2731, 2732, 2733, - 2736, 2739, 2737, 2742, 2743, 2745, 2753, 2746, 2755, 6447, + 2578, 2583, 2574, 6475, 2572, 2582, 2570, 2584, 2592, 2587, + 2589, 2590, 2594, 2598, 2599, 2600, 2601, 2609, 2604, 2602, + 2606, 2612, 2613, 2614, 2616, 2621, 2624, 2626, 2622, 2631, + 2633, 6475, 2636, 2638, 2628, 2632, 2645, 2640, 2649, 2650, + 2652, 2642, 2653, 2655, 2656, 2658, 2659, 2662, 2664, 2666, + 2665, 6475, 2669, 2670, 2675, 2677, 2681, 2682, 2684, 2687, + 2693, 2695, 2678, 2697, 2698, 2688, 6475, 2708, 2710, 2706, + 2713, 2709, 2712, 2714, 2716, 2699, 6475, 2717, 171, 2721, + 2720, 2722, 2729, 2730, 2726, 6475, 2733, 2728, 2734, 2737, + 2738, 2739, 2741, 2743, 2746, 2747, 2749, 2751, 2761, 2752, - 2749, 2764, 2756, 2762, 2765, 2766, 2770, 2772, 2776, 2777, - 2789, 2778, 6447, 2788, 2775, 2783, 2799, 2795, 2796, 2797, - 2800, 2801, 2802, 2803, 2804, 2807, 6447, 2810, 2808, 2811, - 2812, 2817, 2816, 2818, 2825, 2828, 2830, 2831, 2832, 2833, - 2835, 2836, 2839, 2838, 2842, 2844, 2850, 2852, 2855, 2856, - 2857, 2865, 2868, 2861, 2870, 2866, 2863, 2871, 2873, 2880, - 2883, 2887, 2884, 2888, 6447, 2891, 2882, 2893, 2894, 2895, - 2896, 2898, 2897, 2899, 2901, 2903, 2909, 2905, 2906, 2923, - 2930, 2908, 2915, 2918, 2920, 2926, 2927, 2931, 2933, 2934, - 2942, 2938, 2940, 2947, 2944, 2945, 2954, 2946, 2949, 2955, + 2758, 6475, 2755, 2770, 2762, 2768, 2765, 2771, 2776, 2778, + 2779, 2781, 2786, 2783, 6475, 2795, 2794, 2792, 2805, 2782, + 2800, 2802, 2806, 2807, 2809, 2808, 2810, 2813, 6475, 2816, + 2814, 2817, 2818, 2821, 2822, 2823, 2837, 2824, 2829, 2838, + 2834, 2839, 2841, 2845, 2844, 2853, 2843, 2846, 2856, 2847, + 2859, 2863, 2864, 2872, 2873, 2870, 2875, 2871, 2495, 2869, + 2876, 2885, 2886, 2888, 2891, 2893, 6475, 2896, 2897, 2878, + 2889, 2898, 2899, 2900, 2902, 2903, 2905, 2906, 2911, 2908, + 2912, 2924, 2927, 2917, 2919, 2928, 2929, 2930, 2933, 2932, + 2934, 2935, 2942, 2940, 2941, 2949, 2944, 2946, 2956, 2955, - 2956, 2957, 2958, 2961, 2959, 2964, 2969, 2973, 2978, 2980, - 2982, 2970, 2984, 2987, 2988, 6447, 2991, 2992, 2989, 2995, - 2996, 2999, 3001, 3008, 3003, 3010, 3011, 3013, 3020, 3005, - 3014, 3019, 3027, 3029, 6447, 3022, 6447, 3026, 3030, 3033, - 3037, 3036, 6447, 3042, 6447, 3043, 3045, 3038, 3048, 6447, - 3049, 3050, 3051, 3057, 3053, 3055, 3059, 3061, 3063, 3071, - 3065, 3062, 3067, 3069, 3083, 3073, 3075, 3081, 3085, 3089, - 3091, 3079, 3096, 3090, 3092, 3098, 3101, 3104, 6447, 3106, - 3108, 3107, 3110, 3111, 3113, 3115, 3114, 3116, 3119, 3118, - 3122, 3127, 3131, 3130, 3134, 3141, 3144, 3151, 3136, 3152, + 2957, 2958, 2959, 2961, 2960, 2964, 2965, 2968, 2970, 2973, + 2984, 2980, 2986, 2987, 2988, 2989, 2992, 6475, 2991, 2996, + 2993, 2995, 3003, 3005, 3007, 3016, 2999, 3013, 3017, 3020, + 3021, 3018, 3023, 3027, 3034, 3030, 6475, 3031, 6475, 3032, + 3035, 3036, 3039, 3042, 6475, 3044, 6475, 3045, 3051, 3052, + 3054, 6475, 3055, 3046, 3056, 3059, 3057, 3061, 3064, 3069, + 3063, 3075, 3071, 3067, 3073, 3078, 3086, 3079, 3081, 3084, + 3090, 3092, 3094, 3095, 3096, 3100, 3101, 3102, 3104, 3108, + 6475, 3110, 3107, 3111, 3114, 3117, 3118, 3119, 3126, 3121, + 3124, 3128, 3127, 3129, 3137, 3134, 3145, 3131, 3142, 3148, - 6447, 3147, 3158, 3148, 3153, 6447, 3150, 3160, 3162, 3164, - 3166, 3168, 3170, 3169, 3173, 3171, 3175, 3176, 3188, 3183, - 3190, 3178, 6447, 3192, 3193, 3179, 3199, 3208, 3209, 3211, - 3210, 3212, 3216, 3220, 3218, 3219, 3182, 3221, 3222, 3224, - 3231, 3234, 3230, 3239, 3226, 3236, 3238, 3243, 3229, 3244, - 3245, 3246, 3252, 3253, 3250, 3251, 3254, 3255, 3256, 6447, - 3259, 3261, 3269, 3278, 3263, 3270, 3274, 3277, 3279, 6447, - 3281, 3284, 3285, 3287, 3288, 3292, 3295, 3293, 3296, 3297, - 3298, 3301, 3303, 3302, 6447, 3305, 6447, 3310, 3316, 3322, - 3324, 3326, 3311, 3327, 3332, 3328, 3333, 3334, 3337, 3336, + 3158, 3141, 3160, 6475, 3155, 3157, 3159, 3162, 6475, 3165, + 3163, 3166, 3171, 3174, 3164, 3175, 3173, 3179, 3177, 3181, + 3183, 3186, 3191, 3194, 3197, 6475, 3196, 3201, 3184, 3207, + 3212, 3208, 3219, 3215, 3217, 3221, 3229, 3225, 3214, 3224, + 3226, 3228, 3231, 3238, 3239, 3235, 3243, 3236, 3241, 3250, + 3247, 3244, 3251, 3253, 3254, 3255, 3256, 3257, 3258, 3260, + 3261, 3265, 6475, 3266, 3267, 3272, 3280, 3276, 3277, 3281, + 3286, 3282, 6475, 3288, 3289, 3290, 3292, 3297, 3291, 3294, + 3299, 3302, 3305, 3307, 2962, 3312, 3310, 6475, 3313, 6475, + 3311, 3315, 3317, 3330, 3319, 3325, 3332, 3338, 3327, 3334, - 3340, 3344, 3343, 3345, 3349, 3365, 3347, 3348, 3350, 3351, - 3360, 3361, 3364, 6447, 6447, 3366, 3367, 3370, 3372, 3373, - 3375, 3378, 3383, 3381, 3384, 3387, 3389, 3400, 6447, 3390, - 3396, 3397, 3398, 3412, 3405, 3410, 3420, 3413, 3421, 3416, - 6447, 3417, 3424, 3431, 3426, 3427, 3434, 6447, 3432, 6447, - 3429, 3433, 3435, 3441, 3442, 3444, 3445, 3446, 3454, 3462, - 3464, 3461, 3466, 3447, 3451, 3449, 3463, 3477, 3470, 3472, - 3473, 6447, 3479, 3480, 3481, 3482, 3484, 3490, 3493, 3483, - 6447, 3494, 3486, 3496, 3505, 3497, 3501, 3499, 3508, 3509, - 3510, 3512, 3514, 6447, 3515, 3519, 3527, 3520, 3522, 3525, + 3339, 3341, 3342, 3347, 3345, 3348, 3350, 3349, 3357, 3356, + 3352, 3360, 3364, 3365, 3368, 3366, 6475, 6475, 3369, 3370, + 3374, 3371, 3376, 3381, 3389, 3383, 3391, 3380, 3393, 3397, + 3406, 6475, 3399, 3401, 3402, 3403, 3417, 3407, 3410, 3418, + 3421, 3428, 3423, 6475, 3419, 3420, 3433, 3430, 3432, 3437, + 6475, 3436, 6475, 3438, 3440, 3442, 3445, 3447, 3448, 3449, + 3451, 3453, 3462, 3464, 3455, 3467, 3469, 3470, 3471, 3472, + 3479, 3475, 3476, 3477, 6475, 3481, 3478, 3482, 3491, 3494, + 3500, 3484, 3483, 6475, 3501, 3504, 3502, 3503, 3509, 3511, + 3512, 3513, 3516, 3517, 3519, 3521, 3522, 6475, 3520, 3523, - 3529, 3530, 3536, 6447, 3537, 3538, 3549, 3545, 3541, 3546, - 3551, 3550, 3552, 3555, 3557, 3556, 3558, 3559, 3560, 3562, - 3564, 3567, 3565, 3566, 3579, 3580, 3582, 3592, 3583, 6447, - 3587, 3588, 3591, 3590, 3594, 3597, 3598, 3601, 3603, 3605, - 3615, 3616, 3609, 3612, 3619, 3620, 3627, 3623, 6447, 3628, - 3629, 3637, 3632, 3635, 3640, 3634, 3636, 3643, 3644, 3645, - 3646, 3648, 3650, 3658, 3656, 3653, 3660, 3661, 3671, 3662, - 6447, 3680, 3663, 3672, 3683, 3684, 3676, 3692, 3688, 3689, - 3690, 3694, 3696, 3698, 3700, 3701, 3702, 3705, 3706, 6447, - 6447, 3708, 3710, 3712, 6447, 3715, 3713, 3725, 3717, 3718, + 3535, 3525, 3527, 3536, 3541, 3544, 3549, 6475, 3546, 3550, + 3558, 3554, 3555, 3560, 3561, 3556, 3557, 3563, 3565, 3566, + 3568, 3569, 3570, 3572, 3575, 3577, 3574, 3584, 3585, 3588, + 3592, 3601, 3593, 6475, 3597, 3598, 3604, 3602, 3605, 3609, + 3610, 3613, 3627, 3608, 3630, 3631, 3600, 3615, 3634, 3635, + 3643, 3638, 6475, 3646, 3606, 3648, 3619, 3647, 3652, 3645, + 3649, 3656, 3653, 3657, 3658, 3659, 3661, 3670, 3662, 3667, + 3671, 3672, 3679, 3677, 6475, 3686, 3669, 3684, 3688, 3682, + 3691, 3700, 3695, 3696, 3698, 3702, 3703, 3707, 3705, 3709, + 3710, 3713, 3714, 6475, 6475, 3718, 3715, 3721, 6475, 3723, - 3714, 3730, 3727, 3728, 3731, 3733, 3740, 6447, 3738, 3747, - 3742, 3744, 3752, 3755, 3758, 3745, 3760, 3748, 3753, 3761, - 3664, 3763, 3764, 3765, 3776, 3777, 3767, 3774, 3775, 6447, - 3778, 3780, 3783, 3785, 3782, 3791, 6447, 3786, 3792, 3793, - 3794, 3808, 3800, 3809, 3811, 3797, 3812, 3813, 3814, 3815, - 3816, 3823, 3822, 3824, 3828, 3830, 3834, 6447, 3833, 3839, - 3821, 3844, 6447, 3846, 3853, 3854, 3857, 3840, 3856, 3858, - 3865, 6447, 3860, 3863, 3862, 3864, 3875, 3849, 3879, 3868, - 3876, 3878, 6447, 3880, 3877, 3883, 6447, 3882, 3893, 3898, - 3900, 3884, 3901, 3902, 3886, 3903, 3905, 6447, 3906, 6447, + 3720, 3728, 3727, 3724, 3733, 3735, 3737, 3736, 3738, 3743, + 3744, 6475, 3747, 3755, 3750, 3751, 3759, 3763, 3765, 3756, + 3766, 3754, 3767, 3768, 3773, 3771, 3772, 3777, 3785, 3787, + 3782, 3784, 3788, 6475, 3783, 3790, 3791, 3794, 3795, 3800, + 6475, 3797, 3801, 3804, 3809, 3807, 3813, 3811, 3820, 3821, + 3823, 3824, 3825, 3826, 3828, 3835, 3832, 3831, 3834, 3838, + 3840, 6475, 3841, 3845, 3849, 3852, 6475, 3854, 3863, 3864, + 3865, 3855, 3866, 3860, 3873, 6475, 3868, 3870, 3875, 3876, + 3883, 3878, 3885, 3884, 3882, 3886, 3892, 6475, 3893, 3888, + 3889, 6475, 3895, 3896, 3909, 3911, 3899, 3912, 3914, 3913, - 3907, 3912, 3915, 6447, 3913, 3917, 3918, 3920, 3921, 3922, - 3926, 3932, 3934, 3928, 3936, 3937, 3938, 3939, 3941, 3950, - 3940, 3942, 3947, 3949, 6447, 3952, 3954, 3959, 3960, 3966, - 3962, 3969, 3956, 3970, 3973, 6447, 6447, 3979, 6447, 3980, - 3974, 3976, 6447, 3982, 3984, 3991, 3987, 3988, 3993, 4000, - 3994, 6447, 4006, 4007, 6447, 3996, 4003, 4016, 4011, 4001, - 4012, 4013, 4015, 4017, 4021, 4022, 4020, 4025, 4026, 4027, - 4030, 6447, 4028, 4031, 4029, 4040, 4043, 4044, 4047, 4046, - 4045, 6447, 4053, 4055, 4056, 4062, 4059, 6447, 4060, 6447, - 4063, 4068, 4070, 4071, 4072, 6447, 4076, 4075, 4080, 4083, + 3915, 3916, 6475, 3917, 6475, 3923, 3924, 3927, 6475, 3929, + 3930, 3932, 3934, 3931, 3938, 3939, 3945, 3947, 3935, 3949, + 3950, 3951, 3952, 3954, 3963, 3953, 3960, 3961, 3962, 6475, + 3965, 3964, 3972, 3973, 3983, 3978, 3980, 3967, 3985, 3986, + 6475, 6475, 3994, 6475, 3995, 3975, 3989, 6475, 3996, 4000, + 4003, 4001, 4006, 4002, 4009, 4012, 6475, 4016, 4021, 6475, + 4010, 4013, 4023, 4024, 4025, 4026, 4027, 4029, 4030, 4032, + 4036, 4034, 4040, 4035, 4039, 4037, 6475, 4042, 4041, 4045, + 4059, 4050, 4053, 4060, 4065, 4055, 6475, 4066, 4067, 4072, + 4074, 4076, 6475, 4077, 6475, 4078, 4080, 4081, 4082, 4085, - 4085, 4084, 4087, 4088, 4094, 4095, 4102, 4098, 4097, 4099, - 6447, 4100, 4104, 4106, 4113, 4101, 4108, 4117, 4120, 4121, - 4122, 4126, 4130, 4124, 4131, 4137, 4135, 4141, 4127, 6447, - 4139, 4147, 4133, 4156, 4143, 4153, 6447, 4157, 4158, 4159, - 6447, 4160, 4161, 4162, 4167, 4168, 4170, 4174, 4175, 4172, - 6447, 4179, 4180, 4176, 4177, 4178, 4184, 6447, 6447, 4194, - 6447, 4195, 4185, 4197, 4198, 4199, 4202, 4204, 4205, 4207, - 4209, 4215, 4217, 4210, 4218, 4220, 4227, 4231, 4235, 4230, - 4232, 4234, 6447, 6447, 4239, 4243, 4236, 4247, 4248, 4241, - 4250, 4257, 4255, 4261, 4264, 4265, 4272, 6447, 4252, 4259, + 6475, 4092, 4087, 4098, 4088, 4095, 4103, 4102, 4106, 4091, + 4099, 4116, 4108, 4112, 4115, 6475, 4117, 4118, 4121, 4126, + 4122, 4124, 4134, 4130, 4129, 4133, 4138, 4140, 4141, 4142, + 4147, 4149, 4145, 4152, 6475, 4155, 4157, 4156, 4166, 4162, + 4161, 6475, 4163, 4169, 4176, 6475, 4172, 4168, 4178, 4180, + 4182, 4183, 4186, 4184, 4189, 6475, 4191, 4193, 4190, 4192, + 4194, 4206, 6475, 6475, 4207, 6475, 4208, 4195, 4196, 4209, + 4212, 4216, 4220, 4221, 4223, 4217, 4224, 4229, 4231, 4232, + 4239, 4235, 4246, 4247, 4248, 4249, 4250, 4243, 6475, 6475, + 4254, 4255, 4259, 4261, 4264, 4262, 4266, 4273, 4271, 4277, - 4267, 4273, 6447, 4274, 4275, 4277, 4276, 4278, 4284, 4281, - 4285, 4282, 4286, 4289, 4290, 4292, 4296, 4295, 4303, 4304, - 4298, 4306, 4309, 4312, 4314, 6447, 4315, 4318, 4319, 4320, - 4324, 4325, 4326, 4327, 4328, 6447, 4331, 6447, 4329, 4336, - 4334, 4333, 4352, 4353, 4354, 4332, 4341, 4356, 4359, 4362, - 4363, 4367, 4364, 4368, 4370, 4373, 4375, 4377, 4378, 6447, - 4384, 4372, 4380, 4386, 4388, 4391, 4393, 4395, 4396, 4402, - 4403, 4399, 4406, 4408, 4397, 4410, 4409, 4413, 6447, 4415, - 4417, 4421, 4425, 4426, 4422, 4427, 4433, 4436, 4429, 4431, - 4437, 4439, 6447, 4441, 4442, 4443, 4447, 4453, 4445, 4450, + 4280, 4282, 4275, 6475, 4285, 4272, 4286, 4283, 6475, 4288, + 4291, 4293, 4294, 4295, 4297, 4298, 4299, 4301, 4302, 4305, + 4307, 4308, 4312, 4310, 4318, 4320, 4321, 4322, 4326, 4328, + 4330, 6475, 4333, 4331, 4334, 4335, 4337, 4338, 4342, 4343, + 4344, 6475, 4345, 6475, 4349, 4352, 4348, 4367, 4371, 4351, + 4372, 4364, 4359, 4368, 4378, 4383, 4374, 4385, 4380, 4386, + 4387, 4389, 4391, 4393, 4397, 6475, 4400, 4394, 4396, 4403, + 4407, 4409, 4404, 4411, 4412, 4418, 4413, 4419, 4421, 4426, + 4422, 4429, 4427, 4431, 6475, 4432, 4434, 4435, 4440, 4442, + 4443, 4444, 4445, 4452, 4448, 4453, 4455, 4457, 6475, 4458, - 4454, 4457, 6447, 4460, 4462, 4463, 4466, 4467, 4468, 4471, - 4473, 4475, 4476, 4487, 6447, 4477, 4483, 4491, 4479, 4481, - 4492, 4493, 4495, 6447, 4501, 4503, 4499, 4515, 4502, 4516, - 4512, 4519, 4500, 4518, 4526, 4511, 4527, 4528, 4530, 4532, - 4540, 4541, 4538, 6447, 4533, 6447, 4543, 4544, 4554, 4549, - 4547, 4555, 4551, 6447, 4559, 4561, 4563, 4557, 4565, 6447, - 4564, 4566, 4568, 4567, 6447, 4578, 4580, 4569, 4584, 4587, - 4590, 6447, 4593, 4594, 4595, 4604, 4605, 4601, 4603, 4606, - 4607, 4609, 4611, 4612, 4613, 4622, 4615, 4618, 6447, 4624, - 4627, 4633, 4634, 4641, 4617, 4636, 4638, 4644, 4637, 6447, + 4459, 4462, 4465, 4464, 4466, 4470, 4471, 4472, 6475, 4480, + 4473, 4476, 4481, 4484, 4488, 4489, 4490, 4492, 4494, 4500, + 6475, 4497, 4499, 4505, 4498, 4508, 4507, 4511, 4512, 6475, + 4514, 4517, 4524, 4531, 4513, 4532, 4530, 4536, 4527, 4529, + 4537, 4544, 4545, 4546, 4547, 4543, 4564, 4565, 4562, 6475, + 4548, 6475, 4551, 4549, 4567, 4569, 4563, 4573, 4571, 4575, + 6475, 4577, 4580, 4582, 4579, 4583, 6475, 4586, 4584, 4587, + 4589, 6475, 4585, 4599, 4590, 4591, 4606, 4607, 6475, 4612, + 4613, 4609, 4621, 4623, 4618, 4620, 4622, 4624, 4626, 4628, + 4629, 4630, 4639, 4632, 4635, 6475, 4637, 4644, 4650, 4651, - 4646, 4645, 4647, 4648, 4649, 4652, 4654, 4661, 4657, 4570, - 4658, 4660, 4664, 4666, 6447, 4668, 4670, 4671, 4681, 4674, - 4683, 6447, 4684, 6447, 4678, 4688, 4691, 4673, 4695, 6447, - 6447, 4697, 4704, 4690, 4706, 4700, 6447, 6447, 4708, 6447, - 4703, 6447, 4710, 4711, 6447, 6447, 4712, 4713, 4714, 4715, - 4723, 6447, 4726, 6447, 4734, 4729, 4716, 4718, 4731, 6447, - 4733, 4735, 4738, 6447, 4741, 4748, 4743, 4744, 6447, 4746, - 4751, 4749, 4753, 6447, 4755, 4758, 4760, 4762, 4763, 4764, - 4773, 4767, 4770, 4766, 4774, 4776, 4777, 4786, 4788, 4790, - 4792, 4783, 4793, 4794, 4797, 4800, 4802, 4803, 4804, 4805, + 4658, 4634, 4645, 4655, 4654, 4660, 6475, 4661, 4662, 4663, + 4664, 4667, 4668, 4669, 4676, 4675, 4672, 4677, 4679, 4680, + 4684, 6475, 4687, 4686, 4689, 4697, 4692, 4693, 6475, 4701, + 6475, 4703, 4706, 4708, 4704, 4712, 6475, 6475, 4714, 4715, + 4716, 4720, 4722, 6475, 6475, 4724, 6475, 4721, 6475, 4726, + 4725, 6475, 6475, 4727, 4729, 4733, 4737, 4735, 6475, 4744, + 6475, 4751, 4746, 4736, 4748, 4749, 6475, 4750, 4753, 4757, + 6475, 4758, 4766, 4759, 4761, 6475, 4763, 4768, 4764, 4772, + 6475, 4773, 4779, 4775, 4781, 4782, 4784, 4785, 4786, 4788, + 4792, 4793, 4794, 4796, 4806, 4808, 4810, 4812, 4803, 4795, - 4807, 4808, 4810, 4813, 4817, 4818, 4816, 4819, 4820, 4829, - 4822, 4825, 4833, 4826, 4836, 4837, 4838, 4839, 4841, 4843, - 4844, 4846, 4849, 4852, 4853, 6447, 4848, 4850, 4854, 4861, - 4859, 4869, 4870, 4879, 4881, 4882, 6447, 4884, 6447, 4886, - 4871, 4888, 4876, 4890, 6447, 4891, 4892, 4893, 4894, 4897, - 4896, 4898, 4901, 4902, 4904, 4907, 6447, 4913, 4903, 6447, - 4909, 4917, 4924, 6447, 4919, 4930, 4925, 4927, 4932, 4933, - 4934, 4935, 4938, 4936, 4941, 4947, 4937, 4942, 4944, 4959, - 4962, 4969, 4949, 4951, 4956, 4964, 4965, 4968, 4971, 4972, - 4974, 4980, 4981, 4985, 6447, 4973, 6447, 4986, 4982, 4987, + 4816, 4817, 4819, 4822, 4823, 4824, 4825, 4827, 4828, 4830, + 4832, 4837, 4833, 4836, 4838, 4839, 4846, 4840, 4842, 4853, + 4849, 4854, 4855, 4856, 4857, 4863, 4861, 4864, 4867, 4870, + 4865, 4872, 4873, 6475, 4868, 4876, 4878, 4882, 4889, 4890, + 4891, 4893, 4900, 4904, 6475, 4906, 6475, 4908, 4884, 4910, + 4894, 4897, 6475, 4911, 4914, 4915, 4916, 4917, 4918, 4920, + 4919, 4923, 4924, 4927, 6475, 4930, 4925, 6475, 4933, 4934, + 4945, 6475, 4947, 4949, 4935, 4946, 4950, 4951, 4952, 4954, + 4958, 4959, 4961, 4963, 4965, 4968, 4967, 4976, 4980, 4977, + 4969, 4981, 4982, 4983, 4984, 4988, 4990, 4993, 4992, 5000, - 4989, 4993, 4990, 4994, 6447, 6447, 4996, 4997, 5003, 5004, - 5005, 5007, 5008, 6447, 5011, 5014, 5021, 5015, 6447, 5017, - 5022, 5024, 5030, 6447, 5025, 5027, 5031, 5034, 5038, 5040, - 5041, 5043, 5045, 5047, 5049, 6447, 6447, 6447, 6447, 5050, - 5053, 5055, 5056, 5058, 5063, 5064, 5066, 5062, 6447, 5068, - 6447, 6447, 5074, 5076, 5070, 5078, 5080, 5082, 5085, 5087, - 6447, 5089, 5086, 5092, 5090, 5099, 5103, 5106, 5108, 5093, - 5109, 5110, 5112, 5119, 5115, 5116, 5118, 5121, 5123, 5125, - 6447, 6447, 5127, 5132, 5134, 5142, 5138, 5139, 5135, 5151, - 5146, 5147, 5148, 5153, 5154, 5155, 5164, 5165, 5156, 5160, + 5002, 5006, 6475, 4995, 6475, 5003, 5007, 5009, 4991, 5013, + 5015, 5017, 6475, 6475, 5019, 5020, 5025, 5016, 5022, 5028, + 5029, 6475, 5030, 5034, 5042, 5037, 6475, 5032, 5043, 5044, + 5049, 6475, 5046, 5051, 5052, 5054, 5055, 5062, 5065, 5057, + 5059, 5067, 5069, 6475, 6475, 6475, 6475, 5071, 5073, 5077, + 5078, 5080, 5081, 5083, 5085, 5082, 6475, 5087, 6475, 6475, + 5089, 5096, 5088, 5098, 5099, 5100, 5104, 5106, 6475, 5105, + 5110, 5111, 5108, 5118, 5122, 5124, 5109, 5126, 5127, 5130, + 5131, 5132, 5139, 5136, 5137, 5140, 5142, 5144, 5146, 6475, + 6475, 5148, 5152, 5153, 5160, 5157, 5158, 5164, 5171, 5166, - 6447, 5163, 5166, 5167, 6447, 5169, 6447, 5173, 5175, 5174, - 5177, 5182, 5184, 5185, 5187, 6447, 6447, 5183, 5194, 5189, - 6447, 6447, 5197, 5198, 5200, 5203, 5199, 5204, 5205, 5207, - 5209, 5210, 6447, 5211, 6447, 5212, 5213, 5221, 5215, 5230, - 5231, 5233, 5235, 5228, 5237, 6447, 5238, 5239, 6447, 5241, - 5243, 5244, 6447, 5248, 5246, 5251, 5254, 6447, 5256, 5258, - 5260, 6447, 5267, 6447, 5261, 5263, 5270, 5275, 6447, 5271, - 5272, 6447, 5277, 5279, 5280, 5284, 6447, 5285, 6447, 5286, - 5288, 5289, 5293, 5294, 5296, 5298, 5299, 5300, 5307, 5305, - 5308, 6447, 6447, 5316, 135, 5319, 5302, 5315, 5320, 5321, + 5167, 5168, 5169, 5173, 5174, 5182, 5185, 5175, 5186, 6475, + 5183, 5187, 5188, 6475, 5189, 6475, 5197, 5200, 5190, 5193, + 5194, 5204, 5209, 5207, 6475, 6475, 5196, 5217, 5212, 6475, + 6475, 5215, 5219, 5221, 5223, 5220, 5224, 5226, 5229, 5231, + 5228, 6475, 5233, 6475, 5225, 5232, 5238, 5241, 5252, 5255, + 5256, 5254, 5251, 5257, 6475, 5258, 5260, 6475, 5261, 5263, + 5264, 6475, 5268, 5270, 5272, 5275, 6475, 5281, 5278, 5284, + 6475, 5286, 6475, 5276, 5287, 5283, 5299, 6475, 5290, 5300, + 6475, 5303, 5305, 5291, 5306, 6475, 5297, 6475, 5307, 5309, + 5311, 5314, 5316, 5318, 5320, 5321, 5322, 5329, 5325, 5326, - 5328, 5323, 5326, 5332, 6447, 6447, 5324, 6447, 5333, 5334, - 6447, 5336, 5339, 5343, 5338, 5345, 5346, 5347, 5349, 5352, - 5354, 5359, 5357, 5353, 5358, 5373, 5375, 5360, 5378, 5380, - 5382, 5384, 5386, 5388, 5389, 5390, 5365, 5392, 5393, 5395, - 5396, 5398, 5399, 6447, 5402, 5407, 5408, 5403, 6447, 5414, - 5409, 5423, 5415, 6447, 5425, 5417, 5427, 5428, 6447, 5429, - 5431, 5434, 5432, 5433, 5445, 5440, 5442, 5446, 6447, 6447, - 6447, 5449, 5456, 6447, 5458, 5452, 5435, 5443, 6447, 5459, - 5462, 6447, 6447, 5463, 5464, 5465, 5475, 6447, 5467, 6447, - 5470, 6447, 5471, 5472, 5480, 5478, 6447, 5484, 5482, 5492, + 6475, 6475, 5334, 5332, 135, 5341, 5338, 5342, 5343, 5344, + 5351, 5346, 5348, 5354, 6475, 6475, 5355, 6475, 5349, 5356, + 6475, 5347, 5364, 5365, 5358, 5368, 5369, 5370, 5374, 5378, + 5379, 5380, 5381, 5382, 5384, 5386, 5400, 5385, 5397, 5402, + 5405, 5407, 5409, 5398, 5411, 5412, 5413, 5415, 5417, 5418, + 5419, 5421, 5422, 6475, 5425, 5427, 5430, 5429, 6475, 5435, + 5431, 5444, 5440, 6475, 5449, 5437, 5450, 5451, 6475, 5452, + 5454, 5457, 5455, 5456, 5468, 5463, 5465, 5469, 6475, 6475, + 6475, 5472, 5479, 6475, 5481, 5475, 5458, 5466, 6475, 5482, + 5485, 6475, 6475, 5486, 5487, 5488, 5498, 6475, 5490, 6475, - 6447, 5498, 5500, 5502, 5494, 5486, 5490, 5505, 6447, 5513, - 5511, 5512, 5515, 5504, 5508, 5518, 5519, 5523, 5527, 5525, - 5529, 6447, 5526, 5531, 5532, 5533, 5535, 5538, 5540, 5542, - 6447, 5544, 6447, 5545, 5546, 5547, 5548, 5549, 5552, 5556, - 5561, 5567, 5560, 5563, 5570, 5573, 5574, 6447, 6447, 5576, - 5578, 6447, 5579, 6447, 5583, 6447, 5585, 5586, 5587, 5584, - 6447, 5591, 5588, 5592, 5580, 6447, 5594, 5597, 5598, 5605, - 6447, 6447, 5606, 5613, 5609, 5610, 5619, 5621, 5616, 5623, - 5624, 5625, 5627, 5637, 5629, 5628, 5630, 5639, 5641, 5643, - 5644, 6447, 6447, 6447, 5649, 5633, 5657, 5655, 5659, 5658, + 5493, 6475, 5494, 5495, 5503, 5501, 6475, 5507, 5505, 5506, + 5515, 6475, 5522, 5524, 5526, 5527, 5509, 5513, 5528, 6475, + 5537, 5530, 5534, 5541, 5538, 5542, 5543, 5544, 5545, 5552, + 5547, 5551, 6475, 5553, 5555, 5561, 5558, 5548, 5562, 5565, + 5568, 6475, 5570, 6475, 5571, 5573, 5574, 5576, 5575, 5579, + 5581, 5582, 5592, 5590, 5583, 5594, 5596, 5597, 6475, 6475, + 5603, 5605, 6475, 5600, 6475, 5607, 6475, 5608, 5609, 5610, + 5612, 6475, 5614, 5611, 5615, 5618, 6475, 5622, 5619, 5627, + 5629, 6475, 6475, 5630, 5640, 5636, 5632, 5643, 5645, 5635, + 5648, 5649, 5652, 5639, 5657, 5653, 5656, 5658, 5663, 5664, - 5660, 6447, 5663, 5665, 5666, 5667, 5675, 5670, 5673, 6447, - 5677, 5674, 5676, 5680, 5682, 5679, 5690, 5691, 6447, 5684, - 5696, 5697, 5685, 5703, 5705, 5707, 5710, 5711, 5712, 5719, - 5715, 6447, 5717, 6447, 6447, 5714, 6447, 5718, 5721, 5722, - 5725, 6447, 5728, 5723, 5729, 5730, 5732, 5735, 6447, 5742, - 5741, 5745, 5746, 6447, 6447, 5748, 6447, 5753, 5750, 5754, - 5762, 5757, 5758, 5760, 5765, 6447, 5763, 5771, 5772, 5773, - 5774, 5775, 6447, 5776, 5777, 5779, 5780, 6447, 5783, 5782, - 5785, 5787, 5788, 6447, 5789, 5790, 5811, 5804, 6447, 5795, - 5807, 5806, 6447, 6447, 5814, 5817, 5818, 6447, 6447, 6447, + 5666, 5670, 5674, 6475, 6475, 6475, 5665, 5671, 5682, 5681, + 5683, 5690, 5685, 6475, 5687, 5689, 5693, 5694, 5701, 5697, + 5700, 6475, 5696, 5702, 5704, 5705, 5707, 5709, 5712, 5710, + 6475, 5722, 5724, 5725, 5717, 5727, 5734, 5736, 5738, 5726, + 5740, 5747, 5743, 6475, 5745, 6475, 6475, 5742, 6475, 5746, + 5749, 5750, 5751, 6475, 5754, 5755, 5756, 5758, 5760, 5763, + 6475, 5770, 5757, 5765, 5773, 6475, 6475, 5775, 6475, 5780, + 5781, 5782, 5789, 5785, 5787, 5791, 5788, 6475, 5794, 5799, + 5792, 5800, 5801, 5802, 5803, 6475, 5805, 5807, 5808, 5810, + 6475, 5811, 5815, 5816, 5817, 5818, 6475, 5819, 5821, 5842, - 5821, 5823, 5824, 5826, 6447, 5830, 5834, 5838, 5842, 5833, - 6447, 5845, 5841, 5846, 6447, 6447, 5827, 5848, 5849, 5851, - 6447, 6447, 5852, 5855, 5853, 5856, 5858, 6447, 5861, 5864, - 5863, 5866, 5871, 5875, 5876, 5878, 5880, 5887, 5888, 5884, - 5885, 5890, 5893, 5894, 5895, 5897, 5907, 5902, 5904, 5906, - 5913, 5910, 6447, 6447, 5917, 6447, 5919, 5920, 6447, 6447, - 5922, 5924, 5926, 5928, 5931, 5933, 5935, 6447, 5936, 5938, - 5939, 5940, 5941, 6447, 5943, 5947, 5942, 5950, 5944, 5953, - 5959, 5949, 5966, 6447, 6447, 5951, 5967, 5955, 5971, 5960, - 6447, 5973, 5974, 5975, 5977, 5979, 5983, 5980, 6447, 5984, + 5822, 6475, 5825, 5832, 5835, 6475, 6475, 5840, 5844, 5846, + 6475, 6475, 6475, 5852, 5849, 5847, 5856, 6475, 5858, 5862, + 5867, 5871, 5870, 6475, 5873, 5861, 5863, 6475, 6475, 5875, + 5876, 5878, 5881, 6475, 6475, 5882, 5884, 5885, 5888, 5886, + 6475, 5887, 5893, 5900, 5894, 5908, 5911, 5913, 5902, 5914, + 5906, 5922, 5926, 5904, 5923, 5924, 5925, 5927, 5928, 5934, + 5937, 5935, 5940, 5943, 5949, 5946, 6475, 6475, 5953, 6475, + 5955, 5950, 6475, 6475, 5957, 5961, 5963, 5965, 5967, 5969, + 5971, 6475, 5972, 5974, 5975, 5976, 5958, 6475, 5977, 5980, + 5982, 5985, 5983, 5986, 5990, 6475, 5991, 5993, 6475, 6475, - 5985, 6447, 6447, 6447, 5987, 6447, 6447, 5986, 6447, 6447, - 6447, 6447, 6447, 6447, 6447, 5988, 6447, 5992, 6000, 6004, - 6007, 6447, 5993, 6008, 6009, 5995, 6447, 5997, 6447, 6010, - 6014, 6018, 6019, 6020, 6026, 6024, 6022, 6028, 6029, 6030, - 6032, 6031, 6036, 6038, 6034, 6042, 6044, 6447, 6447, 6447, - 6043, 6050, 6052, 6054, 6061, 6064, 6067, 6069, 6053, 6056, - 6071, 6073, 6075, 6058, 6077, 6085, 6081, 6082, 6084, 6086, - 6088, 6091, 6093, 6096, 6098, 6447, 6099, 6447, 6100, 6447, - 6447, 6102, 6103, 6105, 6107, 6116, 6117, 6109, 6112, 6119, - 6122, 6121, 6129, 6447, 6447, 6124, 6130, 6447, 6132, 6131, + 5994, 5999, 6000, 6003, 6001, 6475, 6005, 6013, 6009, 6010, + 6011, 6014, 6017, 6475, 6016, 6018, 6475, 6475, 6475, 6020, + 6475, 6475, 6021, 6475, 6475, 6475, 6475, 6475, 6475, 6475, + 6025, 6475, 6024, 6039, 6041, 6043, 6475, 6029, 6036, 6044, + 6031, 6475, 6046, 6475, 6034, 6050, 6049, 5890, 6053, 6055, + 6058, 6059, 6062, 6063, 6064, 6066, 6065, 6070, 6067, 6072, + 6073, 6085, 6475, 6475, 6475, 6069, 6075, 6087, 6091, 6097, + 6098, 6102, 6104, 6092, 6094, 6105, 6107, 6110, 6084, 6106, + 6119, 6116, 6117, 6118, 6120, 6125, 6127, 6122, 6128, 6132, + 6475, 6133, 6475, 6134, 6475, 6475, 6136, 6138, 5936, 6141, - 6447, 6133, 6134, 6136, 6141, 6143, 6140, 6137, 6144, 6148, - 6447, 6447, 6151, 6152, 6157, 6161, 6158, 6168, 6164, 6167, - 6169, 6173, 6166, 6181, 6447, 6180, 6177, 6184, 6447, 6186, - 6187, 6188, 6189, 6191, 6198, 6193, 6194, 6447, 6196, 6447, - 6200, 6202, 6204, 6201, 6203, 6205, 6215, 6219, 6213, 6447, - 6217, 6227, 6221, 6229, 6231, 6233, 6234, 6223, 6236, 6239, - 6245, 6249, 6246, 6250, 6237, 6254, 6251, 6447, 6261, 6252, - 6447, 6258, 6262, 6255, 6264, 6265, 6447, 6269, 6272, 6273, - 6275, 6278, 6279, 6447, 6281, 6285, 6282, 6447, 6288, 6447, - 6447, 6290, 6287, 6294, 6297, 6299, 6447, 6447, 6447, 6327, + 6149, 6150, 6142, 6145, 6146, 6154, 6162, 6164, 6475, 6475, + 6151, 6153, 6475, 6155, 6166, 6475, 6157, 6171, 6167, 6168, + 6174, 6175, 6178, 6179, 6189, 6475, 6475, 6180, 6185, 6182, + 6191, 6192, 6199, 6195, 6202, 6204, 6205, 6198, 6212, 6475, + 6214, 6211, 6219, 6475, 6220, 6208, 6215, 6221, 6223, 6231, + 6226, 6228, 6475, 6229, 6475, 6233, 6234, 6239, 6235, 6236, + 6237, 6247, 6251, 6249, 6475, 6238, 6252, 6257, 6258, 6260, + 6263, 6265, 6266, 6270, 6273, 6275, 6280, 6267, 6281, 6271, + 6282, 6283, 6475, 6292, 6284, 6475, 6289, 6293, 6286, 6295, + 6296, 6475, 6300, 6301, 6304, 6306, 6309, 6310, 6475, 6312, - 6334, 6341, 6348, 6355, 6362, 6369, 88, 6376, 6383, 6390, - 6397, 6404, 6411, 6418, 6425, 6432, 6439 + 6316, 6318, 6475, 6319, 6475, 6475, 6321, 6313, 6322, 6328, + 6330, 6475, 6475, 6475, 6355, 6362, 6369, 6376, 6383, 6390, + 6397, 88, 6404, 6411, 6418, 6425, 6432, 6439, 6446, 6453, + 6460, 6467 } ; -static const flex_int16_t yy_def[3318] = +static const flex_int16_t yy_def[3333] = { 0, - 3299, 1, 3300, 3300, 3301, 3301, 3302, 3302, 3303, 3303, - 3304, 3304, 3305, 3305, 3306, 3306, 3299, 3307, 3299, 3299, - 3299, 3299, 3308, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3309, 3299, 3299, 3299, - 3309, 3310, 3299, 3299, 3299, 3310, 3311, 3299, 3299, 3299, - 3299, 3311, 3312, 3299, 3299, 3299, 3312, 3313, 3299, 3314, - 3299, 3313, 3313, 3315, 3299, 3299, 3299, 3299, 3315, 3316, - 3299, 3299, 3299, 3316, 3307, 3307, 3299, 3317, 3308, 3317, - 3308, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3314, 1, 3315, 3315, 3316, 3316, 3317, 3317, 3318, 3318, + 3319, 3319, 3320, 3320, 3321, 3321, 3314, 3322, 3314, 3314, + 3314, 3314, 3323, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3324, 3314, 3314, 3314, + 3324, 3325, 3314, 3314, 3314, 3325, 3326, 3314, 3314, 3314, + 3314, 3326, 3327, 3314, 3314, 3314, 3327, 3328, 3314, 3329, + 3314, 3328, 3328, 3330, 3314, 3314, 3314, 3314, 3330, 3331, + 3314, 3314, 3314, 3331, 3322, 3322, 3314, 3332, 3323, 3332, + 3323, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3309, 3309, 3310, - 3310, 3311, 3311, 3299, 3312, 3312, 3313, 3313, 3314, 3314, - 3313, 3315, 3315, 3299, 3316, 3316, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3324, 3324, 3325, + 3325, 3326, 3326, 3314, 3327, 3327, 3328, 3328, 3329, 3329, + 3328, 3330, 3330, 3314, 3331, 3331, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3313, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3328, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3313, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3328, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, - 3313, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, + 3328, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3307, 3313, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, - 3307, 3299, 3299, 3307, 3299, 3299, 3307, 3307, 3299, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3322, 3328, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, + 3322, 3314, 3314, 3322, 3314, 3314, 3322, 3322, 3314, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3313, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3299, 3307, 3307, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3328, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3314, 3322, 3322, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3299, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3299, 3299, 3307, 3307, 3307, 3307, 3307, 3299, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3314, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3314, 3314, 3322, 3322, 3322, 3322, 3322, 3314, - 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, - 3313, 3313, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, + 3322, 3328, 3328, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3313, 3307, 3307, - 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, + 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3328, + 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3299, 3307, 3299, 3307, 3307, 3307, - 3307, 3307, 3299, 3307, 3299, 3307, 3307, 3307, 3307, 3299, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, - 3307, 3313, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3314, 3322, + 3322, 3322, 3322, 3322, 3314, 3322, 3314, 3322, 3322, 3322, + 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3314, 3322, 3322, 3322, 3328, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3299, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3299, 3307, 3299, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3314, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3299, 3299, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3299, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3299, 3307, 3313, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3314, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, + 3314, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3314, 3322, 3322, 3328, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, - 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, - 3299, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3314, 3314, 3322, 3322, 3322, 3314, 3322, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, - 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, - 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3313, 3307, 3299, 3307, 3307, 3307, 3299, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3299, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, + 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3328, 3322, 3314, 3322, 3322, + 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3299, 3299, 3307, 3299, 3307, - 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3299, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3299, - 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, + 3322, 3322, 3314, 3322, 3314, 3322, 3322, 3322, 3314, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3314, 3314, 3322, 3314, 3322, 3322, 3322, 3314, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3314, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, + 3322, 3322, 3314, 3322, 3314, 3322, 3322, 3322, 3322, 3322, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, - 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, - 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3299, 3307, - 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3313, 3307, 3307, 3307, 3307, - 3307, 3307, 3299, 3299, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, + 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, + 3322, 3314, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, + 3322, 3322, 3314, 3314, 3322, 3314, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3328, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3314, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3299, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3314, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, - 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3299, 3307, 3299, 3307, 3307, 3307, 3307, - 3307, 3313, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3299, - 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, - 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, + 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3328, 3322, + 3314, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, + 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, - 3307, 3299, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3299, - 3299, 3307, 3307, 3307, 3307, 3307, 3299, 3299, 3307, 3299, - 3307, 3299, 3307, 3307, 3299, 3299, 3307, 3307, 3307, 3307, - 3307, 3299, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3299, - 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, - 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, + 3314, 3322, 3322, 3322, 3322, 3322, 3314, 3314, 3322, 3322, + 3322, 3322, 3322, 3314, 3314, 3322, 3314, 3322, 3314, 3322, + 3322, 3314, 3314, 3322, 3322, 3322, 3322, 3322, 3314, 3322, + 3314, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, + 3314, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, + 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3313, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3299, 3307, - 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3299, - 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3299, 3307, 3299, 3307, 3307, 3307, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3328, 3322, + 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3314, 3322, 3314, 3322, 3322, 3322, + 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3314, 3322, 3322, + 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3307, 3307, 3307, 3307, 3299, 3299, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, - 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3299, 3299, 3299, 3299, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, - 3299, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3313, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3299, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, + 3322, 3322, 3314, 3322, 3314, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3314, 3314, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, + 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3314, 3314, 3314, 3314, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3314, 3314, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3328, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, + 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3299, 3307, 3307, 3307, 3299, 3307, 3299, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3299, 3299, 3307, 3307, 3307, - 3299, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3299, 3307, 3299, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3299, 3307, - 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, 3307, - 3307, 3299, 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, - 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, 3299, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3299, 3299, 3307, 3313, 3307, 3307, 3307, 3307, 3307, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, + 3322, 3322, 3322, 3314, 3322, 3314, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3314, 3314, 3322, 3322, 3322, 3314, + 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3314, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3314, 3322, 3322, + 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, + 3314, 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, 3322, + 3314, 3322, 3322, 3322, 3322, 3314, 3322, 3314, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3307, 3307, 3307, 3307, 3299, 3299, 3307, 3299, 3307, 3307, - 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, - 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3299, - 3299, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, - 3307, 3299, 3299, 3307, 3307, 3307, 3307, 3299, 3307, 3299, - 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, + 3314, 3314, 3322, 3322, 3328, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3314, 3314, 3322, 3314, 3322, 3322, + 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, + 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3314, + 3314, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, + 3322, 3314, 3314, 3322, 3322, 3322, 3322, 3314, 3322, 3314, - 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3299, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3299, 3307, - 3307, 3299, 3307, 3299, 3307, 3299, 3307, 3307, 3307, 3307, - 3299, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, - 3299, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3299, 3299, 3299, 3307, 3307, 3307, 3307, 3307, 3307, + 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, + 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3314, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3314, + 3322, 3322, 3314, 3322, 3314, 3322, 3314, 3322, 3322, 3322, + 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, + 3322, 3314, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, - 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3299, 3307, 3299, 3299, 3307, 3299, 3307, 3307, 3307, - 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, - 3307, 3307, 3307, 3299, 3299, 3307, 3299, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, - 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, 3307, - 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, - 3307, 3307, 3299, 3299, 3307, 3307, 3307, 3299, 3299, 3299, + 3322, 3322, 3322, 3314, 3314, 3314, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3314, 3322, 3314, 3314, 3322, 3314, 3322, + 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, + 3314, 3322, 3322, 3322, 3322, 3314, 3314, 3322, 3314, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, + 3314, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, - 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, - 3299, 3307, 3307, 3307, 3299, 3299, 3307, 3307, 3307, 3307, - 3299, 3299, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3299, 3299, 3307, 3299, 3307, 3307, 3299, 3299, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, - 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3299, 3299, 3307, 3307, 3307, 3307, 3307, - 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, + 3322, 3314, 3322, 3322, 3322, 3314, 3314, 3322, 3322, 3322, + 3314, 3314, 3314, 3322, 3322, 3322, 3322, 3314, 3322, 3322, + 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3314, 3314, 3322, + 3322, 3322, 3322, 3314, 3314, 3322, 3322, 3322, 3322, 3322, + 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3314, 3322, 3314, + 3322, 3322, 3314, 3314, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3314, 3314, - 3307, 3299, 3299, 3299, 3307, 3299, 3299, 3307, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3307, 3299, 3307, 3307, 3307, - 3307, 3299, 3307, 3307, 3307, 3307, 3299, 3307, 3299, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3299, 3299, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3299, 3307, 3299, - 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3299, 3299, 3307, 3307, 3299, 3307, 3307, + 3322, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3314, 3322, 3322, 3314, 3314, 3314, 3322, + 3314, 3314, 3322, 3314, 3314, 3314, 3314, 3314, 3314, 3314, + 3322, 3314, 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, + 3322, 3314, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3314, 3314, 3314, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3314, 3322, 3314, 3322, 3314, 3314, 3322, 3322, 3322, 3322, - 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3299, 3299, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3299, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3299, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3307, - 3307, 3307, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, - 3299, 3307, 3307, 3307, 3307, 3307, 3299, 3307, 3307, 3307, - 3307, 3307, 3307, 3299, 3307, 3307, 3307, 3299, 3307, 3299, - 3299, 3307, 3307, 3307, 3307, 3307, 3299, 3299, 0, 3299, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3314, + 3322, 3322, 3314, 3322, 3322, 3314, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3314, 3314, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3314, + 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3314, 3322, 3314, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3314, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, 3322, + 3322, 3322, 3314, 3322, 3322, 3314, 3322, 3322, 3322, 3322, + 3322, 3314, 3322, 3322, 3322, 3322, 3322, 3322, 3314, 3322, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299 + 3322, 3322, 3314, 3322, 3314, 3314, 3322, 3322, 3322, 3322, + 3322, 3314, 3314, 0, 3314, 3314, 3314, 3314, 3314, 3314, + 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, + 3314, 3314 } ; -static const flex_int16_t yy_nxt[6488] = +static const flex_int16_t yy_nxt[6516] = { 0, 18, 19, 20, 21, 22, 23, 22, 18, 18, 18, 18, 18, 22, 24, 25, 26, 27, 28, 29, 30, @@ -1529,19 +1535,19 @@ static const flex_int16_t yy_nxt[6488] = 94, 157, 99, 86, 110, 95, 100, 160, 86, 101, 160, 168, 86, 112, 96, 86, 165, 165, 111, 86, 102, 113, 135, 115, 103, 171, 116, 104, 86, 105, - 106, 177, 114, 117, 168, 118, 86, 122, 86, 126, - 107, 86, 154, 127, 176, 123, 155, 86, 86, 136, + 106, 177, 114, 117, 86, 118, 86, 122, 86, 126, + 107, 86, 154, 127, 1484, 123, 155, 86, 86, 136, 156, 124, 130, 137, 86, 125, 131, 86, 146, 128, 147, 179, 132, 138, 139, 133, 140, 86, 86, 148, 87, 150, 134, 141, 88, 149, 142, 162, 86, 162, - 162, 151, 162, 143, 174, 152, 153, 144, 145, 90, + 162, 151, 162, 143, 168, 152, 153, 144, 145, 90, 180, 90, 90, 167, 90, 167, 167, 172, 167, 172, 172, 170, 172, 175, 175, 85, 86, 85, 85, 90, 85, 90, 90, 86, 90, 86, 85, 178, 182, 86, 90, 91, 183, 86, 86, 86, 181, 86, 86, 86, 195, 188, 186, 86, 86, 184, 86, 189, 187, 190, - 86, 86, 86, 173, 86, 191, 192, 197, 194, 196, + 86, 86, 86, 176, 86, 191, 192, 197, 194, 196, 193, 86, 203, 86, 198, 200, 201, 205, 86, 86, 204, 199, 86, 202, 207, 209, 86, 213, 210, 86, @@ -1555,7 +1561,7 @@ static const flex_int16_t yy_nxt[6488] = 86, 245, 256, 86, 255, 246, 253, 86, 86, 259, 86, 86, 86, 251, 86, 263, 252, 254, 260, 258, - 262, 257, 86, 264, 158, 158, 267, 266, 160, 168, + 262, 257, 86, 264, 158, 158, 267, 266, 160, 174, 261, 160, 265, 162, 168, 162, 162, 268, 162, 165, 165, 167, 86, 167, 167, 90, 167, 90, 90, 172, 90, 172, 172, 86, 172, 175, 175, 170, 269, 270, @@ -1587,7 +1593,7 @@ static const flex_int16_t yy_nxt[6488] = 399, 86, 402, 393, 394, 397, 86, 86, 86, 86, 396, 395, 400, 86, 403, 401, 86, 86, 86, 405, - 86, 406, 166, 398, 407, 404, 86, 86, 86, 409, + 86, 406, 173, 398, 407, 404, 86, 86, 86, 409, 86, 408, 410, 86, 413, 415, 411, 417, 86, 412, 86, 86, 86, 86, 416, 86, 422, 414, 86, 418, 86, 420, 86, 421, 423, 86, 86, 86, 425, 86, @@ -1609,13 +1615,13 @@ static const flex_int16_t yy_nxt[6488] = 515, 86, 512, 86, 552, 86, 503, 86, 504, 510, 505, 513, 511, 514, 526, 517, 516, 168, 525, 527, - 86, 86, 164, 506, 528, 86, 507, 86, 508, 86, + 86, 86, 168, 506, 528, 86, 507, 86, 508, 86, 509, 86, 86, 518, 519, 529, 533, 86, 531, 532, 86, 534, 530, 520, 86, 521, 522, 523, 536, 540, 524, 86, 86, 537, 86, 86, 535, 542, 539, 541, 538, 86, 86, 86, 86, 86, 549, 86, 547, 86, 550, 544, 86, 86, 554, 543, 86, 546, 86, 548, - 86, 545, 86, 86, 86, 551, 163, 553, 557, 86, + 86, 545, 86, 86, 86, 551, 166, 553, 557, 86, 558, 559, 555, 86, 556, 86, 560, 86, 561, 86, 562, 565, 566, 563, 86, 86, 86, 571, 568, 569, 86, 86, 573, 86, 572, 585, 86, 86, 86, 567, @@ -1631,13 +1637,13 @@ static const flex_int16_t yy_nxt[6488] = 613, 612, 86, 619, 86, 621, 86, 623, 86, 86, 86, 620, 86, 86, 86, 86, 622, 625, 86, 626, - 86, 634, 653, 624, 628, 86, 161, 86, 627, 86, + 86, 634, 653, 624, 628, 86, 164, 86, 627, 86, 636, 629, 631, 630, 633, 632, 86, 86, 635, 638, 86, 86, 637, 86, 641, 86, 644, 86, 639, 647, 86, 640, 86, 646, 86, 86, 86, 642, 86, 86, 643, 650, 86, 86, 654, 86, 86, 645, 649, 86, 656, 86, 86, 648, 86, 86, 86, 86, 655, 670, - 651, 673, 657, 652, 659, 86, 159, 86, 658, 86, + 651, 673, 657, 652, 659, 86, 163, 86, 658, 86, 660, 669, 668, 671, 86, 661, 680, 662, 86, 677, 86, 672, 86, 663, 86, 664, 681, 674, 665, 666, 86, 675, 86, 676, 86, 667, 678, 682, 86, 679, @@ -1650,7 +1656,7 @@ static const flex_int16_t yy_nxt[6488] = 710, 715, 86, 86, 705, 707, 716, 714, 718, 708, 711, 86, 86, 709, 86, 717, 86, 86, 86, 720, 86, 86, 713, 719, 724, 723, 86, 86, 86, 732, - 86, 721, 729, 722, 86, 725, 86, 730, 86, 733, + 86, 721, 729, 722, 86, 725, 161, 730, 86, 733, 86, 731, 726, 728, 734, 727, 735, 86, 736, 86, 86, 737, 86, 738, 86, 740, 86, 86, 739, 86, @@ -1697,7 +1703,7 @@ static const flex_int16_t yy_nxt[6488] = 86, 86, 936, 937, 86, 938, 86, 86, 939, 86, 946, 948, 86, 940, 944, 86, 945, 950, 86, 941, - 942, 176, 86, 86, 952, 954, 955, 949, 947, 86, + 942, 159, 86, 86, 952, 954, 955, 949, 947, 86, 957, 956, 86, 86, 951, 86, 958, 86, 960, 86, 961, 86, 962, 953, 959, 86, 964, 86, 963, 965, 86, 86, 86, 966, 86, 86, 86, 86, 969, 967, @@ -1714,7 +1720,7 @@ static const flex_int16_t yy_nxt[6488] = 86, 1018, 86, 86, 1019, 1008, 86, 1016, 86, 1014, 86, 86, 1026, 1020, 1024, 1022, 1027, 86, 86, 1021, 86, 86, 1025, 86, 86, 1029, 86, 86, 86, 86, - 86, 86, 1023, 174, 1037, 86, 86, 1035, 86, 1028, + 86, 86, 1023, 86, 1037, 86, 86, 1035, 86, 1028, 1040, 86, 1030, 1031, 1032, 1041, 86, 1034, 1033, 1038, 1042, 86, 1036, 86, 1039, 86, 86, 1048, 86, 1045, 1043, 1047, 86, 86, 86, 1044, 86, 86, 86, 1046, @@ -1724,508 +1730,512 @@ static const flex_int16_t yy_nxt[6488] = 1054, 1056, 1059, 86, 86, 86, 1061, 1064, 86, 86, 86, 1070, 1071, 1068, 1065, 86, 86, 1066, 86, 1072, 1075, 86, 86, 1077, 86, 1067, 86, 86, 86, 86, - 1069, 86, 1081, 1073, 1074, 86, 1079, 1082, 168, 86, - 86, 1085, 1076, 1084, 1080, 1078, 86, 86, 86, 86, - 1083, 1086, 1088, 86, 86, 86, 86, 86, 1101, 86, - 1104, 86, 86, 1102, 86, 86, 1087, 1089, 1091, 1092, - 86, 173, 86, 1090, 1094, 1093, 86, 1103, 86, 1095, + 1069, 86, 1082, 1073, 1074, 86, 1079, 1083, 168, 86, + 86, 1086, 1076, 1085, 1080, 1078, 1081, 86, 86, 86, + 1084, 1087, 86, 1089, 86, 86, 86, 86, 86, 1102, + 86, 1105, 86, 86, 1103, 86, 176, 1088, 1090, 1092, + 1093, 86, 86, 86, 1094, 1107, 1091, 1095, 86, 86, - 1107, 1096, 1106, 86, 1108, 1097, 1110, 1098, 1109, 1105, - 1111, 86, 1099, 86, 86, 1112, 86, 1100, 1115, 86, - 1113, 86, 86, 86, 86, 86, 1118, 1114, 86, 1121, - 1116, 86, 86, 86, 1117, 1120, 1119, 86, 1126, 1122, - 1125, 86, 1124, 1123, 1128, 1129, 1127, 1130, 86, 1131, - 86, 86, 1132, 86, 86, 1133, 1134, 86, 86, 86, - 86, 86, 1147, 86, 1144, 86, 86, 86, 86, 1143, - 1148, 1135, 86, 1136, 1145, 1146, 1149, 86, 1137, 86, - 1138, 1150, 1154, 86, 86, 1151, 1139, 86, 86, 1155, - 86, 1140, 1141, 86, 86, 1153, 1152, 86, 1142, 1156, + 1104, 1096, 86, 1097, 1110, 1121, 1109, 1098, 1106, 1099, + 86, 86, 86, 86, 1100, 1112, 1116, 1108, 86, 1101, + 1113, 86, 1114, 86, 1111, 1115, 86, 86, 1117, 86, + 86, 1119, 1122, 1118, 86, 86, 86, 1123, 86, 1129, + 1128, 1120, 1127, 1126, 1125, 86, 1130, 1131, 86, 1132, + 1124, 1133, 86, 86, 86, 86, 86, 86, 86, 86, + 1134, 86, 86, 1145, 86, 1148, 1149, 86, 1144, 86, + 86, 1147, 1135, 1136, 86, 1137, 1146, 1150, 86, 86, + 1138, 1151, 1139, 86, 1155, 86, 86, 86, 1140, 1152, + 86, 1156, 86, 1141, 1142, 1154, 86, 1153, 86, 1157, - 86, 1157, 1160, 86, 1161, 86, 1158, 1163, 1164, 86, - 86, 1159, 1168, 86, 1162, 1166, 1165, 86, 86, 86, - 86, 86, 1167, 86, 1169, 1174, 86, 86, 86, 1171, - 1172, 86, 86, 1177, 86, 1175, 1170, 86, 86, 1173, - 86, 86, 86, 86, 86, 86, 1176, 1184, 1179, 1182, - 1181, 1183, 1178, 1186, 86, 86, 86, 1180, 1188, 86, - 1185, 1187, 86, 86, 86, 86, 86, 86, 86, 1191, - 1194, 1195, 1196, 1197, 1189, 1190, 86, 1198, 1193, 1199, - 1192, 1200, 86, 1202, 86, 86, 86, 1204, 1203, 86, - 1205, 86, 86, 86, 1206, 86, 86, 86, 1201, 1213, + 1143, 1158, 1162, 1160, 1161, 86, 1164, 86, 1159, 86, + 1165, 86, 86, 86, 1169, 86, 1163, 86, 1167, 86, + 86, 86, 1170, 86, 1168, 1175, 86, 86, 1166, 86, + 1172, 86, 1173, 86, 1171, 1174, 1176, 86, 1178, 86, + 86, 86, 86, 86, 86, 1177, 86, 86, 1185, 1179, + 1183, 1180, 1182, 1184, 86, 1187, 86, 86, 86, 1181, + 1186, 86, 1188, 86, 86, 86, 174, 1190, 1189, 1195, + 1196, 1192, 86, 86, 86, 1191, 1193, 1197, 1194, 86, + 1199, 1200, 1198, 86, 86, 1205, 1203, 86, 1206, 86, + 1202, 1204, 86, 86, 86, 86, 1201, 1207, 86, 86, - 86, 1215, 86, 86, 1208, 86, 1207, 86, 1217, 1209, - 1211, 1212, 86, 1210, 86, 86, 86, 1216, 1219, 86, - 1214, 1221, 86, 86, 1222, 86, 1218, 86, 1224, 86, - 1225, 86, 1231, 86, 86, 1220, 1230, 1227, 1223, 1226, - 1229, 86, 86, 86, 86, 1228, 86, 1234, 86, 1235, - 1232, 86, 86, 86, 86, 86, 1239, 1241, 86, 1242, - 1243, 1233, 86, 86, 1236, 86, 86, 1240, 86, 1246, - 1237, 1244, 1238, 1245, 1249, 86, 1247, 86, 86, 86, - 86, 86, 1248, 1250, 1251, 86, 1252, 86, 1253, 86, - 86, 86, 1256, 1257, 86, 86, 86, 1262, 1263, 1254, + 86, 1214, 86, 1208, 1216, 86, 86, 86, 173, 86, + 86, 1210, 1212, 1209, 1218, 1213, 1211, 86, 86, 86, + 1217, 1220, 1215, 86, 1222, 86, 86, 1221, 1223, 86, + 86, 1219, 86, 86, 1225, 1226, 86, 1231, 1227, 1228, + 86, 1224, 1230, 86, 1232, 86, 86, 86, 1229, 1233, + 1235, 86, 1236, 86, 86, 86, 86, 86, 86, 1240, + 1242, 1243, 1247, 1244, 1234, 86, 86, 86, 86, 86, + 1241, 1237, 86, 1238, 1245, 1239, 86, 1246, 1250, 86, + 86, 1252, 86, 1248, 86, 1251, 86, 86, 1253, 86, + 86, 86, 86, 1257, 1258, 1254, 1249, 86, 86, 86, - 86, 86, 1258, 86, 86, 1265, 1255, 1260, 1266, 86, - 86, 86, 1259, 1270, 86, 1261, 1264, 86, 86, 86, - 86, 86, 86, 1276, 86, 1268, 1269, 86, 1272, 1267, - 168, 86, 1277, 86, 86, 86, 1271, 86, 86, 1273, - 86, 1275, 1282, 1283, 168, 1279, 1274, 1281, 1280, 1286, - 1278, 1284, 86, 1287, 86, 86, 1288, 86, 1285, 86, - 86, 86, 1289, 1290, 86, 1291, 86, 86, 1292, 86, - 86, 1294, 86, 86, 1300, 86, 86, 1297, 1293, 86, - 86, 86, 1295, 86, 86, 1311, 86, 1298, 1296, 1304, - 1301, 1306, 1299, 86, 86, 1303, 86, 1302, 1310, 86, + 1263, 1264, 86, 1259, 86, 1255, 86, 86, 1256, 1266, + 1261, 1267, 86, 86, 86, 1260, 1271, 1265, 1262, 86, + 86, 86, 86, 86, 86, 86, 1277, 86, 1269, 86, + 86, 1270, 1268, 1273, 1278, 1279, 168, 86, 86, 1272, + 86, 1274, 86, 86, 1276, 86, 86, 1284, 1275, 1286, + 86, 1281, 1283, 1282, 1285, 1288, 1280, 86, 1289, 1292, + 86, 86, 1290, 1287, 86, 1291, 86, 86, 86, 86, + 86, 1293, 86, 86, 1296, 86, 86, 1302, 86, 86, + 1299, 1294, 1295, 86, 86, 1297, 86, 86, 86, 86, + 1300, 1298, 1306, 1303, 1308, 1301, 86, 86, 1313, 1305, - 1307, 1305, 1308, 1314, 1312, 1309, 1313, 86, 86, 86, - 86, 1318, 1316, 86, 86, 86, 86, 86, 1320, 86, - 86, 86, 1315, 1319, 1323, 1327, 86, 86, 1322, 1317, - 86, 1324, 1325, 86, 1321, 1328, 86, 86, 1329, 1326, - 86, 1331, 86, 86, 1332, 86, 1333, 1330, 86, 86, - 86, 86, 86, 86, 86, 86, 1339, 1334, 1335, 86, - 1337, 1344, 86, 1340, 1336, 1338, 86, 86, 86, 86, - 86, 1341, 1343, 86, 1342, 86, 1348, 1345, 86, 1346, - 86, 86, 1351, 1349, 1356, 86, 1347, 86, 1350, 86, - 86, 86, 1352, 1354, 86, 1357, 1362, 1359, 1364, 1358, + 1312, 1304, 1317, 1309, 86, 1310, 86, 1307, 1311, 1314, + 1315, 86, 86, 1316, 86, 1318, 86, 86, 86, 86, + 86, 86, 86, 1322, 86, 86, 1321, 1325, 1329, 86, + 86, 168, 1324, 1319, 1320, 1326, 1327, 86, 1323, 86, + 86, 86, 1330, 1328, 1331, 1333, 86, 86, 86, 86, + 1332, 1334, 86, 86, 86, 1335, 1336, 86, 86, 86, + 1341, 86, 86, 1337, 1339, 86, 86, 86, 1338, 1340, + 1342, 1346, 86, 86, 86, 86, 1343, 1347, 86, 1345, + 1344, 1350, 86, 86, 86, 1358, 1348, 1349, 1351, 86, + 1353, 86, 86, 1352, 1354, 86, 86, 86, 1356, 86, - 1353, 1355, 86, 1365, 86, 86, 86, 1360, 86, 86, - 1361, 86, 1369, 1379, 1363, 86, 1380, 166, 86, 86, - 1367, 1368, 1377, 86, 1366, 86, 1370, 1378, 1381, 1383, - 1371, 86, 86, 1372, 1373, 86, 86, 1384, 1374, 86, - 1382, 1385, 86, 1386, 1375, 86, 1388, 86, 1376, 86, - 1389, 86, 1390, 86, 86, 86, 1395, 86, 86, 86, - 1387, 1398, 1399, 1393, 164, 86, 1414, 86, 86, 1391, - 1400, 1392, 1396, 86, 86, 1394, 86, 1397, 1401, 86, - 1407, 86, 1402, 1408, 1409, 86, 86, 1403, 86, 1404, - 86, 1405, 1410, 1406, 1411, 86, 1415, 86, 1418, 86, + 1361, 86, 86, 1360, 1357, 86, 1364, 1355, 86, 1366, + 1359, 1365, 86, 1363, 1367, 86, 1362, 86, 1371, 1369, + 86, 1368, 1381, 86, 1565, 1370, 86, 1372, 86, 86, + 1382, 1373, 1380, 1379, 1374, 1375, 86, 86, 1385, 1376, + 86, 1383, 86, 86, 86, 1377, 1384, 1386, 1387, 1378, + 86, 1388, 86, 1390, 86, 86, 86, 1391, 86, 1392, + 86, 1389, 86, 86, 86, 1400, 1401, 1395, 1397, 166, + 86, 86, 86, 86, 1394, 1393, 1398, 86, 1402, 1404, + 1396, 1403, 1399, 86, 1405, 86, 1406, 86, 1407, 1413, + 1408, 86, 1409, 1410, 1411, 86, 86, 86, 1412, 1417, - 1412, 1416, 86, 86, 1417, 86, 1413, 86, 1419, 86, - 1425, 1420, 86, 1426, 1421, 86, 86, 86, 1422, 86, - 86, 86, 86, 1424, 1429, 1427, 1423, 86, 86, 1428, - 1431, 1435, 86, 1434, 1430, 86, 1437, 86, 86, 86, - 1432, 1438, 86, 1440, 86, 1439, 86, 1443, 86, 86, - 1436, 86, 1433, 1445, 86, 1442, 86, 1446, 86, 86, - 1450, 86, 86, 1441, 1447, 86, 86, 86, 1452, 1444, - 86, 86, 1448, 1456, 86, 1454, 1455, 86, 86, 1449, - 1458, 86, 1451, 86, 86, 86, 1453, 163, 1460, 1462, - 86, 86, 1457, 1459, 86, 1461, 1464, 86, 1463, 1465, + 86, 1415, 86, 86, 1418, 86, 1416, 86, 1421, 1419, + 1414, 86, 86, 86, 86, 86, 1427, 86, 1428, 86, + 1423, 1422, 86, 1429, 1420, 86, 86, 86, 1426, 86, + 1431, 1424, 1425, 1430, 86, 86, 1433, 86, 1437, 86, + 1432, 86, 1436, 1439, 86, 86, 86, 1434, 1440, 86, + 1438, 86, 1441, 86, 1444, 86, 1442, 1445, 86, 1435, + 1443, 1447, 86, 86, 1448, 86, 86, 1452, 86, 86, + 1449, 86, 86, 1446, 1454, 86, 1450, 86, 86, 86, + 1456, 1458, 86, 86, 164, 1460, 1457, 1451, 86, 1453, + 86, 86, 1455, 1462, 86, 86, 1459, 86, 1461, 1464, - 86, 1466, 1467, 1468, 86, 86, 86, 1472, 1473, 1475, - 1469, 86, 1470, 86, 86, 86, 1474, 86, 86, 1471, - 86, 1479, 86, 86, 86, 168, 1476, 86, 86, 1485, - 1486, 1478, 86, 1488, 86, 86, 86, 1477, 1487, 86, - 1482, 86, 1481, 1480, 86, 86, 86, 1483, 1489, 86, - 86, 1484, 86, 1496, 1490, 86, 86, 1493, 86, 86, - 1494, 1491, 86, 1500, 1492, 1501, 86, 1495, 86, 86, - 1497, 1505, 161, 1503, 1499, 86, 1506, 86, 86, 86, - 1498, 1504, 1502, 86, 1508, 86, 1509, 1507, 86, 86, - 86, 86, 1520, 1510, 1514, 1519, 86, 1515, 1511, 1516, + 86, 86, 1466, 1465, 1463, 1467, 86, 1468, 86, 1470, + 86, 86, 86, 1469, 1473, 1474, 1471, 1475, 1472, 86, + 1477, 86, 86, 86, 1476, 86, 86, 86, 1481, 86, + 86, 1478, 1482, 86, 168, 86, 1488, 1489, 1480, 86, + 1491, 86, 86, 86, 1479, 1490, 86, 86, 1483, 1485, + 86, 86, 86, 1486, 86, 1492, 86, 1499, 1487, 86, + 86, 1493, 86, 1496, 86, 86, 1497, 1494, 86, 1503, + 1495, 86, 1498, 1504, 86, 86, 1506, 1508, 86, 1500, + 1502, 86, 1509, 86, 86, 1501, 1512, 1507, 1505, 86, + 1511, 86, 86, 1510, 86, 86, 86, 1517, 1513, 86, - 1512, 86, 86, 1513, 1517, 1518, 1522, 1521, 86, 86, - 86, 1523, 86, 86, 86, 86, 86, 86, 1527, 1528, - 86, 86, 1531, 86, 86, 86, 1536, 1524, 1526, 86, - 86, 86, 1540, 1529, 1537, 1525, 1530, 1533, 86, 1534, - 1532, 86, 1535, 86, 86, 86, 86, 1538, 86, 86, - 1539, 86, 86, 1541, 1547, 86, 1549, 86, 1543, 1548, - 1544, 1545, 1542, 86, 1552, 86, 1551, 1546, 86, 86, - 86, 1556, 1557, 1550, 86, 1558, 86, 1554, 86, 86, - 1553, 86, 1560, 86, 86, 1561, 86, 1565, 1559, 1555, - 1566, 1564, 1562, 86, 1567, 86, 86, 86, 1568, 1571, + 1518, 1520, 1522, 1519, 1514, 86, 1515, 86, 86, 1516, + 1521, 1523, 1525, 86, 1527, 86, 1524, 1526, 86, 86, + 86, 86, 86, 86, 1530, 1531, 86, 86, 1534, 86, + 86, 86, 1539, 1529, 86, 86, 86, 86, 1540, 1528, + 1532, 1533, 86, 1536, 1543, 1537, 1535, 86, 1538, 1544, + 86, 86, 86, 1541, 86, 1542, 86, 86, 86, 86, + 86, 1545, 1547, 1550, 1551, 1546, 86, 1548, 1554, 86, + 1555, 1552, 86, 1549, 1553, 1556, 86, 86, 1559, 1560, + 1561, 1557, 86, 86, 86, 86, 86, 1563, 86, 86, + 1564, 86, 1568, 1569, 1567, 1570, 1558, 1562, 86, 86, - 86, 86, 1569, 1570, 86, 1563, 86, 86, 86, 86, - 86, 86, 86, 1578, 86, 1572, 86, 1577, 86, 86, - 1574, 86, 86, 1575, 1580, 1573, 1576, 1581, 86, 1589, - 1584, 86, 1582, 86, 1579, 1585, 86, 1586, 1583, 86, - 86, 1588, 1587, 86, 86, 1593, 86, 86, 1592, 1597, - 1590, 86, 1591, 86, 1600, 86, 1598, 86, 86, 86, - 86, 1603, 86, 1594, 1602, 1596, 1595, 86, 86, 86, - 86, 86, 86, 1611, 86, 159, 1601, 86, 1604, 1599, - 1612, 1605, 86, 86, 1608, 1614, 86, 1606, 1607, 1610, - 1615, 86, 1609, 86, 1613, 86, 1618, 86, 1616, 1617, + 1575, 86, 86, 1566, 86, 1571, 86, 1572, 1573, 86, + 86, 86, 86, 86, 1574, 86, 86, 1581, 86, 86, + 1576, 86, 1580, 1577, 86, 86, 1578, 1583, 1579, 1584, + 86, 1587, 86, 1592, 1589, 1585, 1588, 86, 1582, 1590, + 86, 86, 86, 86, 1586, 86, 86, 86, 86, 1600, + 1591, 1596, 1595, 86, 86, 86, 1603, 86, 1601, 86, + 1593, 1594, 86, 1606, 1597, 1605, 1599, 1598, 86, 86, + 86, 86, 86, 86, 86, 86, 1604, 86, 86, 1614, + 1602, 86, 1786, 86, 1615, 1617, 86, 1607, 1611, 1608, + 1609, 1610, 1613, 86, 1612, 1616, 1618, 86, 1619, 86, - 86, 86, 86, 1621, 86, 86, 1619, 1622, 86, 86, - 1625, 1629, 86, 1620, 86, 1631, 86, 1626, 86, 1630, - 1623, 86, 1624, 86, 86, 1628, 86, 86, 1627, 1634, - 1635, 1632, 86, 86, 1640, 86, 1633, 1636, 1637, 86, - 86, 1641, 86, 86, 1646, 1638, 86, 1645, 1644, 86, - 86, 86, 1639, 1642, 1648, 86, 86, 1650, 86, 1649, - 1643, 86, 86, 86, 86, 1653, 86, 1651, 86, 1647, - 86, 1656, 86, 1655, 86, 86, 86, 1652, 86, 1660, - 86, 1657, 86, 1654, 86, 1662, 86, 1663, 86, 1658, - 1661, 1659, 86, 1664, 86, 1665, 86, 1667, 86, 1670, + 86, 86, 86, 1620, 86, 86, 86, 1624, 86, 86, + 1622, 1625, 86, 1621, 1628, 1623, 86, 1632, 86, 163, + 86, 1629, 1627, 1634, 1626, 1633, 86, 1635, 1630, 86, + 86, 86, 1631, 86, 86, 1637, 86, 1638, 1639, 1636, + 86, 1643, 1644, 86, 86, 86, 1649, 86, 86, 86, + 1648, 1640, 86, 1647, 1641, 86, 1651, 86, 86, 86, + 1642, 1652, 1645, 1653, 86, 86, 1646, 86, 86, 86, + 86, 1656, 86, 1659, 86, 1650, 86, 86, 1658, 1657, + 86, 1654, 86, 1655, 86, 1660, 86, 1663, 86, 1665, + 1664, 86, 86, 1666, 86, 1661, 1662, 86, 1667, 86, - 1668, 1672, 86, 86, 86, 86, 1669, 1666, 1673, 86, - 1675, 86, 1674, 1671, 86, 1678, 1677, 86, 1681, 86, - 168, 86, 1680, 86, 86, 1676, 86, 86, 86, 86, - 1690, 86, 86, 1679, 1682, 86, 1683, 1691, 1685, 1694, - 86, 1684, 1688, 86, 86, 1686, 1687, 86, 1696, 86, - 86, 1692, 1689, 1695, 86, 1693, 1698, 86, 1700, 1702, - 86, 86, 1699, 86, 86, 86, 86, 1697, 1707, 1701, - 1704, 86, 1706, 86, 1703, 86, 1709, 86, 1710, 86, - 1705, 86, 86, 86, 86, 1714, 86, 1715, 86, 86, - 1722, 86, 86, 1711, 1724, 86, 86, 1708, 1713, 1712, + 1670, 1668, 1673, 86, 1675, 86, 1671, 86, 86, 86, + 1678, 1676, 1672, 86, 86, 86, 1669, 86, 1674, 1681, + 86, 86, 1684, 86, 86, 1680, 1683, 168, 1677, 1686, + 86, 86, 86, 1685, 86, 1679, 1682, 86, 1694, 86, + 86, 86, 86, 1687, 86, 1689, 1695, 86, 1688, 1698, + 86, 1690, 1691, 1692, 86, 86, 1699, 1702, 86, 1693, + 1696, 86, 1697, 1700, 1701, 1704, 1703, 1706, 86, 1708, + 86, 86, 86, 86, 1705, 86, 86, 86, 86, 86, + 1713, 1710, 1707, 1711, 86, 1714, 86, 86, 86, 1718, + 86, 1709, 86, 1719, 86, 1716, 86, 86, 1726, 86, - 1717, 86, 1716, 86, 1719, 86, 86, 1720, 1723, 1718, - 1725, 1727, 86, 1739, 1726, 1729, 1731, 1728, 1732, 1721, - 1730, 86, 86, 86, 86, 86, 1734, 1736, 1733, 86, - 1735, 86, 86, 86, 86, 86, 1737, 86, 1743, 86, - 1742, 1744, 86, 86, 86, 1738, 1746, 86, 1745, 86, - 1749, 86, 86, 1740, 1748, 1741, 86, 86, 86, 86, - 1751, 1750, 1747, 86, 86, 86, 86, 86, 86, 86, - 1760, 1759, 86, 1754, 86, 3299, 86, 1752, 1753, 1755, - 1756, 1757, 86, 86, 1762, 1765, 1763, 86, 1761, 1758, - 86, 86, 86, 1771, 86, 1764, 1766, 86, 86, 1767, + 1712, 1715, 1723, 1717, 86, 1724, 1721, 86, 1720, 86, + 86, 161, 1727, 1728, 86, 1735, 1722, 1725, 1730, 1731, + 86, 86, 1732, 1733, 1734, 86, 1736, 86, 86, 1729, + 86, 1738, 86, 1737, 86, 1739, 1740, 86, 86, 86, + 1742, 86, 86, 1741, 86, 1747, 1748, 1746, 86, 86, + 1750, 86, 86, 1749, 86, 1743, 86, 86, 1744, 1752, + 86, 1745, 1753, 86, 86, 1754, 86, 86, 86, 86, + 86, 86, 1751, 86, 86, 1755, 1764, 1763, 86, 86, + 86, 1758, 1759, 1760, 1756, 86, 1757, 1769, 1761, 86, + 86, 1766, 1767, 86, 86, 86, 1762, 1765, 1768, 86, - 86, 86, 1775, 1773, 1769, 86, 86, 1768, 86, 86, - 86, 86, 1774, 1770, 86, 86, 86, 1772, 86, 1780, - 1776, 1782, 1777, 86, 86, 1783, 1781, 1779, 1784, 86, - 1778, 1785, 1789, 1786, 1790, 86, 1791, 86, 1787, 86, - 86, 86, 1793, 1794, 1795, 86, 86, 86, 1788, 86, - 86, 1792, 1798, 86, 1796, 1799, 86, 86, 86, 1808, - 86, 86, 86, 86, 86, 1797, 1802, 1804, 1800, 1801, - 1805, 1806, 1807, 86, 86, 1803, 1810, 86, 86, 86, - 86, 1809, 1811, 86, 1817, 86, 86, 1812, 86, 1814, - 1813, 86, 1821, 1820, 86, 1819, 86, 86, 1816, 1825, + 1775, 86, 86, 86, 86, 86, 1771, 86, 1777, 1770, + 86, 1779, 86, 1773, 1772, 86, 1774, 1778, 86, 1780, + 86, 1781, 1776, 86, 86, 86, 86, 1784, 86, 1794, + 86, 1793, 86, 1783, 1787, 1785, 1782, 1788, 86, 1789, + 86, 1790, 1795, 86, 1796, 86, 1791, 86, 1798, 1792, + 1799, 86, 86, 1800, 86, 86, 1797, 1802, 86, 1803, + 86, 86, 86, 86, 1811, 86, 1801, 1806, 1812, 86, + 86, 1810, 1808, 86, 1804, 1809, 1805, 86, 86, 86, + 1807, 86, 86, 86, 86, 1813, 1814, 86, 1821, 86, + 159, 1818, 1816, 86, 86, 1815, 86, 1817, 1823, 1824, - 86, 1818, 86, 86, 1815, 1823, 1822, 1829, 1824, 86, - 86, 86, 1830, 86, 3299, 1826, 1834, 1831, 86, 1835, - 1828, 1827, 1837, 86, 1832, 86, 86, 1838, 1840, 86, - 86, 1839, 1833, 86, 86, 1841, 1836, 86, 1844, 86, - 86, 1848, 86, 1846, 86, 86, 86, 86, 86, 1847, - 1842, 1843, 1845, 1849, 86, 86, 1852, 86, 86, 86, - 86, 1850, 86, 1853, 86, 1851, 1858, 86, 1854, 1860, - 1855, 1861, 1856, 1857, 86, 86, 86, 86, 1863, 86, - 1864, 1866, 1865, 86, 1868, 86, 86, 1862, 1859, 1867, - 86, 1872, 86, 86, 86, 86, 86, 86, 1874, 168, + 1822, 1820, 86, 1825, 86, 1827, 86, 1819, 1828, 1829, + 86, 1830, 86, 1833, 86, 86, 86, 1826, 1834, 86, + 86, 1838, 1841, 86, 1839, 1842, 1835, 1831, 1832, 1836, + 86, 86, 86, 86, 86, 1844, 86, 1837, 1840, 1843, + 1848, 86, 1845, 86, 1852, 86, 86, 1847, 1850, 86, + 86, 86, 1846, 86, 1851, 86, 1849, 1853, 86, 86, + 86, 86, 86, 1856, 86, 1862, 86, 1857, 86, 1864, + 1854, 1865, 1855, 1858, 1859, 86, 1860, 86, 1861, 1867, + 86, 1866, 86, 86, 86, 86, 1872, 1863, 86, 86, + 86, 86, 86, 1876, 86, 86, 86, 86, 1871, 1878, - 1875, 1870, 1876, 86, 1871, 1869, 86, 86, 1877, 86, - 86, 1881, 86, 1873, 86, 1878, 1880, 1883, 86, 1879, - 1887, 86, 86, 86, 1882, 86, 1885, 86, 86, 1884, - 1889, 1886, 86, 86, 1894, 86, 1888, 1890, 86, 1891, - 86, 1898, 86, 86, 1897, 1895, 1899, 1892, 1900, 86, - 86, 86, 1893, 1896, 86, 1901, 1903, 1904, 86, 86, - 1902, 1906, 86, 86, 86, 86, 1905, 1907, 86, 86, - 86, 86, 86, 86, 1912, 86, 1913, 86, 86, 86, - 86, 1914, 1917, 1908, 1921, 1915, 1910, 1909, 1911, 1918, - 1916, 1922, 86, 86, 1925, 86, 86, 1923, 1920, 1926, + 3314, 1869, 1868, 1870, 86, 1874, 1882, 86, 1875, 1879, + 1873, 1877, 1880, 86, 86, 168, 86, 86, 1881, 1883, + 1885, 1888, 86, 1884, 86, 86, 86, 1886, 1892, 86, + 86, 1887, 86, 86, 86, 86, 86, 1890, 86, 1894, + 86, 3314, 1899, 1889, 1893, 1891, 1895, 1896, 86, 86, + 1900, 3314, 1897, 1903, 86, 1902, 1898, 86, 1901, 86, + 1904, 1905, 86, 86, 1906, 1908, 1909, 86, 86, 86, + 86, 86, 1907, 86, 86, 1911, 86, 1912, 86, 86, + 1910, 86, 86, 86, 1917, 86, 1918, 86, 86, 1913, + 86, 1919, 1914, 1922, 1915, 1920, 1916, 86, 86, 1923, - 86, 86, 1919, 86, 86, 86, 3299, 86, 1924, 1932, - 86, 86, 1935, 1936, 86, 1937, 86, 1927, 86, 1928, - 1930, 1929, 86, 1931, 1933, 86, 1934, 1939, 86, 86, - 1940, 1943, 86, 86, 1945, 1947, 86, 1944, 1938, 1946, - 86, 86, 86, 1941, 1949, 86, 1942, 86, 86, 86, - 86, 1951, 1952, 86, 1954, 1955, 86, 86, 86, 86, - 1948, 86, 1959, 86, 1958, 1961, 86, 1953, 1960, 86, - 1950, 86, 1956, 86, 86, 86, 86, 86, 1969, 1957, - 2017, 1962, 1963, 1964, 86, 86, 1966, 1971, 1965, 86, - 1973, 1967, 1972, 86, 1968, 1970, 86, 86, 1975, 1978, + 1921, 86, 1926, 1928, 1930, 86, 86, 1925, 1931, 1927, + 86, 86, 1924, 86, 86, 86, 1929, 86, 86, 86, + 1937, 86, 86, 86, 1940, 1941, 86, 1932, 86, 1933, + 3314, 1934, 86, 1935, 1946, 1936, 1938, 1953, 1939, 1942, + 86, 1943, 1944, 86, 86, 1945, 1948, 86, 86, 1947, + 1950, 86, 1949, 1952, 1951, 1954, 86, 1955, 86, 86, + 86, 86, 86, 1956, 1957, 86, 86, 1959, 1960, 86, + 86, 86, 86, 1964, 86, 86, 1963, 1966, 1958, 1965, + 86, 1961, 86, 86, 86, 86, 1974, 1967, 1968, 1969, + 86, 1962, 86, 1976, 1970, 86, 1978, 86, 1977, 86, - 1974, 86, 86, 86, 1977, 86, 1982, 86, 1976, 86, - 1979, 86, 1984, 86, 86, 86, 1987, 1988, 86, 86, - 1990, 86, 1980, 86, 1981, 86, 86, 86, 86, 1996, - 86, 86, 1995, 1985, 1992, 1983, 1986, 1993, 86, 1989, - 86, 86, 1998, 86, 86, 2002, 86, 1994, 1991, 2000, - 1999, 86, 1997, 86, 2006, 86, 2005, 86, 86, 2009, - 86, 86, 2010, 2012, 2008, 86, 86, 2001, 86, 2004, - 2011, 86, 2003, 86, 86, 2007, 86, 86, 86, 2020, - 86, 2014, 2013, 2021, 2022, 2015, 2016, 86, 86, 86, - 86, 86, 2025, 86, 2018, 86, 86, 2030, 86, 86, + 1971, 86, 1972, 1980, 86, 1973, 1981, 1983, 86, 86, + 1975, 86, 1979, 86, 1987, 86, 86, 1984, 86, 1982, + 86, 1989, 86, 86, 1992, 1993, 86, 86, 86, 1985, + 1995, 86, 1986, 86, 86, 2000, 86, 86, 1990, 2001, + 86, 86, 1988, 1997, 1991, 1998, 86, 1994, 86, 86, + 86, 86, 2007, 1996, 1999, 2004, 86, 86, 2002, 2005, + 86, 2003, 2011, 86, 86, 2010, 2014, 86, 86, 86, + 2015, 2013, 86, 2009, 2017, 2006, 86, 2016, 86, 86, + 86, 86, 2008, 2012, 86, 86, 86, 2019, 2018, 2022, + 86, 2025, 2026, 2021, 2027, 86, 86, 86, 86, 2020, - 2023, 2029, 2024, 2019, 86, 86, 86, 86, 2026, 2034, - 86, 2027, 2035, 86, 2031, 2028, 2036, 2038, 2033, 2032, - 2037, 86, 86, 2041, 86, 86, 86, 86, 86, 86, - 2048, 2042, 2045, 2039, 86, 86, 86, 86, 2040, 2043, - 2051, 86, 2050, 86, 2052, 2044, 86, 86, 2046, 2047, - 2049, 2053, 86, 86, 2057, 2054, 2058, 86, 2059, 86, - 2060, 2062, 86, 2055, 2063, 2061, 86, 86, 2056, 86, - 86, 86, 2067, 86, 2065, 86, 86, 86, 86, 2064, - 2069, 86, 2072, 2066, 2073, 2068, 2074, 2070, 86, 168, - 86, 86, 86, 86, 2076, 86, 86, 86, 2081, 86, + 86, 86, 2023, 86, 86, 2030, 2035, 86, 86, 2034, + 86, 2024, 2029, 86, 86, 2028, 2032, 86, 2039, 2042, + 86, 2031, 86, 2040, 86, 2033, 86, 2036, 2037, 2038, + 2043, 2041, 2046, 86, 86, 2044, 86, 86, 86, 86, + 2045, 86, 2053, 2050, 86, 86, 2056, 86, 86, 2055, + 2048, 86, 2057, 86, 86, 2047, 2049, 2058, 86, 2051, + 2054, 2052, 86, 2059, 2063, 86, 2064, 86, 86, 2060, + 2065, 2067, 2068, 86, 2061, 2066, 86, 86, 86, 86, + 2072, 86, 2062, 86, 2070, 2071, 86, 2074, 86, 86, + 2077, 86, 2079, 2073, 2069, 86, 86, 86, 86, 168, - 2075, 2080, 2071, 2077, 2088, 2078, 86, 2082, 2086, 2079, - 2083, 86, 2084, 86, 86, 86, 86, 2085, 86, 86, - 86, 2087, 2089, 2092, 2091, 86, 86, 2090, 86, 2094, - 86, 86, 2098, 86, 86, 86, 2097, 2093, 2095, 86, - 2100, 86, 2096, 2099, 2101, 86, 2103, 86, 2102, 86, - 86, 86, 86, 86, 86, 86, 2108, 2110, 2105, 2109, - 86, 2104, 86, 86, 2112, 86, 2115, 86, 2106, 86, - 2107, 2111, 86, 86, 2119, 86, 2114, 2116, 2113, 86, - 2120, 2118, 86, 86, 2121, 2117, 86, 86, 2124, 86, - 2123, 2126, 86, 86, 2122, 86, 2127, 86, 2132, 2125, + 2075, 86, 86, 3314, 2082, 86, 86, 2086, 86, 86, + 2088, 2087, 86, 2078, 2076, 2081, 2080, 2083, 2084, 2092, + 2085, 2089, 86, 2090, 86, 86, 86, 86, 86, 86, + 86, 2094, 2091, 2093, 2095, 2097, 86, 86, 2096, 2098, + 86, 2100, 86, 86, 86, 86, 2104, 86, 86, 2099, + 2103, 86, 86, 2105, 2101, 2102, 2106, 2107, 86, 2109, + 86, 2108, 86, 86, 86, 86, 86, 86, 2110, 2114, + 2116, 2111, 2115, 86, 86, 86, 86, 86, 86, 2121, + 86, 2112, 2118, 2113, 2117, 86, 86, 2125, 86, 2120, + 2122, 86, 2119, 86, 2124, 2123, 86, 2126, 86, 86, - 86, 86, 2134, 2128, 86, 2129, 86, 86, 2135, 86, - 2130, 2131, 2136, 86, 86, 2137, 86, 2133, 2138, 86, - 86, 2139, 2141, 2142, 86, 86, 86, 2146, 86, 86, - 86, 2143, 2140, 86, 86, 86, 2144, 2147, 86, 86, - 86, 86, 86, 86, 86, 2145, 2149, 2150, 2151, 2155, - 2152, 2148, 2160, 86, 2159, 2154, 86, 86, 86, 86, - 86, 2157, 2156, 2163, 2164, 2153, 86, 2158, 86, 86, - 2167, 2166, 86, 86, 2161, 86, 86, 2162, 2165, 2170, - 2169, 86, 2171, 86, 86, 86, 2175, 2168, 86, 86, - 2173, 2177, 2179, 86, 2172, 2174, 86, 86, 86, 2182, + 2127, 2129, 86, 2130, 2134, 2128, 2132, 86, 86, 86, + 2138, 2133, 2131, 86, 86, 86, 86, 2141, 2135, 86, + 2140, 2142, 86, 86, 2136, 86, 86, 2137, 2144, 86, + 2148, 2139, 2147, 2143, 86, 2145, 86, 86, 86, 86, + 86, 2152, 86, 86, 2149, 86, 2146, 86, 86, 86, + 86, 2153, 86, 86, 86, 86, 2161, 2155, 86, 2151, + 2150, 2156, 2157, 86, 2154, 2158, 86, 2160, 86, 2162, + 2165, 2166, 86, 86, 2159, 2163, 2169, 2164, 86, 86, + 86, 2167, 2173, 2170, 2172, 86, 2168, 86, 2171, 86, + 86, 86, 2175, 86, 86, 86, 2176, 2181, 86, 2177, - 86, 86, 2178, 2181, 2176, 2183, 2184, 86, 86, 2187, - 86, 86, 86, 86, 86, 86, 2188, 86, 2193, 86, - 2190, 86, 2180, 2189, 2197, 2185, 86, 2194, 2186, 2195, - 86, 2192, 2191, 86, 86, 86, 2199, 86, 2198, 86, - 86, 2196, 2203, 86, 86, 2205, 86, 2201, 86, 2204, - 86, 2206, 86, 2200, 86, 2202, 86, 2207, 2209, 2208, - 86, 2210, 2212, 2214, 2211, 2216, 86, 2213, 2215, 86, - 86, 86, 86, 86, 86, 86, 2219, 2220, 2217, 2224, - 86, 86, 2218, 86, 2223, 86, 2221, 86, 86, 86, - 86, 86, 86, 86, 2222, 2233, 2234, 86, 86, 2225, + 86, 86, 2179, 2174, 86, 86, 2180, 2183, 86, 2178, + 2185, 86, 86, 2187, 2184, 86, 86, 2182, 2188, 86, + 2189, 86, 2191, 2193, 2190, 86, 2194, 2186, 86, 86, + 86, 86, 2192, 2199, 86, 86, 2196, 86, 2195, 86, + 2200, 2203, 86, 86, 2205, 2198, 86, 86, 2204, 2197, + 2201, 86, 2209, 86, 86, 86, 2211, 2202, 86, 2207, + 86, 2212, 86, 2214, 2206, 86, 2210, 2208, 86, 86, + 86, 2213, 2218, 2220, 86, 86, 86, 2216, 2221, 86, + 2217, 86, 86, 2215, 2222, 86, 2223, 2225, 2224, 86, + 2219, 86, 2230, 86, 2226, 86, 86, 86, 2227, 86, - 2229, 2226, 2228, 2227, 2230, 2231, 2235, 86, 86, 2232, - 86, 86, 86, 2236, 2238, 86, 2244, 86, 86, 2246, - 86, 2239, 86, 86, 2243, 2240, 2237, 2245, 86, 2241, - 86, 86, 2248, 168, 2253, 2249, 2250, 2242, 2255, 2254, - 86, 2247, 2256, 86, 86, 86, 2257, 86, 86, 86, - 2251, 2260, 86, 2258, 86, 2252, 86, 2261, 2264, 2265, - 86, 86, 2266, 86, 2269, 86, 2267, 2259, 86, 2275, - 86, 2262, 86, 2270, 86, 2271, 2272, 86, 86, 2274, - 86, 2268, 2263, 2273, 2277, 86, 86, 86, 86, 86, - 86, 86, 2276, 2280, 86, 86, 2283, 86, 86, 86, + 2229, 2228, 86, 86, 86, 86, 86, 86, 86, 86, + 2239, 2234, 2240, 2231, 2232, 2233, 2236, 2235, 2237, 86, + 86, 86, 86, 2238, 2246, 86, 2242, 2244, 2241, 86, + 86, 2245, 2250, 86, 86, 2252, 86, 86, 2249, 2243, + 2247, 2254, 86, 2251, 86, 86, 2258, 2255, 168, 2253, + 2248, 3314, 86, 2260, 2262, 2263, 86, 2256, 2261, 86, + 86, 86, 86, 86, 2257, 2264, 2267, 86, 86, 2268, + 2259, 2265, 86, 2272, 86, 86, 2266, 86, 2273, 86, + 2276, 2271, 2281, 2269, 86, 86, 86, 2274, 86, 2277, + 86, 2278, 2279, 86, 2270, 86, 86, 2275, 86, 86, - 2287, 2289, 86, 86, 2282, 86, 2278, 2290, 86, 86, - 2285, 86, 2279, 2281, 2292, 2284, 86, 86, 2286, 86, - 2291, 2288, 86, 2294, 2297, 86, 2300, 86, 86, 2295, - 2296, 86, 86, 86, 2293, 2298, 2301, 86, 86, 86, - 86, 86, 86, 2299, 86, 86, 86, 86, 2314, 86, - 2302, 2303, 2308, 2313, 86, 2311, 2304, 2306, 2318, 2310, - 2307, 2305, 2309, 2312, 2315, 86, 86, 86, 2319, 86, - 2317, 2316, 86, 2321, 2322, 86, 86, 86, 2323, 2324, - 86, 86, 2320, 86, 2327, 86, 86, 2330, 86, 2331, - 86, 86, 2325, 86, 2326, 2328, 2332, 86, 2329, 86, + 2280, 86, 2282, 2284, 86, 2283, 86, 86, 86, 2287, + 86, 86, 86, 2290, 86, 86, 2285, 2296, 86, 2294, + 86, 86, 2289, 86, 2297, 86, 2286, 2292, 2291, 2288, + 2299, 86, 2293, 86, 86, 86, 2298, 2295, 2301, 86, + 2304, 86, 2307, 86, 86, 2302, 86, 86, 86, 2300, + 86, 86, 2305, 2303, 2308, 86, 86, 86, 86, 2306, + 3314, 86, 86, 2309, 86, 86, 2310, 2320, 2315, 2323, + 2313, 2311, 86, 2317, 2312, 2318, 2314, 86, 2316, 2319, + 86, 86, 2321, 2322, 86, 86, 2326, 86, 2324, 2330, + 2325, 86, 2328, 86, 2327, 2329, 86, 2331, 86, 86, - 2337, 86, 2333, 2338, 86, 2334, 86, 2340, 86, 86, - 86, 2336, 86, 2335, 2342, 86, 86, 2344, 2345, 86, - 2346, 86, 86, 86, 2347, 2339, 86, 2341, 86, 2352, - 86, 2343, 2348, 2351, 86, 86, 2349, 2354, 86, 86, - 86, 2356, 86, 2357, 86, 2350, 86, 2358, 2360, 86, - 86, 2364, 86, 2353, 86, 86, 86, 2355, 86, 2362, - 86, 2361, 2359, 86, 2368, 2369, 86, 86, 2371, 2363, - 86, 2367, 2374, 86, 2365, 86, 86, 2370, 2366, 86, - 86, 86, 2372, 2376, 86, 2373, 86, 2381, 86, 86, - 86, 2383, 86, 2377, 86, 2375, 86, 2382, 2378, 2379, + 86, 2334, 86, 2337, 86, 2338, 86, 86, 2332, 86, + 86, 2335, 2333, 86, 2336, 2339, 86, 86, 2340, 2344, + 86, 2345, 86, 2347, 86, 86, 86, 2341, 2343, 2342, + 2349, 86, 86, 2352, 86, 86, 2346, 2351, 2353, 86, + 86, 2350, 86, 2348, 86, 86, 2359, 86, 86, 2354, + 2358, 2355, 2361, 86, 2356, 86, 86, 86, 86, 2365, + 2364, 86, 2363, 2357, 2367, 86, 86, 2360, 86, 2371, + 86, 86, 86, 2362, 2366, 86, 2376, 86, 86, 86, + 2368, 2369, 2375, 86, 86, 86, 86, 2370, 2378, 86, + 2374, 2372, 2381, 86, 86, 2373, 2383, 86, 2377, 2379, - 86, 2388, 2387, 2384, 86, 86, 86, 2391, 86, 2389, - 2380, 2393, 86, 86, 86, 86, 86, 2390, 2385, 2395, - 2386, 2396, 2398, 2400, 86, 86, 2392, 2397, 86, 86, - 2401, 86, 86, 2406, 2394, 3299, 2399, 2402, 2403, 86, - 86, 86, 2405, 86, 2404, 86, 86, 2411, 2412, 2407, - 2408, 86, 2409, 86, 86, 2413, 86, 86, 2416, 2410, - 86, 2417, 86, 2418, 86, 2415, 2414, 86, 168, 2420, - 86, 2419, 86, 2421, 86, 2426, 86, 86, 86, 86, - 86, 86, 86, 86, 2422, 2427, 2423, 2428, 2424, 2429, - 2425, 86, 2432, 86, 2433, 2430, 2431, 86, 2434, 2437, + 2380, 86, 86, 86, 2388, 86, 2382, 86, 2384, 2390, + 86, 86, 86, 86, 2389, 2385, 2391, 2395, 86, 2386, + 86, 86, 2394, 2396, 86, 86, 86, 86, 2387, 2400, + 86, 2392, 2402, 2393, 2398, 2403, 2397, 86, 2405, 2407, + 86, 2399, 86, 86, 86, 86, 3314, 2406, 2408, 86, + 86, 2401, 2404, 2412, 2409, 2411, 86, 86, 86, 86, + 86, 86, 86, 2423, 86, 2410, 2413, 2414, 2415, 2416, + 2417, 2418, 2419, 2422, 2424, 86, 86, 86, 86, 2420, + 86, 2421, 86, 2425, 168, 2427, 86, 2428, 86, 2429, + 86, 2426, 86, 86, 2434, 86, 86, 86, 86, 86, - 86, 2475, 2435, 86, 2438, 2439, 86, 86, 86, 2436, - 2440, 2442, 2443, 2441, 86, 2445, 86, 86, 86, 86, - 86, 2447, 86, 2444, 86, 86, 86, 2451, 86, 2452, - 86, 86, 3299, 2446, 2448, 86, 2454, 86, 2449, 2461, - 86, 2455, 2453, 2456, 2450, 2457, 86, 86, 2459, 86, - 86, 86, 2458, 2460, 86, 2463, 2464, 86, 86, 86, - 86, 86, 86, 2465, 2466, 86, 2470, 86, 2473, 2462, - 86, 86, 2472, 86, 86, 2469, 2474, 86, 2467, 86, - 2468, 86, 2478, 86, 86, 2471, 86, 86, 2483, 2482, - 2476, 86, 2477, 2480, 86, 2484, 86, 86, 2485, 2481, + 86, 2441, 86, 86, 86, 2436, 2432, 2435, 2430, 2433, + 2431, 2437, 86, 2438, 2440, 2439, 2444, 2442, 2445, 86, + 86, 2446, 86, 2443, 2447, 86, 86, 2449, 2450, 2448, + 2451, 86, 2453, 86, 86, 86, 86, 86, 2455, 86, + 2452, 86, 86, 86, 2459, 86, 2460, 86, 86, 2454, + 86, 2456, 86, 2462, 2463, 2457, 2469, 86, 86, 2461, + 2464, 2458, 2465, 86, 86, 2467, 2472, 86, 86, 2466, + 2468, 86, 2471, 86, 86, 86, 86, 86, 2470, 2474, + 86, 86, 86, 2481, 2478, 86, 2473, 2480, 86, 86, + 86, 2477, 86, 86, 2482, 2475, 2476, 86, 2486, 86, - 2479, 86, 2488, 86, 86, 2487, 2486, 2489, 86, 2491, - 86, 2493, 2490, 86, 2492, 2494, 86, 86, 2495, 86, - 2497, 86, 2496, 86, 86, 86, 86, 86, 86, 86, - 2501, 86, 2503, 2504, 2498, 2505, 86, 2499, 2506, 86, - 2500, 2507, 86, 2508, 86, 2509, 86, 86, 86, 2511, - 2514, 86, 2502, 2510, 86, 2516, 86, 86, 2519, 86, - 2513, 86, 86, 2515, 86, 2512, 86, 2520, 86, 2523, - 2524, 86, 2518, 86, 2517, 86, 86, 86, 2525, 86, - 86, 2521, 2528, 86, 2522, 2527, 86, 86, 2529, 86, - 86, 2532, 2533, 2526, 2530, 2535, 86, 2531, 2536, 86, + 86, 2479, 86, 2483, 2491, 86, 86, 2490, 2493, 2484, + 86, 2485, 2488, 2492, 86, 2489, 86, 86, 2487, 86, + 2496, 86, 2501, 2494, 2497, 86, 2499, 86, 86, 86, + 2495, 2500, 2503, 86, 86, 86, 2505, 86, 86, 86, + 86, 2502, 86, 2498, 2504, 2509, 86, 2513, 86, 86, + 86, 2511, 2506, 2507, 2508, 2512, 2514, 86, 2515, 86, + 2516, 86, 86, 86, 86, 2517, 86, 2519, 2510, 2522, + 86, 86, 86, 2524, 86, 2527, 86, 86, 2521, 86, + 2523, 86, 2520, 2518, 2528, 86, 86, 2531, 86, 2526, + 2525, 2532, 86, 2533, 86, 86, 2529, 86, 86, 86, - 2537, 86, 2538, 86, 2539, 86, 86, 86, 2540, 2534, - 86, 2543, 2542, 86, 2544, 86, 86, 86, 86, 2549, - 86, 86, 2551, 86, 2541, 2552, 86, 2545, 2546, 86, - 86, 86, 86, 86, 2548, 86, 2555, 2547, 86, 86, - 2550, 2553, 86, 2554, 2556, 2561, 86, 2558, 2562, 86, - 86, 86, 86, 2557, 86, 2559, 86, 168, 2560, 86, - 2570, 86, 86, 86, 2565, 86, 86, 86, 2567, 2569, - 2564, 2571, 86, 3299, 86, 2563, 2566, 2577, 2568, 2574, - 2572, 2573, 86, 86, 86, 2575, 2578, 2579, 2580, 86, - 2576, 2581, 86, 2582, 86, 86, 2583, 86, 2584, 86, + 2537, 86, 2536, 2530, 2535, 86, 86, 86, 86, 86, + 3314, 2541, 2534, 2538, 2543, 2539, 86, 2540, 2544, 86, + 2545, 86, 2546, 86, 2547, 86, 2549, 2542, 2548, 86, + 86, 2551, 86, 2552, 2550, 86, 86, 86, 86, 2557, + 86, 86, 2559, 86, 2560, 86, 86, 2553, 2554, 86, + 86, 86, 86, 86, 2556, 86, 2563, 2555, 2562, 86, + 2558, 2561, 86, 2564, 2566, 2569, 86, 86, 86, 86, + 86, 2570, 2565, 2567, 86, 2568, 86, 86, 86, 2577, + 168, 86, 2573, 86, 2579, 86, 86, 2580, 2572, 86, + 2575, 86, 2578, 2571, 2574, 86, 2576, 86, 2586, 2583, - 2585, 86, 2586, 86, 86, 86, 86, 86, 2588, 86, - 86, 86, 2587, 2596, 86, 86, 86, 86, 2589, 2594, - 86, 2600, 86, 2591, 2590, 2601, 86, 2593, 2592, 2595, - 86, 2602, 86, 2598, 2597, 2599, 2605, 86, 86, 2604, - 86, 2606, 2607, 86, 2603, 86, 86, 86, 86, 86, - 86, 86, 2610, 2616, 86, 86, 2608, 86, 2609, 2617, - 86, 2611, 86, 2620, 86, 2612, 2613, 2614, 2615, 86, - 2618, 2621, 86, 2619, 2622, 86, 2623, 86, 86, 2625, - 2624, 86, 86, 2628, 86, 86, 86, 86, 2626, 2632, - 2631, 2627, 2633, 86, 86, 86, 2634, 2635, 86, 86, + 2581, 2582, 86, 86, 86, 2590, 86, 86, 2588, 2589, + 86, 2584, 2591, 86, 2585, 2595, 2587, 86, 2592, 86, + 2593, 86, 2594, 86, 86, 2598, 2597, 86, 86, 86, + 86, 86, 86, 86, 2596, 2605, 86, 86, 86, 2603, + 86, 2609, 2610, 86, 2599, 2600, 86, 86, 86, 2602, + 2601, 2604, 2606, 2611, 2607, 2608, 2613, 2614, 86, 86, + 86, 2616, 86, 86, 86, 86, 2617, 86, 2612, 2615, + 2619, 86, 86, 2625, 86, 2626, 86, 2618, 86, 2620, + 86, 86, 86, 2621, 2632, 2622, 2629, 2623, 2630, 86, + 86, 2624, 2631, 86, 86, 86, 86, 86, 2627, 2628, - 86, 2629, 86, 86, 2630, 2636, 86, 86, 2637, 86, - 86, 2641, 2639, 2645, 2638, 2646, 86, 86, 86, 2649, - 86, 86, 2640, 2642, 86, 2650, 2643, 86, 86, 2644, - 86, 2652, 2647, 2653, 86, 86, 2648, 86, 86, 2651, - 86, 2654, 2658, 86, 86, 2655, 2662, 86, 2661, 2660, - 2659, 86, 2664, 86, 86, 2656, 86, 2657, 86, 2665, - 86, 2669, 86, 86, 2670, 2666, 86, 2672, 86, 86, - 2663, 86, 2668, 3299, 2667, 86, 86, 86, 2677, 86, - 2679, 86, 2673, 86, 2674, 2675, 2676, 86, 2671, 86, - 2678, 86, 2680, 86, 2681, 86, 2683, 2682, 86, 86, + 2633, 86, 2637, 86, 86, 86, 86, 2641, 86, 2634, + 2636, 2640, 2642, 86, 2635, 86, 86, 2643, 2644, 86, + 86, 2638, 86, 2639, 2649, 2646, 86, 2645, 86, 86, + 86, 2650, 86, 86, 2648, 86, 2654, 2655, 86, 2647, + 2658, 86, 86, 86, 2656, 86, 2659, 86, 2651, 2652, + 86, 2661, 2653, 2657, 2662, 86, 86, 86, 2660, 86, + 2664, 2667, 86, 2663, 86, 86, 2671, 86, 86, 2670, + 86, 2668, 86, 2669, 2673, 86, 2665, 2666, 86, 2675, + 86, 2678, 86, 2674, 86, 2679, 86, 2672, 2676, 2681, + 86, 86, 2677, 86, 86, 86, 86, 2686, 86, 2688, - 86, 2684, 86, 86, 2689, 86, 86, 2686, 2687, 3299, - 2690, 2692, 86, 2696, 2685, 2693, 86, 2688, 2691, 86, - 2695, 168, 86, 86, 2694, 86, 2700, 2697, 86, 86, - 2702, 86, 86, 2701, 86, 2705, 86, 2706, 86, 2704, - 86, 2698, 3299, 2699, 2708, 86, 2703, 86, 86, 2710, - 2709, 86, 86, 2707, 2711, 86, 2712, 2713, 2715, 86, - 86, 86, 2714, 2716, 86, 2717, 86, 86, 86, 86, - 2718, 2722, 2723, 86, 2724, 2720, 86, 86, 86, 86, - 86, 2719, 86, 2728, 2727, 2725, 86, 86, 86, 2721, - 86, 2730, 2726, 2731, 2729, 86, 86, 86, 86, 2736, + 86, 86, 86, 2684, 2682, 2685, 2683, 2689, 2680, 86, + 2687, 86, 86, 86, 2690, 2691, 2692, 86, 86, 86, + 2693, 86, 86, 86, 86, 3314, 2695, 2696, 2698, 2699, + 2701, 86, 2694, 2697, 2702, 86, 2700, 86, 2705, 168, + 86, 2704, 2703, 86, 86, 86, 2710, 2706, 2707, 86, + 86, 2712, 86, 86, 2711, 86, 2715, 86, 2716, 86, + 2714, 86, 2708, 2709, 2718, 86, 86, 2720, 2713, 2719, + 86, 86, 2721, 86, 2717, 2722, 2723, 86, 2725, 86, + 86, 86, 86, 2726, 86, 2727, 86, 86, 86, 2732, + 2728, 2724, 2733, 2734, 2730, 86, 86, 2729, 86, 86, - 86, 2739, 86, 2733, 2734, 2732, 2735, 86, 2740, 2737, - 86, 86, 86, 86, 2738, 2744, 86, 86, 86, 2745, - 86, 2749, 86, 86, 86, 86, 86, 2747, 86, 2741, - 2753, 2742, 2743, 2754, 86, 2748, 2746, 2756, 2757, 2751, - 2758, 86, 2750, 86, 86, 2752, 86, 2759, 86, 2760, - 86, 86, 86, 2755, 86, 2761, 86, 86, 2764, 86, - 2762, 86, 2767, 2769, 86, 2763, 2770, 86, 2771, 86, - 2765, 86, 2766, 86, 86, 2772, 86, 2768, 2773, 2774, - 86, 2776, 2778, 86, 86, 86, 2781, 2779, 86, 2782, - 86, 2783, 86, 86, 2775, 2777, 2784, 86, 86, 86, + 86, 86, 86, 86, 2738, 2737, 86, 86, 2731, 86, + 86, 2735, 2736, 86, 2739, 2740, 2744, 86, 2741, 2743, + 86, 2742, 86, 2746, 2749, 86, 2745, 2748, 86, 2747, + 86, 2750, 86, 86, 86, 2754, 86, 86, 86, 86, + 2755, 86, 86, 2759, 86, 86, 86, 2751, 2757, 2763, + 2764, 86, 2752, 2753, 86, 3314, 2756, 2758, 2762, 2766, + 2760, 2761, 2767, 2768, 86, 86, 2769, 86, 86, 86, + 86, 86, 2770, 86, 86, 2771, 86, 86, 2774, 2765, + 2772, 86, 2777, 86, 2779, 86, 2773, 2780, 86, 86, + 2775, 86, 2776, 2781, 86, 2782, 86, 86, 2784, 86, - 2788, 86, 86, 2789, 2780, 2790, 86, 86, 2792, 86, - 2785, 86, 86, 86, 2796, 86, 2786, 2797, 86, 2787, - 86, 86, 2791, 2799, 2793, 2798, 2800, 2795, 86, 86, - 2794, 2801, 86, 86, 86, 2806, 86, 86, 2802, 86, - 2805, 86, 2810, 2808, 2809, 86, 86, 86, 2803, 86, - 2812, 86, 86, 2804, 2811, 2814, 86, 2815, 86, 86, - 86, 2807, 86, 2818, 2822, 86, 86, 86, 2816, 2817, - 86, 86, 86, 86, 2813, 2824, 2821, 2819, 86, 2828, - 2820, 2823, 2830, 2825, 2826, 2827, 86, 2831, 86, 2829, - 2833, 86, 2832, 86, 2834, 86, 2835, 86, 2836, 86, + 86, 2778, 2783, 86, 86, 2786, 2788, 2794, 2787, 2785, + 86, 2789, 86, 86, 2791, 2792, 86, 2793, 86, 86, + 86, 2798, 86, 2790, 86, 2799, 2800, 86, 2796, 86, + 2802, 86, 2795, 86, 86, 86, 2806, 2807, 86, 86, + 2797, 2809, 86, 2808, 2801, 86, 2803, 86, 2811, 2805, + 2810, 86, 2804, 2812, 86, 86, 86, 86, 2817, 86, + 86, 86, 86, 2816, 86, 2819, 2820, 86, 86, 86, + 2822, 86, 2823, 2821, 2813, 2814, 2815, 86, 86, 2826, + 2825, 86, 86, 86, 2818, 2824, 2829, 86, 2827, 2828, + 2833, 86, 86, 86, 86, 86, 2835, 86, 86, 86, - 2837, 86, 86, 86, 2841, 86, 86, 2839, 86, 86, - 2842, 86, 86, 2844, 2848, 86, 86, 2838, 2845, 2849, - 86, 86, 86, 2840, 2850, 2843, 2852, 86, 86, 2853, - 86, 2846, 2847, 2855, 2851, 2854, 86, 2856, 86, 2857, - 86, 86, 86, 2861, 86, 86, 86, 86, 86, 2858, - 2859, 2862, 2865, 86, 2863, 86, 86, 2866, 86, 86, - 2860, 2864, 86, 2869, 2868, 86, 2867, 2870, 2871, 86, - 2872, 86, 86, 2874, 2875, 86, 86, 86, 86, 2873, - 86, 2876, 2881, 86, 86, 86, 2879, 2877, 86, 2884, - 2885, 86, 2882, 86, 2886, 86, 3299, 86, 2880, 86, + 2830, 2832, 2840, 2831, 2836, 2839, 2834, 2841, 2837, 2844, + 86, 86, 2842, 86, 2838, 86, 2845, 2843, 86, 2846, + 86, 2847, 86, 2848, 86, 86, 86, 2849, 86, 2850, + 86, 86, 86, 2853, 86, 86, 2855, 2859, 86, 2860, + 86, 2856, 86, 86, 86, 2851, 2861, 2863, 86, 2854, + 86, 2864, 2852, 86, 2857, 2858, 2865, 86, 2866, 2868, + 2862, 2867, 86, 86, 86, 86, 2872, 86, 86, 86, + 86, 86, 2869, 2870, 2873, 2876, 86, 2874, 86, 86, + 2877, 86, 86, 2871, 2875, 86, 2880, 2879, 86, 2878, + 2881, 2882, 86, 2883, 86, 86, 2885, 2886, 86, 86, - 2887, 2878, 2888, 86, 2883, 86, 2890, 86, 2889, 2891, - 2892, 86, 2893, 86, 2894, 86, 2895, 86, 86, 2896, - 2899, 86, 2897, 2898, 86, 86, 86, 2902, 86, 2900, - 2901, 86, 86, 2904, 2908, 2903, 86, 2906, 86, 86, - 86, 2910, 86, 2911, 86, 86, 86, 2914, 86, 2912, - 2913, 86, 2905, 86, 2907, 86, 2919, 86, 86, 86, - 86, 86, 86, 2909, 2922, 86, 2916, 2915, 2917, 86, - 2923, 2920, 2921, 86, 86, 2918, 86, 2926, 2924, 2927, - 86, 2928, 2929, 86, 2925, 2932, 86, 86, 2934, 86, - 2935, 86, 86, 86, 2930, 2937, 86, 86, 86, 86, + 86, 86, 2884, 86, 2887, 2892, 86, 86, 86, 2890, + 2888, 86, 2895, 2896, 86, 2893, 86, 2897, 86, 86, + 86, 2891, 86, 2898, 2889, 2899, 86, 2894, 86, 2902, + 3314, 2900, 2903, 2901, 2904, 86, 2905, 86, 2906, 86, + 86, 86, 2908, 86, 2911, 2909, 2910, 86, 2912, 2907, + 86, 86, 2913, 2914, 86, 86, 86, 86, 86, 2920, + 86, 86, 2918, 2922, 86, 86, 86, 2916, 86, 2915, + 2923, 86, 2926, 2924, 86, 86, 2919, 2917, 86, 2925, + 2927, 86, 2931, 86, 86, 2921, 86, 86, 86, 86, + 2928, 2934, 86, 2929, 86, 86, 86, 2932, 2935, 2933, - 86, 86, 2941, 2942, 86, 86, 2933, 86, 2946, 2931, - 86, 86, 2945, 2936, 2938, 2939, 2940, 2949, 86, 86, - 2951, 2943, 86, 86, 2947, 3299, 86, 2952, 2944, 86, - 2948, 2954, 86, 2955, 86, 2957, 86, 86, 86, 2950, - 86, 86, 86, 86, 2962, 2953, 86, 2960, 2959, 2956, - 86, 2966, 86, 2964, 86, 2958, 86, 86, 2969, 2968, - 2961, 2963, 86, 2965, 2972, 2975, 2971, 2973, 86, 2967, - 86, 86, 86, 86, 2970, 2974, 86, 2978, 86, 86, - 86, 2977, 2981, 86, 2979, 2984, 86, 86, 86, 86, - 86, 2976, 86, 86, 2989, 86, 2993, 86, 86, 2980, + 2939, 2930, 2938, 86, 2936, 86, 2940, 86, 2944, 86, + 86, 2937, 2941, 86, 2942, 2946, 86, 2947, 86, 2949, + 86, 86, 86, 86, 86, 86, 2954, 86, 86, 2945, + 2953, 86, 86, 2943, 2948, 86, 2958, 2950, 2951, 2952, + 86, 2961, 86, 86, 2955, 86, 2959, 2963, 86, 86, + 2957, 2956, 86, 86, 2964, 2966, 86, 2967, 86, 2960, + 2969, 86, 86, 2962, 2974, 86, 86, 2965, 2968, 86, + 86, 86, 2973, 2971, 2972, 2978, 86, 86, 86, 86, + 2970, 2976, 2980, 86, 86, 2975, 2981, 86, 2982, 2985, + 2983, 2977, 2979, 2986, 86, 86, 86, 2988, 86, 2987, - 2982, 2983, 2985, 86, 86, 2986, 2988, 2991, 2994, 86, - 86, 2990, 2996, 2992, 2987, 2995, 86, 2998, 86, 2999, - 86, 2997, 3000, 86, 86, 86, 3003, 86, 86, 3005, - 86, 86, 86, 3004, 86, 86, 86, 3001, 86, 3010, - 3011, 86, 86, 86, 3015, 86, 3006, 3016, 86, 3017, - 3012, 3002, 3014, 3007, 86, 86, 3008, 3009, 86, 86, - 3021, 86, 3013, 86, 3020, 3022, 86, 86, 3023, 3025, - 86, 86, 3028, 86, 3018, 86, 86, 3019, 86, 3027, - 3030, 3024, 3026, 3029, 86, 86, 86, 86, 86, 86, - 86, 3033, 86, 86, 3035, 86, 86, 3036, 86, 3034, + 86, 2991, 86, 86, 2984, 2990, 86, 86, 2994, 86, + 86, 2992, 2997, 86, 86, 86, 2989, 86, 86, 3002, + 86, 2998, 86, 86, 3314, 86, 2993, 2995, 2996, 3004, + 86, 3001, 3005, 2999, 3006, 86, 3007, 86, 86, 86, + 86, 3003, 3000, 3008, 3009, 3010, 3011, 86, 3012, 86, + 3013, 86, 3014, 86, 3016, 86, 86, 3018, 86, 86, + 86, 3017, 86, 86, 86, 3023, 3024, 86, 86, 86, + 86, 86, 3028, 86, 3019, 3029, 86, 3030, 86, 3015, + 3027, 3020, 3025, 86, 3021, 3022, 86, 3034, 86, 3026, + 3031, 3033, 3035, 86, 86, 86, 3038, 3032, 86, 3036, - 86, 86, 86, 86, 3031, 3032, 3045, 3046, 86, 3037, - 3299, 3041, 3038, 3039, 3040, 3042, 3043, 86, 3048, 86, - 86, 3044, 3049, 3047, 86, 3051, 3053, 86, 3050, 3054, - 86, 86, 3052, 3056, 86, 3055, 86, 86, 3059, 86, - 86, 3057, 3060, 86, 3061, 3062, 86, 86, 3063, 3064, - 3067, 86, 3065, 3066, 86, 86, 3058, 3068, 86, 86, - 3071, 86, 86, 3074, 86, 86, 86, 3073, 86, 86, - 3077, 86, 3069, 3070, 86, 3076, 86, 86, 3078, 86, - 3083, 3072, 3081, 3084, 86, 3082, 3079, 3085, 86, 86, - 3075, 86, 3080, 86, 3090, 3092, 3087, 86, 86, 3091, + 86, 86, 86, 3041, 86, 86, 3042, 86, 3040, 3037, + 3039, 3043, 86, 86, 86, 86, 86, 3044, 86, 3047, + 86, 86, 3049, 86, 86, 3045, 3050, 3048, 86, 86, + 86, 86, 86, 3046, 86, 86, 3059, 3060, 86, 3051, + 3063, 3052, 3054, 3053, 3055, 86, 3056, 3057, 86, 3062, + 3065, 3058, 3067, 86, 3061, 86, 3068, 86, 3064, 86, + 86, 3066, 86, 3069, 3070, 86, 3314, 3071, 3073, 86, + 3074, 86, 3075, 3076, 86, 86, 86, 3077, 3078, 3072, + 86, 3079, 3080, 86, 86, 3082, 86, 3081, 86, 86, + 3084, 86, 3083, 3088, 86, 86, 3087, 86, 86, 86, - 86, 86, 3088, 86, 3086, 3089, 86, 86, 86, 3099, - 86, 3096, 3097, 3094, 3100, 86, 3102, 86, 3103, 86, - 86, 3101, 3093, 86, 3095, 3104, 86, 3098, 3105, 3106, - 86, 3107, 86, 86, 3109, 86, 3110, 86, 3111, 86, - 3112, 86, 3108, 3113, 86, 3114, 86, 3115, 86, 86, - 3117, 86, 86, 86, 86, 86, 86, 86, 3116, 3122, - 86, 3118, 86, 86, 86, 3119, 86, 3126, 86, 3125, - 3123, 3127, 86, 86, 3120, 3121, 3124, 3128, 3129, 86, - 86, 3136, 3130, 3131, 86, 3133, 86, 86, 86, 3135, - 86, 3134, 86, 86, 3132, 3138, 86, 86, 86, 86, + 86, 86, 3091, 86, 3090, 3174, 86, 86, 3085, 3086, + 3092, 3095, 3096, 86, 3093, 86, 3097, 86, 3094, 86, + 3089, 86, 3098, 3099, 86, 3100, 86, 86, 3103, 3105, + 3101, 3104, 3102, 3107, 3106, 86, 86, 86, 86, 86, + 86, 86, 3108, 3111, 3115, 3112, 3114, 86, 86, 86, + 86, 3109, 3117, 86, 3116, 3118, 86, 3218, 3110, 86, + 3113, 3119, 86, 86, 3120, 3121, 86, 3122, 86, 3124, + 86, 86, 3123, 3125, 86, 3126, 86, 3127, 86, 3128, + 86, 3129, 86, 3130, 86, 86, 3132, 86, 86, 86, + 86, 3135, 3137, 86, 3131, 86, 86, 3133, 86, 86, - 86, 86, 3137, 3142, 3146, 86, 86, 3143, 86, 3141, - 86, 3139, 3148, 86, 3140, 3144, 3149, 86, 3147, 3150, - 86, 86, 86, 86, 3155, 3145, 3153, 86, 3154, 3151, - 3152, 86, 86, 86, 3159, 86, 3158, 86, 3157, 86, - 3161, 86, 86, 86, 86, 86, 3156, 86, 3160, 86, - 3162, 86, 3171, 3168, 3163, 86, 86, 86, 3165, 3164, - 3167, 3169, 3173, 86, 3176, 86, 86, 86, 3166, 86, - 3174, 86, 3170, 3178, 86, 3172, 3177, 86, 3179, 3180, - 86, 3181, 86, 3175, 86, 3182, 86, 3184, 86, 3183, - 86, 3185, 3189, 3186, 86, 86, 3187, 86, 86, 86, + 3141, 3134, 3142, 86, 86, 3144, 86, 86, 3140, 3136, + 3138, 3139, 86, 86, 86, 3146, 86, 3148, 86, 3143, + 3151, 3150, 86, 86, 86, 3145, 86, 86, 3153, 86, + 86, 86, 3149, 86, 86, 3157, 3152, 86, 86, 3147, + 3158, 3161, 86, 3154, 86, 3155, 3156, 86, 3159, 86, + 3162, 3163, 86, 3164, 86, 3165, 86, 86, 3167, 86, + 3160, 3168, 86, 86, 3169, 3166, 86, 3173, 86, 3176, + 3171, 86, 86, 3170, 3172, 86, 86, 86, 86, 86, + 86, 3175, 86, 86, 3177, 86, 86, 3183, 86, 3314, + 3186, 3178, 3180, 3179, 3182, 3184, 3189, 86, 86, 3191, - 3194, 86, 3192, 3195, 86, 3188, 86, 3191, 3190, 86, - 3198, 86, 86, 86, 3201, 86, 86, 3202, 86, 3193, - 86, 3196, 86, 3205, 3206, 86, 3203, 3199, 3197, 86, - 86, 3200, 86, 3211, 86, 86, 3207, 86, 3208, 3204, - 3210, 3212, 86, 86, 86, 86, 86, 86, 3216, 86, - 86, 3209, 3218, 86, 86, 3223, 86, 86, 3213, 3215, - 3225, 86, 3224, 3214, 86, 86, 3217, 3220, 3219, 3221, - 86, 86, 3222, 3229, 86, 3231, 3230, 86, 3232, 86, - 86, 86, 86, 3227, 3226, 3233, 86, 3234, 3237, 3228, - 86, 3235, 3238, 86, 86, 3239, 3240, 86, 3236, 86, + 86, 3185, 3181, 3188, 86, 86, 3187, 86, 3190, 3193, + 86, 86, 3194, 3192, 3195, 86, 3196, 86, 86, 86, + 86, 3199, 3202, 86, 3197, 3200, 3204, 3198, 3201, 86, + 86, 86, 86, 86, 3203, 86, 3207, 3209, 86, 3210, + 86, 86, 3206, 3205, 3213, 86, 86, 86, 3216, 86, + 3211, 86, 3217, 3208, 86, 86, 3220, 3221, 86, 86, + 3212, 3214, 86, 86, 86, 3215, 86, 86, 86, 3222, + 86, 3223, 3225, 3219, 3226, 86, 3227, 86, 3224, 86, + 86, 86, 3230, 3231, 86, 3228, 3229, 86, 86, 3233, + 3232, 86, 86, 86, 3235, 86, 3238, 3239, 86, 3234, - 86, 86, 86, 3241, 86, 3246, 86, 86, 3243, 86, - 3249, 86, 3250, 86, 86, 86, 86, 86, 86, 3242, - 3248, 3244, 3253, 3245, 3251, 3247, 86, 3252, 86, 3257, - 86, 3256, 86, 3254, 86, 3255, 86, 3258, 3299, 3259, - 86, 3261, 86, 3263, 86, 3264, 86, 86, 3268, 86, - 86, 3265, 86, 3262, 3266, 3267, 3260, 3269, 86, 86, - 3270, 3271, 86, 86, 86, 86, 3272, 86, 86, 3274, - 3273, 86, 3275, 3277, 86, 86, 3279, 86, 86, 3283, - 3280, 3284, 86, 3276, 3278, 86, 86, 3281, 86, 3287, - 3288, 86, 86, 3290, 86, 86, 3282, 3291, 86, 3289, + 3236, 3240, 86, 3244, 86, 86, 3246, 3237, 86, 3247, + 3245, 86, 86, 3241, 3243, 86, 3242, 86, 86, 3252, + 3248, 86, 3249, 3250, 86, 86, 3253, 86, 86, 3254, + 3251, 3255, 86, 86, 86, 3258, 86, 3256, 3261, 86, + 3257, 86, 86, 3264, 86, 3265, 86, 86, 86, 86, + 86, 86, 86, 3259, 3263, 3260, 3266, 3268, 3262, 3267, + 86, 3272, 86, 3271, 86, 86, 3276, 3269, 3270, 3273, + 86, 86, 3278, 86, 3279, 3274, 86, 3275, 86, 86, + 86, 3280, 3283, 86, 86, 3281, 86, 3287, 86, 3277, + 3285, 3284, 3286, 86, 86, 86, 86, 86, 3282, 86, - 86, 86, 3292, 86, 3285, 3286, 3293, 86, 3294, 3297, - 86, 3298, 86, 3299, 3299, 3299, 3299, 3299, 3299, 3295, - 3299, 3299, 3299, 3299, 3299, 3299, 3296, 47, 47, 47, - 47, 47, 47, 47, 52, 52, 52, 52, 52, 52, - 52, 57, 57, 57, 57, 57, 57, 57, 63, 63, - 63, 63, 63, 63, 63, 68, 68, 68, 68, 68, - 68, 68, 74, 74, 74, 74, 74, 74, 74, 80, - 80, 80, 80, 80, 80, 80, 89, 89, 3299, 89, - 89, 89, 89, 158, 158, 3299, 3299, 3299, 158, 158, - 160, 160, 3299, 3299, 160, 3299, 160, 162, 3299, 3299, + 3290, 3288, 86, 3289, 3292, 86, 86, 3294, 86, 86, + 3298, 3295, 3299, 86, 86, 3291, 3293, 86, 3296, 86, + 3302, 3303, 86, 86, 3305, 86, 86, 3297, 3306, 86, + 3304, 86, 86, 3300, 86, 86, 3301, 3308, 3307, 3309, + 3312, 86, 3313, 86, 3314, 3310, 3314, 3314, 3314, 3314, + 3314, 3314, 3314, 3314, 3311, 47, 47, 47, 47, 47, + 47, 47, 52, 52, 52, 52, 52, 52, 52, 57, + 57, 57, 57, 57, 57, 57, 63, 63, 63, 63, + 63, 63, 63, 68, 68, 68, 68, 68, 68, 68, + 74, 74, 74, 74, 74, 74, 74, 80, 80, 80, - 3299, 3299, 3299, 162, 165, 165, 3299, 3299, 3299, 165, - 165, 167, 3299, 3299, 3299, 3299, 3299, 167, 169, 169, - 3299, 169, 169, 169, 169, 172, 3299, 3299, 3299, 3299, - 3299, 172, 175, 175, 3299, 3299, 3299, 175, 175, 90, - 90, 3299, 90, 90, 90, 90, 17, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299 + 80, 80, 80, 80, 89, 89, 3314, 89, 89, 89, + 89, 158, 158, 3314, 3314, 3314, 158, 158, 160, 160, + 3314, 3314, 160, 3314, 160, 162, 3314, 3314, 3314, 3314, + 3314, 162, 165, 165, 3314, 3314, 3314, 165, 165, 167, + 3314, 3314, 3314, 3314, 3314, 167, 169, 169, 3314, 169, + 169, 169, 169, 172, 3314, 3314, 3314, 3314, 3314, 172, + 175, 175, 3314, 3314, 3314, 175, 175, 90, 90, 3314, + 90, 90, 90, 90, 17, 3314, 3314, 3314, 3314, 3314, + 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, + 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, + + 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, + 3314, 3314, 3314, 3314, 3314 } ; -static const flex_int16_t yy_chk[6488] = +static const flex_int16_t yy_chk[6516] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2235,30 +2245,30 @@ static const flex_int16_t yy_chk[6488] = 5, 3, 6, 24, 4, 24, 24, 5, 24, 6, 7, 7, 7, 7, 24, 7, 8, 8, 8, 8, 33, 8, 7, 9, 9, 9, 26, 26, 8, 10, - 10, 10, 19, 29, 9, 33, 19, 29, 3307, 35, + 10, 10, 19, 29, 9, 33, 19, 29, 3322, 35, 10, 11, 11, 11, 11, 11, 11, 13, 13, 13, 13, 34, 13, 11, 35, 99, 34, 29, 38, 13, 51, 51, 11, 12, 12, 12, 12, 12, 12, 14, 14, 14, 14, 99, 14, 12, 15, 15, 15, 38, 23, 14, 23, 23, 12, 23, 46, 15, 16, 16, - 16, 23, 23, 25, 27, 27, 25, 25, 2695, 16, + 16, 23, 23, 25, 27, 27, 25, 25, 2705, 16, 25, 46, 27, 30, 30, 25, 27, 56, 40, 27, 56, 73, 31, 31, 25, 28, 67, 67, 30, 32, 28, 31, 40, 32, 28, 73, 32, 28, 92, 28, - 28, 92, 31, 32, 1082, 32, 36, 36, 37, 37, - 28, 45, 45, 37, 175, 36, 45, 39, 41, 41, + 28, 92, 31, 32, 1279, 32, 36, 36, 37, 37, + 28, 45, 45, 37, 1279, 36, 45, 39, 41, 41, 45, 36, 39, 41, 94, 36, 39, 43, 43, 37, 43, 94, 39, 41, 41, 39, 41, 44, 42, 43, 87, 44, 39, 42, 87, 43, 42, 62, 95, 62, - 62, 44, 62, 42, 174, 44, 44, 42, 42, 70, + 62, 44, 62, 42, 1083, 44, 44, 42, 42, 70, 95, 70, 70, 72, 70, 72, 72, 79, 72, 79, 79, 70, 79, 84, 84, 86, 96, 86, 86, 89, 86, 89, 89, 93, 89, 97, 86, 93, 97, 98, 89, 89, 98, 100, 101, 102, 96, 103, 104, 105, 106, 102, 100, 107, 111, 98, 106, 102, 101, 102, - 108, 109, 112, 172, 110, 103, 103, 107, 105, 106, + 108, 109, 112, 175, 110, 103, 103, 107, 105, 106, 104, 114, 111, 113, 108, 110, 110, 113, 116, 115, 112, 109, 117, 110, 115, 117, 119, 118, 117, 120, @@ -2272,7 +2282,7 @@ static const flex_int16_t yy_chk[6488] = 149, 141, 148, 150, 147, 141, 146, 151, 152, 151, 153, 154, 157, 145, 155, 153, 145, 146, 151, 150, - 152, 149, 156, 154, 159, 159, 157, 156, 161, 167, + 152, 149, 156, 154, 159, 159, 157, 156, 161, 174, 151, 161, 155, 163, 171, 163, 163, 171, 163, 166, 166, 168, 179, 168, 168, 169, 168, 169, 169, 173, 169, 173, 173, 177, 173, 176, 176, 169, 177, 178, @@ -2304,7 +2314,7 @@ static const flex_int16_t yy_chk[6488] = 285, 288, 288, 279, 280, 283, 285, 290, 293, 286, 282, 281, 286, 287, 289, 287, 294, 289, 291, 291, - 292, 292, 165, 284, 293, 290, 295, 297, 296, 295, + 292, 292, 172, 284, 293, 290, 295, 297, 296, 295, 298, 294, 296, 300, 299, 301, 297, 303, 309, 298, 299, 301, 302, 303, 302, 304, 307, 300, 306, 304, 305, 305, 307, 306, 308, 310, 311, 315, 309, 316, @@ -2326,13 +2336,13 @@ static const flex_int16_t yy_chk[6488] = 375, 376, 371, 378, 401, 379, 367, 368, 368, 369, 368, 372, 370, 373, 379, 376, 375, 382, 378, 380, - 383, 384, 164, 368, 380, 380, 368, 388, 368, 381, + 383, 384, 167, 368, 380, 380, 368, 388, 368, 381, 368, 377, 385, 377, 377, 381, 384, 386, 382, 383, 389, 385, 381, 377, 390, 377, 377, 377, 387, 391, 377, 393, 392, 388, 387, 391, 386, 392, 390, 391, 389, 394, 395, 396, 397, 400, 398, 404, 396, 399, 399, 393, 398, 402, 403, 392, 408, 395, 405, 397, - 403, 394, 409, 406, 410, 400, 162, 402, 406, 411, + 403, 394, 409, 406, 410, 400, 165, 402, 406, 411, 407, 407, 404, 407, 405, 417, 408, 418, 409, 413, 410, 413, 413, 411, 414, 415, 416, 416, 414, 415, 419, 420, 418, 421, 417, 424, 422, 423, 541, 413, @@ -2348,13 +2358,13 @@ static const flex_int16_t yy_chk[6488] = 451, 450, 463, 457, 459, 459, 462, 462, 466, 464, 465, 458, 467, 469, 470, 471, 460, 464, 490, 465, - 472, 473, 490, 463, 467, 477, 160, 473, 466, 474, + 472, 473, 490, 463, 467, 477, 164, 473, 466, 474, 475, 469, 470, 469, 472, 471, 475, 476, 474, 477, 478, 479, 476, 480, 479, 481, 482, 483, 478, 485, 484, 478, 482, 484, 486, 485, 487, 480, 488, 491, 481, 487, 489, 492, 491, 493, 494, 483, 486, 495, 493, 496, 499, 485, 502, 501, 500, 504, 492, 501, - 488, 504, 494, 489, 496, 503, 158, 509, 495, 497, + 488, 504, 494, 489, 496, 503, 162, 509, 495, 497, 497, 500, 499, 502, 507, 497, 509, 497, 506, 507, 508, 503, 505, 497, 511, 497, 510, 505, 497, 497, 513, 505, 510, 506, 514, 497, 508, 510, 512, 508, @@ -2367,7 +2377,7 @@ static const flex_int16_t yy_chk[6488] = 539, 544, 544, 546, 534, 536, 545, 543, 547, 537, 540, 548, 545, 538, 547, 546, 549, 550, 551, 549, 552, 553, 542, 548, 553, 552, 554, 555, 557, 558, - 558, 550, 556, 551, 565, 554, 85, 556, 556, 559, + 558, 550, 556, 551, 565, 554, 160, 556, 556, 559, 559, 557, 554, 555, 560, 554, 561, 561, 562, 562, 560, 563, 566, 564, 569, 565, 568, 563, 564, 564, @@ -2414,7 +2424,7 @@ static const flex_int16_t yy_chk[6488] = 750, 751, 751, 751, 756, 751, 755, 757, 751, 760, 755, 757, 758, 751, 753, 759, 754, 758, 761, 751, - 751, 80, 762, 764, 760, 762, 763, 757, 756, 766, + 751, 158, 762, 764, 760, 762, 763, 757, 756, 766, 764, 763, 763, 767, 759, 765, 765, 769, 767, 768, 768, 771, 769, 761, 766, 770, 771, 774, 770, 772, 772, 773, 775, 773, 776, 777, 779, 778, 776, 774, @@ -2431,7 +2441,7 @@ static const flex_int16_t yy_chk[6488] = 828, 825, 825, 826, 826, 816, 829, 824, 830, 822, 833, 831, 833, 827, 831, 829, 834, 834, 835, 828, 836, 837, 831, 838, 839, 836, 840, 841, 842, 843, - 844, 845, 830, 75, 844, 846, 848, 842, 849, 835, + 844, 845, 830, 85, 844, 846, 848, 842, 849, 835, 847, 850, 837, 838, 839, 848, 847, 841, 840, 845, 849, 851, 843, 852, 846, 853, 854, 855, 855, 852, 850, 854, 856, 857, 858, 851, 859, 860, 861, 853, @@ -2442,504 +2452,508 @@ static const flex_int16_t yy_chk[6488] = 876, 876, 877, 874, 872, 879, 878, 873, 877, 878, 881, 880, 882, 883, 883, 873, 881, 884, 886, 891, 875, 885, 887, 879, 880, 888, 885, 887, 887, 889, - 890, 890, 882, 889, 886, 884, 892, 893, 894, 896, - 888, 891, 893, 901, 897, 900, 899, 903, 903, 904, - 906, 906, 905, 904, 907, 909, 892, 894, 897, 899, - 910, 74, 912, 896, 901, 900, 902, 905, 908, 902, + 890, 890, 882, 889, 886, 884, 886, 892, 893, 894, + 888, 891, 896, 893, 900, 897, 901, 899, 903, 903, + 904, 906, 906, 907, 904, 905, 80, 892, 894, 897, + 899, 908, 910, 919, 900, 908, 896, 901, 902, 911, - 909, 902, 908, 911, 910, 902, 912, 902, 911, 907, - 913, 914, 902, 915, 916, 913, 913, 902, 916, 917, - 914, 918, 922, 919, 920, 921, 918, 915, 923, 920, - 916, 924, 925, 932, 917, 919, 918, 933, 925, 921, - 924, 926, 923, 922, 927, 928, 926, 929, 929, 930, - 927, 928, 931, 934, 930, 932, 933, 936, 931, 937, - 938, 940, 940, 939, 937, 941, 944, 943, 942, 936, - 941, 934, 935, 935, 938, 939, 942, 945, 935, 946, - 935, 943, 947, 950, 948, 944, 935, 949, 947, 948, - 951, 935, 935, 952, 955, 946, 945, 959, 935, 949, + 905, 902, 909, 902, 911, 919, 910, 902, 907, 902, + 912, 915, 916, 914, 902, 913, 916, 909, 917, 902, + 913, 913, 914, 921, 912, 915, 918, 920, 916, 922, + 923, 918, 920, 917, 924, 926, 925, 921, 932, 927, + 926, 918, 925, 924, 923, 927, 928, 929, 929, 930, + 922, 931, 928, 933, 930, 934, 936, 931, 937, 939, + 932, 941, 938, 937, 940, 940, 941, 943, 936, 942, + 944, 939, 933, 934, 935, 935, 938, 942, 945, 946, + 935, 943, 935, 950, 947, 952, 948, 949, 935, 944, + 947, 948, 951, 935, 935, 946, 955, 945, 954, 949, - 954, 950, 953, 953, 954, 958, 951, 957, 958, 961, - 960, 952, 962, 957, 955, 960, 959, 964, 962, 963, - 966, 967, 961, 968, 963, 969, 970, 971, 972, 966, - 967, 969, 973, 972, 974, 970, 964, 975, 976, 968, - 977, 979, 978, 980, 985, 983, 971, 979, 974, 977, - 976, 978, 973, 981, 986, 988, 987, 975, 985, 981, - 980, 983, 989, 990, 996, 991, 992, 995, 999, 988, - 991, 992, 995, 996, 986, 987, 997, 997, 990, 998, - 989, 999, 1001, 1002, 1007, 998, 1004, 1004, 1002, 1002, - 1004, 1005, 1006, 1008, 1005, 1009, 1011, 1010, 1001, 1012, + 935, 950, 954, 952, 953, 953, 957, 958, 951, 959, + 958, 961, 957, 960, 962, 964, 955, 963, 960, 968, + 962, 966, 963, 967, 961, 969, 971, 970, 959, 973, + 966, 969, 967, 972, 964, 968, 970, 974, 972, 975, + 976, 977, 979, 980, 978, 971, 983, 986, 979, 973, + 977, 974, 976, 978, 985, 981, 987, 988, 989, 975, + 980, 981, 983, 990, 991, 992, 75, 986, 985, 991, + 992, 988, 995, 996, 1001, 987, 989, 995, 990, 997, + 997, 998, 996, 999, 1004, 1004, 1002, 998, 1004, 1006, + 1001, 1002, 1002, 1007, 1005, 1008, 999, 1005, 1009, 1010, - 1013, 1014, 1015, 1016, 1007, 1012, 1006, 1014, 1016, 1008, - 1010, 1011, 1017, 1009, 1020, 1019, 1021, 1015, 1019, 1022, - 1013, 1021, 1023, 1024, 1022, 1025, 1017, 1026, 1024, 1029, - 1025, 1028, 1032, 1032, 1030, 1020, 1031, 1028, 1023, 1026, - 1030, 1033, 1031, 1034, 1035, 1029, 1037, 1035, 1036, 1036, - 1033, 1038, 1039, 1040, 1041, 1044, 1040, 1042, 1049, 1043, - 1044, 1034, 1050, 1042, 1037, 1043, 1045, 1041, 1046, 1047, - 1038, 1045, 1039, 1046, 1051, 1047, 1049, 1054, 1052, 1055, - 1051, 1056, 1050, 1052, 1053, 1053, 1054, 1057, 1055, 1058, - 1059, 1060, 1058, 1059, 1061, 1062, 1063, 1064, 1065, 1056, + 1011, 1012, 1013, 1006, 1014, 1015, 1020, 1012, 74, 1016, + 1014, 1008, 1010, 1007, 1016, 1011, 1009, 1017, 1019, 1021, + 1015, 1019, 1013, 1022, 1021, 1023, 1026, 1020, 1022, 1024, + 1025, 1017, 1029, 1028, 1024, 1025, 1030, 1031, 1026, 1028, + 1033, 1023, 1030, 1031, 1032, 1032, 1034, 1035, 1029, 1033, + 1035, 1036, 1036, 1037, 1038, 1039, 1040, 1041, 1044, 1040, + 1042, 1043, 1047, 1044, 1034, 1049, 1042, 1043, 1047, 1045, + 1041, 1037, 1046, 1038, 1045, 1039, 1050, 1046, 1051, 1054, + 1052, 1053, 1053, 1049, 1051, 1052, 1055, 1056, 1054, 1057, + 1058, 1059, 1060, 1058, 1059, 1055, 1050, 1061, 1062, 1063, - 1067, 1066, 1060, 1064, 1065, 1067, 1057, 1062, 1068, 1068, - 1069, 1070, 1061, 1072, 1071, 1063, 1066, 1072, 1073, 1074, - 1075, 1076, 1078, 1079, 1079, 1070, 1071, 1080, 1074, 1069, - 1081, 1083, 1080, 1084, 1087, 1085, 1073, 1086, 1089, 1075, - 1092, 1078, 1086, 1087, 68, 1083, 1076, 1085, 1084, 1090, - 1081, 1088, 1088, 1091, 1096, 1090, 1092, 1093, 1089, 1091, - 1095, 1094, 1093, 1094, 1097, 1095, 1098, 1099, 1096, 1100, - 1101, 1098, 1102, 1103, 1105, 1105, 1106, 1101, 1097, 1107, - 1108, 1110, 1099, 1109, 1114, 1114, 1111, 1102, 1100, 1109, - 1106, 1111, 1103, 1121, 1113, 1108, 1117, 1107, 1113, 1115, + 1064, 1065, 1066, 1060, 1067, 1056, 1064, 1065, 1057, 1067, + 1062, 1068, 1068, 1069, 1070, 1061, 1072, 1066, 1063, 1071, + 1072, 1073, 1075, 1076, 1074, 1078, 1079, 1079, 1070, 1080, + 1081, 1071, 1069, 1074, 1080, 1081, 1082, 1084, 1085, 1073, + 1086, 1075, 1087, 1090, 1078, 1088, 1093, 1087, 1076, 1089, + 1089, 1084, 1086, 1085, 1088, 1091, 1082, 1095, 1092, 1095, + 1094, 1091, 1093, 1090, 1092, 1094, 1096, 1097, 1098, 1099, + 1100, 1096, 1101, 1102, 1099, 1103, 1104, 1106, 1106, 1107, + 1102, 1097, 1098, 1108, 1109, 1100, 1110, 1111, 1119, 1112, + 1103, 1101, 1110, 1107, 1112, 1104, 1114, 1115, 1115, 1109, - 1111, 1110, 1111, 1117, 1115, 1111, 1116, 1116, 1118, 1119, - 1120, 1121, 1119, 1123, 1122, 1124, 1125, 1127, 1123, 1126, - 1129, 1128, 1118, 1122, 1126, 1131, 1131, 1134, 1125, 1120, - 1132, 1127, 1128, 1133, 1124, 1132, 1135, 1137, 1133, 1129, - 1136, 1135, 1138, 1139, 1136, 1140, 1137, 1134, 1141, 1143, - 1142, 1144, 1145, 1146, 1147, 1148, 1143, 1138, 1139, 1150, - 1141, 1148, 1149, 1144, 1140, 1142, 1151, 1152, 1153, 1154, - 1155, 1145, 1147, 1156, 1146, 1157, 1152, 1149, 1158, 1150, - 1162, 1159, 1155, 1153, 1161, 1163, 1151, 1165, 1154, 1164, - 1161, 1167, 1156, 1158, 1166, 1162, 1167, 1164, 1169, 1163, + 1114, 1108, 1119, 1112, 1116, 1112, 1118, 1111, 1112, 1116, + 1117, 1117, 1120, 1118, 1121, 1120, 1122, 1123, 1124, 1125, + 1126, 1128, 1127, 1124, 1130, 1129, 1123, 1127, 1132, 1132, + 1135, 68, 1126, 1121, 1122, 1128, 1129, 1133, 1125, 1134, + 1136, 1139, 1133, 1130, 1134, 1136, 1138, 1137, 1140, 1141, + 1135, 1137, 1142, 1144, 1143, 1138, 1139, 1146, 1145, 1147, + 1144, 1148, 1150, 1140, 1142, 1149, 1151, 1152, 1141, 1143, + 1145, 1149, 1153, 1154, 1155, 1157, 1146, 1150, 1156, 1148, + 1147, 1153, 1158, 1159, 1160, 1162, 1151, 1152, 1154, 1164, + 1156, 1162, 1165, 1155, 1157, 1163, 1166, 1167, 1159, 1169, - 1157, 1159, 1168, 1169, 1169, 1170, 1171, 1165, 1172, 1175, - 1166, 1173, 1173, 1177, 1168, 1178, 1178, 63, 1176, 1177, - 1171, 1172, 1175, 1179, 1170, 1174, 1174, 1176, 1179, 1181, - 1174, 1180, 1182, 1174, 1174, 1181, 1183, 1182, 1174, 1185, - 1180, 1183, 1184, 1184, 1174, 1186, 1186, 1187, 1174, 1188, - 1187, 1192, 1187, 1189, 1190, 1191, 1192, 1207, 1193, 1194, - 1185, 1195, 1196, 1190, 58, 1197, 1207, 1195, 1196, 1188, - 1197, 1189, 1193, 1199, 1198, 1191, 1210, 1194, 1198, 1200, - 1200, 1202, 1199, 1201, 1201, 1205, 1201, 1199, 1206, 1199, - 1204, 1199, 1202, 1199, 1204, 1209, 1208, 1212, 1210, 1214, + 1165, 1168, 1171, 1164, 1160, 1172, 1168, 1158, 1359, 1170, + 1163, 1169, 1173, 1167, 1170, 1170, 1166, 1174, 1174, 1172, + 1176, 1171, 1178, 1177, 1359, 1173, 1175, 1175, 1178, 1179, + 1179, 1175, 1177, 1176, 1175, 1175, 1180, 1181, 1182, 1175, + 1186, 1180, 1183, 1184, 1182, 1175, 1181, 1183, 1184, 1175, + 1185, 1185, 1187, 1187, 1188, 1189, 1190, 1188, 1191, 1188, + 1192, 1186, 1194, 1193, 1195, 1196, 1197, 1191, 1193, 63, + 1200, 1196, 1197, 1198, 1190, 1189, 1194, 1199, 1198, 1200, + 1192, 1199, 1195, 1207, 1200, 1205, 1200, 1203, 1200, 1205, + 1200, 1201, 1201, 1202, 1202, 1206, 1202, 1208, 1203, 1209, - 1205, 1208, 1208, 1211, 1209, 1213, 1206, 1215, 1211, 1216, - 1217, 1212, 1218, 1218, 1213, 1220, 1217, 1219, 1214, 1221, - 1222, 1223, 1224, 1216, 1221, 1219, 1215, 1225, 1226, 1220, - 1223, 1227, 1227, 1226, 1222, 1228, 1229, 1229, 1233, 1230, - 1224, 1230, 1232, 1233, 1234, 1232, 1235, 1236, 1236, 1237, - 1228, 1241, 1225, 1238, 1238, 1235, 1239, 1239, 1242, 1240, - 1243, 1243, 1244, 1234, 1240, 1245, 1246, 1248, 1245, 1237, - 1247, 1249, 1241, 1249, 1250, 1247, 1248, 1252, 1253, 1242, - 1252, 1255, 1244, 1254, 1256, 1262, 1246, 57, 1254, 1256, - 1257, 1258, 1250, 1253, 1259, 1255, 1258, 1261, 1257, 1259, + 1210, 1207, 1211, 1212, 1209, 1209, 1208, 1213, 1212, 1210, + 1206, 1214, 1215, 1216, 1217, 1220, 1218, 1219, 1219, 1221, + 1214, 1213, 1218, 1220, 1211, 1222, 1223, 1224, 1217, 1225, + 1222, 1215, 1216, 1221, 1226, 1229, 1224, 1227, 1228, 1228, + 1223, 1235, 1227, 1230, 1230, 1236, 1231, 1225, 1231, 1233, + 1229, 1234, 1233, 1238, 1236, 1242, 1234, 1237, 1237, 1226, + 1235, 1239, 1239, 1240, 1240, 1241, 1243, 1244, 1244, 1245, + 1241, 1246, 1247, 1238, 1246, 1248, 1242, 1249, 1251, 1250, + 1248, 1250, 1253, 1254, 58, 1253, 1249, 1243, 1255, 1245, + 1256, 1263, 1247, 1255, 1257, 1258, 1251, 1259, 1254, 1257, - 1260, 1260, 1261, 1262, 1263, 1264, 1265, 1267, 1268, 1270, - 1263, 1269, 1264, 1267, 1268, 1270, 1269, 1271, 1272, 1265, - 1273, 1274, 1274, 1275, 1277, 1278, 1271, 1279, 1280, 1281, - 1282, 1273, 1283, 1285, 1286, 1281, 1282, 1272, 1283, 1285, - 1278, 1287, 1277, 1275, 1288, 1289, 1290, 1279, 1286, 1291, - 1293, 1280, 1292, 1292, 1286, 1294, 1295, 1289, 1296, 1298, - 1290, 1287, 1301, 1296, 1288, 1297, 1297, 1291, 1299, 1303, - 1293, 1302, 52, 1299, 1295, 1304, 1302, 1302, 1305, 1306, - 1294, 1301, 1298, 1307, 1304, 1308, 1305, 1303, 1315, 1309, - 1310, 1312, 1315, 1306, 1309, 1314, 1316, 1309, 1307, 1310, + 1260, 1266, 1259, 1258, 1256, 1260, 1261, 1261, 1262, 1263, + 1264, 1265, 1276, 1262, 1266, 1268, 1264, 1269, 1265, 1270, + 1271, 1268, 1272, 1269, 1270, 1273, 1271, 1274, 1275, 1275, + 1278, 1272, 1276, 1281, 1280, 1282, 1283, 1284, 1274, 1285, + 1287, 1288, 1283, 1284, 1273, 1285, 1287, 1289, 1278, 1280, + 1290, 1291, 1292, 1281, 1293, 1288, 1294, 1294, 1282, 1295, + 1296, 1288, 1297, 1291, 1298, 1300, 1292, 1289, 1303, 1298, + 1290, 1301, 1293, 1299, 1299, 1305, 1301, 1304, 1307, 1295, + 1297, 1306, 1304, 1304, 1308, 1296, 1307, 1303, 1300, 1309, + 1306, 1310, 1311, 1305, 1312, 1320, 1314, 1311, 1308, 1313, - 1308, 1314, 1311, 1308, 1311, 1312, 1317, 1316, 1318, 1319, - 1320, 1317, 1317, 1321, 1322, 1323, 1324, 1325, 1321, 1322, - 1326, 1329, 1325, 1328, 1330, 1331, 1331, 1318, 1320, 1333, - 1332, 1334, 1335, 1323, 1332, 1319, 1324, 1328, 1335, 1329, - 1326, 1336, 1330, 1337, 1338, 1339, 1340, 1333, 1341, 1342, - 1334, 1344, 1343, 1336, 1342, 1345, 1344, 1346, 1338, 1343, - 1339, 1340, 1337, 1347, 1347, 1348, 1346, 1341, 1349, 1350, - 1351, 1351, 1352, 1345, 1354, 1353, 1357, 1349, 1352, 1356, - 1348, 1353, 1355, 1355, 1358, 1356, 1359, 1360, 1354, 1350, - 1361, 1359, 1357, 1360, 1362, 1367, 1361, 1363, 1363, 1367, + 1311, 1313, 1316, 1312, 1309, 1318, 1310, 1317, 1316, 1310, + 1314, 1317, 1319, 1321, 1320, 1322, 1318, 1319, 1319, 1323, + 1324, 1326, 1325, 1327, 1323, 1324, 1328, 1331, 1327, 1330, + 1332, 1333, 1333, 1322, 1334, 1335, 1336, 1338, 1334, 1321, + 1325, 1326, 1339, 1330, 1337, 1331, 1328, 1341, 1332, 1338, + 1337, 1340, 1342, 1335, 1343, 1336, 1347, 1345, 1344, 1348, + 1350, 1339, 1341, 1344, 1345, 1340, 1346, 1342, 1348, 1349, + 1349, 1346, 1351, 1343, 1347, 1350, 1352, 1353, 1353, 1354, + 1355, 1351, 1360, 1356, 1358, 1354, 1355, 1357, 1357, 1361, + 1358, 1370, 1362, 1363, 1361, 1364, 1352, 1356, 1362, 1363, - 1362, 1364, 1364, 1366, 1366, 1358, 1368, 1369, 1370, 1371, - 1373, 1372, 1374, 1374, 1375, 1368, 1376, 1373, 1378, 1379, - 1370, 1382, 1377, 1371, 1376, 1369, 1372, 1377, 1383, 1383, - 1380, 1384, 1378, 1385, 1375, 1380, 1380, 1381, 1379, 1386, - 1387, 1382, 1381, 1381, 1388, 1387, 1389, 1390, 1386, 1391, - 1384, 1392, 1385, 1393, 1394, 1391, 1392, 1395, 1396, 1398, - 1394, 1397, 1399, 1388, 1396, 1390, 1389, 1397, 1400, 1401, - 1402, 1403, 1405, 1405, 1404, 47, 1395, 1406, 1398, 1393, - 1406, 1399, 1407, 1412, 1402, 1408, 1408, 1400, 1401, 1404, - 1409, 1409, 1403, 1410, 1407, 1411, 1412, 1413, 1410, 1411, + 1370, 1364, 1371, 1360, 1365, 1365, 1366, 1366, 1368, 1368, + 1369, 1372, 1373, 1374, 1369, 1375, 1376, 1376, 1377, 1378, + 1371, 1380, 1375, 1372, 1379, 1381, 1373, 1378, 1374, 1379, + 1384, 1382, 1385, 1385, 1383, 1380, 1382, 1382, 1377, 1383, + 1383, 1386, 1387, 1388, 1381, 1390, 1389, 1391, 1392, 1393, + 1384, 1389, 1388, 1394, 1395, 1393, 1396, 1397, 1394, 1398, + 1386, 1387, 1396, 1399, 1390, 1398, 1392, 1391, 1400, 1399, + 1401, 1402, 1403, 1405, 1404, 1585, 1397, 1406, 1407, 1407, + 1395, 1408, 1585, 1409, 1408, 1410, 1410, 1400, 1404, 1401, + 1402, 1403, 1406, 1412, 1405, 1409, 1411, 1411, 1412, 1413, - 1414, 1415, 1419, 1415, 1417, 1418, 1413, 1415, 1420, 1421, - 1418, 1422, 1422, 1414, 1423, 1424, 1425, 1419, 1430, 1423, - 1415, 1424, 1417, 1426, 1427, 1421, 1428, 1431, 1420, 1427, - 1428, 1425, 1432, 1429, 1433, 1436, 1426, 1429, 1430, 1438, - 1433, 1434, 1434, 1439, 1441, 1431, 1440, 1440, 1439, 1442, - 1441, 1448, 1432, 1436, 1444, 1444, 1446, 1447, 1447, 1446, - 1438, 1449, 1451, 1452, 1453, 1451, 1455, 1448, 1456, 1442, - 1454, 1454, 1457, 1453, 1458, 1462, 1459, 1449, 1461, 1458, - 1463, 1455, 1464, 1452, 1460, 1460, 1466, 1461, 1467, 1456, - 1459, 1457, 1472, 1462, 1468, 1463, 1465, 1465, 1469, 1468, + 1414, 1415, 1416, 1413, 1419, 1417, 1421, 1417, 1422, 1420, + 1415, 1417, 1427, 1414, 1420, 1416, 1423, 1424, 1424, 57, + 1425, 1421, 1419, 1426, 1417, 1425, 1428, 1427, 1422, 1426, + 1429, 1432, 1423, 1430, 1431, 1429, 1433, 1430, 1431, 1428, + 1434, 1435, 1436, 1436, 1438, 1440, 1443, 1435, 1441, 1442, + 1442, 1432, 1443, 1441, 1433, 1444, 1446, 1446, 1448, 1454, + 1434, 1448, 1438, 1449, 1449, 1450, 1440, 1451, 1453, 1455, + 1457, 1453, 1456, 1456, 1458, 1444, 1461, 1459, 1455, 1454, + 1464, 1450, 1460, 1451, 1463, 1457, 1465, 1460, 1462, 1462, + 1461, 1466, 1468, 1463, 1469, 1458, 1459, 1470, 1464, 1467, - 1466, 1470, 1470, 1474, 1471, 1475, 1467, 1464, 1471, 1473, - 1473, 1476, 1472, 1469, 1477, 1476, 1475, 1478, 1480, 1480, - 1482, 1481, 1478, 1483, 1484, 1474, 1485, 1487, 1486, 1488, - 1488, 1490, 1489, 1477, 1481, 1491, 1482, 1489, 1484, 1492, - 1492, 1483, 1486, 1494, 1493, 1485, 1485, 1495, 1494, 1499, - 18, 1490, 1487, 1493, 1496, 1491, 1496, 1497, 1498, 1500, - 1502, 1504, 1497, 1507, 1498, 1500, 1505, 1495, 1507, 1499, - 1503, 1503, 1505, 1508, 1502, 1509, 1509, 1510, 1510, 1511, - 1504, 1512, 1514, 1513, 1516, 1514, 1515, 1515, 1517, 1518, - 1520, 1522, 1526, 1511, 1522, 1537, 1520, 1508, 1513, 1512, + 1467, 1465, 1470, 1471, 1472, 1472, 1468, 1473, 1474, 1475, + 1475, 1473, 1469, 1476, 1477, 1478, 1466, 1479, 1471, 1478, + 1483, 1480, 1482, 1482, 1484, 1477, 1480, 1485, 1474, 1484, + 1486, 1487, 1488, 1483, 1490, 1476, 1479, 1491, 1491, 1489, + 1493, 1492, 1494, 1485, 1498, 1487, 1492, 1496, 1486, 1495, + 1495, 1488, 1488, 1489, 1502, 1499, 1496, 1499, 1497, 1490, + 1493, 1500, 1494, 1497, 1498, 1501, 1500, 1503, 1505, 1506, + 1506, 1501, 1507, 1503, 1502, 1508, 1511, 1515, 1510, 1512, + 1512, 1508, 1505, 1510, 1513, 1513, 1517, 1514, 1516, 1517, + 1519, 1507, 1518, 1518, 1520, 1515, 1521, 1529, 1523, 1522, - 1517, 1519, 1516, 1521, 1519, 1524, 1525, 1519, 1521, 1518, - 1522, 1525, 1527, 1537, 1524, 1527, 1529, 1526, 1530, 1519, - 1528, 1528, 1529, 1531, 1530, 1532, 1532, 1534, 1531, 1533, - 1533, 1535, 1536, 1534, 1538, 1539, 1535, 1540, 1541, 1545, - 1540, 1542, 1549, 1543, 1541, 1536, 1544, 1542, 1543, 1546, - 1547, 1547, 1544, 1538, 1546, 1539, 1548, 1550, 1551, 1552, - 1549, 1548, 1545, 1555, 1556, 1553, 1554, 1557, 1558, 1559, - 1558, 1557, 1561, 1552, 1562, 17, 1565, 1550, 1551, 1553, - 1554, 1555, 1563, 1566, 1561, 1564, 1562, 1567, 1559, 1556, - 1568, 1564, 1569, 1571, 1571, 1563, 1565, 1572, 1573, 1566, + 1511, 1514, 1522, 1516, 1523, 1522, 1520, 1524, 1519, 1527, + 1525, 52, 1524, 1525, 1528, 1532, 1521, 1522, 1527, 1528, + 1530, 1532, 1529, 1530, 1531, 1531, 1533, 1539, 1534, 1525, + 1535, 1535, 1533, 1534, 1536, 1536, 1537, 1540, 1538, 1541, + 1539, 1542, 1537, 1538, 1543, 1544, 1545, 1543, 1546, 1548, + 1547, 1544, 1545, 1546, 1549, 1540, 1547, 1552, 1541, 1549, + 1551, 1542, 1550, 1550, 1553, 1551, 1554, 1555, 1556, 1557, + 1558, 1559, 1548, 1560, 1561, 1552, 1561, 1560, 1562, 1564, + 1565, 1555, 1556, 1557, 1553, 1566, 1554, 1567, 1558, 1568, + 1569, 1564, 1565, 1567, 1570, 1572, 1559, 1562, 1566, 1571, - 1574, 1575, 1575, 1573, 1568, 1576, 1578, 1567, 1577, 1579, - 1580, 1581, 1574, 1569, 1582, 1584, 1583, 1572, 1586, 1580, - 1576, 1582, 1577, 1588, 1593, 1583, 1581, 1579, 1583, 1589, - 1578, 1584, 1589, 1586, 1590, 1590, 1591, 1591, 1586, 1592, - 1594, 1596, 1593, 1594, 1595, 1595, 1597, 1598, 1588, 1600, - 1599, 1592, 1598, 1601, 1596, 1599, 1603, 1602, 1604, 1607, - 1607, 1608, 1605, 1609, 1610, 1597, 1602, 1604, 1600, 1601, - 1604, 1605, 1606, 1611, 1612, 1603, 1609, 1613, 1606, 1616, - 1617, 1608, 1610, 1618, 1618, 1619, 1620, 1611, 1621, 1613, - 1612, 1622, 1622, 1621, 1624, 1620, 1623, 1625, 1617, 1624, + 1574, 1574, 1575, 1576, 1579, 1577, 1569, 1580, 1576, 1568, + 1578, 1578, 1581, 1571, 1570, 1582, 1572, 1577, 1583, 1579, + 1584, 1580, 1575, 1587, 1591, 1586, 1589, 1583, 1592, 1593, + 1593, 1592, 1595, 1582, 1586, 1584, 1581, 1586, 1596, 1587, + 1599, 1589, 1594, 1594, 1595, 1597, 1589, 1600, 1597, 1591, + 1598, 1598, 1601, 1599, 1602, 1603, 1596, 1601, 1605, 1602, + 1604, 1606, 1608, 1607, 1609, 1611, 1600, 1605, 1610, 1610, + 1609, 1608, 1607, 1612, 1603, 1607, 1604, 1613, 1614, 1616, + 1606, 1615, 1619, 1620, 1622, 1611, 1612, 1621, 1621, 1623, + 47, 1616, 1614, 1628, 1624, 1613, 1626, 1615, 1623, 1624, - 1626, 1619, 1627, 1630, 1616, 1623, 1622, 1628, 1623, 1631, - 1632, 1633, 1628, 1628, 0, 1625, 1633, 1630, 1635, 1634, - 1627, 1626, 1636, 1636, 1631, 1634, 1638, 1637, 1639, 1640, - 1642, 1638, 1632, 1637, 1639, 1640, 1635, 1643, 1644, 1645, - 1646, 1647, 1651, 1646, 1644, 1649, 1652, 1647, 1653, 1646, - 1642, 1643, 1645, 1649, 1654, 1655, 1653, 1656, 1657, 1658, - 1664, 1651, 1666, 1654, 1665, 1652, 1659, 1659, 1655, 1660, - 1656, 1661, 1657, 1658, 1662, 1660, 1667, 1661, 1663, 1663, - 1664, 1666, 1665, 1669, 1668, 1670, 1671, 1662, 1659, 1667, - 1668, 1673, 1673, 1674, 1675, 1676, 1680, 1677, 1675, 1683, + 1622, 1620, 1625, 1625, 1627, 1626, 1629, 1619, 1626, 1627, + 1630, 1628, 1633, 1631, 1634, 1635, 1636, 1625, 1631, 1631, + 1638, 1636, 1639, 1639, 1637, 1640, 1633, 1629, 1630, 1634, + 1637, 1640, 1645, 1646, 1641, 1642, 1643, 1635, 1638, 1641, + 1647, 1642, 1643, 1648, 1650, 1649, 1647, 1646, 1649, 1652, + 1650, 1654, 1645, 1655, 1649, 1656, 1648, 1652, 1657, 18, + 1658, 1659, 1660, 1656, 1661, 1662, 1662, 1657, 1665, 1663, + 1654, 1664, 1655, 1658, 1659, 1663, 1660, 1664, 1661, 1666, + 1666, 1665, 1667, 1668, 1669, 1670, 1671, 1662, 1672, 1673, + 1674, 1677, 1671, 1676, 1676, 1678, 1683, 1682, 1670, 1678, - 1676, 1670, 1677, 1678, 1671, 1669, 1679, 1682, 1678, 1684, - 1686, 1683, 1688, 1674, 1687, 1679, 1682, 1685, 1685, 1680, - 1689, 1689, 1690, 1691, 1684, 1692, 1687, 1693, 1695, 1686, - 1691, 1688, 1696, 1698, 1697, 1699, 1690, 1692, 1700, 1693, - 1697, 1701, 1701, 1702, 1700, 1698, 1702, 1695, 1703, 1703, - 1705, 1706, 1696, 1699, 1709, 1705, 1707, 1708, 1708, 1710, - 1706, 1710, 1707, 1712, 1711, 1713, 1709, 1711, 1714, 1716, - 1715, 1717, 1718, 1719, 1716, 1720, 1717, 1721, 1723, 1724, - 1722, 1718, 1721, 1712, 1724, 1719, 1714, 1713, 1715, 1722, - 1720, 1724, 1725, 1726, 1727, 1727, 1729, 1725, 1723, 1728, + 17, 1668, 1667, 1669, 1679, 1673, 1682, 1680, 1674, 1679, + 1672, 1677, 1680, 1681, 1685, 1687, 1688, 1686, 1681, 1683, + 1686, 1689, 1689, 1685, 1690, 1691, 1692, 1687, 1693, 1693, + 1694, 1688, 1695, 1699, 1696, 1697, 1700, 1691, 1702, 1695, + 1703, 0, 1701, 1690, 1694, 1692, 1696, 1697, 1701, 1704, + 1702, 0, 1699, 1705, 1705, 1704, 1700, 1706, 1703, 1709, + 1706, 1707, 1707, 1710, 1709, 1711, 1712, 1712, 1713, 1716, + 1717, 1711, 1710, 1714, 1715, 1714, 1718, 1715, 1719, 1720, + 1713, 1721, 1722, 1723, 1720, 1724, 1721, 1727, 1725, 1716, + 1726, 1722, 1717, 1725, 1718, 1723, 1719, 1728, 1729, 1726, - 1731, 1732, 1722, 1734, 1733, 1728, 0, 1735, 1726, 1735, - 1736, 1737, 1737, 1738, 1738, 1739, 1739, 1729, 1740, 1731, - 1733, 1732, 1743, 1734, 1736, 1744, 1736, 1741, 1741, 1742, - 1742, 1745, 1745, 1746, 1747, 1750, 1748, 1746, 1740, 1748, - 1747, 1750, 1751, 1743, 1752, 1753, 1744, 1756, 1754, 1757, - 1752, 1754, 1755, 1755, 1757, 1758, 1758, 1759, 1760, 1761, - 1751, 1762, 1762, 1763, 1761, 1764, 1766, 1756, 1763, 1765, - 1753, 1764, 1759, 1767, 1768, 1770, 1773, 1821, 1769, 1760, - 1821, 1765, 1765, 1765, 1769, 1774, 1766, 1772, 1765, 1777, - 1773, 1767, 1772, 1772, 1768, 1770, 1775, 1776, 1775, 1778, + 1724, 1730, 1728, 1729, 1731, 1731, 1733, 1727, 1732, 1728, + 1735, 1736, 1726, 1747, 1732, 1738, 1730, 1737, 1739, 1755, + 1739, 1744, 1740, 1741, 1741, 1742, 1742, 1733, 1748, 1735, + 0, 1736, 1757, 1737, 1747, 1738, 1740, 1755, 1740, 1743, + 1743, 1744, 1745, 1745, 1746, 1746, 1749, 1749, 1750, 1748, + 1751, 1752, 1750, 1754, 1752, 1756, 1751, 1757, 1760, 1754, + 1758, 1756, 1761, 1758, 1759, 1759, 1763, 1761, 1762, 1762, + 1764, 1765, 1766, 1766, 1767, 1769, 1765, 1768, 1760, 1767, + 1770, 1763, 1777, 1768, 1771, 1772, 1773, 1769, 1769, 1769, + 1774, 1764, 1773, 1776, 1769, 1780, 1777, 1778, 1776, 1776, - 1774, 1779, 1780, 1781, 1777, 1778, 1782, 1782, 1776, 1783, - 1779, 1784, 1784, 1785, 1786, 1787, 1787, 1788, 1788, 1789, - 1792, 1792, 1780, 1793, 1781, 1794, 1797, 1801, 1796, 1799, - 1799, 1800, 1798, 1785, 1794, 1783, 1786, 1796, 1798, 1789, - 1803, 1804, 1801, 1802, 1805, 1805, 1806, 1797, 1793, 1803, - 1802, 1809, 1800, 1807, 1810, 1811, 1809, 1812, 1816, 1813, - 1810, 1818, 1814, 1816, 1812, 1813, 1819, 1804, 1814, 1807, - 1815, 1815, 1806, 1817, 1820, 1811, 1822, 1823, 1824, 1824, - 1827, 1818, 1817, 1825, 1826, 1819, 1820, 1828, 1829, 1825, - 1826, 1831, 1829, 1832, 1822, 1835, 1833, 1834, 1834, 1838, + 1770, 1779, 1771, 1779, 1781, 1772, 1780, 1782, 1783, 1784, + 1774, 1785, 1778, 1782, 1786, 1786, 1787, 1783, 1789, 1781, + 1788, 1788, 1790, 1791, 1791, 1792, 1792, 1793, 1797, 1784, + 1796, 1796, 1785, 1801, 1798, 1802, 1800, 1804, 1789, 1803, + 1803, 1802, 1787, 1798, 1790, 1800, 1805, 1793, 1806, 1808, + 1807, 1809, 1809, 1797, 1801, 1806, 1810, 1811, 1804, 1807, + 1813, 1805, 1814, 1815, 1816, 1813, 1817, 1822, 1814, 1820, + 1818, 1816, 1817, 1811, 1820, 1808, 1818, 1819, 1819, 1821, + 1823, 1824, 1810, 1815, 1826, 1827, 1825, 1822, 1821, 1825, + 1828, 1828, 1829, 1824, 1830, 1831, 1835, 1832, 1829, 1823, - 1827, 1833, 1828, 1823, 1836, 1839, 1840, 1841, 1829, 1839, - 1846, 1831, 1840, 1843, 1835, 1832, 1841, 1843, 1838, 1836, - 1842, 1842, 1844, 1845, 1845, 1847, 1848, 1849, 1850, 1851, - 1852, 1846, 1849, 1844, 1861, 1853, 1852, 1854, 1844, 1847, - 1855, 1855, 1854, 1856, 1856, 1848, 1859, 1857, 1850, 1851, - 1853, 1857, 1860, 1868, 1861, 1859, 1862, 1862, 1864, 1864, - 1865, 1866, 1878, 1860, 1867, 1865, 1865, 1866, 1860, 1869, - 1867, 1870, 1871, 1873, 1869, 1875, 1874, 1876, 1871, 1868, - 1874, 1880, 1877, 1870, 1878, 1873, 1879, 1875, 1877, 1881, - 1885, 1882, 1879, 1884, 1881, 1888, 1886, 1892, 1888, 1895, + 1830, 1833, 1826, 1836, 1837, 1833, 1838, 1838, 1839, 1837, + 1842, 1827, 1832, 1840, 1843, 1831, 1835, 1844, 1843, 1846, + 1846, 1833, 1845, 1844, 1848, 1836, 1847, 1839, 1840, 1842, + 1847, 1845, 1849, 1849, 1850, 1848, 1851, 1852, 1853, 1854, + 1848, 1855, 1856, 1853, 1858, 1857, 1859, 1859, 1856, 1858, + 1851, 1860, 1860, 1861, 1863, 1850, 1852, 1861, 1864, 1854, + 1857, 1855, 1865, 1863, 1866, 1866, 1868, 1868, 1872, 1864, + 1869, 1870, 1871, 1874, 1864, 1869, 1869, 1870, 1871, 1873, + 1875, 1877, 1865, 1878, 1873, 1874, 1875, 1878, 1879, 1880, + 1881, 1882, 1883, 1877, 1872, 1885, 1881, 1884, 1883, 1886, - 1880, 1886, 1876, 1882, 1895, 1884, 1889, 1889, 1893, 1885, - 1890, 1890, 1891, 1891, 1893, 1894, 1896, 1892, 1897, 1899, - 1901, 1894, 1896, 1901, 1899, 1902, 1905, 1897, 1903, 1903, - 1906, 1907, 1908, 1908, 1909, 1910, 1907, 1902, 1905, 1911, - 1910, 1914, 1906, 1909, 1911, 1912, 1913, 1913, 1912, 1915, - 1916, 1917, 1918, 1921, 1919, 1922, 1918, 1920, 1915, 1919, - 1923, 1914, 1924, 1920, 1922, 1926, 1926, 1927, 1916, 1933, - 1917, 1921, 1928, 1929, 1929, 1931, 1924, 1926, 1923, 1930, - 1930, 1928, 1932, 1934, 1931, 1927, 1935, 1941, 1934, 1942, - 1933, 1938, 1938, 1940, 1932, 1944, 1940, 1945, 1946, 1935, + 1879, 1890, 1891, 0, 1886, 1887, 1889, 1891, 1893, 1894, + 1894, 1893, 1897, 1882, 1880, 1885, 1884, 1887, 1889, 1898, + 1890, 1895, 1895, 1896, 1896, 1898, 1900, 1899, 1901, 1902, + 1904, 1900, 1897, 1899, 1901, 1904, 1906, 1907, 1902, 1906, + 1908, 1908, 1910, 1911, 1914, 1912, 1913, 1913, 1919, 1907, + 1912, 1915, 1916, 1914, 1910, 1911, 1915, 1916, 1917, 1918, + 1918, 1917, 1920, 1921, 1922, 1923, 1926, 1924, 1919, 1923, + 1925, 1920, 1924, 1927, 1928, 1929, 1925, 1932, 1931, 1931, + 1938, 1921, 1927, 1922, 1926, 1933, 1934, 1934, 1946, 1929, + 1931, 1936, 1928, 1937, 1933, 1932, 1935, 1935, 1939, 1940, - 1947, 1948, 1948, 1941, 1946, 1942, 1949, 1951, 1949, 1956, - 1944, 1945, 1950, 1950, 1960, 1951, 1957, 1947, 1953, 1953, - 1954, 1954, 1957, 1958, 1959, 1961, 1962, 1962, 1963, 1958, - 1964, 1959, 1956, 1967, 1965, 1966, 1960, 1963, 1968, 1969, - 1970, 1973, 1975, 1971, 1974, 1961, 1965, 1966, 1967, 1971, - 1968, 1964, 1976, 1976, 1975, 1970, 1977, 1978, 1981, 1980, - 1979, 1973, 1971, 1979, 1980, 1969, 1983, 1974, 1984, 1985, - 1984, 1983, 1987, 1989, 1977, 1986, 1991, 1978, 1981, 1987, - 1986, 1992, 1989, 1993, 1994, 1995, 1994, 1985, 1998, 1997, - 1992, 1997, 1999, 1999, 1991, 1993, 2000, 2002, 2001, 2002, + 1936, 1938, 1947, 1939, 1946, 1937, 1943, 1943, 1945, 1949, + 1951, 1945, 1940, 1950, 1952, 1954, 1951, 1954, 1947, 1953, + 1953, 1955, 1955, 1961, 1949, 1956, 1962, 1950, 1958, 1958, + 1963, 1952, 1962, 1956, 1959, 1959, 1963, 1964, 1965, 1966, + 1967, 1967, 1968, 1969, 1964, 1970, 1961, 1972, 1974, 1971, + 1976, 1968, 1975, 1973, 1979, 1978, 1976, 1970, 1980, 1966, + 1965, 1971, 1972, 1982, 1969, 1973, 1983, 1975, 1986, 1976, + 1980, 1981, 1981, 1984, 1974, 1978, 1984, 1979, 1985, 1988, + 1989, 1982, 1989, 1985, 1988, 1990, 1983, 1991, 1986, 1992, + 1994, 1996, 1991, 1997, 1998, 1999, 1992, 1999, 2000, 1994, - 2003, 2004, 1998, 2001, 1995, 2003, 2004, 2005, 2006, 2007, - 2009, 2008, 2010, 2012, 2016, 2007, 2008, 2013, 2014, 2014, - 2010, 2017, 2000, 2009, 2018, 2005, 2015, 2015, 2006, 2016, - 2018, 2013, 2012, 2019, 2020, 2021, 2020, 2024, 2019, 2022, - 2029, 2017, 2023, 2023, 2025, 2025, 2033, 2022, 2027, 2024, - 2026, 2026, 2031, 2021, 2028, 2022, 2035, 2027, 2029, 2028, - 2032, 2031, 2032, 2034, 2031, 2035, 2036, 2033, 2034, 2034, - 2038, 2039, 2040, 2042, 2043, 2044, 2039, 2040, 2036, 2045, - 2045, 2046, 2038, 2047, 2044, 2050, 2042, 2048, 2049, 2054, - 2055, 2056, 2052, 2053, 2043, 2055, 2056, 2057, 2063, 2046, + 2003, 2005, 1997, 1990, 2010, 2002, 1998, 2002, 2006, 1996, + 2004, 2004, 2011, 2006, 2003, 2008, 2007, 2000, 2007, 2009, + 2008, 2013, 2010, 2012, 2009, 2014, 2013, 2005, 2015, 2012, + 2017, 2018, 2011, 2019, 2019, 2021, 2015, 2022, 2014, 2020, + 2020, 2023, 2025, 2024, 2025, 2018, 2026, 2023, 2024, 2017, + 2021, 2027, 2028, 2028, 2029, 2030, 2030, 2022, 2033, 2027, + 2031, 2031, 2032, 2033, 2026, 2034, 2029, 2027, 2036, 2038, + 2037, 2032, 2037, 2039, 2041, 2040, 2043, 2036, 2039, 2039, + 2036, 2048, 2044, 2034, 2040, 2047, 2041, 2044, 2043, 2045, + 2038, 2049, 2050, 2050, 2045, 2051, 2052, 2054, 2047, 2053, - 2050, 2047, 2049, 2048, 2052, 2053, 2057, 2060, 2062, 2054, - 2064, 2065, 2066, 2060, 2062, 2067, 2068, 2068, 2069, 2070, - 2070, 2063, 2071, 2074, 2067, 2064, 2060, 2069, 2072, 2065, - 2073, 2075, 2072, 2076, 2077, 2073, 2074, 2066, 2078, 2077, - 2077, 2071, 2079, 2080, 2078, 2081, 2080, 2082, 2079, 2087, - 2075, 2085, 2085, 2081, 2090, 2076, 2086, 2086, 2087, 2088, - 2088, 2089, 2089, 2091, 2092, 2099, 2090, 2082, 2093, 2099, - 2092, 2086, 2100, 2093, 2094, 2094, 2095, 2095, 2096, 2097, - 2101, 2091, 2086, 2096, 2101, 2097, 2102, 2104, 2105, 2107, - 2106, 2108, 2100, 2105, 2110, 2112, 2108, 2109, 2111, 2113, + 2049, 2048, 2055, 2059, 2057, 2060, 2058, 2061, 2068, 2069, + 2060, 2054, 2061, 2051, 2052, 2053, 2057, 2055, 2058, 2062, + 2065, 2067, 2070, 2059, 2069, 2071, 2065, 2067, 2062, 2072, + 2076, 2068, 2073, 2073, 2074, 2075, 2075, 2077, 2072, 2065, + 2070, 2077, 2078, 2074, 2079, 2080, 2081, 2078, 2082, 2076, + 2071, 0, 2081, 2083, 2084, 2085, 2088, 2079, 2083, 2083, + 2084, 2085, 2086, 2087, 2080, 2086, 2091, 2091, 2092, 2092, + 2082, 2087, 2093, 2094, 2094, 2096, 2088, 2095, 2095, 2097, + 2098, 2093, 2103, 2092, 2099, 2106, 2098, 2096, 2103, 2099, + 2100, 2100, 2101, 2101, 2092, 2102, 2108, 2097, 2105, 2107, - 2112, 2114, 2114, 2115, 2107, 2116, 2102, 2115, 2118, 2117, - 2110, 2121, 2104, 2106, 2117, 2109, 2119, 2120, 2111, 2122, - 2116, 2113, 2123, 2119, 2122, 2124, 2125, 2125, 2127, 2120, - 2121, 2128, 2129, 2130, 2118, 2123, 2127, 2131, 2132, 2133, - 2134, 2135, 2139, 2124, 2137, 2146, 2142, 2141, 2142, 2140, - 2128, 2129, 2134, 2141, 2147, 2139, 2130, 2132, 2146, 2137, - 2133, 2131, 2135, 2140, 2143, 2143, 2144, 2145, 2147, 2148, - 2145, 2144, 2149, 2149, 2150, 2150, 2151, 2153, 2151, 2152, - 2152, 2154, 2148, 2155, 2155, 2162, 2156, 2157, 2157, 2158, - 2158, 2159, 2153, 2163, 2154, 2156, 2159, 2161, 2156, 2164, + 2102, 2110, 2105, 2107, 2111, 2106, 2112, 2113, 2114, 2111, + 2115, 2116, 2117, 2114, 2118, 2119, 2108, 2120, 2120, 2118, + 2121, 2122, 2113, 2124, 2121, 2123, 2110, 2116, 2115, 2112, + 2123, 2125, 2117, 2126, 2127, 2128, 2122, 2119, 2125, 2129, + 2128, 2130, 2131, 2131, 2134, 2126, 2133, 2135, 2136, 2124, + 2137, 2138, 2129, 2127, 2133, 2139, 2140, 2141, 2143, 2130, + 0, 2147, 2145, 2134, 2150, 2146, 2135, 2147, 2140, 2150, + 2138, 2136, 2153, 2143, 2137, 2145, 2139, 2152, 2141, 2146, + 2148, 2154, 2148, 2149, 2149, 2151, 2153, 2157, 2151, 2157, + 2152, 2155, 2155, 2159, 2154, 2156, 2156, 2158, 2158, 2160, - 2165, 2165, 2161, 2166, 2166, 2162, 2167, 2168, 2168, 2169, - 2175, 2164, 2172, 2163, 2170, 2170, 2171, 2172, 2173, 2173, - 2174, 2174, 2177, 2176, 2175, 2167, 2178, 2169, 2180, 2181, - 2181, 2171, 2176, 2180, 2182, 2185, 2177, 2183, 2183, 2184, - 2186, 2185, 2189, 2186, 2190, 2178, 2187, 2187, 2188, 2188, - 2191, 2192, 2192, 2182, 2194, 2195, 2196, 2184, 2199, 2190, - 2197, 2189, 2187, 2200, 2197, 2198, 2198, 2201, 2200, 2191, - 2202, 2196, 2204, 2204, 2194, 2205, 2206, 2199, 2195, 2207, - 2208, 2209, 2201, 2206, 2210, 2202, 2211, 2211, 2212, 2213, - 2216, 2213, 2219, 2207, 2220, 2205, 2217, 2212, 2208, 2209, + 2161, 2161, 2162, 2163, 2163, 2164, 2164, 2168, 2159, 2169, + 2165, 2162, 2160, 2167, 2162, 2165, 2170, 2173, 2167, 2171, + 2171, 2172, 2172, 2174, 2174, 2175, 2177, 2168, 2170, 2169, + 2176, 2176, 2178, 2179, 2179, 2181, 2173, 2178, 2180, 2180, + 2183, 2177, 2182, 2175, 2184, 2186, 2187, 2187, 2188, 2181, + 2186, 2182, 2189, 2189, 2183, 2190, 2191, 2192, 2193, 2193, + 2192, 2195, 2191, 2184, 2194, 2194, 2196, 2188, 2197, 2198, + 2198, 2200, 2201, 2190, 2193, 2202, 2204, 2204, 2203, 2205, + 2195, 2196, 2203, 2206, 2207, 2208, 2211, 2197, 2206, 2212, + 2202, 2200, 2210, 2210, 2213, 2201, 2212, 2214, 2205, 2207, - 2214, 2217, 2216, 2214, 2218, 2221, 2222, 2220, 2223, 2218, - 2210, 2222, 2227, 2233, 2225, 2229, 2226, 2219, 2214, 2225, - 2214, 2226, 2228, 2230, 2236, 2231, 2221, 2227, 2228, 2230, - 2231, 2234, 2232, 2236, 2223, 0, 2229, 2232, 2233, 2235, - 2237, 2238, 2235, 2239, 2234, 2240, 2245, 2241, 2242, 2237, - 2238, 2243, 2239, 2241, 2242, 2243, 2247, 2248, 2248, 2240, - 2251, 2249, 2250, 2250, 2253, 2247, 2245, 2249, 2252, 2251, - 2258, 2250, 2255, 2252, 2256, 2257, 2257, 2261, 2259, 2262, - 2264, 2263, 2268, 2310, 2253, 2258, 2253, 2259, 2255, 2261, - 2256, 2266, 2264, 2267, 2266, 2262, 2263, 2269, 2267, 2270, + 2208, 2215, 2216, 2217, 2217, 2218, 2211, 2219, 2213, 2219, + 2222, 2225, 2223, 2220, 2218, 2214, 2220, 2223, 2224, 2215, + 2227, 2226, 2222, 2224, 2228, 2229, 2235, 2231, 2216, 2228, + 2232, 2220, 2231, 2220, 2226, 2232, 2225, 2233, 2234, 2236, + 2239, 2227, 2240, 2237, 2234, 2236, 0, 2235, 2237, 2238, + 2241, 2229, 2233, 2241, 2238, 2240, 2246, 2242, 2243, 2244, + 2245, 2251, 2254, 2254, 2253, 2239, 2242, 2243, 2244, 2245, + 2246, 2247, 2248, 2253, 2255, 2249, 2257, 2247, 2248, 2249, + 2255, 2251, 2256, 2256, 2259, 2257, 2258, 2258, 2260, 2259, + 2262, 2256, 2265, 2263, 2264, 2264, 2266, 2269, 2273, 2268, - 2270, 2310, 2268, 2271, 2271, 2273, 2273, 2274, 2275, 2269, - 2274, 2276, 2277, 2275, 2278, 2279, 2279, 2276, 2277, 2280, - 2281, 2281, 2282, 2278, 2283, 2284, 2285, 2285, 2287, 2286, - 2295, 2288, 0, 2280, 2282, 2286, 2288, 2290, 2283, 2295, - 2291, 2290, 2287, 2291, 2284, 2292, 2292, 2293, 2294, 2296, - 2299, 2297, 2293, 2294, 2294, 2297, 2298, 2298, 2302, 2301, - 2303, 2304, 2305, 2299, 2301, 2306, 2305, 2307, 2308, 2296, - 2309, 2311, 2307, 2312, 2308, 2304, 2309, 2313, 2302, 2314, - 2303, 2316, 2313, 2317, 2318, 2306, 2328, 2320, 2319, 2318, - 2311, 2325, 2312, 2316, 2319, 2320, 2321, 2323, 2321, 2317, + 2270, 2273, 2271, 2275, 2276, 2266, 2262, 2265, 2260, 2263, + 2260, 2268, 2274, 2269, 2271, 2270, 2276, 2274, 2277, 2277, + 2278, 2278, 2282, 2275, 2280, 2280, 2281, 2282, 2283, 2281, + 2284, 2285, 2286, 2286, 2283, 2287, 2284, 2288, 2288, 2289, + 2285, 2290, 2291, 2292, 2292, 2294, 2293, 2302, 2295, 2287, + 2297, 2289, 2293, 2295, 2297, 2290, 2302, 2298, 2303, 2294, + 2298, 2291, 2299, 2299, 2300, 2301, 2305, 2305, 2304, 2300, + 2301, 2301, 2304, 2306, 2308, 2309, 2310, 2311, 2303, 2308, + 2312, 2313, 2314, 2315, 2312, 2317, 2306, 2314, 2316, 2315, + 2318, 2311, 2319, 2320, 2316, 2309, 2310, 2321, 2320, 2324, - 2314, 2326, 2326, 2334, 2327, 2325, 2323, 2327, 2329, 2329, - 2332, 2333, 2328, 2336, 2332, 2334, 2341, 2333, 2335, 2335, - 2339, 2339, 2336, 2343, 2344, 2347, 2348, 2349, 2350, 2357, - 2347, 2358, 2349, 2350, 2341, 2351, 2351, 2343, 2353, 2353, - 2344, 2355, 2356, 2356, 2359, 2357, 2361, 2355, 2362, 2359, - 2363, 2363, 2348, 2358, 2365, 2366, 2367, 2368, 2370, 2370, - 2362, 2366, 2372, 2365, 2371, 2361, 2373, 2371, 2375, 2375, - 2376, 2376, 2368, 2377, 2367, 2378, 2379, 2380, 2377, 2384, - 2382, 2372, 2380, 2383, 2373, 2379, 2381, 2385, 2381, 2386, - 2387, 2384, 2385, 2378, 2382, 2387, 2392, 2383, 2388, 2388, + 2323, 2313, 2325, 2317, 2326, 2327, 2328, 2325, 2328, 2318, + 2326, 2319, 2323, 2327, 2330, 2324, 2332, 2335, 2321, 2333, + 2333, 2334, 2340, 2330, 2334, 2336, 2336, 2339, 2340, 2341, + 2332, 2339, 2342, 2342, 2348, 2343, 2346, 2346, 2351, 2350, + 2354, 2341, 2355, 2335, 2343, 2354, 2356, 2358, 2358, 2364, + 2357, 2356, 2348, 2350, 2351, 2357, 2360, 2360, 2362, 2363, + 2363, 2365, 2366, 2368, 2362, 2364, 2369, 2366, 2355, 2370, + 2370, 2372, 2374, 2373, 2375, 2377, 2377, 2379, 2369, 2373, + 2372, 2378, 2368, 2365, 2378, 2380, 2382, 2382, 2384, 2375, + 2374, 2383, 2383, 2384, 2385, 2386, 2379, 2387, 2388, 2389, - 2389, 2389, 2390, 2390, 2391, 2391, 2393, 2394, 2392, 2386, - 2395, 2395, 2394, 2396, 2396, 2397, 2398, 2399, 2400, 2401, - 2401, 2402, 2403, 2403, 2393, 2404, 2404, 2397, 2398, 2407, - 2405, 2406, 2408, 2409, 2400, 2411, 2407, 2399, 2412, 2414, - 2402, 2405, 2410, 2406, 2408, 2413, 2413, 2410, 2414, 2415, - 2416, 2417, 2418, 2409, 2419, 2411, 2420, 2421, 2412, 2422, - 2422, 2427, 2423, 2428, 2417, 2424, 2425, 2429, 2419, 2421, - 2416, 2423, 2431, 0, 2430, 2415, 2418, 2430, 2420, 2427, - 2424, 2425, 2432, 2433, 2441, 2428, 2431, 2432, 2433, 2443, - 2429, 2434, 2434, 2435, 2435, 2436, 2436, 2438, 2438, 2440, + 2388, 2390, 2387, 2380, 2386, 2391, 2392, 2393, 2400, 2394, + 0, 2392, 2385, 2389, 2394, 2390, 2399, 2391, 2395, 2395, + 2396, 2396, 2397, 2397, 2398, 2398, 2400, 2393, 2399, 2401, + 2402, 2402, 2403, 2403, 2401, 2404, 2405, 2406, 2407, 2408, + 2408, 2409, 2410, 2410, 2411, 2411, 2413, 2404, 2405, 2414, + 2412, 2415, 2416, 2418, 2407, 2419, 2414, 2406, 2413, 2417, + 2409, 2412, 2421, 2415, 2417, 2420, 2420, 2422, 2423, 2424, + 2425, 2421, 2416, 2418, 2427, 2419, 2426, 2428, 2431, 2428, + 2429, 2435, 2424, 2430, 2430, 2432, 2433, 2431, 2423, 2436, + 2426, 2437, 2429, 2422, 2425, 2438, 2427, 2449, 2438, 2435, - 2440, 2442, 2441, 2444, 2446, 2447, 2448, 2449, 2443, 2451, - 2450, 2452, 2442, 2452, 2453, 2454, 2459, 2455, 2444, 2450, - 2456, 2456, 2461, 2447, 2446, 2458, 2458, 2449, 2448, 2451, - 2462, 2459, 2465, 2454, 2453, 2455, 2463, 2463, 2467, 2462, - 2468, 2465, 2466, 2466, 2461, 2469, 2470, 2471, 2472, 2474, - 2477, 2473, 2469, 2475, 2475, 2478, 2467, 2479, 2468, 2476, - 2476, 2470, 2483, 2479, 2484, 2471, 2472, 2473, 2474, 2485, - 2477, 2480, 2480, 2478, 2481, 2481, 2482, 2486, 2487, 2484, - 2483, 2488, 2482, 2487, 2489, 2490, 2496, 2491, 2485, 2491, - 2490, 2486, 2492, 2492, 2493, 2499, 2493, 2494, 2494, 2498, + 2432, 2433, 2439, 2440, 2441, 2442, 2442, 2451, 2440, 2441, + 2452, 2436, 2443, 2443, 2437, 2449, 2439, 2444, 2444, 2446, + 2446, 2448, 2448, 2450, 2454, 2452, 2451, 2455, 2456, 2457, + 2458, 2459, 2461, 2460, 2450, 2460, 2462, 2463, 2467, 2458, + 2464, 2464, 2466, 2466, 2454, 2455, 2469, 2470, 2475, 2457, + 2456, 2459, 2461, 2467, 2462, 2463, 2470, 2471, 2471, 2476, + 2473, 2474, 2474, 2477, 2478, 2479, 2475, 2480, 2469, 2473, + 2477, 2481, 2482, 2483, 2483, 2484, 2484, 2476, 2485, 2478, + 2487, 2486, 2491, 2479, 2490, 2480, 2487, 2481, 2488, 2488, + 2490, 2482, 2489, 2489, 2492, 2493, 2494, 2495, 2485, 2486, - 2500, 2488, 2501, 2503, 2489, 2496, 2502, 2504, 2498, 2507, - 2508, 2502, 2500, 2508, 2499, 2509, 2509, 2510, 2511, 2512, - 2512, 2513, 2501, 2503, 2515, 2513, 2504, 2516, 2518, 2507, - 2520, 2516, 2510, 2517, 2517, 2521, 2511, 2522, 2525, 2515, - 2526, 2518, 2523, 2523, 2527, 2520, 2528, 2528, 2527, 2526, - 2525, 2529, 2530, 2530, 2531, 2521, 2532, 2522, 2533, 2531, - 2534, 2535, 2535, 2540, 2540, 2532, 2541, 2542, 2542, 2543, - 2529, 2544, 2534, 0, 2533, 2548, 2545, 2546, 2547, 2547, - 2550, 2550, 2543, 2555, 2544, 2545, 2546, 2553, 2541, 2554, - 2548, 2556, 2553, 2557, 2554, 2558, 2556, 2555, 2559, 2563, + 2491, 2496, 2495, 2497, 2509, 2499, 2498, 2499, 2504, 2492, + 2494, 2498, 2500, 2500, 2493, 2501, 2506, 2501, 2502, 2502, + 2507, 2496, 2508, 2497, 2509, 2506, 2510, 2504, 2511, 2518, + 2512, 2510, 2515, 2516, 2508, 2519, 2516, 2517, 2517, 2507, + 2520, 2520, 2521, 2523, 2518, 2528, 2521, 2524, 2511, 2512, + 2526, 2524, 2515, 2519, 2525, 2525, 2529, 2530, 2523, 2533, + 2528, 2531, 2531, 2526, 2534, 2535, 2536, 2536, 2537, 2535, + 2540, 2533, 2541, 2534, 2538, 2538, 2529, 2530, 2539, 2540, + 2542, 2543, 2543, 2539, 2548, 2548, 2549, 2537, 2541, 2550, + 2550, 2551, 2542, 2552, 2553, 2556, 2554, 2555, 2555, 2558, - 2560, 2557, 2562, 2565, 2563, 2564, 2570, 2559, 2560, 0, - 2564, 2566, 2566, 2570, 2558, 2567, 2567, 2562, 2565, 2568, - 2569, 2569, 2571, 2572, 2568, 2573, 2574, 2571, 2575, 2576, - 2576, 2577, 2574, 2575, 2578, 2579, 2579, 2580, 2580, 2578, - 2583, 2572, 0, 2573, 2584, 2584, 2577, 2585, 2589, 2586, - 2585, 2587, 2588, 2583, 2586, 2586, 2587, 2588, 2590, 2591, - 2592, 2593, 2589, 2591, 2590, 2592, 2594, 2595, 2596, 2599, - 2593, 2597, 2598, 2600, 2599, 2595, 2602, 2597, 2598, 2603, - 2604, 2594, 2606, 2604, 2603, 2600, 2608, 2610, 2609, 2596, - 2611, 2608, 2602, 2609, 2606, 2612, 2618, 2613, 2614, 2614, + 2558, 2563, 2561, 2553, 2551, 2554, 2552, 2561, 2549, 2562, + 2556, 2564, 2565, 2566, 2562, 2563, 2564, 2567, 2570, 2568, + 2565, 2573, 2577, 2571, 2572, 0, 2567, 2568, 2571, 2572, + 2574, 2574, 2566, 2570, 2575, 2575, 2573, 2576, 2578, 2578, + 2579, 2577, 2576, 2580, 2581, 2582, 2583, 2579, 2580, 2584, + 2585, 2585, 2583, 2586, 2584, 2587, 2588, 2588, 2589, 2589, + 2587, 2592, 2581, 2582, 2593, 2593, 2594, 2595, 2586, 2594, + 2596, 2597, 2595, 2595, 2592, 2596, 2597, 2598, 2599, 2600, + 2601, 2602, 2603, 2600, 2599, 2601, 2604, 2605, 2608, 2606, + 2602, 2598, 2607, 2608, 2604, 2606, 2611, 2603, 2607, 2609, - 2615, 2619, 2620, 2611, 2612, 2610, 2613, 2619, 2620, 2615, - 2623, 2624, 2627, 2625, 2618, 2626, 2626, 2628, 2629, 2627, - 2630, 2631, 2631, 2632, 2634, 2636, 2637, 2629, 2639, 2623, - 2637, 2624, 2625, 2638, 2638, 2630, 2628, 2640, 2641, 2634, - 2642, 2644, 2632, 2640, 2641, 2636, 2642, 2643, 2643, 2644, - 2645, 2647, 2648, 2639, 2650, 2645, 2651, 2652, 2650, 2655, - 2647, 2654, 2654, 2656, 2656, 2648, 2657, 2657, 2659, 2659, - 2651, 2660, 2652, 2661, 2665, 2660, 2666, 2655, 2661, 2663, - 2663, 2666, 2668, 2667, 2670, 2671, 2671, 2668, 2668, 2673, - 2673, 2674, 2674, 2675, 2665, 2667, 2675, 2676, 2678, 2680, + 2612, 2613, 2615, 2619, 2613, 2612, 2620, 2621, 2605, 2627, + 2617, 2609, 2611, 2618, 2615, 2617, 2621, 2622, 2618, 2620, + 2624, 2619, 2623, 2623, 2628, 2629, 2622, 2627, 2632, 2624, + 2628, 2629, 2633, 2636, 2634, 2635, 2635, 2637, 2645, 2638, + 2636, 2641, 2639, 2640, 2640, 2646, 2643, 2632, 2638, 2646, + 2647, 2647, 2633, 2634, 2648, 0, 2637, 2639, 2645, 2649, + 2641, 2643, 2650, 2651, 2653, 2649, 2652, 2652, 2650, 2651, + 2654, 2656, 2653, 2657, 2659, 2654, 2660, 2661, 2659, 2648, + 2656, 2663, 2663, 2664, 2665, 2665, 2657, 2666, 2666, 2674, + 2660, 2669, 2661, 2668, 2668, 2669, 2676, 2670, 2672, 2672, - 2681, 2681, 2682, 2682, 2670, 2683, 2683, 2684, 2685, 2685, - 2676, 2686, 2687, 2688, 2689, 2697, 2678, 2690, 2690, 2680, - 2689, 2691, 2684, 2694, 2686, 2691, 2696, 2688, 2698, 2694, - 2687, 2696, 2696, 2699, 2700, 2701, 2702, 2707, 2697, 2703, - 2700, 2701, 2707, 2703, 2704, 2704, 2709, 2710, 2698, 2712, - 2710, 2715, 2713, 2699, 2709, 2713, 2714, 2714, 2716, 2717, - 2718, 2702, 2719, 2716, 2720, 2720, 2724, 2721, 2715, 2715, - 2723, 2725, 2722, 2728, 2712, 2722, 2719, 2717, 2737, 2725, - 2718, 2721, 2727, 2722, 2723, 2724, 2726, 2727, 2727, 2726, - 2729, 2729, 2728, 2730, 2730, 2731, 2731, 2732, 2732, 2733, + 2675, 2664, 2670, 2679, 2684, 2675, 2677, 2684, 2676, 2674, + 2687, 2677, 2677, 2680, 2680, 2682, 2682, 2683, 2683, 2685, + 2689, 2690, 2690, 2679, 2691, 2691, 2692, 2692, 2687, 2693, + 2694, 2694, 2685, 2695, 2696, 2697, 2698, 2699, 2699, 2700, + 2689, 2703, 2698, 2700, 2693, 2704, 2695, 2703, 2706, 2697, + 2704, 2707, 2696, 2706, 2706, 2708, 2709, 2710, 2711, 2712, + 2722, 2713, 2719, 2710, 2711, 2713, 2714, 2714, 2717, 2720, + 2719, 2725, 2720, 2717, 2707, 2708, 2709, 2723, 2724, 2724, + 2723, 2726, 2727, 2728, 2712, 2722, 2726, 2729, 2725, 2725, + 2730, 2730, 2731, 2732, 2733, 2734, 2732, 2735, 2738, 2736, - 2733, 2734, 2735, 2736, 2737, 2738, 2739, 2735, 2740, 2741, - 2738, 2742, 2743, 2740, 2745, 2745, 2748, 2734, 2741, 2746, - 2746, 2747, 2751, 2736, 2747, 2739, 2750, 2750, 2753, 2751, - 2756, 2742, 2743, 2753, 2748, 2752, 2752, 2755, 2755, 2756, - 2757, 2758, 2760, 2761, 2761, 2763, 2764, 2762, 2777, 2757, - 2758, 2762, 2765, 2766, 2763, 2767, 2778, 2765, 2765, 2768, - 2760, 2764, 2772, 2768, 2767, 2776, 2766, 2772, 2773, 2773, - 2775, 2775, 2780, 2777, 2778, 2781, 2784, 2785, 2786, 2776, - 2789, 2780, 2787, 2791, 2793, 2794, 2785, 2781, 2787, 2793, - 2794, 2796, 2789, 2795, 2795, 2799, 0, 2798, 2786, 2806, + 2727, 2729, 2736, 2728, 2732, 2735, 2731, 2737, 2733, 2739, + 2739, 2744, 2737, 2737, 2734, 2740, 2740, 2738, 2741, 2741, + 2742, 2742, 2743, 2743, 2745, 2746, 2747, 2744, 2748, 2745, + 2749, 2750, 2751, 2748, 2752, 2753, 2750, 2755, 2755, 2756, + 2756, 2751, 2758, 2757, 2761, 2746, 2757, 2760, 2760, 2749, + 2766, 2761, 2747, 2763, 2752, 2753, 2762, 2762, 2763, 2766, + 2758, 2765, 2765, 2767, 2768, 2770, 2771, 2771, 2773, 2774, + 2772, 2787, 2767, 2768, 2772, 2775, 2776, 2773, 2777, 2788, + 2775, 2775, 2778, 2770, 2774, 2782, 2778, 2777, 2786, 2776, + 2782, 2783, 2783, 2785, 2785, 2790, 2787, 2788, 2791, 2794, - 2796, 2784, 2798, 2807, 2791, 2800, 2800, 2805, 2799, 2800, - 2802, 2802, 2803, 2803, 2804, 2804, 2805, 2814, 2808, 2806, - 2810, 2815, 2807, 2808, 2811, 2812, 2810, 2813, 2813, 2811, - 2812, 2816, 2817, 2815, 2819, 2814, 2818, 2817, 2820, 2823, - 2819, 2821, 2821, 2823, 2824, 2825, 2826, 2826, 2827, 2824, - 2825, 2828, 2816, 2829, 2818, 2830, 2832, 2832, 2834, 2835, - 2836, 2837, 2838, 2820, 2836, 2839, 2828, 2827, 2829, 2840, - 2837, 2834, 2835, 2843, 2841, 2830, 2844, 2840, 2838, 2841, - 2842, 2842, 2843, 2845, 2839, 2846, 2846, 2847, 2850, 2850, - 2851, 2851, 2853, 2865, 2844, 2855, 2855, 2860, 2857, 2858, + 2795, 2796, 2786, 2799, 2790, 2797, 2801, 2803, 2804, 2795, + 2791, 2797, 2803, 2804, 2806, 2799, 2805, 2805, 2809, 2810, + 2808, 2796, 2817, 2806, 2794, 2808, 2818, 2801, 2811, 2811, + 0, 2809, 2811, 2810, 2813, 2813, 2814, 2814, 2815, 2815, + 2816, 2819, 2817, 2822, 2821, 2818, 2819, 2823, 2822, 2816, + 2821, 2825, 2823, 2824, 2824, 2826, 2827, 2828, 2829, 2830, + 2831, 2838, 2828, 2832, 2832, 2830, 2834, 2826, 2835, 2825, + 2834, 2837, 2837, 2835, 2836, 2839, 2829, 2827, 2840, 2836, + 2838, 2841, 2843, 2843, 2845, 2831, 2846, 2847, 2849, 2848, + 2839, 2847, 2850, 2840, 2851, 2852, 2855, 2845, 2848, 2846, - 2859, 2863, 2860, 2862, 2862, 2864, 2847, 2867, 2867, 2845, - 2868, 2869, 2865, 2853, 2857, 2858, 2859, 2870, 2870, 2873, - 2874, 2863, 2875, 2876, 2868, 0, 2874, 2875, 2864, 2879, - 2869, 2877, 2877, 2878, 2878, 2880, 2880, 2881, 2882, 2873, - 2883, 2886, 2885, 2887, 2884, 2876, 2896, 2882, 2881, 2879, - 2884, 2888, 2888, 2886, 2889, 2880, 2890, 2891, 2891, 2890, - 2883, 2885, 2895, 2887, 2897, 2900, 2896, 2898, 2898, 2889, - 2897, 2900, 2899, 2901, 2895, 2899, 2903, 2904, 2904, 2905, - 2906, 2903, 2907, 2908, 2905, 2909, 2909, 2912, 2907, 2913, - 2911, 2901, 2916, 2914, 2915, 2915, 2920, 2920, 2923, 2906, + 2852, 2841, 2851, 2854, 2849, 2853, 2853, 2856, 2857, 2857, + 2858, 2850, 2854, 2864, 2855, 2861, 2861, 2862, 2862, 2866, + 2866, 2868, 2869, 2870, 2874, 2871, 2873, 2873, 2875, 2858, + 2871, 2876, 2879, 2856, 2864, 2878, 2878, 2868, 2869, 2870, + 2880, 2881, 2881, 2884, 2874, 2887, 2879, 2885, 2890, 2886, + 2876, 2875, 2894, 2885, 2886, 2888, 2888, 2889, 2889, 2880, + 2891, 2891, 2892, 2884, 2895, 2893, 2896, 2887, 2890, 2897, + 2895, 2898, 2894, 2892, 2893, 2899, 2899, 2900, 2907, 2901, + 2891, 2897, 2901, 2902, 2908, 2896, 2902, 2903, 2903, 2909, + 2907, 2898, 2900, 2910, 2910, 2909, 2911, 2912, 2913, 2911, - 2908, 2908, 2911, 2917, 2918, 2912, 2914, 2917, 2921, 2921, - 2922, 2916, 2923, 2918, 2913, 2922, 2924, 2925, 2925, 2926, - 2926, 2924, 2927, 2927, 2928, 2929, 2930, 2936, 2931, 2933, - 2933, 2938, 2930, 2931, 2939, 2940, 2944, 2928, 2941, 2941, - 2943, 2943, 2945, 2946, 2947, 2947, 2936, 2948, 2948, 2950, - 2944, 2929, 2946, 2938, 2951, 2950, 2939, 2940, 2952, 2953, - 2956, 2956, 2945, 2959, 2953, 2958, 2958, 2960, 2959, 2961, - 2962, 2963, 2964, 2964, 2951, 2961, 2967, 2952, 2965, 2963, - 2967, 2960, 2962, 2965, 2968, 2969, 2970, 2971, 2972, 2974, - 2975, 2970, 2976, 2977, 2972, 2980, 2979, 2974, 2981, 2971, + 2915, 2916, 2916, 2912, 2908, 2915, 2917, 2918, 2919, 2923, + 2920, 2917, 2921, 2921, 2919, 2924, 2913, 2925, 2926, 2927, + 2927, 2923, 2928, 2930, 0, 2929, 2918, 2920, 2920, 2929, + 2935, 2926, 2930, 2924, 2932, 2932, 2933, 2933, 2934, 2940, + 2936, 2928, 2925, 2934, 2935, 2936, 2937, 2937, 2938, 2938, + 2939, 2939, 2940, 2941, 2942, 2948, 2943, 2945, 2945, 2950, + 2942, 2943, 2951, 2952, 2953, 2953, 2955, 2955, 2956, 2957, + 2963, 2958, 2959, 2959, 2948, 2960, 2960, 2962, 2964, 2941, + 2958, 2950, 2956, 2962, 2951, 2952, 2965, 2968, 2968, 2957, + 2963, 2965, 2970, 2970, 2971, 2972, 2973, 2964, 2974, 2971, - 2982, 2983, 2985, 2986, 2968, 2969, 2983, 2985, 2990, 2975, - 0, 2980, 2976, 2977, 2979, 2981, 2981, 2988, 2987, 2992, - 2991, 2982, 2988, 2986, 2987, 2991, 2995, 2995, 2990, 2996, - 2996, 2997, 2992, 3001, 3001, 2997, 3002, 3003, 3004, 3004, - 3017, 3002, 3006, 3006, 3007, 3007, 3010, 3007, 3008, 3008, - 3010, 3008, 3009, 3009, 3013, 3009, 3003, 3012, 3012, 3014, - 3017, 3018, 3019, 3020, 3020, 3023, 3025, 3019, 3024, 3026, - 3025, 3027, 3013, 3014, 3029, 3024, 3031, 3030, 3026, 3032, - 3032, 3018, 3030, 3033, 3033, 3031, 3027, 3034, 3034, 3035, - 3023, 3036, 3029, 3037, 3038, 3039, 3036, 3040, 3041, 3038, + 2975, 2977, 2973, 2976, 2976, 2981, 2977, 2979, 2975, 2972, + 2974, 2979, 2980, 2982, 2983, 2984, 2985, 2980, 2987, 2983, + 2988, 2989, 2985, 2990, 2992, 2981, 2987, 2984, 2993, 2994, + 2995, 2996, 2998, 2982, 2999, 3001, 2996, 2998, 3003, 2988, + 3001, 2989, 2992, 2990, 2993, 3004, 2994, 2994, 3005, 3000, + 3004, 2995, 3008, 3008, 2999, 3000, 3009, 3009, 3003, 3010, + 3016, 3005, 3015, 3010, 3014, 3014, 0, 3015, 3017, 3017, + 3019, 3019, 3020, 3020, 3026, 3020, 3027, 3021, 3021, 3016, + 3021, 3022, 3022, 3023, 3022, 3025, 3025, 3023, 3030, 3031, + 3027, 3032, 3026, 3033, 3033, 3036, 3032, 3037, 3038, 3040, - 3038, 3039, 3037, 3042, 3035, 3037, 3043, 3044, 3045, 3046, - 3046, 3043, 3044, 3041, 3047, 3048, 3049, 3049, 3050, 3050, - 3047, 3048, 3040, 3052, 3042, 3051, 3051, 3045, 3052, 3055, - 3055, 3057, 3057, 3058, 3061, 3061, 3062, 3062, 3063, 3063, - 3064, 3064, 3058, 3065, 3065, 3066, 3066, 3067, 3067, 3069, - 3070, 3070, 3071, 3072, 3073, 3077, 3075, 3079, 3069, 3076, - 3076, 3071, 3082, 3078, 3086, 3072, 3080, 3080, 3088, 3079, - 3077, 3081, 3081, 3090, 3073, 3075, 3078, 3082, 3083, 3083, - 3087, 3093, 3086, 3087, 3089, 3089, 3092, 3093, 3094, 3092, - 3095, 3090, 3096, 3098, 3088, 3095, 3097, 3100, 3101, 3108, + 3042, 3039, 3038, 3148, 3037, 3148, 3043, 3045, 3030, 3031, + 3039, 3043, 3044, 3044, 3040, 3049, 3045, 3054, 3042, 3051, + 3036, 3046, 3046, 3047, 3047, 3048, 3048, 3050, 3051, 3052, + 3049, 3051, 3050, 3053, 3052, 3052, 3055, 3056, 3057, 3053, + 3058, 3059, 3054, 3057, 3061, 3058, 3060, 3060, 3062, 3199, + 3061, 3055, 3063, 3063, 3062, 3064, 3064, 3199, 3056, 3066, + 3059, 3065, 3065, 3072, 3066, 3069, 3069, 3071, 3071, 3075, + 3075, 3087, 3072, 3076, 3076, 3077, 3077, 3078, 3078, 3079, + 3079, 3080, 3080, 3081, 3081, 3083, 3084, 3084, 3085, 3086, + 3089, 3087, 3090, 3090, 3083, 3091, 3093, 3085, 3092, 3094, - 3105, 3116, 3094, 3100, 3116, 3118, 3123, 3101, 3126, 3098, - 3128, 3096, 3119, 3119, 3097, 3105, 3120, 3120, 3118, 3121, - 3121, 3124, 3125, 3130, 3128, 3108, 3125, 3131, 3126, 3123, - 3124, 3132, 3133, 3134, 3133, 3137, 3132, 3136, 3131, 3135, - 3135, 3138, 3139, 3140, 3142, 3141, 3130, 3145, 3134, 3143, - 3136, 3144, 3145, 3142, 3137, 3146, 3151, 3147, 3139, 3138, - 3141, 3143, 3147, 3152, 3153, 3153, 3159, 3154, 3140, 3160, - 3151, 3164, 3144, 3155, 3155, 3146, 3154, 3156, 3156, 3157, - 3157, 3158, 3158, 3152, 3161, 3159, 3162, 3161, 3163, 3160, - 3165, 3162, 3166, 3163, 3167, 3168, 3164, 3169, 3166, 3170, + 3094, 3086, 3095, 3095, 3097, 3098, 3098, 3101, 3093, 3089, + 3091, 3092, 3102, 3103, 3105, 3102, 3104, 3104, 3107, 3097, + 3108, 3107, 3109, 3110, 3111, 3101, 3108, 3112, 3110, 3115, + 3113, 3116, 3105, 3120, 3123, 3115, 3109, 3133, 3131, 3103, + 3116, 3131, 3138, 3111, 3141, 3112, 3113, 3145, 3120, 3139, + 3133, 3134, 3134, 3135, 3135, 3136, 3136, 3140, 3139, 3143, + 3123, 3140, 3147, 3146, 3141, 3138, 3149, 3147, 3150, 3150, + 3145, 3151, 3152, 3143, 3146, 3153, 3154, 3155, 3157, 3156, + 3159, 3149, 3166, 3158, 3151, 3160, 3161, 3157, 3167, 0, + 3160, 3152, 3154, 3153, 3156, 3158, 3166, 3179, 3162, 3168, - 3171, 3171, 3169, 3172, 3172, 3165, 3173, 3168, 3167, 3174, - 3175, 3175, 3177, 3179, 3182, 3182, 3183, 3183, 3184, 3170, - 3185, 3173, 3188, 3186, 3187, 3189, 3184, 3177, 3174, 3186, - 3187, 3179, 3190, 3192, 3192, 3191, 3188, 3196, 3189, 3185, - 3191, 3193, 3193, 3197, 3200, 3199, 3202, 3203, 3200, 3204, - 3208, 3190, 3203, 3207, 3205, 3208, 3206, 3209, 3196, 3199, - 3210, 3210, 3209, 3197, 3213, 3214, 3202, 3205, 3204, 3206, - 3215, 3217, 3207, 3216, 3216, 3218, 3217, 3219, 3219, 3223, - 3220, 3218, 3221, 3214, 3213, 3220, 3222, 3221, 3224, 3215, - 3227, 3222, 3226, 3226, 3224, 3227, 3228, 3228, 3223, 3230, + 3168, 3159, 3155, 3162, 3169, 3174, 3161, 3175, 3167, 3170, + 3170, 3171, 3171, 3169, 3172, 3172, 3173, 3173, 3176, 3180, + 3177, 3176, 3179, 3178, 3174, 3177, 3181, 3175, 3178, 3182, + 3183, 3184, 3181, 3185, 3180, 3188, 3184, 3186, 3186, 3187, + 3187, 3189, 3183, 3182, 3190, 3190, 3192, 3194, 3197, 3197, + 3188, 3198, 3198, 3185, 3200, 3203, 3201, 3202, 3204, 3205, + 3189, 3192, 3201, 3202, 3211, 3194, 3212, 3206, 3214, 3203, + 3217, 3204, 3206, 3200, 3207, 3207, 3208, 3208, 3205, 3215, + 3219, 3220, 3214, 3215, 3218, 3211, 3212, 3221, 3222, 3218, + 3217, 3223, 3224, 3228, 3220, 3230, 3223, 3224, 3229, 3219, - 3231, 3232, 3233, 3230, 3234, 3235, 3236, 3237, 3232, 3239, - 3239, 3235, 3241, 3241, 3244, 3242, 3245, 3243, 3246, 3231, - 3237, 3233, 3243, 3234, 3242, 3236, 3249, 3242, 3247, 3247, - 3251, 3246, 3248, 3244, 3253, 3245, 3258, 3248, 0, 3249, - 3252, 3252, 3254, 3254, 3255, 3255, 3256, 3257, 3259, 3259, - 3265, 3256, 3260, 3253, 3257, 3258, 3251, 3260, 3261, 3263, - 3261, 3262, 3262, 3264, 3267, 3270, 3263, 3266, 3274, 3265, - 3264, 3272, 3266, 3269, 3269, 3273, 3272, 3275, 3276, 3276, - 3273, 3278, 3278, 3267, 3270, 3279, 3280, 3274, 3281, 3281, - 3282, 3282, 3283, 3285, 3285, 3287, 3275, 3286, 3286, 3283, + 3221, 3225, 3225, 3231, 3231, 3232, 3233, 3222, 3234, 3234, + 3232, 3238, 3233, 3228, 3230, 3235, 3229, 3236, 3237, 3239, + 3235, 3246, 3236, 3237, 3242, 3239, 3241, 3241, 3247, 3242, + 3238, 3243, 3243, 3245, 3248, 3247, 3249, 3245, 3250, 3251, + 3246, 3252, 3254, 3254, 3250, 3256, 3256, 3257, 3259, 3260, + 3261, 3266, 3258, 3248, 3252, 3249, 3257, 3258, 3251, 3257, + 3262, 3262, 3264, 3261, 3263, 3267, 3267, 3259, 3260, 3263, + 3268, 3269, 3269, 3270, 3270, 3264, 3271, 3266, 3272, 3273, + 3278, 3271, 3274, 3274, 3280, 3272, 3275, 3278, 3276, 3268, + 3276, 3275, 3277, 3277, 3279, 3281, 3282, 3285, 3273, 3289, - 3293, 3289, 3287, 3292, 3279, 3280, 3289, 3294, 3292, 3295, - 3295, 3296, 3296, 0, 0, 0, 0, 0, 0, 3293, - 0, 0, 0, 0, 0, 0, 3294, 3300, 3300, 3300, - 3300, 3300, 3300, 3300, 3301, 3301, 3301, 3301, 3301, 3301, - 3301, 3302, 3302, 3302, 3302, 3302, 3302, 3302, 3303, 3303, - 3303, 3303, 3303, 3303, 3303, 3304, 3304, 3304, 3304, 3304, - 3304, 3304, 3305, 3305, 3305, 3305, 3305, 3305, 3305, 3306, - 3306, 3306, 3306, 3306, 3306, 3306, 3308, 3308, 0, 3308, - 3308, 3308, 3308, 3309, 3309, 0, 0, 0, 3309, 3309, - 3310, 3310, 0, 0, 3310, 0, 3310, 3311, 0, 0, + 3281, 3279, 3287, 3280, 3284, 3284, 3288, 3287, 3290, 3291, + 3291, 3288, 3293, 3293, 3294, 3282, 3285, 3295, 3289, 3296, + 3296, 3297, 3297, 3298, 3300, 3300, 3308, 3290, 3301, 3301, + 3298, 3302, 3304, 3294, 3307, 3309, 3295, 3304, 3302, 3307, + 3310, 3310, 3311, 3311, 0, 3308, 0, 0, 0, 0, + 0, 0, 0, 0, 3309, 3315, 3315, 3315, 3315, 3315, + 3315, 3315, 3316, 3316, 3316, 3316, 3316, 3316, 3316, 3317, + 3317, 3317, 3317, 3317, 3317, 3317, 3318, 3318, 3318, 3318, + 3318, 3318, 3318, 3319, 3319, 3319, 3319, 3319, 3319, 3319, + 3320, 3320, 3320, 3320, 3320, 3320, 3320, 3321, 3321, 3321, - 0, 0, 0, 3311, 3312, 3312, 0, 0, 0, 3312, - 3312, 3313, 0, 0, 0, 0, 0, 3313, 3314, 3314, - 0, 3314, 3314, 3314, 3314, 3315, 0, 0, 0, 0, - 0, 3315, 3316, 3316, 0, 0, 0, 3316, 3316, 3317, - 3317, 0, 3317, 3317, 3317, 3317, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299 + 3321, 3321, 3321, 3321, 3323, 3323, 0, 3323, 3323, 3323, + 3323, 3324, 3324, 0, 0, 0, 3324, 3324, 3325, 3325, + 0, 0, 3325, 0, 3325, 3326, 0, 0, 0, 0, + 0, 3326, 3327, 3327, 0, 0, 0, 3327, 3327, 3328, + 0, 0, 0, 0, 0, 3328, 3329, 3329, 0, 3329, + 3329, 3329, 3329, 3330, 0, 0, 0, 0, 0, 3330, + 3331, 3331, 0, 0, 0, 3331, 3331, 3332, 3332, 0, + 3332, 3332, 3332, 3332, 3314, 3314, 3314, 3314, 3314, 3314, + 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, + 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, + + 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314, + 3314, 3314, 3314, 3314, 3314 } ; static yy_state_type yy_last_accepting_state; @@ -3145,7 +3159,7 @@ static void config_end_include(void) } #endif -#line 3146 "" +#line 3160 "" #define YY_NO_INPUT 1 #line 191 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -3154,9 +3168,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 3155 "" +#line 3169 "" -#line 3157 "" +#line 3171 "" #define INITIAL 0 #define quotedstring 1 @@ -3380,7 +3394,7 @@ YY_DECL { #line 211 "./util/configlexer.lex" -#line 3381 "" +#line 3395 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3413,13 +3427,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3300 ) + if ( yy_current_state >= 3315 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 6447 ); + while ( yy_base[yy_current_state] != 6475 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -4385,430 +4399,430 @@ YY_RULE_SETUP case 188: YY_RULE_SETUP #line 403 "./util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +{ YDVAR(1, VAR_ZONEMD_REJECT_ABSENCE) } YY_BREAK case 189: YY_RULE_SETUP #line 404 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 190: YY_RULE_SETUP #line 405 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 191: YY_RULE_SETUP #line 406 "./util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 192: YY_RULE_SETUP #line 407 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 193: YY_RULE_SETUP #line 408 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 194: YY_RULE_SETUP #line 409 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 195: YY_RULE_SETUP #line 410 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 196: YY_RULE_SETUP #line 411 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 197: YY_RULE_SETUP #line 412 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 198: YY_RULE_SETUP #line 413 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } +{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 199: YY_RULE_SETUP #line 414 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_SERVFAIL) } +{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 200: YY_RULE_SETUP #line 415 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 201: YY_RULE_SETUP #line 416 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 202: YY_RULE_SETUP #line 417 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 203: YY_RULE_SETUP #line 418 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 204: YY_RULE_SETUP #line 419 "./util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 205: YY_RULE_SETUP #line 420 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 206: YY_RULE_SETUP #line 421 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 207: YY_RULE_SETUP #line 422 "./util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 208: YY_RULE_SETUP #line 423 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 209: YY_RULE_SETUP #line 424 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 210: YY_RULE_SETUP #line 425 "./util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 211: YY_RULE_SETUP #line 426 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 212: YY_RULE_SETUP #line 427 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 213: YY_RULE_SETUP #line 428 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 214: YY_RULE_SETUP #line 429 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 215: YY_RULE_SETUP #line 430 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 216: YY_RULE_SETUP #line 431 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 217: YY_RULE_SETUP #line 432 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 218: YY_RULE_SETUP #line 433 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 219: YY_RULE_SETUP #line 434 "./util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 220: YY_RULE_SETUP #line 435 "./util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 221: YY_RULE_SETUP #line 436 "./util/configlexer.lex" -{ YDVAR(1, VAR_DYNLIB_FILE) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 222: YY_RULE_SETUP #line 437 "./util/configlexer.lex" -{ YDVAR(0, VAR_DYNLIB) } +{ YDVAR(1, VAR_DYNLIB_FILE) } YY_BREAK case 223: YY_RULE_SETUP #line 438 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(0, VAR_DYNLIB) } YY_BREAK case 224: YY_RULE_SETUP #line 439 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 225: YY_RULE_SETUP #line 440 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 226: YY_RULE_SETUP #line 441 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 227: YY_RULE_SETUP #line 442 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 228: YY_RULE_SETUP #line 443 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 229: YY_RULE_SETUP #line 444 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 230: YY_RULE_SETUP #line 445 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 231: YY_RULE_SETUP #line 446 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 232: YY_RULE_SETUP #line 447 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 233: YY_RULE_SETUP #line 448 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 234: YY_RULE_SETUP #line 449 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 235: YY_RULE_SETUP #line 450 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 236: YY_RULE_SETUP #line 451 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 237: YY_RULE_SETUP #line 452 "./util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 238: YY_RULE_SETUP #line 453 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 239: YY_RULE_SETUP #line 454 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 240: YY_RULE_SETUP #line 455 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 241: YY_RULE_SETUP #line 456 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) } YY_BREAK case 242: YY_RULE_SETUP #line 457 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IP) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 243: YY_RULE_SETUP #line 458 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS) } +{ YDVAR(1, VAR_DNSTAP_IP) } YY_BREAK case 244: YY_RULE_SETUP #line 459 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } +{ YDVAR(1, VAR_DNSTAP_TLS) } YY_BREAK case 245: YY_RULE_SETUP #line 460 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } +{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } YY_BREAK case 246: YY_RULE_SETUP #line 461 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } +{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } YY_BREAK case 247: YY_RULE_SETUP -#line 463 "./util/configlexer.lex" +#line 462 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } YY_BREAK case 248: YY_RULE_SETUP -#line 465 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +#line 464 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } YY_BREAK case 249: YY_RULE_SETUP #line 466 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 250: YY_RULE_SETUP #line 467 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 251: YY_RULE_SETUP #line 468 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 252: YY_RULE_SETUP #line 469 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 253: YY_RULE_SETUP -#line 471 "./util/configlexer.lex" +#line 470 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 254: YY_RULE_SETUP -#line 473 "./util/configlexer.lex" +#line 472 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 255: YY_RULE_SETUP -#line 475 "./util/configlexer.lex" +#line 474 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 256: YY_RULE_SETUP -#line 477 "./util/configlexer.lex" +#line 476 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 257: YY_RULE_SETUP -#line 479 "./util/configlexer.lex" +#line 478 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 258: YY_RULE_SETUP -#line 481 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 480 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 259: YY_RULE_SETUP #line 482 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 260: YY_RULE_SETUP #line 483 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 261: YY_RULE_SETUP #line 484 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 262: YY_RULE_SETUP #line 485 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 263: YY_RULE_SETUP #line 486 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 264: YY_RULE_SETUP #line 487 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 265: YY_RULE_SETUP #line 488 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 266: YY_RULE_SETUP #line 489 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 267: YY_RULE_SETUP #line 490 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 268: YY_RULE_SETUP #line 491 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 269: YY_RULE_SETUP #line 492 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 270: YY_RULE_SETUP #line 493 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 271: YY_RULE_SETUP #line 494 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 272: YY_RULE_SETUP @@ -4823,99 +4837,99 @@ YY_RULE_SETUP case 274: YY_RULE_SETUP #line 497 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 275: YY_RULE_SETUP #line 498 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 276: YY_RULE_SETUP #line 499 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 277: YY_RULE_SETUP #line 500 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 278: YY_RULE_SETUP #line 501 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 279: YY_RULE_SETUP #line 502 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 280: YY_RULE_SETUP #line 503 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 281: YY_RULE_SETUP #line 504 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 282: YY_RULE_SETUP #line 505 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 283: YY_RULE_SETUP #line 506 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 284: YY_RULE_SETUP #line 507 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 285: YY_RULE_SETUP -#line 509 "./util/configlexer.lex" +#line 508 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 286: YY_RULE_SETUP -#line 511 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 510 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 287: YY_RULE_SETUP #line 512 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 288: YY_RULE_SETUP #line 513 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 289: YY_RULE_SETUP #line 514 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 290: YY_RULE_SETUP #line 515 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 291: YY_RULE_SETUP #line 516 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 292: YY_RULE_SETUP #line 517 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 293: YY_RULE_SETUP @@ -4925,113 +4939,118 @@ YY_RULE_SETUP case 294: YY_RULE_SETUP #line 519 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 295: YY_RULE_SETUP #line 520 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 296: YY_RULE_SETUP #line 521 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 297: YY_RULE_SETUP #line 522 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 298: YY_RULE_SETUP #line 523 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 299: YY_RULE_SETUP #line 524 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 300: YY_RULE_SETUP #line 525 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 301: YY_RULE_SETUP #line 526 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 302: YY_RULE_SETUP #line 527 "./util/configlexer.lex" -{ YDVAR(0, VAR_IPSET) } +{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } YY_BREAK case 303: YY_RULE_SETUP #line 528 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V4) } +{ YDVAR(0, VAR_IPSET) } YY_BREAK case 304: YY_RULE_SETUP #line 529 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V6) } +{ YDVAR(1, VAR_IPSET_NAME_V4) } YY_BREAK case 305: YY_RULE_SETUP #line 530 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_IPSET_NAME_V6) } YY_BREAK case 306: YY_RULE_SETUP #line 531 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } YY_BREAK case 307: YY_RULE_SETUP #line 532 "./util/configlexer.lex" -{ YDVAR(2, VAR_EDNS_CLIENT_TAG) } +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } YY_BREAK case 308: YY_RULE_SETUP #line 533 "./util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_CLIENT_TAG_OPCODE) } +{ YDVAR(2, VAR_EDNS_CLIENT_TAG) } YY_BREAK case 309: -/* rule 309 can match eol */ YY_RULE_SETUP #line 534 "./util/configlexer.lex" +{ YDVAR(1, VAR_EDNS_CLIENT_TAG_OPCODE) } + YY_BREAK +case 310: +/* rule 310 can match eol */ +YY_RULE_SETUP +#line 535 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 310: +case 311: YY_RULE_SETUP -#line 537 "./util/configlexer.lex" +#line 538 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 538 "./util/configlexer.lex" +#line 539 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 311: -YY_RULE_SETUP -#line 543 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 312: -/* rule 312 can match eol */ YY_RULE_SETUP #line 544 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 313: +/* rule 313 can match eol */ +YY_RULE_SETUP +#line 545 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 313: +case 314: YY_RULE_SETUP -#line 546 "./util/configlexer.lex" +#line 547 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -5044,34 +5063,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 314: +case 315: YY_RULE_SETUP -#line 558 "./util/configlexer.lex" +#line 559 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 559 "./util/configlexer.lex" +#line 560 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 315: -YY_RULE_SETUP -#line 564 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 316: -/* rule 316 can match eol */ YY_RULE_SETUP #line 565 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 317: +/* rule 317 can match eol */ +YY_RULE_SETUP +#line 566 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 317: +case 318: YY_RULE_SETUP -#line 567 "./util/configlexer.lex" +#line 568 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -5084,38 +5103,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 318: +case 319: YY_RULE_SETUP -#line 579 "./util/configlexer.lex" +#line 580 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 581 "./util/configlexer.lex" +#line 582 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 319: -YY_RULE_SETUP -#line 585 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK case 320: -/* rule 320 can match eol */ YY_RULE_SETUP #line 586 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 321: +/* rule 321 can match eol */ YY_RULE_SETUP #line 587 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK case 322: YY_RULE_SETUP #line 588 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 323: +YY_RULE_SETUP +#line 589 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 0); @@ -5123,27 +5142,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 593 "./util/configlexer.lex" +#line 594 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 323: -YY_RULE_SETUP -#line 597 "./util/configlexer.lex" -{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } - YY_BREAK case 324: -/* rule 324 can match eol */ YY_RULE_SETUP #line 598 "./util/configlexer.lex" +{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } + YY_BREAK +case 325: +/* rule 325 can match eol */ +YY_RULE_SETUP +#line 599 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 325: +case 326: YY_RULE_SETUP -#line 600 "./util/configlexer.lex" +#line 601 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -5153,7 +5172,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 606 "./util/configlexer.lex" +#line 607 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -5168,39 +5187,39 @@ case YY_STATE_EOF(val): } YY_BREAK /* include-toplevel: directive */ -case 326: +case 327: YY_RULE_SETUP -#line 620 "./util/configlexer.lex" +#line 621 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include_toplevel); } YY_BREAK case YY_STATE_EOF(include_toplevel): -#line 623 "./util/configlexer.lex" +#line 624 "./util/configlexer.lex" { yyerror("EOF inside include_toplevel directive"); BEGIN(inc_prev); } YY_BREAK -case 327: -YY_RULE_SETUP -#line 627 "./util/configlexer.lex" -{ LEXOUT(("ITSP ")); /* ignore */ } - YY_BREAK case 328: -/* rule 328 can match eol */ YY_RULE_SETUP #line 628 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++; } +{ LEXOUT(("ITSP ")); /* ignore */ } YY_BREAK case 329: +/* rule 329 can match eol */ YY_RULE_SETUP #line 629 "./util/configlexer.lex" -{ LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } +{ LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK case 330: YY_RULE_SETUP #line 630 "./util/configlexer.lex" +{ LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } + YY_BREAK +case 331: +YY_RULE_SETUP +#line 631 "./util/configlexer.lex" { LEXOUT(("ITunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 1); @@ -5209,29 +5228,29 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_toplevel_quoted): -#line 636 "./util/configlexer.lex" +#line 637 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 331: -YY_RULE_SETUP -#line 640 "./util/configlexer.lex" -{ LEXOUT(("ITSTR(%s) ", yytext)); yymore(); } - YY_BREAK case 332: -/* rule 332 can match eol */ YY_RULE_SETUP #line 641 "./util/configlexer.lex" +{ LEXOUT(("ITSTR(%s) ", yytext)); yymore(); } + YY_BREAK +case 333: +/* rule 333 can match eol */ +YY_RULE_SETUP +#line 642 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 333: +case 334: YY_RULE_SETUP -#line 645 "./util/configlexer.lex" +#line 646 "./util/configlexer.lex" { LEXOUT(("ITQE ")); yytext[yyleng - 1] = '\0'; @@ -5240,33 +5259,33 @@ YY_RULE_SETUP return (VAR_FORCE_TOPLEVEL); } YY_BREAK -case 334: +case 335: YY_RULE_SETUP -#line 653 "./util/configlexer.lex" +#line 654 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 335: +case 336: YY_RULE_SETUP -#line 657 "./util/configlexer.lex" +#line 658 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 336: +case 337: YY_RULE_SETUP -#line 661 "./util/configlexer.lex" +#line 662 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 337: +case 338: YY_RULE_SETUP -#line 665 "./util/configlexer.lex" +#line 666 "./util/configlexer.lex" ECHO; YY_BREAK -#line 5267 "" +#line 5286 "" case YY_END_OF_BUFFER: { @@ -5561,7 +5580,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3300 ) + if ( yy_current_state >= 3315 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5589,11 +5608,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3300 ) + if ( yy_current_state >= 3315 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 3299); + yy_is_jam = (yy_current_state == 3314); return yy_is_jam ? 0 : yy_current_state; } @@ -6232,6 +6251,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 665 "./util/configlexer.lex" +#line 666 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index 460cce2c2..632952651 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -400,6 +400,7 @@ neg-cache-size{COLON} { YDVAR(1, VAR_NEG_CACHE_SIZE) } val-nsec3-keysize-iterations{COLON} { YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } zonemd-permissive-mode{COLON} { YDVAR(1, VAR_ZONEMD_PERMISSIVE_MODE) } +zonemd-reject-absence{COLON} { YDVAR(1, VAR_ZONEMD_REJECT_ABSENCE) } add-holddown{COLON} { YDVAR(1, VAR_ADD_HOLDDOWN) } del-holddown{COLON} { YDVAR(1, VAR_DEL_HOLDDOWN) } keep-missing{COLON} { YDVAR(1, VAR_KEEP_MISSING) } diff --git a/util/configparser.c b/util/configparser.c index d527cdf9c..68ca1e9f3 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -433,7 +433,8 @@ extern int yydebug; VAR_DYNLIB_FILE = 554, VAR_EDNS_CLIENT_TAG = 555, VAR_EDNS_CLIENT_TAG_OPCODE = 556, - VAR_ZONEMD_PERMISSIVE_MODE = 557 + VAR_ZONEMD_PERMISSIVE_MODE = 557, + VAR_ZONEMD_REJECT_ABSENCE = 558 }; #endif /* Tokens. */ @@ -737,6 +738,7 @@ extern int yydebug; #define VAR_EDNS_CLIENT_TAG 555 #define VAR_EDNS_CLIENT_TAG_OPCODE 556 #define VAR_ZONEMD_PERMISSIVE_MODE 557 +#define VAR_ZONEMD_REJECT_ABSENCE 558 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -746,7 +748,7 @@ union YYSTYPE char* str; -#line 750 "util/configparser.c" +#line 752 "util/configparser.c" }; typedef union YYSTYPE YYSTYPE; @@ -996,19 +998,19 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 640 +#define YYLAST 642 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 303 +#define YYNTOKENS 304 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 328 +#define YYNNTS 329 /* YYNRULES -- Number of rules. */ -#define YYNRULES 632 +#define YYNRULES 634 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 939 +#define YYNSTATES 942 #define YYUNDEFTOK 2 -#define YYMAXUTOK 557 +#define YYMAXUTOK 558 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ @@ -1074,7 +1076,7 @@ static const yytype_uint16 yytranslate[] = 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302 + 295, 296, 297, 298, 299, 300, 301, 302, 303 }; #if YYDEBUG @@ -1106,45 +1108,45 @@ static const yytype_uint16 yyrline[] = 293, 294, 294, 295, 295, 296, 296, 298, 310, 311, 312, 312, 312, 312, 312, 313, 313, 315, 327, 328, 329, 329, 329, 329, 330, 330, 332, 346, 347, 348, - 348, 348, 348, 349, 349, 349, 351, 368, 369, 370, - 370, 370, 370, 371, 371, 371, 372, 375, 394, 411, - 419, 429, 437, 454, 455, 456, 456, 456, 456, 456, - 457, 457, 457, 458, 458, 460, 469, 478, 489, 498, - 507, 516, 527, 536, 548, 562, 577, 588, 605, 622, - 639, 656, 671, 686, 699, 714, 723, 732, 741, 750, - 759, 768, 777, 786, 795, 804, 813, 822, 831, 840, - 853, 862, 875, 884, 893, 902, 909, 916, 925, 932, - 941, 949, 956, 963, 971, 980, 988, 1004, 1012, 1020, - 1028, 1036, 1044, 1053, 1062, 1076, 1085, 1094, 1103, 1112, - 1121, 1130, 1137, 1144, 1170, 1178, 1185, 1192, 1199, 1206, - 1214, 1222, 1230, 1237, 1248, 1259, 1266, 1275, 1284, 1293, - 1300, 1307, 1315, 1323, 1333, 1343, 1353, 1367, 1375, 1388, - 1399, 1407, 1420, 1429, 1438, 1447, 1457, 1467, 1475, 1488, - 1497, 1505, 1514, 1522, 1535, 1544, 1554, 1561, 1571, 1581, - 1591, 1601, 1611, 1621, 1631, 1641, 1648, 1655, 1662, 1671, - 1680, 1689, 1698, 1705, 1715, 1735, 1742, 1760, 1773, 1786, - 1795, 1804, 1813, 1822, 1832, 1842, 1853, 1862, 1871, 1880, - 1889, 1898, 1907, 1920, 1933, 1942, 1949, 1958, 1967, 1976, - 1985, 1994, 2002, 2015, 2023, 2064, 2071, 2086, 2096, 2106, - 2113, 2120, 2127, 2136, 2144, 2158, 2179, 2200, 2212, 2224, - 2236, 2245, 2266, 2276, 2285, 2293, 2301, 2314, 2327, 2342, - 2357, 2366, 2375, 2381, 2390, 2399, 2409, 2419, 2432, 2445, - 2457, 2471, 2483, 2497, 2512, 2523, 2533, 2540, 2547, 2556, - 2565, 2575, 2585, 2595, 2602, 2609, 2618, 2627, 2637, 2647, - 2654, 2661, 2668, 2676, 2686, 2696, 2706, 2716, 2755, 2765, - 2773, 2781, 2796, 2805, 2810, 2811, 2812, 2812, 2812, 2813, - 2813, 2813, 2814, 2814, 2816, 2826, 2835, 2842, 2849, 2856, - 2863, 2870, 2877, 2882, 2883, 2884, 2884, 2884, 2885, 2885, - 2885, 2886, 2887, 2887, 2888, 2888, 2889, 2889, 2890, 2891, - 2892, 2893, 2894, 2895, 2897, 2906, 2916, 2923, 2930, 2939, - 2946, 2953, 2960, 2967, 2976, 2985, 2992, 2999, 3009, 3019, - 3029, 3039, 3049, 3059, 3064, 3065, 3066, 3068, 3074, 3079, - 3080, 3081, 3083, 3089, 3099, 3106, 3115, 3123, 3128, 3129, - 3131, 3131, 3131, 3132, 3132, 3133, 3134, 3135, 3136, 3137, - 3139, 3149, 3158, 3165, 3174, 3181, 3190, 3198, 3211, 3219, - 3232, 3237, 3238, 3239, 3239, 3240, 3240, 3240, 3241, 3243, - 3255, 3267, 3279, 3294, 3307, 3320, 3331, 3336, 3337, 3338, - 3338, 3340, 3355 + 348, 348, 348, 349, 349, 349, 351, 369, 370, 371, + 371, 371, 371, 372, 372, 372, 373, 373, 376, 395, + 412, 420, 430, 438, 455, 456, 457, 457, 457, 457, + 457, 458, 458, 458, 459, 459, 461, 470, 479, 490, + 499, 508, 517, 528, 537, 549, 563, 578, 589, 606, + 623, 640, 657, 672, 687, 700, 715, 724, 733, 742, + 751, 760, 769, 778, 787, 796, 805, 814, 823, 832, + 841, 854, 863, 876, 885, 894, 903, 910, 917, 926, + 933, 942, 950, 957, 964, 972, 981, 989, 1005, 1013, + 1021, 1029, 1037, 1045, 1054, 1063, 1077, 1086, 1095, 1104, + 1113, 1122, 1131, 1138, 1145, 1171, 1179, 1186, 1193, 1200, + 1207, 1215, 1223, 1231, 1238, 1249, 1260, 1267, 1276, 1285, + 1294, 1301, 1308, 1316, 1324, 1334, 1344, 1354, 1368, 1376, + 1389, 1400, 1408, 1421, 1430, 1439, 1448, 1458, 1468, 1476, + 1489, 1498, 1506, 1515, 1523, 1536, 1545, 1555, 1562, 1572, + 1582, 1592, 1602, 1612, 1622, 1632, 1642, 1649, 1656, 1663, + 1672, 1681, 1690, 1699, 1706, 1716, 1736, 1743, 1761, 1774, + 1787, 1796, 1805, 1814, 1823, 1833, 1843, 1854, 1863, 1872, + 1881, 1890, 1899, 1908, 1921, 1934, 1943, 1950, 1959, 1968, + 1977, 1986, 1995, 2003, 2016, 2024, 2065, 2072, 2087, 2097, + 2107, 2114, 2121, 2128, 2137, 2145, 2159, 2180, 2201, 2213, + 2225, 2237, 2246, 2267, 2277, 2286, 2294, 2302, 2315, 2328, + 2343, 2358, 2367, 2376, 2382, 2391, 2400, 2410, 2420, 2433, + 2446, 2458, 2472, 2484, 2498, 2513, 2524, 2534, 2541, 2548, + 2557, 2566, 2576, 2586, 2596, 2603, 2610, 2619, 2628, 2638, + 2648, 2655, 2662, 2669, 2677, 2687, 2697, 2707, 2717, 2727, + 2766, 2776, 2784, 2792, 2807, 2816, 2821, 2822, 2823, 2823, + 2823, 2824, 2824, 2824, 2825, 2825, 2827, 2837, 2846, 2853, + 2860, 2867, 2874, 2881, 2888, 2893, 2894, 2895, 2895, 2895, + 2896, 2896, 2896, 2897, 2898, 2898, 2899, 2899, 2900, 2900, + 2901, 2902, 2903, 2904, 2905, 2906, 2908, 2917, 2927, 2934, + 2941, 2950, 2957, 2964, 2971, 2978, 2987, 2996, 3003, 3010, + 3020, 3030, 3040, 3050, 3060, 3070, 3075, 3076, 3077, 3079, + 3085, 3090, 3091, 3092, 3094, 3100, 3110, 3117, 3126, 3134, + 3139, 3140, 3142, 3142, 3142, 3143, 3143, 3144, 3145, 3146, + 3147, 3148, 3150, 3160, 3169, 3176, 3185, 3192, 3201, 3209, + 3222, 3230, 3243, 3248, 3249, 3250, 3250, 3251, 3251, 3251, + 3252, 3254, 3266, 3278, 3290, 3305, 3318, 3331, 3342, 3347, + 3348, 3349, 3349, 3351, 3366 }; #endif @@ -1265,17 +1267,18 @@ static const char *const yytname[] = "VAR_RPZ", "VAR_TAGS", "VAR_RPZ_ACTION_OVERRIDE", "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", "VAR_RPZ_LOG_NAME", "VAR_DYNLIB", "VAR_DYNLIB_FILE", "VAR_EDNS_CLIENT_TAG", - "VAR_EDNS_CLIENT_TAG_OPCODE", "VAR_ZONEMD_PERMISSIVE_MODE", "$accept", - "toplevelvars", "toplevelvar", "force_toplevel", "serverstart", - "contents_server", "content_server", "stubstart", "contents_stub", - "content_stub", "forwardstart", "contents_forward", "content_forward", - "viewstart", "contents_view", "content_view", "authstart", - "contents_auth", "content_auth", "rpz_tag", "rpz_action_override", - "rpz_cname_override", "rpz_log", "rpz_log_name", "rpzstart", - "contents_rpz", "content_rpz", "server_num_threads", "server_verbosity", - "server_statistics_interval", "server_statistics_cumulative", - "server_extended_statistics", "server_shm_enable", "server_shm_key", - "server_port", "server_send_client_subnet", "server_client_subnet_zone", + "VAR_EDNS_CLIENT_TAG_OPCODE", "VAR_ZONEMD_PERMISSIVE_MODE", + "VAR_ZONEMD_REJECT_ABSENCE", "$accept", "toplevelvars", "toplevelvar", + "force_toplevel", "serverstart", "contents_server", "content_server", + "stubstart", "contents_stub", "content_stub", "forwardstart", + "contents_forward", "content_forward", "viewstart", "contents_view", + "content_view", "authstart", "contents_auth", "content_auth", "rpz_tag", + "rpz_action_override", "rpz_cname_override", "rpz_log", "rpz_log_name", + "rpzstart", "contents_rpz", "content_rpz", "server_num_threads", + "server_verbosity", "server_statistics_interval", + "server_statistics_cumulative", "server_extended_statistics", + "server_shm_enable", "server_shm_key", "server_port", + "server_send_client_subnet", "server_client_subnet_zone", "server_client_subnet_always_forward", "server_client_subnet_opcode", "server_max_client_subnet_ipv4", "server_max_client_subnet_ipv6", "server_min_client_subnet_ipv4", "server_min_client_subnet_ipv6", @@ -1363,11 +1366,12 @@ static const char *const yytname[] = "stub_first", "stub_no_cache", "stub_ssl_upstream", "stub_prime", "forward_name", "forward_host", "forward_addr", "forward_first", "forward_no_cache", "forward_ssl_upstream", "auth_name", "auth_zonefile", - "auth_master", "auth_url", "auth_allow_notify", "auth_for_downstream", - "auth_for_upstream", "auth_fallback_enabled", "view_name", - "view_local_zone", "view_response_ip", "view_response_ip_data", - "view_local_data", "view_local_data_ptr", "view_first", "rcstart", - "contents_rc", "content_rc", "rc_control_enable", "rc_control_port", + "auth_master", "auth_url", "auth_allow_notify", + "auth_zonemd_reject_absence", "auth_for_downstream", "auth_for_upstream", + "auth_fallback_enabled", "view_name", "view_local_zone", + "view_response_ip", "view_response_ip_data", "view_local_data", + "view_local_data_ptr", "view_first", "rcstart", "contents_rc", + "content_rc", "rc_control_enable", "rc_control_port", "rc_control_interface", "rc_control_use_cert", "rc_server_key_file", "rc_server_cert_file", "rc_control_key_file", "rc_control_cert_file", "dtstart", "contents_dt", "content_dt", "dt_dnstap_enable", @@ -1434,7 +1438,7 @@ static const yytype_uint16 yytoknum[] = 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, - 555, 556, 557 + 555, 556, 557, 558 }; # endif @@ -1455,12 +1459,12 @@ static const yytype_int16 yypact[] = -290, 0, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, 286, -42, -38, -43, -21, -44, -11, -95, - -109, -289, -214, -239, -281, 3, 4, 13, 25, 26, - 27, 30, 31, 32, 33, 34, 35, 37, 38, 39, - 40, 41, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 54, 55, 84, 85, 88, 89, 91, 93, - 94, 95, 96, 98, 99, 100, 101, 103, 104, 105, + -290, -290, 286, -42, -36, -43, -44, -26, -67, -95, + -109, -289, -219, -216, -282, 3, 4, 5, 6, 37, + 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 54, 55, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 88, 89, 90, 91, + 93, 95, 96, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 131, 132, 133, 134, 135, 136, 137, @@ -1470,13 +1474,13 @@ static const yytype_int16 yypact[] = 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 214, 215, 216, 217, 218, 219, 220, 222, 223, 224, - 225, 226, 229, 231, 233, 246, 247, 248, 249, 250, - 251, 252, 253, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 279, 280, 281, 283, - 284, 285, 287, 321, 322, 323, 324, 328, 329, 330, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 216, + 217, 218, 219, 220, 222, 223, 224, 225, 226, 233, + 234, 235, 236, 237, 238, 240, 241, 242, 243, 244, + 246, 247, 248, 250, 251, 252, 253, 255, 256, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 279, 280, 281, 283, 284, + 285, 287, 321, 322, 323, 324, 328, 329, 330, 372, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, @@ -1497,55 +1501,56 @@ static const yytype_int16 yypact[] = -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, 372, 373, 374, 375, - 376, 377, 378, -290, -290, -290, -290, -290, -290, -290, - -290, 379, 380, 384, 388, 389, 414, -290, -290, -290, - -290, -290, -290, -290, 415, 416, 425, 437, 438, 439, - 440, -290, -290, -290, -290, -290, -290, -290, -290, 441, - 442, 443, 444, 445, 446, 447, 448, -290, -290, -290, - -290, -290, -290, -290, -290, -290, 449, 450, 451, 452, - 453, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, 454, 455, 456, 496, 498, 514, 515, 516, - -290, -290, -290, -290, -290, -290, -290, -290, -290, 517, - 518, 519, 520, 521, 522, 523, 524, 531, 532, 533, - 534, 535, 536, 537, 539, 540, 541, 542, -290, -290, + -290, -290, -290, -290, -290, -290, 373, 374, 375, 376, + 377, 378, 379, -290, -290, -290, -290, -290, -290, -290, + -290, 380, 384, 388, 389, 414, 415, -290, -290, -290, + -290, -290, -290, -290, 416, 425, 437, 438, 439, 440, + 441, -290, -290, -290, -290, -290, -290, -290, -290, 442, + 443, 444, 445, 446, 447, 448, 449, 450, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, 451, 452, + 453, 454, 455, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, 456, 496, 498, 514, 515, 516, + 517, 518, -290, -290, -290, -290, -290, -290, -290, -290, + -290, 519, 520, 521, 522, 523, 524, 531, 532, 533, + 534, 535, 536, 537, 539, 540, 541, 542, 543, 544, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, 543, -290, - -290, 544, -290, -290, 545, 548, 551, 554, 555, 564, - 565, 566, 568, 569, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, 570, 571, 572, 573, 574, - 575, -290, -290, -290, -290, -290, -290, -290, 579, 580, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + 545, -290, -290, 548, -290, -290, 551, 554, 555, 564, + 565, 566, 568, 569, 570, 571, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, 572, 573, 574, + 575, 579, 580, -290, -290, -290, -290, -290, -290, -290, + 581, 582, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, 583, 584, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, 581, 582, -290, -290, -290, -290, -290, + 585, 586, 587, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, 588, 589, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, 590, 591, 592, 593, 594, 595, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, 596, -290, -290, + -290, -290, -290, -290, -290, -290, -290, 597, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, 583, 584, - 585, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, 586, 587, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, 588, 589, 590, 591, 592, 593, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, 594, -290, -290, -290, -290, - -290, -290, -290, -290, -290, 595, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, 596, -290, -290, 597, 598, -290, -290, -290, + -290, -290, -290, -290, 598, -290, -290, 599, 600, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, 599, 600, 601, - -290, -290, -290, -290, -290, -290, -290, -290, -290 + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + 601, 602, 603, -290, -290, -290, -290, -290, -290, -290, + -290, -290 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1553,10 +1558,10 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 18, 19, 227, 237, 513, 573, 532, - 246, 587, 610, 256, 626, 272, 578, 3, 17, 21, - 229, 239, 248, 258, 274, 515, 534, 575, 580, 589, - 612, 628, 4, 5, 6, 10, 14, 15, 8, 9, + 2, 0, 1, 18, 19, 227, 237, 515, 575, 534, + 246, 589, 612, 256, 628, 273, 580, 3, 17, 21, + 229, 239, 248, 258, 275, 517, 536, 577, 582, 591, + 614, 630, 4, 5, 6, 10, 14, 15, 8, 9, 7, 16, 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1603,50 +1608,51 @@ static const yytype_uint16 yydefact[] = 233, 0, 0, 0, 0, 0, 0, 238, 240, 241, 242, 243, 244, 245, 0, 0, 0, 0, 0, 0, 0, 247, 249, 250, 253, 254, 251, 255, 252, 0, - 0, 0, 0, 0, 0, 0, 0, 257, 259, 260, - 261, 262, 266, 263, 264, 265, 0, 0, 0, 0, - 0, 277, 281, 282, 283, 284, 273, 275, 276, 278, - 279, 280, 0, 0, 0, 0, 0, 0, 0, 0, - 514, 516, 518, 517, 523, 519, 520, 521, 522, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 257, 259, + 260, 261, 262, 266, 267, 263, 264, 265, 0, 0, + 0, 0, 0, 278, 282, 283, 284, 285, 274, 276, + 277, 279, 280, 281, 0, 0, 0, 0, 0, 0, + 0, 0, 516, 518, 520, 519, 525, 521, 522, 523, + 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 533, 535, - 537, 536, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 0, 574, - 576, 0, 579, 581, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 588, 590, 591, 592, 594, 595, - 593, 596, 597, 598, 599, 0, 0, 0, 0, 0, - 0, 611, 613, 614, 615, 616, 617, 618, 0, 0, - 627, 629, 630, 286, 285, 292, 305, 303, 315, 311, - 312, 316, 313, 314, 317, 318, 319, 320, 321, 351, - 352, 353, 354, 355, 380, 381, 382, 387, 388, 308, - 389, 390, 393, 391, 392, 396, 397, 398, 412, 366, - 367, 369, 370, 399, 415, 360, 362, 416, 422, 423, - 424, 309, 379, 441, 442, 361, 435, 344, 304, 356, - 413, 419, 400, 0, 0, 445, 310, 287, 343, 404, - 288, 306, 307, 357, 358, 443, 402, 406, 407, 289, - 446, 383, 411, 345, 365, 417, 418, 421, 434, 359, - 439, 437, 438, 371, 378, 408, 409, 372, 373, 401, - 426, 346, 347, 350, 322, 324, 325, 326, 327, 328, - 335, 336, 337, 338, 339, 340, 341, 447, 448, 450, - 384, 385, 386, 394, 395, 451, 452, 453, 0, 0, - 0, 403, 374, 376, 583, 462, 466, 464, 463, 467, - 465, 0, 0, 470, 471, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 405, 420, 440, 475, 476, - 375, 454, 0, 0, 0, 0, 0, 0, 427, 428, - 429, 430, 431, 432, 433, 584, 368, 363, 425, 342, - 290, 291, 364, 477, 479, 478, 480, 481, 482, 323, - 330, 472, 474, 473, 329, 0, 349, 410, 449, 348, - 377, 331, 332, 334, 333, 0, 484, 436, 485, 486, - 487, 491, 490, 488, 489, 492, 493, 494, 495, 497, - 496, 506, 0, 510, 511, 0, 0, 512, 498, 504, - 499, 500, 501, 503, 505, 502, 267, 268, 269, 270, - 271, 524, 526, 525, 528, 529, 530, 531, 527, 554, - 556, 557, 558, 559, 560, 561, 562, 563, 564, 555, - 565, 566, 567, 568, 569, 570, 571, 572, 577, 582, - 600, 601, 602, 605, 603, 604, 606, 607, 608, 609, - 619, 620, 621, 622, 623, 624, 631, 632, 414, 444, - 461, 585, 586, 468, 469, 455, 456, 0, 0, 0, - 460, 625, 483, 507, 508, 509, 459, 457, 458 + 535, 537, 539, 538, 540, 541, 542, 543, 544, 545, + 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, + 0, 576, 578, 0, 581, 583, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 590, 592, 593, 594, + 596, 597, 595, 598, 599, 600, 601, 0, 0, 0, + 0, 0, 0, 613, 615, 616, 617, 618, 619, 620, + 0, 0, 629, 631, 632, 287, 286, 293, 306, 304, + 316, 312, 313, 317, 314, 315, 318, 319, 320, 321, + 322, 352, 353, 354, 355, 356, 381, 382, 383, 388, + 389, 309, 390, 391, 394, 392, 393, 397, 398, 399, + 413, 367, 368, 370, 371, 400, 416, 361, 363, 417, + 423, 424, 425, 310, 380, 442, 443, 362, 436, 345, + 305, 357, 414, 420, 401, 0, 0, 446, 311, 288, + 344, 405, 289, 307, 308, 358, 359, 444, 403, 407, + 408, 290, 447, 384, 412, 346, 366, 418, 419, 422, + 435, 360, 440, 438, 439, 372, 379, 409, 410, 373, + 374, 402, 427, 347, 348, 351, 323, 325, 326, 327, + 328, 329, 336, 337, 338, 339, 340, 341, 342, 448, + 449, 451, 385, 386, 387, 395, 396, 452, 453, 454, + 0, 0, 0, 404, 375, 377, 585, 463, 467, 465, + 464, 468, 466, 0, 0, 471, 472, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 406, 421, 441, + 476, 477, 376, 455, 0, 0, 0, 0, 0, 0, + 428, 429, 430, 431, 432, 433, 434, 586, 369, 364, + 426, 343, 291, 292, 365, 478, 480, 479, 481, 482, + 483, 324, 331, 473, 475, 474, 330, 0, 350, 411, + 450, 349, 378, 332, 333, 335, 334, 0, 485, 437, + 486, 487, 488, 492, 491, 489, 490, 493, 494, 495, + 496, 498, 497, 508, 0, 512, 513, 0, 0, 514, + 499, 506, 500, 501, 502, 505, 507, 503, 504, 268, + 269, 270, 271, 272, 526, 528, 527, 530, 531, 532, + 533, 529, 556, 558, 559, 560, 561, 562, 563, 564, + 565, 566, 557, 567, 568, 569, 570, 571, 572, 573, + 574, 579, 584, 602, 603, 604, 607, 605, 606, 608, + 609, 610, 611, 621, 622, 623, 624, 625, 626, 633, + 634, 415, 445, 462, 587, 588, 469, 470, 456, 457, + 0, 0, 0, 461, 627, 484, 509, 510, 511, 460, + 458, 459 }; /* YYPGOTO[NTERM-NUM]. */ @@ -1676,7 +1682,7 @@ static const yytype_int16 yypgoto[] = -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - 576, 577, 578, 602, 603, -290, -290, -290, -290, -290, + 259, 577, 578, 604, 605, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, @@ -1684,15 +1690,15 @@ static const yytype_int16 yypgoto[] = -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290 + -290, -290, -290, -290, -290, -290, -290, -290, -290 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 1, 17, 18, 19, 32, 250, 20, 33, 463, - 21, 34, 477, 22, 35, 491, 23, 36, 507, 521, - 522, 523, 524, 525, 24, 37, 526, 251, 252, 253, + 21, 34, 477, 22, 35, 491, 23, 36, 508, 523, + 524, 525, 526, 527, 24, 37, 528, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, @@ -1714,15 +1720,15 @@ static const yytype_int16 yydefgoto[] = 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 464, 465, 466, 467, 468, 469, 470, 478, 479, 480, 481, 482, 483, - 508, 509, 510, 511, 512, 513, 514, 515, 492, 493, - 494, 495, 496, 497, 498, 25, 38, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 26, 39, 568, 569, - 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, - 580, 581, 582, 583, 584, 585, 586, 587, 27, 40, - 589, 590, 28, 41, 592, 593, 451, 452, 453, 454, - 29, 42, 604, 605, 606, 607, 608, 609, 610, 611, - 612, 613, 614, 30, 43, 621, 622, 623, 624, 625, - 626, 627, 455, 31, 44, 630, 631, 632 + 509, 510, 511, 512, 513, 514, 515, 516, 517, 492, + 493, 494, 495, 496, 497, 498, 25, 38, 542, 543, + 544, 545, 546, 547, 548, 549, 550, 26, 39, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 27, + 40, 591, 592, 28, 41, 594, 595, 451, 452, 453, + 454, 29, 42, 606, 607, 608, 609, 610, 611, 612, + 613, 614, 615, 616, 30, 43, 623, 624, 625, 626, + 627, 628, 629, 455, 31, 44, 632, 633, 634 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1730,86 +1736,86 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint16 yytable[] = { - 2, 499, 484, 456, 588, 457, 458, 471, 628, 629, - 591, 3, 4, 633, 634, 472, 473, 615, 616, 617, - 618, 619, 620, 635, 499, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 636, 637, 638, 485, 486, - 639, 640, 641, 642, 643, 644, 5, 645, 646, 647, - 648, 649, 6, 650, 651, 652, 653, 654, 655, 656, - 657, 658, 659, 487, 660, 661, 459, 549, 550, 551, - 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, - 562, 563, 564, 565, 566, 567, 532, 533, 534, 535, - 536, 537, 538, 539, 662, 663, 7, 460, 664, 665, - 474, 666, 475, 667, 668, 669, 670, 461, 671, 672, - 673, 674, 8, 675, 676, 677, 678, 679, 680, 681, - 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, - 692, 693, 694, 695, 696, 697, 698, 699, 700, 488, - 489, 701, 702, 703, 704, 705, 706, 707, 708, 709, - 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, - 720, 9, 721, 722, 723, 724, 725, 726, 727, 728, - 729, 730, 731, 732, 733, 734, 735, 736, 737, 490, - 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, - 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, - 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, - 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, - 10, 501, 502, 503, 778, 779, 780, 781, 782, 783, - 784, 506, 785, 786, 787, 788, 789, 462, 11, 790, - 476, 791, 500, 792, 501, 502, 503, 504, 505, 516, - 517, 518, 519, 520, 506, 12, 793, 794, 795, 796, - 797, 798, 799, 800, 13, 801, 802, 803, 804, 805, - 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, - 816, 817, 818, 819, 820, 821, 822, 823, 14, 824, - 825, 826, 15, 827, 828, 829, 0, 830, 16, 45, + 2, 499, 484, 456, 590, 457, 458, 630, 631, 471, + 593, 3, 4, 635, 636, 637, 638, 472, 473, 499, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 534, 535, 536, 537, 538, 539, 540, 541, 485, 486, + 617, 618, 619, 620, 621, 622, 5, 639, 640, 641, + 642, 643, 6, 644, 645, 646, 647, 648, 649, 650, + 651, 652, 653, 487, 654, 655, 459, 551, 552, 553, + 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 656, 657, 658, 659, + 660, 661, 662, 663, 664, 665, 7, 460, 666, 667, + 668, 669, 474, 670, 475, 671, 672, 461, 673, 674, + 675, 676, 8, 677, 678, 679, 680, 681, 682, 683, + 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 488, + 489, 703, 704, 705, 706, 707, 708, 709, 710, 711, + 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, + 722, 9, 723, 724, 725, 726, 727, 728, 729, 730, + 731, 732, 733, 734, 735, 736, 737, 738, 739, 490, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, + 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, + 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, + 770, 771, 772, 773, 774, 775, 776, 777, 778, 500, + 10, 501, 502, 503, 504, 505, 779, 780, 781, 782, + 783, 506, 784, 785, 786, 787, 788, 462, 11, 501, + 502, 503, 476, 789, 790, 791, 792, 793, 794, 506, + 795, 796, 797, 798, 799, 12, 800, 801, 802, 507, + 803, 804, 805, 806, 13, 807, 808, 518, 519, 520, + 521, 522, 809, 810, 811, 812, 813, 814, 815, 816, + 817, 818, 819, 820, 821, 822, 823, 824, 14, 825, + 826, 827, 15, 828, 829, 830, 529, 831, 16, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 831, 832, 833, 834, 77, 78, 79, 835, 836, - 837, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 76, 832, 833, 834, 835, 77, 78, 79, 836, 837, + 838, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 838, 839, 840, 841, 842, 843, 844, 845, - 846, 121, 122, 123, 847, 124, 125, 126, 848, 849, + 119, 120, 839, 840, 841, 842, 843, 844, 845, 846, + 847, 121, 122, 123, 848, 124, 125, 126, 849, 850, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 150, 850, 851, 852, 151, 152, 153, - 154, 155, 156, 157, 158, 853, 159, 160, 161, 162, - 163, 164, 165, 166, 167, 168, 169, 854, 855, 856, - 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, - 867, 868, 869, 870, 871, 872, 873, 170, 171, 172, + 147, 148, 149, 150, 851, 852, 853, 151, 152, 153, + 154, 155, 156, 157, 158, 854, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 855, 856, 857, + 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, + 868, 869, 870, 871, 872, 873, 874, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 208, 874, 209, 875, 210, + 203, 204, 205, 206, 207, 208, 875, 209, 876, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 876, 877, 878, 879, 880, 881, - 882, 883, 884, 885, 886, 225, 226, 227, 228, 229, - 230, 887, 888, 889, 890, 891, 892, 893, 231, 894, - 895, 896, 897, 898, 899, 900, 232, 233, 901, 234, - 235, 902, 236, 237, 903, 904, 238, 239, 240, 241, - 242, 243, 244, 245, 905, 906, 907, 246, 908, 909, - 910, 911, 912, 913, 914, 915, 247, 248, 249, 916, - 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, - 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, - 937, 938, 0, 527, 528, 529, 0, 0, 0, 0, + 221, 222, 223, 224, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 225, 226, 227, 228, 229, + 230, 888, 889, 890, 891, 892, 893, 894, 231, 895, + 896, 897, 898, 899, 900, 901, 232, 233, 902, 234, + 235, 903, 236, 237, 904, 905, 238, 239, 240, 241, + 242, 243, 244, 245, 906, 907, 908, 246, 909, 910, + 911, 912, 913, 914, 915, 916, 247, 248, 249, 917, + 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, + 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, + 938, 939, 940, 941, 530, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, - 531 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 532, 533 }; static const yytype_int16 yycheck[] = { - 0, 45, 45, 45, 113, 47, 48, 45, 289, 290, - 299, 11, 12, 10, 10, 53, 54, 256, 257, 258, - 259, 260, 261, 10, 45, 239, 240, 241, 242, 243, - 244, 245, 246, 247, 248, 10, 10, 10, 81, 82, - 10, 10, 10, 10, 10, 10, 46, 10, 10, 10, + 0, 45, 45, 45, 113, 47, 48, 289, 290, 45, + 299, 11, 12, 10, 10, 10, 10, 53, 54, 45, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 97, 98, 99, 100, 101, 102, 103, 104, 81, 82, + 256, 257, 258, 259, 260, 261, 46, 10, 10, 10, 10, 10, 52, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 106, 10, 10, 108, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 97, 98, 99, 100, - 101, 102, 103, 104, 10, 10, 96, 139, 10, 10, - 138, 10, 140, 10, 10, 10, 10, 149, 10, 10, + 175, 176, 177, 178, 179, 180, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 96, 139, 10, 10, + 10, 10, 138, 10, 140, 10, 10, 149, 10, 10, 10, 10, 112, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 182, @@ -1820,15 +1826,15 @@ static const yytype_int16 yycheck[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 220, 265, 266, 267, 10, 10, 10, 10, 10, 10, - 10, 275, 10, 10, 10, 10, 10, 279, 238, 10, - 278, 10, 263, 10, 265, 266, 267, 268, 269, 293, - 294, 295, 296, 297, 275, 255, 10, 10, 10, 10, - 10, 10, 10, 10, 264, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 263, + 220, 265, 266, 267, 268, 269, 10, 10, 10, 10, + 10, 275, 10, 10, 10, 10, 10, 279, 238, 265, + 266, 267, 278, 10, 10, 10, 10, 10, 10, 275, + 10, 10, 10, 10, 10, 255, 10, 10, 10, 303, + 10, 10, 10, 10, 264, 10, 10, 293, 294, 295, + 296, 297, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 288, 10, - 10, 10, 292, 10, 10, 10, -1, 10, 298, 13, + 10, 10, 292, 10, 10, 10, 37, 10, 298, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, @@ -1860,21 +1866,21 @@ static const yytype_int16 yycheck[] = 10, 10, 10, 10, 10, 10, 300, 301, 302, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, -1, 37, 37, 37, -1, -1, -1, -1, + 10, 10, 10, 10, 37, 37, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, - 37 + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 37, 37 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 304, 0, 11, 12, 46, 52, 96, 112, 161, - 220, 238, 255, 264, 288, 292, 298, 305, 306, 307, - 310, 313, 316, 319, 327, 558, 569, 591, 595, 603, - 616, 626, 308, 311, 314, 317, 320, 328, 559, 570, - 592, 596, 604, 617, 627, 13, 14, 15, 16, 17, + 0, 305, 0, 11, 12, 46, 52, 96, 112, 161, + 220, 238, 255, 264, 288, 292, 298, 306, 307, 308, + 311, 314, 317, 320, 328, 560, 571, 593, 597, 605, + 618, 628, 309, 312, 315, 318, 321, 329, 561, 572, + 594, 598, 606, 619, 629, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 49, 50, 51, @@ -1895,45 +1901,45 @@ static const yytype_uint16 yystos[] = 233, 234, 235, 236, 237, 249, 250, 251, 252, 253, 254, 262, 270, 271, 273, 274, 276, 277, 280, 281, 282, 283, 284, 285, 286, 287, 291, 300, 301, 302, - 309, 330, 331, 332, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, - 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, - 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, - 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, - 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, - 529, 599, 600, 601, 602, 625, 45, 47, 48, 108, - 139, 149, 279, 312, 530, 531, 532, 533, 534, 535, - 536, 45, 53, 54, 138, 140, 278, 315, 537, 538, - 539, 540, 541, 542, 45, 81, 82, 106, 182, 183, - 222, 318, 551, 552, 553, 554, 555, 556, 557, 45, - 263, 265, 266, 267, 268, 269, 275, 321, 543, 544, - 545, 546, 547, 548, 549, 550, 293, 294, 295, 296, - 297, 322, 323, 324, 325, 326, 329, 543, 544, 545, - 546, 547, 97, 98, 99, 100, 101, 102, 103, 104, - 560, 561, 562, 563, 564, 565, 566, 567, 568, 162, - 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, - 173, 174, 175, 176, 177, 178, 179, 180, 571, 572, + 310, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, + 530, 601, 602, 603, 604, 627, 45, 47, 48, 108, + 139, 149, 279, 313, 531, 532, 533, 534, 535, 536, + 537, 45, 53, 54, 138, 140, 278, 316, 538, 539, + 540, 541, 542, 543, 45, 81, 82, 106, 182, 183, + 222, 319, 553, 554, 555, 556, 557, 558, 559, 45, + 263, 265, 266, 267, 268, 269, 275, 303, 322, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 293, 294, + 295, 296, 297, 323, 324, 325, 326, 327, 330, 544, + 545, 546, 547, 548, 97, 98, 99, 100, 101, 102, + 103, 104, 562, 563, 564, 565, 566, 567, 568, 569, + 570, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, - 583, 584, 585, 586, 587, 588, 589, 590, 113, 593, - 594, 299, 597, 598, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 605, 606, 607, 608, 609, 610, - 611, 612, 613, 614, 615, 256, 257, 258, 259, 260, - 261, 618, 619, 620, 621, 622, 623, 624, 289, 290, - 628, 629, 630, 10, 10, 10, 10, 10, 10, 10, + 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 113, 595, 596, 299, 599, 600, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 607, 608, 609, 610, + 611, 612, 613, 614, 615, 616, 617, 256, 257, 258, + 259, 260, 261, 620, 621, 622, 623, 624, 625, 626, + 289, 290, 630, 631, 632, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1963,41 +1969,42 @@ static const yytype_uint16 yystos[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10 + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 303, 304, 304, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 306, 307, - 308, 308, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 310, 311, 311, - 312, 312, 312, 312, 312, 312, 312, 313, 314, 314, - 315, 315, 315, 315, 315, 315, 316, 317, 317, 318, - 318, 318, 318, 318, 318, 318, 319, 320, 320, 321, - 321, 321, 321, 321, 321, 321, 321, 322, 323, 324, - 325, 326, 327, 328, 328, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 330, 331, 332, 333, 334, + 0, 304, 305, 305, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 307, 308, + 309, 309, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 311, 312, 312, + 313, 313, 313, 313, 313, 313, 313, 314, 315, 315, + 316, 316, 316, 316, 316, 316, 317, 318, 318, 319, + 319, 319, 319, 319, 319, 319, 320, 321, 321, 322, + 322, 322, 322, 322, 322, 322, 322, 322, 323, 324, + 325, 326, 327, 328, 329, 329, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, @@ -2020,19 +2027,19 @@ static const yytype_uint16 yyr1[] = 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, - 555, 556, 557, 558, 559, 559, 560, 560, 560, 560, - 560, 560, 560, 560, 561, 562, 563, 564, 565, 566, - 567, 568, 569, 570, 570, 571, 571, 571, 571, 571, - 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, - 571, 571, 571, 571, 572, 573, 574, 575, 576, 577, + 555, 556, 557, 558, 559, 560, 561, 561, 562, 562, + 562, 562, 562, 562, 562, 562, 563, 564, 565, 566, + 567, 568, 569, 570, 571, 572, 572, 573, 573, 573, + 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, + 573, 573, 573, 573, 573, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, - 588, 589, 590, 591, 592, 592, 593, 594, 595, 596, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 604, - 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, - 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, - 616, 617, 617, 618, 618, 618, 618, 618, 618, 619, - 620, 621, 622, 623, 624, 625, 626, 627, 627, 628, - 628, 629, 630 + 588, 589, 590, 591, 592, 593, 594, 594, 595, 596, + 597, 598, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 606, 607, 607, 607, 607, 607, 607, 607, 607, + 607, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 619, 620, 620, 620, 620, 620, + 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, + 629, 630, 630, 631, 632 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -2064,44 +2071,44 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 3, 3, 4, 4, 4, - 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 3, 4, 4, + 4, 3, 3, 2, 2, 2, 2, 2, 2, 3, + 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, + 3, 3, 2, 2, 2, 1, 2, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 2, 0, 1, 2, + 1, 2, 0, 1, 2, 2, 2, 3, 3, 1, + 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 1, 2, 0, 1, 2, 1, 2, - 0, 1, 2, 2, 2, 3, 3, 1, 2, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 2, 0, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 3, 1, 2, 0, 1, - 1, 2, 2 + 1, 2, 2, 2, 2, 2, 2, 3, 1, 2, + 0, 1, 1, 2, 2 }; @@ -2790,7 +2797,7 @@ yyreduce: { OUTYY(("\nP(force-toplevel)\n")); } -#line 2794 "util/configparser.c" +#line 2801 "util/configparser.c" break; case 19: @@ -2798,7 +2805,7 @@ yyreduce: { OUTYY(("\nP(server:)\n")); } -#line 2802 "util/configparser.c" +#line 2809 "util/configparser.c" break; case 227: @@ -2813,7 +2820,7 @@ yyreduce: } else yyerror("out of memory"); } -#line 2817 "util/configparser.c" +#line 2824 "util/configparser.c" break; case 237: @@ -2828,7 +2835,7 @@ yyreduce: } else yyerror("out of memory"); } -#line 2832 "util/configparser.c" +#line 2839 "util/configparser.c" break; case 246: @@ -2845,7 +2852,7 @@ yyreduce: } else yyerror("out of memory"); } -#line 2849 "util/configparser.c" +#line 2856 "util/configparser.c" break; case 256: @@ -2861,15 +2868,16 @@ yyreduce: s->for_downstream = 1; s->for_upstream = 1; s->fallback_enabled = 0; + s->zonemd_reject_absence = 0; s->isrpz = 0; } else yyerror("out of memory"); } -#line 2869 "util/configparser.c" +#line 2877 "util/configparser.c" break; - case 267: -#line 376 "./util/configparser.y" + case 268: +#line 377 "./util/configparser.y" { uint8_t* bitlist; size_t len = 0; @@ -2886,11 +2894,11 @@ yyreduce: } } -#line 2890 "util/configparser.c" +#line 2898 "util/configparser.c" break; - case 268: -#line 395 "./util/configparser.y" + case 269: +#line 396 "./util/configparser.y" { OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 && @@ -2905,21 +2913,21 @@ yyreduce: cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } -#line 2909 "util/configparser.c" +#line 2917 "util/configparser.c" break; - case 269: -#line 412 "./util/configparser.y" + case 270: +#line 413 "./util/configparser.y" { OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_cname); cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str); } -#line 2919 "util/configparser.c" +#line 2927 "util/configparser.c" break; - case 270: -#line 420 "./util/configparser.y" + case 271: +#line 421 "./util/configparser.y" { OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2927,21 +2935,21 @@ yyreduce: else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2931 "util/configparser.c" +#line 2939 "util/configparser.c" break; - case 271: -#line 430 "./util/configparser.y" + case 272: +#line 431 "./util/configparser.y" { OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_log_name); cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str); } -#line 2941 "util/configparser.c" +#line 2949 "util/configparser.c" break; - case 272: -#line 438 "./util/configparser.y" + case 273: +#line 439 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -2957,11 +2965,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2961 "util/configparser.c" +#line 2969 "util/configparser.c" break; - case 285: -#line 461 "./util/configparser.y" + case 286: +#line 462 "./util/configparser.y" { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2969,11 +2977,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2973 "util/configparser.c" +#line 2981 "util/configparser.c" break; - case 286: -#line 470 "./util/configparser.y" + case 287: +#line 471 "./util/configparser.y" { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2981,11 +2989,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2985 "util/configparser.c" +#line 2993 "util/configparser.c" break; - case 287: -#line 479 "./util/configparser.y" + case 288: +#line 480 "./util/configparser.y" { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2995,11 +3003,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2999 "util/configparser.c" +#line 3007 "util/configparser.c" break; - case 288: -#line 490 "./util/configparser.y" + case 289: +#line 491 "./util/configparser.y" { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3007,11 +3015,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3011 "util/configparser.c" +#line 3019 "util/configparser.c" break; - case 289: -#line 499 "./util/configparser.y" + case 290: +#line 500 "./util/configparser.y" { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3019,11 +3027,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3023 "util/configparser.c" +#line 3031 "util/configparser.c" break; - case 290: -#line 508 "./util/configparser.y" + case 291: +#line 509 "./util/configparser.y" { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3031,11 +3039,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3035 "util/configparser.c" +#line 3043 "util/configparser.c" break; - case 291: -#line 517 "./util/configparser.y" + case 292: +#line 518 "./util/configparser.y" { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -3045,11 +3053,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3049 "util/configparser.c" +#line 3057 "util/configparser.c" break; - case 292: -#line 528 "./util/configparser.y" + case 293: +#line 529 "./util/configparser.y" { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3057,11 +3065,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3061 "util/configparser.c" +#line 3069 "util/configparser.c" break; - case 293: -#line 537 "./util/configparser.y" + case 294: +#line 538 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -3072,11 +3080,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 3076 "util/configparser.c" +#line 3084 "util/configparser.c" break; - case 294: -#line 549 "./util/configparser.y" + case 295: +#line 550 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -3088,11 +3096,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 3092 "util/configparser.c" +#line 3100 "util/configparser.c" break; - case 295: -#line 563 "./util/configparser.y" + case 296: +#line 564 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -3106,11 +3114,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3110 "util/configparser.c" +#line 3118 "util/configparser.c" break; - case 296: -#line 578 "./util/configparser.y" + case 297: +#line 579 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -3120,11 +3128,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3124 "util/configparser.c" +#line 3132 "util/configparser.c" break; - case 297: -#line 589 "./util/configparser.y" + case 298: +#line 590 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3140,11 +3148,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3144 "util/configparser.c" +#line 3152 "util/configparser.c" break; - case 298: -#line 606 "./util/configparser.y" + case 299: +#line 607 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3160,11 +3168,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3164 "util/configparser.c" +#line 3172 "util/configparser.c" break; - case 299: -#line 623 "./util/configparser.y" + case 300: +#line 624 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3180,11 +3188,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3184 "util/configparser.c" +#line 3192 "util/configparser.c" break; - case 300: -#line 640 "./util/configparser.y" + case 301: +#line 641 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3200,11 +3208,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3204 "util/configparser.c" +#line 3212 "util/configparser.c" break; - case 301: -#line 657 "./util/configparser.y" + case 302: +#line 658 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -3218,11 +3226,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3222 "util/configparser.c" +#line 3230 "util/configparser.c" break; - case 302: -#line 672 "./util/configparser.y" + case 303: +#line 673 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -3236,11 +3244,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3240 "util/configparser.c" +#line 3248 "util/configparser.c" break; - case 303: -#line 687 "./util/configparser.y" + case 304: +#line 688 "./util/configparser.y" { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3252,11 +3260,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3256 "util/configparser.c" +#line 3264 "util/configparser.c" break; - case 304: -#line 700 "./util/configparser.y" + case 305: +#line 701 "./util/configparser.y" { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3270,11 +3278,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3274 "util/configparser.c" +#line 3282 "util/configparser.c" break; - case 305: -#line 715 "./util/configparser.y" + case 306: +#line 716 "./util/configparser.y" { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3282,11 +3290,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3286 "util/configparser.c" +#line 3294 "util/configparser.c" break; - case 306: -#line 724 "./util/configparser.y" + case 307: +#line 725 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3294,11 +3302,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3298 "util/configparser.c" +#line 3306 "util/configparser.c" break; - case 307: -#line 733 "./util/configparser.y" + case 308: +#line 734 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3306,11 +3314,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3310 "util/configparser.c" +#line 3318 "util/configparser.c" break; - case 308: -#line 742 "./util/configparser.y" + case 309: +#line 743 "./util/configparser.y" { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3318,11 +3326,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3322 "util/configparser.c" +#line 3330 "util/configparser.c" break; - case 309: -#line 751 "./util/configparser.y" + case 310: +#line 752 "./util/configparser.y" { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3330,11 +3338,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3334 "util/configparser.c" +#line 3342 "util/configparser.c" break; - case 310: -#line 760 "./util/configparser.y" + case 311: +#line 761 "./util/configparser.y" { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3342,11 +3350,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3346 "util/configparser.c" +#line 3354 "util/configparser.c" break; - case 311: -#line 769 "./util/configparser.y" + case 312: +#line 770 "./util/configparser.y" { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3354,11 +3362,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3358 "util/configparser.c" +#line 3366 "util/configparser.c" break; - case 312: -#line 778 "./util/configparser.y" + case 313: +#line 779 "./util/configparser.y" { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3366,11 +3374,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3370 "util/configparser.c" +#line 3378 "util/configparser.c" break; - case 313: -#line 787 "./util/configparser.y" + case 314: +#line 788 "./util/configparser.y" { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3378,11 +3386,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3382 "util/configparser.c" +#line 3390 "util/configparser.c" break; - case 314: -#line 796 "./util/configparser.y" + case 315: +#line 797 "./util/configparser.y" { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3390,11 +3398,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3394 "util/configparser.c" +#line 3402 "util/configparser.c" break; - case 315: -#line 805 "./util/configparser.y" + case 316: +#line 806 "./util/configparser.y" { OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3402,11 +3410,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3406 "util/configparser.c" +#line 3414 "util/configparser.c" break; - case 316: -#line 814 "./util/configparser.y" + case 317: +#line 815 "./util/configparser.y" { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3414,11 +3422,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3418 "util/configparser.c" +#line 3426 "util/configparser.c" break; - case 317: -#line 823 "./util/configparser.y" + case 318: +#line 824 "./util/configparser.y" { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3426,11 +3434,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3430 "util/configparser.c" +#line 3438 "util/configparser.c" break; - case 318: -#line 832 "./util/configparser.y" + case 319: +#line 833 "./util/configparser.y" { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3438,11 +3446,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3442 "util/configparser.c" +#line 3450 "util/configparser.c" break; - case 319: -#line 841 "./util/configparser.y" + case 320: +#line 842 "./util/configparser.y" { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3454,11 +3462,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3458 "util/configparser.c" +#line 3466 "util/configparser.c" break; - case 320: -#line 854 "./util/configparser.y" + case 321: +#line 855 "./util/configparser.y" { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3466,11 +3474,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3470 "util/configparser.c" +#line 3478 "util/configparser.c" break; - case 321: -#line 863 "./util/configparser.y" + case 322: +#line 864 "./util/configparser.y" { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3482,11 +3490,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3486 "util/configparser.c" +#line 3494 "util/configparser.c" break; - case 322: -#line 876 "./util/configparser.y" + case 323: +#line 877 "./util/configparser.y" { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3494,11 +3502,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3498 "util/configparser.c" +#line 3506 "util/configparser.c" break; - case 323: -#line 885 "./util/configparser.y" + case 324: +#line 886 "./util/configparser.y" { OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3506,11 +3514,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3510 "util/configparser.c" +#line 3518 "util/configparser.c" break; - case 324: -#line 894 "./util/configparser.y" + case 325: +#line 895 "./util/configparser.y" { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3518,31 +3526,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3522 "util/configparser.c" +#line 3530 "util/configparser.c" break; - case 325: -#line 903 "./util/configparser.y" + case 326: +#line 904 "./util/configparser.y" { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } -#line 3532 "util/configparser.c" +#line 3540 "util/configparser.c" break; - case 326: -#line 910 "./util/configparser.y" + case 327: +#line 911 "./util/configparser.y" { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } -#line 3542 "util/configparser.c" +#line 3550 "util/configparser.c" break; - case 327: -#line 917 "./util/configparser.y" + case 328: +#line 918 "./util/configparser.y" { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3550,21 +3558,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3554 "util/configparser.c" +#line 3562 "util/configparser.c" break; - case 328: -#line 926 "./util/configparser.y" + case 329: +#line 927 "./util/configparser.y" { OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_cert_bundle); cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str); } -#line 3564 "util/configparser.c" +#line 3572 "util/configparser.c" break; - case 329: -#line 933 "./util/configparser.y" + case 330: +#line 934 "./util/configparser.y" { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3572,53 +3580,53 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3576 "util/configparser.c" +#line 3584 "util/configparser.c" break; - case 330: -#line 942 "./util/configparser.y" + case 331: +#line 943 "./util/configparser.y" { OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3587 "util/configparser.c" +#line 3595 "util/configparser.c" break; - case 331: -#line 950 "./util/configparser.y" + case 332: +#line 951 "./util/configparser.y" { OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphers); cfg_parser->cfg->tls_ciphers = (yyvsp[0].str); } -#line 3597 "util/configparser.c" +#line 3605 "util/configparser.c" break; - case 332: -#line 957 "./util/configparser.y" + case 333: +#line 958 "./util/configparser.y" { OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphersuites); cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str); } -#line 3607 "util/configparser.c" +#line 3615 "util/configparser.c" break; - case 333: -#line 964 "./util/configparser.y" + case 334: +#line 965 "./util/configparser.y" { OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3618 "util/configparser.c" +#line 3626 "util/configparser.c" break; - case 334: -#line 972 "./util/configparser.y" + case 335: +#line 973 "./util/configparser.y" { OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3626,11 +3634,11 @@ yyreduce: else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3630 "util/configparser.c" +#line 3638 "util/configparser.c" break; - case 335: -#line 981 "./util/configparser.y" + case 336: +#line 982 "./util/configparser.y" { OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3638,11 +3646,11 @@ yyreduce: else cfg_parser->cfg->https_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3642 "util/configparser.c" +#line 3650 "util/configparser.c" break; - case 336: -#line 989 "./util/configparser.y" + case 337: +#line 990 "./util/configparser.y" { OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->http_endpoint); @@ -3658,11 +3666,11 @@ yyreduce: cfg_parser->cfg->http_endpoint = (yyvsp[0].str); } } -#line 3662 "util/configparser.c" +#line 3670 "util/configparser.c" break; - case 337: -#line 1005 "./util/configparser.y" + case 338: +#line 1006 "./util/configparser.y" { OUTYY(("P(server_http_max_streams:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3670,11 +3678,11 @@ yyreduce: else cfg_parser->cfg->http_max_streams = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3674 "util/configparser.c" +#line 3682 "util/configparser.c" break; - case 338: -#line 1013 "./util/configparser.y" + case 339: +#line 1014 "./util/configparser.y" { OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), @@ -3682,11 +3690,11 @@ yyreduce: yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3686 "util/configparser.c" +#line 3694 "util/configparser.c" break; - case 339: -#line 1021 "./util/configparser.y" + case 340: +#line 1022 "./util/configparser.y" { OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), @@ -3694,11 +3702,11 @@ yyreduce: yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3698 "util/configparser.c" +#line 3706 "util/configparser.c" break; - case 340: -#line 1029 "./util/configparser.y" + case 341: +#line 1030 "./util/configparser.y" { OUTYY(("P(server_http_nodelay:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3706,11 +3714,11 @@ yyreduce: else cfg_parser->cfg->http_nodelay = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3710 "util/configparser.c" +#line 3718 "util/configparser.c" break; - case 341: -#line 1037 "./util/configparser.y" + case 342: +#line 1038 "./util/configparser.y" { OUTYY(("P(server_http_notls_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3718,11 +3726,11 @@ yyreduce: else cfg_parser->cfg->http_notls_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3722 "util/configparser.c" +#line 3730 "util/configparser.c" break; - case 342: -#line 1045 "./util/configparser.y" + case 343: +#line 1046 "./util/configparser.y" { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3730,11 +3738,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3734 "util/configparser.c" +#line 3742 "util/configparser.c" break; - case 343: -#line 1054 "./util/configparser.y" + case 344: +#line 1055 "./util/configparser.y" { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3742,11 +3750,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3746 "util/configparser.c" +#line 3754 "util/configparser.c" break; - case 344: -#line 1063 "./util/configparser.y" + case 345: +#line 1064 "./util/configparser.y" { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3759,11 +3767,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3763 "util/configparser.c" +#line 3771 "util/configparser.c" break; - case 345: -#line 1077 "./util/configparser.y" + case 346: +#line 1078 "./util/configparser.y" { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3771,11 +3779,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3775 "util/configparser.c" +#line 3783 "util/configparser.c" break; - case 346: -#line 1086 "./util/configparser.y" + case 347: +#line 1087 "./util/configparser.y" { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3783,11 +3791,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3787 "util/configparser.c" +#line 3795 "util/configparser.c" break; - case 347: -#line 1095 "./util/configparser.y" + case 348: +#line 1096 "./util/configparser.y" { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3795,11 +3803,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3799 "util/configparser.c" +#line 3807 "util/configparser.c" break; - case 348: -#line 1104 "./util/configparser.y" + case 349: +#line 1105 "./util/configparser.y" { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3807,11 +3815,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3811 "util/configparser.c" +#line 3819 "util/configparser.c" break; - case 349: -#line 1113 "./util/configparser.y" + case 350: +#line 1114 "./util/configparser.y" { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3819,11 +3827,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3823 "util/configparser.c" +#line 3831 "util/configparser.c" break; - case 350: -#line 1122 "./util/configparser.y" + case 351: +#line 1123 "./util/configparser.y" { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3831,31 +3839,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3835 "util/configparser.c" +#line 3843 "util/configparser.c" break; - case 351: -#line 1131 "./util/configparser.y" + case 352: +#line 1132 "./util/configparser.y" { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3845 "util/configparser.c" +#line 3853 "util/configparser.c" break; - case 352: -#line 1138 "./util/configparser.y" + case 353: +#line 1139 "./util/configparser.y" { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3855 "util/configparser.c" +#line 3863 "util/configparser.c" break; - case 353: -#line 1145 "./util/configparser.y" + case 354: +#line 1146 "./util/configparser.y" { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3880,105 +3888,105 @@ yyreduce: } } } -#line 3884 "util/configparser.c" +#line 3892 "util/configparser.c" break; - case 354: -#line 1171 "./util/configparser.y" + case 355: +#line 1172 "./util/configparser.y" { OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } -#line 3895 "util/configparser.c" +#line 3903 "util/configparser.c" break; - case 355: -#line 1179 "./util/configparser.y" + case 356: +#line 1180 "./util/configparser.y" { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3905 "util/configparser.c" +#line 3913 "util/configparser.c" break; - case 356: -#line 1186 "./util/configparser.y" + case 357: +#line 1187 "./util/configparser.y" { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3915 "util/configparser.c" +#line 3923 "util/configparser.c" break; - case 357: -#line 1193 "./util/configparser.y" + case 358: +#line 1194 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); log_warn("option dlv-anchor-file ignored: DLV is decommissioned"); free((yyvsp[0].str)); } -#line 3925 "util/configparser.c" +#line 3933 "util/configparser.c" break; - case 358: -#line 1200 "./util/configparser.y" + case 359: +#line 1201 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); log_warn("option dlv-anchor ignored: DLV is decommissioned"); free((yyvsp[0].str)); } -#line 3935 "util/configparser.c" +#line 3943 "util/configparser.c" break; - case 359: -#line 1207 "./util/configparser.y" + case 360: +#line 1208 "./util/configparser.y" { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3946 "util/configparser.c" +#line 3954 "util/configparser.c" break; - case 360: -#line 1215 "./util/configparser.y" + case 361: +#line 1216 "./util/configparser.y" { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3957 "util/configparser.c" +#line 3965 "util/configparser.c" break; - case 361: -#line 1223 "./util/configparser.y" + case 362: +#line 1224 "./util/configparser.y" { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3968 "util/configparser.c" +#line 3976 "util/configparser.c" break; - case 362: -#line 1231 "./util/configparser.y" + case 363: +#line 1232 "./util/configparser.y" { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3978 "util/configparser.c" +#line 3986 "util/configparser.c" break; - case 363: -#line 1238 "./util/configparser.y" + case 364: +#line 1239 "./util/configparser.y" { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3988,11 +3996,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3992 "util/configparser.c" +#line 4000 "util/configparser.c" break; - case 364: -#line 1249 "./util/configparser.y" + case 365: +#line 1250 "./util/configparser.y" { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4002,21 +4010,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4006 "util/configparser.c" +#line 4014 "util/configparser.c" break; - case 365: -#line 1260 "./util/configparser.y" + case 366: +#line 1261 "./util/configparser.y" { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4016 "util/configparser.c" +#line 4024 "util/configparser.c" break; - case 366: -#line 1267 "./util/configparser.y" + case 367: +#line 1268 "./util/configparser.y" { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4024,11 +4032,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4028 "util/configparser.c" +#line 4036 "util/configparser.c" break; - case 367: -#line 1276 "./util/configparser.y" + case 368: +#line 1277 "./util/configparser.y" { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4036,11 +4044,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4040 "util/configparser.c" +#line 4048 "util/configparser.c" break; - case 368: -#line 1285 "./util/configparser.y" + case 369: +#line 1286 "./util/configparser.y" { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4048,53 +4056,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4052 "util/configparser.c" +#line 4060 "util/configparser.c" break; - case 369: -#line 1294 "./util/configparser.y" + case 370: +#line 1295 "./util/configparser.y" { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 4062 "util/configparser.c" +#line 4070 "util/configparser.c" break; - case 370: -#line 1301 "./util/configparser.y" + case 371: +#line 1302 "./util/configparser.y" { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 4072 "util/configparser.c" +#line 4080 "util/configparser.c" break; - case 371: -#line 1308 "./util/configparser.y" + case 372: +#line 1309 "./util/configparser.y" { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 4083 "util/configparser.c" +#line 4091 "util/configparser.c" break; - case 372: -#line 1316 "./util/configparser.y" + case 373: +#line 1317 "./util/configparser.y" { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 4094 "util/configparser.c" +#line 4102 "util/configparser.c" break; - case 373: -#line 1324 "./util/configparser.y" + case 374: +#line 1325 "./util/configparser.y" { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4103,11 +4111,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4107 "util/configparser.c" +#line 4115 "util/configparser.c" break; - case 374: -#line 1334 "./util/configparser.y" + case 375: +#line 1335 "./util/configparser.y" { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4116,11 +4124,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4120 "util/configparser.c" +#line 4128 "util/configparser.c" break; - case 375: -#line 1344 "./util/configparser.y" + case 376: +#line 1345 "./util/configparser.y" { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4129,11 +4137,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4133 "util/configparser.c" +#line 4141 "util/configparser.c" break; - case 376: -#line 1354 "./util/configparser.y" + case 377: +#line 1355 "./util/configparser.y" { OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4146,22 +4154,22 @@ yyreduce: cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4150 "util/configparser.c" +#line 4158 "util/configparser.c" break; - case 377: -#line 1368 "./util/configparser.y" + case 378: +#line 1369 "./util/configparser.y" { OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4161 "util/configparser.c" +#line 4169 "util/configparser.c" break; - case 378: -#line 1376 "./util/configparser.y" + case 379: +#line 1377 "./util/configparser.y" { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4173,11 +4181,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4177 "util/configparser.c" +#line 4185 "util/configparser.c" break; - case 379: -#line 1389 "./util/configparser.y" + case 380: +#line 1390 "./util/configparser.y" { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4187,22 +4195,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4191 "util/configparser.c" +#line 4199 "util/configparser.c" break; - case 380: -#line 1400 "./util/configparser.y" + case 381: +#line 1401 "./util/configparser.y" { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4202 "util/configparser.c" +#line 4210 "util/configparser.c" break; - case 381: -#line 1408 "./util/configparser.y" + case 382: +#line 1409 "./util/configparser.y" { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4214,11 +4222,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4218 "util/configparser.c" +#line 4226 "util/configparser.c" break; - case 382: -#line 1421 "./util/configparser.y" + case 383: +#line 1422 "./util/configparser.y" { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4226,11 +4234,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4230 "util/configparser.c" +#line 4238 "util/configparser.c" break; - case 383: -#line 1430 "./util/configparser.y" + case 384: +#line 1431 "./util/configparser.y" { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4238,11 +4246,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4242 "util/configparser.c" +#line 4250 "util/configparser.c" break; - case 384: -#line 1439 "./util/configparser.y" + case 385: +#line 1440 "./util/configparser.y" { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4250,11 +4258,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4254 "util/configparser.c" +#line 4262 "util/configparser.c" break; - case 385: -#line 1448 "./util/configparser.y" + case 386: +#line 1449 "./util/configparser.y" { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4263,11 +4271,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4267 "util/configparser.c" +#line 4275 "util/configparser.c" break; - case 386: -#line 1458 "./util/configparser.y" + case 387: +#line 1459 "./util/configparser.y" { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4276,22 +4284,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4280 "util/configparser.c" +#line 4288 "util/configparser.c" break; - case 387: -#line 1468 "./util/configparser.y" + case 388: +#line 1469 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4291 "util/configparser.c" +#line 4299 "util/configparser.c" break; - case 388: -#line 1476 "./util/configparser.y" + case 389: +#line 1477 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4303,11 +4311,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4307 "util/configparser.c" +#line 4315 "util/configparser.c" break; - case 389: -#line 1489 "./util/configparser.y" + case 390: +#line 1490 "./util/configparser.y" { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4315,22 +4323,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4319 "util/configparser.c" +#line 4327 "util/configparser.c" break; - case 390: -#line 1498 "./util/configparser.y" + case 391: +#line 1499 "./util/configparser.y" { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " "removed, use infra-host-ttl)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4330 "util/configparser.c" +#line 4338 "util/configparser.c" break; - case 391: -#line 1506 "./util/configparser.y" + case 392: +#line 1507 "./util/configparser.y" { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4338,22 +4346,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4342 "util/configparser.c" +#line 4350 "util/configparser.c" break; - case 392: -#line 1515 "./util/configparser.y" + case 393: +#line 1516 "./util/configparser.y" { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4353 "util/configparser.c" +#line 4361 "util/configparser.c" break; - case 393: -#line 1523 "./util/configparser.y" + case 394: +#line 1524 "./util/configparser.y" { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4365,11 +4373,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4369 "util/configparser.c" +#line 4377 "util/configparser.c" break; - case 394: -#line 1536 "./util/configparser.y" + case 395: +#line 1537 "./util/configparser.y" { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4377,11 +4385,11 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4381 "util/configparser.c" +#line 4389 "util/configparser.c" break; - case 395: -#line 1545 "./util/configparser.y" + case 396: +#line 1546 "./util/configparser.y" { OUTYY(("P(server_infra_keep_probing:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4390,21 +4398,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4394 "util/configparser.c" +#line 4402 "util/configparser.c" break; - case 396: -#line 1555 "./util/configparser.y" + case 397: +#line 1556 "./util/configparser.y" { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); } -#line 4404 "util/configparser.c" +#line 4412 "util/configparser.c" break; - case 397: -#line 1562 "./util/configparser.y" + case 398: +#line 1563 "./util/configparser.y" { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4413,11 +4421,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4417 "util/configparser.c" +#line 4425 "util/configparser.c" break; - case 398: -#line 1572 "./util/configparser.y" + case 399: +#line 1573 "./util/configparser.y" { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4426,11 +4434,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4430 "util/configparser.c" +#line 4438 "util/configparser.c" break; - case 399: -#line 1582 "./util/configparser.y" + case 400: +#line 1583 "./util/configparser.y" { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4439,11 +4447,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4443 "util/configparser.c" +#line 4451 "util/configparser.c" break; - case 400: -#line 1592 "./util/configparser.y" + case 401: +#line 1593 "./util/configparser.y" { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4452,11 +4460,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4456 "util/configparser.c" +#line 4464 "util/configparser.c" break; - case 401: -#line 1602 "./util/configparser.y" + case 402: +#line 1603 "./util/configparser.y" { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4465,11 +4473,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4469 "util/configparser.c" +#line 4477 "util/configparser.c" break; - case 402: -#line 1612 "./util/configparser.y" + case 403: +#line 1613 "./util/configparser.y" { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4478,11 +4486,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4482 "util/configparser.c" +#line 4490 "util/configparser.c" break; - case 403: -#line 1622 "./util/configparser.y" + case 404: +#line 1623 "./util/configparser.y" { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4491,11 +4499,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4495 "util/configparser.c" +#line 4503 "util/configparser.c" break; - case 404: -#line 1632 "./util/configparser.y" + case 405: +#line 1633 "./util/configparser.y" { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4504,41 +4512,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4508 "util/configparser.c" +#line 4516 "util/configparser.c" break; - case 405: -#line 1642 "./util/configparser.y" + case 406: +#line 1643 "./util/configparser.y" { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4518 "util/configparser.c" +#line 4526 "util/configparser.c" break; - case 406: -#line 1649 "./util/configparser.y" + case 407: +#line 1650 "./util/configparser.y" { OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4528 "util/configparser.c" +#line 4536 "util/configparser.c" break; - case 407: -#line 1656 "./util/configparser.y" + case 408: +#line 1657 "./util/configparser.y" { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4538 "util/configparser.c" +#line 4546 "util/configparser.c" break; - case 408: -#line 1663 "./util/configparser.y" + case 409: +#line 1664 "./util/configparser.y" { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4546,11 +4554,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4550 "util/configparser.c" +#line 4558 "util/configparser.c" break; - case 409: -#line 1672 "./util/configparser.y" + case 410: +#line 1673 "./util/configparser.y" { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4558,11 +4566,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4562 "util/configparser.c" +#line 4570 "util/configparser.c" break; - case 410: -#line 1681 "./util/configparser.y" + case 411: +#line 1682 "./util/configparser.y" { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4570,11 +4578,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4574 "util/configparser.c" +#line 4582 "util/configparser.c" break; - case 411: -#line 1690 "./util/configparser.y" + case 412: +#line 1691 "./util/configparser.y" { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4582,21 +4590,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4586 "util/configparser.c" +#line 4594 "util/configparser.c" break; - case 412: -#line 1699 "./util/configparser.y" + case 413: +#line 1700 "./util/configparser.y" { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4596 "util/configparser.c" +#line 4604 "util/configparser.c" break; - case 413: -#line 1706 "./util/configparser.y" + case 414: +#line 1707 "./util/configparser.y" { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4605,11 +4613,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4609 "util/configparser.c" +#line 4617 "util/configparser.c" break; - case 414: -#line 1716 "./util/configparser.y" + case 415: +#line 1717 "./util/configparser.y" { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4628,21 +4636,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4632 "util/configparser.c" +#line 4640 "util/configparser.c" break; - case 415: -#line 1736 "./util/configparser.y" + case 416: +#line 1737 "./util/configparser.y" { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = (yyvsp[0].str); } -#line 4642 "util/configparser.c" +#line 4650 "util/configparser.c" break; - case 416: -#line 1743 "./util/configparser.y" + case 417: +#line 1744 "./util/configparser.y" { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4659,11 +4667,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4663 "util/configparser.c" +#line 4671 "util/configparser.c" break; - case 417: -#line 1761 "./util/configparser.y" + case 418: +#line 1762 "./util/configparser.y" { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4675,11 +4683,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4679 "util/configparser.c" +#line 4687 "util/configparser.c" break; - case 418: -#line 1774 "./util/configparser.y" + case 419: +#line 1775 "./util/configparser.y" { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4691,11 +4699,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4695 "util/configparser.c" +#line 4703 "util/configparser.c" break; - case 419: -#line 1787 "./util/configparser.y" + case 420: +#line 1788 "./util/configparser.y" { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4703,11 +4711,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4707 "util/configparser.c" +#line 4715 "util/configparser.c" break; - case 420: -#line 1796 "./util/configparser.y" + case 421: +#line 1797 "./util/configparser.y" { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4715,11 +4723,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4719 "util/configparser.c" +#line 4727 "util/configparser.c" break; - case 421: -#line 1805 "./util/configparser.y" + case 422: +#line 1806 "./util/configparser.y" { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4727,11 +4735,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4731 "util/configparser.c" +#line 4739 "util/configparser.c" break; - case 422: -#line 1814 "./util/configparser.y" + case 423: +#line 1815 "./util/configparser.y" { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4739,11 +4747,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4743 "util/configparser.c" +#line 4751 "util/configparser.c" break; - case 423: -#line 1823 "./util/configparser.y" + case 424: +#line 1824 "./util/configparser.y" { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4752,11 +4760,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4756 "util/configparser.c" +#line 4764 "util/configparser.c" break; - case 424: -#line 1833 "./util/configparser.y" + case 425: +#line 1834 "./util/configparser.y" { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4765,11 +4773,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4769 "util/configparser.c" +#line 4777 "util/configparser.c" break; - case 425: -#line 1843 "./util/configparser.y" + case 426: +#line 1844 "./util/configparser.y" { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4779,11 +4787,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4783 "util/configparser.c" +#line 4791 "util/configparser.c" break; - case 426: -#line 1854 "./util/configparser.y" + case 427: +#line 1855 "./util/configparser.y" { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4791,11 +4799,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4795 "util/configparser.c" +#line 4803 "util/configparser.c" break; - case 427: -#line 1863 "./util/configparser.y" + case 428: +#line 1864 "./util/configparser.y" { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4803,11 +4811,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4807 "util/configparser.c" +#line 4815 "util/configparser.c" break; - case 428: -#line 1872 "./util/configparser.y" + case 429: +#line 1873 "./util/configparser.y" { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4815,11 +4823,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4819 "util/configparser.c" +#line 4827 "util/configparser.c" break; - case 429: -#line 1881 "./util/configparser.y" + case 430: +#line 1882 "./util/configparser.y" { OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4827,11 +4835,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4831 "util/configparser.c" +#line 4839 "util/configparser.c" break; - case 430: -#line 1890 "./util/configparser.y" + case 431: +#line 1891 "./util/configparser.y" { OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4839,11 +4847,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4843 "util/configparser.c" +#line 4851 "util/configparser.c" break; - case 431: -#line 1899 "./util/configparser.y" + case 432: +#line 1900 "./util/configparser.y" { OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4851,11 +4859,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4855 "util/configparser.c" +#line 4863 "util/configparser.c" break; - case 432: -#line 1908 "./util/configparser.y" + case 433: +#line 1909 "./util/configparser.y" { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4867,11 +4875,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4871 "util/configparser.c" +#line 4879 "util/configparser.c" break; - case 433: -#line 1921 "./util/configparser.y" + case 434: +#line 1922 "./util/configparser.y" { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4883,11 +4891,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4887 "util/configparser.c" +#line 4895 "util/configparser.c" break; - case 434: -#line 1934 "./util/configparser.y" + case 435: +#line 1935 "./util/configparser.y" { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4895,21 +4903,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4899 "util/configparser.c" +#line 4907 "util/configparser.c" break; - case 435: -#line 1943 "./util/configparser.y" + case 436: +#line 1944 "./util/configparser.y" { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); } -#line 4909 "util/configparser.c" +#line 4917 "util/configparser.c" break; - case 436: -#line 1950 "./util/configparser.y" + case 437: +#line 1951 "./util/configparser.y" { OUTYY(("P(server_zonemd_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4917,11 +4925,11 @@ yyreduce: else cfg_parser->cfg->zonemd_permissive_mode = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4921 "util/configparser.c" +#line 4929 "util/configparser.c" break; - case 437: -#line 1959 "./util/configparser.y" + case 438: +#line 1960 "./util/configparser.y" { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4929,11 +4937,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4933 "util/configparser.c" +#line 4941 "util/configparser.c" break; - case 438: -#line 1968 "./util/configparser.y" + case 439: +#line 1969 "./util/configparser.y" { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4941,11 +4949,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4945 "util/configparser.c" +#line 4953 "util/configparser.c" break; - case 439: -#line 1977 "./util/configparser.y" + case 440: +#line 1978 "./util/configparser.y" { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4953,11 +4961,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4957 "util/configparser.c" +#line 4965 "util/configparser.c" break; - case 440: -#line 1986 "./util/configparser.y" + case 441: +#line 1987 "./util/configparser.y" { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4966,22 +4974,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4970 "util/configparser.c" +#line 4978 "util/configparser.c" break; - case 441: -#line 1995 "./util/configparser.y" + case 442: +#line 1996 "./util/configparser.y" { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4981 "util/configparser.c" +#line 4989 "util/configparser.c" break; - case 442: -#line 2003 "./util/configparser.y" + case 443: +#line 2004 "./util/configparser.y" { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4993,22 +5001,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4997 "util/configparser.c" +#line 5005 "util/configparser.c" break; - case 443: -#line 2016 "./util/configparser.y" + case 444: +#line 2017 "./util/configparser.y" { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5008 "util/configparser.c" +#line 5016 "util/configparser.c" break; - case 444: -#line 2024 "./util/configparser.y" + case 445: +#line 2025 "./util/configparser.y" { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -5048,21 +5056,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5052 "util/configparser.c" +#line 5060 "util/configparser.c" break; - case 445: -#line 2065 "./util/configparser.y" + case 446: +#line 2066 "./util/configparser.y" { OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) fatal_exit("out of memory adding local-data"); } -#line 5062 "util/configparser.c" +#line 5070 "util/configparser.c" break; - case 446: -#line 2072 "./util/configparser.y" + case 447: +#line 2073 "./util/configparser.y" { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5076,11 +5084,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5080 "util/configparser.c" +#line 5088 "util/configparser.c" break; - case 447: -#line 2087 "./util/configparser.y" + case 448: +#line 2088 "./util/configparser.y" { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5089,11 +5097,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5093 "util/configparser.c" +#line 5101 "util/configparser.c" break; - case 448: -#line 2097 "./util/configparser.y" + case 449: +#line 2098 "./util/configparser.y" { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5102,41 +5110,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5106 "util/configparser.c" +#line 5114 "util/configparser.c" break; - case 449: -#line 2107 "./util/configparser.y" + case 450: +#line 2108 "./util/configparser.y" { OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5116 "util/configparser.c" +#line 5124 "util/configparser.c" break; - case 450: -#line 2114 "./util/configparser.y" + case 451: +#line 2115 "./util/configparser.y" { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5126 "util/configparser.c" +#line 5134 "util/configparser.c" break; - case 451: -#line 2121 "./util/configparser.y" + case 452: +#line 2122 "./util/configparser.y" { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 5136 "util/configparser.c" +#line 5144 "util/configparser.c" break; - case 452: -#line 2128 "./util/configparser.y" + case 453: +#line 2129 "./util/configparser.y" { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5144,22 +5152,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5148 "util/configparser.c" +#line 5156 "util/configparser.c" break; - case 453: -#line 2137 "./util/configparser.y" + case 454: +#line 2138 "./util/configparser.y" { OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, (yyvsp[0].str))) fatal_exit("out of memory adding dns64-ignore-aaaa"); } -#line 5159 "util/configparser.c" +#line 5167 "util/configparser.c" break; - case 454: -#line 2145 "./util/configparser.y" + case 455: +#line 2146 "./util/configparser.y" { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -5172,11 +5180,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5176 "util/configparser.c" +#line 5184 "util/configparser.c" break; - case 455: -#line 2159 "./util/configparser.y" + case 456: +#line 2160 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5196,11 +5204,11 @@ yyreduce: } } } -#line 5200 "util/configparser.c" +#line 5208 "util/configparser.c" break; - case 456: -#line 2180 "./util/configparser.y" + case 457: +#line 2181 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5220,11 +5228,11 @@ yyreduce: } } } -#line 5224 "util/configparser.c" +#line 5232 "util/configparser.c" break; - case 457: -#line 2201 "./util/configparser.y" + case 458: +#line 2202 "./util/configparser.y" { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, @@ -5235,11 +5243,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5239 "util/configparser.c" +#line 5247 "util/configparser.c" break; - case 458: -#line 2213 "./util/configparser.y" + case 459: +#line 2214 "./util/configparser.y" { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, @@ -5250,11 +5258,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5254 "util/configparser.c" +#line 5262 "util/configparser.c" break; - case 459: -#line 2225 "./util/configparser.y" + case 460: +#line 2226 "./util/configparser.y" { OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, @@ -5265,11 +5273,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5269 "util/configparser.c" +#line 5277 "util/configparser.c" break; - case 460: -#line 2237 "./util/configparser.y" + case 461: +#line 2238 "./util/configparser.y" { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -5277,11 +5285,11 @@ yyreduce: yyerror("out of memory"); } } -#line 5281 "util/configparser.c" +#line 5289 "util/configparser.c" break; - case 461: -#line 2246 "./util/configparser.y" + case 462: +#line 2247 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5301,11 +5309,11 @@ yyreduce: } } } -#line 5305 "util/configparser.c" +#line 5313 "util/configparser.c" break; - case 462: -#line 2267 "./util/configparser.y" + case 463: +#line 2268 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5313,11 +5321,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5317 "util/configparser.c" +#line 5325 "util/configparser.c" break; - case 463: -#line 2277 "./util/configparser.y" + case 464: +#line 2278 "./util/configparser.y" { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5325,33 +5333,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5329 "util/configparser.c" +#line 5337 "util/configparser.c" break; - case 464: -#line 2286 "./util/configparser.y" + case 465: +#line 2287 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5340 "util/configparser.c" +#line 5348 "util/configparser.c" break; - case 465: -#line 2294 "./util/configparser.y" + case 466: +#line 2295 "./util/configparser.y" { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5351 "util/configparser.c" +#line 5359 "util/configparser.c" break; - case 466: -#line 2302 "./util/configparser.y" + case 467: +#line 2303 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5363,11 +5371,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5367 "util/configparser.c" +#line 5375 "util/configparser.c" break; - case 467: -#line 2315 "./util/configparser.y" + case 468: +#line 2316 "./util/configparser.y" { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5379,11 +5387,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5383 "util/configparser.c" +#line 5391 "util/configparser.c" break; - case 468: -#line 2328 "./util/configparser.y" + case 469: +#line 2329 "./util/configparser.y" { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -5397,11 +5405,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 5401 "util/configparser.c" +#line 5409 "util/configparser.c" break; - case 469: -#line 2343 "./util/configparser.y" + case 470: +#line 2344 "./util/configparser.y" { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -5415,11 +5423,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 5419 "util/configparser.c" +#line 5427 "util/configparser.c" break; - case 470: -#line 2358 "./util/configparser.y" + case 471: +#line 2359 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5427,11 +5435,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5431 "util/configparser.c" +#line 5439 "util/configparser.c" break; - case 471: -#line 2367 "./util/configparser.y" + case 472: +#line 2368 "./util/configparser.y" { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5439,20 +5447,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5443 "util/configparser.c" +#line 5451 "util/configparser.c" break; - case 472: -#line 2376 "./util/configparser.y" + case 473: +#line 2377 "./util/configparser.y" { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5452 "util/configparser.c" +#line 5460 "util/configparser.c" break; - case 473: -#line 2382 "./util/configparser.y" + case 474: +#line 2383 "./util/configparser.y" { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -5460,11 +5468,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5464 "util/configparser.c" +#line 5472 "util/configparser.c" break; - case 474: -#line 2391 "./util/configparser.y" + case 475: +#line 2392 "./util/configparser.y" { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5472,11 +5480,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5476 "util/configparser.c" +#line 5484 "util/configparser.c" break; - case 475: -#line 2400 "./util/configparser.y" + case 476: +#line 2401 "./util/configparser.y" { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5485,11 +5493,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5489 "util/configparser.c" +#line 5497 "util/configparser.c" break; - case 476: -#line 2410 "./util/configparser.y" + case 477: +#line 2411 "./util/configparser.y" { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5498,11 +5506,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5502 "util/configparser.c" +#line 5510 "util/configparser.c" break; - case 477: -#line 2420 "./util/configparser.y" + case 478: +#line 2421 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5514,11 +5522,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5518 "util/configparser.c" +#line 5526 "util/configparser.c" break; - case 478: -#line 2433 "./util/configparser.y" + case 479: +#line 2434 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5530,11 +5538,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5534 "util/configparser.c" +#line 5542 "util/configparser.c" break; - case 479: -#line 2446 "./util/configparser.y" + case 480: +#line 2447 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5545,11 +5553,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5549 "util/configparser.c" +#line 5557 "util/configparser.c" break; - case 480: -#line 2458 "./util/configparser.y" + case 481: +#line 2459 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5562,11 +5570,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5566 "util/configparser.c" +#line 5574 "util/configparser.c" break; - case 481: -#line 2472 "./util/configparser.y" + case 482: +#line 2473 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5577,11 +5585,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5581 "util/configparser.c" +#line 5589 "util/configparser.c" break; - case 482: -#line 2484 "./util/configparser.y" + case 483: +#line 2485 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5594,11 +5602,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5598 "util/configparser.c" +#line 5606 "util/configparser.c" break; - case 483: -#line 2498 "./util/configparser.y" + case 484: +#line 2499 "./util/configparser.y" { int tag_data; OUTYY(("P(server_edns_client_tag:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); @@ -5612,11 +5620,11 @@ yyreduce: fatal_exit("out of memory adding " "edns-client-tag"); } -#line 5616 "util/configparser.c" +#line 5624 "util/configparser.c" break; - case 484: -#line 2513 "./util/configparser.y" + case 485: +#line 2514 "./util/configparser.y" { OUTYY(("P(edns_client_tag_opcode:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5626,11 +5634,11 @@ yyreduce: else cfg_parser->cfg->edns_client_tag_opcode = atoi((yyvsp[0].str)); } -#line 5630 "util/configparser.c" +#line 5638 "util/configparser.c" break; - case 485: -#line 2524 "./util/configparser.y" + case 486: +#line 2525 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5639,31 +5647,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5643 "util/configparser.c" +#line 5651 "util/configparser.c" break; - case 486: -#line 2534 "./util/configparser.y" + case 487: +#line 2535 "./util/configparser.y" { OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5653 "util/configparser.c" +#line 5661 "util/configparser.c" break; - case 487: -#line 2541 "./util/configparser.y" + case 488: +#line 2542 "./util/configparser.y" { OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5663 "util/configparser.c" +#line 5671 "util/configparser.c" break; - case 488: -#line 2548 "./util/configparser.y" + case 489: +#line 2549 "./util/configparser.y" { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5671,11 +5679,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5675 "util/configparser.c" +#line 5683 "util/configparser.c" break; - case 489: -#line 2557 "./util/configparser.y" + case 490: +#line 2558 "./util/configparser.y" { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5683,11 +5691,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5687 "util/configparser.c" +#line 5695 "util/configparser.c" break; - case 490: -#line 2566 "./util/configparser.y" + case 491: +#line 2567 "./util/configparser.y" { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5696,11 +5704,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5700 "util/configparser.c" +#line 5708 "util/configparser.c" break; - case 491: -#line 2576 "./util/configparser.y" + case 492: +#line 2577 "./util/configparser.y" { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5709,11 +5717,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5713 "util/configparser.c" +#line 5721 "util/configparser.c" break; - case 492: -#line 2586 "./util/configparser.y" + case 493: +#line 2587 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5722,31 +5730,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5726 "util/configparser.c" +#line 5734 "util/configparser.c" break; - case 493: -#line 2596 "./util/configparser.y" + case 494: +#line 2597 "./util/configparser.y" { OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5736 "util/configparser.c" +#line 5744 "util/configparser.c" break; - case 494: -#line 2603 "./util/configparser.y" + case 495: +#line 2604 "./util/configparser.y" { OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5746 "util/configparser.c" +#line 5754 "util/configparser.c" break; - case 495: -#line 2610 "./util/configparser.y" + case 496: +#line 2611 "./util/configparser.y" { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5754,11 +5762,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5758 "util/configparser.c" +#line 5766 "util/configparser.c" break; - case 496: -#line 2619 "./util/configparser.y" + case 497: +#line 2620 "./util/configparser.y" { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5766,11 +5774,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5770 "util/configparser.c" +#line 5778 "util/configparser.c" break; - case 497: -#line 2628 "./util/configparser.y" + case 498: +#line 2629 "./util/configparser.y" { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5779,11 +5787,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5783 "util/configparser.c" +#line 5791 "util/configparser.c" break; - case 498: -#line 2638 "./util/configparser.y" + case 499: +#line 2639 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5792,52 +5800,65 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5796 "util/configparser.c" +#line 5804 "util/configparser.c" break; - case 499: -#line 2648 "./util/configparser.y" + case 500: +#line 2649 "./util/configparser.y" { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 5806 "util/configparser.c" +#line 5814 "util/configparser.c" break; - case 500: -#line 2655 "./util/configparser.y" + case 501: +#line 2656 "./util/configparser.y" { OUTYY(("P(master:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5816 "util/configparser.c" +#line 5824 "util/configparser.c" break; - case 501: -#line 2662 "./util/configparser.y" + case 502: +#line 2663 "./util/configparser.y" { OUTYY(("P(url:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5826 "util/configparser.c" +#line 5834 "util/configparser.c" break; - case 502: -#line 2669 "./util/configparser.y" + case 503: +#line 2670 "./util/configparser.y" { OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5837 "util/configparser.c" +#line 5845 "util/configparser.c" break; - case 503: -#line 2677 "./util/configparser.y" + case 504: +#line 2678 "./util/configparser.y" + { + OUTYY(("P(zonemd-reject-absence:%s)\n", (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->auths->zonemd_reject_absence = + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 5858 "util/configparser.c" + break; + + case 505: +#line 2688 "./util/configparser.y" { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5846,11 +5867,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5850 "util/configparser.c" +#line 5871 "util/configparser.c" break; - case 504: -#line 2687 "./util/configparser.y" + case 506: +#line 2698 "./util/configparser.y" { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5859,11 +5880,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5863 "util/configparser.c" +#line 5884 "util/configparser.c" break; - case 505: -#line 2697 "./util/configparser.y" + case 507: +#line 2708 "./util/configparser.y" { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5872,11 +5893,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5876 "util/configparser.c" +#line 5897 "util/configparser.c" break; - case 506: -#line 2707 "./util/configparser.y" + case 508: +#line 2718 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5885,11 +5906,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5889 "util/configparser.c" +#line 5910 "util/configparser.c" break; - case 507: -#line 2717 "./util/configparser.y" + case 509: +#line 2728 "./util/configparser.y" { OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -5927,11 +5948,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5931 "util/configparser.c" +#line 5952 "util/configparser.c" break; - case 508: -#line 2756 "./util/configparser.y" + case 510: +#line 2767 "./util/configparser.y" { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5940,33 +5961,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5944 "util/configparser.c" +#line 5965 "util/configparser.c" break; - case 509: -#line 2766 "./util/configparser.y" + case 511: +#line 2777 "./util/configparser.y" { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 5955 "util/configparser.c" +#line 5976 "util/configparser.c" break; - case 510: -#line 2774 "./util/configparser.y" + case 512: +#line 2785 "./util/configparser.y" { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { fatal_exit("out of memory adding local-data"); } } -#line 5966 "util/configparser.c" +#line 5987 "util/configparser.c" break; - case 511: -#line 2782 "./util/configparser.y" + case 513: +#line 2793 "./util/configparser.y" { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5980,11 +6001,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5984 "util/configparser.c" +#line 6005 "util/configparser.c" break; - case 512: -#line 2797 "./util/configparser.y" + case 514: +#line 2808 "./util/configparser.y" { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5992,19 +6013,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5996 "util/configparser.c" +#line 6017 "util/configparser.c" break; - case 513: -#line 2806 "./util/configparser.y" + case 515: +#line 2817 "./util/configparser.y" { OUTYY(("\nP(remote-control:)\n")); } -#line 6004 "util/configparser.c" +#line 6025 "util/configparser.c" break; - case 524: -#line 2817 "./util/configparser.y" + case 526: +#line 2828 "./util/configparser.y" { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6013,11 +6034,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6017 "util/configparser.c" +#line 6038 "util/configparser.c" break; - case 525: -#line 2827 "./util/configparser.y" + case 527: +#line 2838 "./util/configparser.y" { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6025,79 +6046,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6029 "util/configparser.c" +#line 6050 "util/configparser.c" break; - case 526: -#line 2836 "./util/configparser.y" + case 528: +#line 2847 "./util/configparser.y" { OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6039 "util/configparser.c" +#line 6060 "util/configparser.c" break; - case 527: -#line 2843 "./util/configparser.y" + case 529: +#line 2854 "./util/configparser.y" { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6049 "util/configparser.c" +#line 6070 "util/configparser.c" break; - case 528: -#line 2850 "./util/configparser.y" + case 530: +#line 2861 "./util/configparser.y" { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = (yyvsp[0].str); } -#line 6059 "util/configparser.c" +#line 6080 "util/configparser.c" break; - case 529: -#line 2857 "./util/configparser.y" + case 531: +#line 2868 "./util/configparser.y" { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } -#line 6069 "util/configparser.c" +#line 6090 "util/configparser.c" break; - case 530: -#line 2864 "./util/configparser.y" + case 532: +#line 2875 "./util/configparser.y" { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = (yyvsp[0].str); } -#line 6079 "util/configparser.c" +#line 6100 "util/configparser.c" break; - case 531: -#line 2871 "./util/configparser.y" + case 533: +#line 2882 "./util/configparser.y" { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } -#line 6089 "util/configparser.c" +#line 6110 "util/configparser.c" break; - case 532: -#line 2878 "./util/configparser.y" + case 534: +#line 2889 "./util/configparser.y" { OUTYY(("\nP(dnstap:)\n")); } -#line 6097 "util/configparser.c" +#line 6118 "util/configparser.c" break; - case 554: -#line 2898 "./util/configparser.y" + case 556: +#line 2909 "./util/configparser.y" { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6105,11 +6126,11 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6109 "util/configparser.c" +#line 6130 "util/configparser.c" break; - case 555: -#line 2907 "./util/configparser.y" + case 557: +#line 2918 "./util/configparser.y" { OUTYY(("P(dt_dnstap_bidirectional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6118,31 +6139,31 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6122 "util/configparser.c" +#line 6143 "util/configparser.c" break; - case 556: -#line 2917 "./util/configparser.y" + case 558: +#line 2928 "./util/configparser.y" { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } -#line 6132 "util/configparser.c" +#line 6153 "util/configparser.c" break; - case 557: -#line 2924 "./util/configparser.y" + case 559: +#line 2935 "./util/configparser.y" { OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_ip); cfg_parser->cfg->dnstap_ip = (yyvsp[0].str); } -#line 6142 "util/configparser.c" +#line 6163 "util/configparser.c" break; - case 558: -#line 2931 "./util/configparser.y" + case 560: +#line 2942 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6150,51 +6171,51 @@ yyreduce: else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6154 "util/configparser.c" +#line 6175 "util/configparser.c" break; - case 559: -#line 2940 "./util/configparser.y" + case 561: +#line 2951 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_server_name); cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str); } -#line 6164 "util/configparser.c" +#line 6185 "util/configparser.c" break; - case 560: -#line 2947 "./util/configparser.y" + case 562: +#line 2958 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_cert_bundle); cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str); } -#line 6174 "util/configparser.c" +#line 6195 "util/configparser.c" break; - case 561: -#line 2954 "./util/configparser.y" + case 563: +#line 2965 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_key_file); cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str); } -#line 6184 "util/configparser.c" +#line 6205 "util/configparser.c" break; - case 562: -#line 2961 "./util/configparser.y" + case 564: +#line 2972 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_cert_file); cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str); } -#line 6194 "util/configparser.c" +#line 6215 "util/configparser.c" break; - case 563: -#line 2968 "./util/configparser.y" + case 565: +#line 2979 "./util/configparser.y" { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6202,11 +6223,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6206 "util/configparser.c" +#line 6227 "util/configparser.c" break; - case 564: -#line 2977 "./util/configparser.y" + case 566: +#line 2988 "./util/configparser.y" { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6214,31 +6235,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6218 "util/configparser.c" +#line 6239 "util/configparser.c" break; - case 565: -#line 2986 "./util/configparser.y" + case 567: +#line 2997 "./util/configparser.y" { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } -#line 6228 "util/configparser.c" +#line 6249 "util/configparser.c" break; - case 566: -#line 2993 "./util/configparser.y" + case 568: +#line 3004 "./util/configparser.y" { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } -#line 6238 "util/configparser.c" +#line 6259 "util/configparser.c" break; - case 567: -#line 3000 "./util/configparser.y" + case 569: +#line 3011 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6247,11 +6268,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6251 "util/configparser.c" +#line 6272 "util/configparser.c" break; - case 568: -#line 3010 "./util/configparser.y" + case 570: +#line 3021 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6260,11 +6281,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6264 "util/configparser.c" +#line 6285 "util/configparser.c" break; - case 569: -#line 3020 "./util/configparser.y" + case 571: +#line 3031 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6273,11 +6294,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6277 "util/configparser.c" +#line 6298 "util/configparser.c" break; - case 570: -#line 3030 "./util/configparser.y" + case 572: +#line 3041 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6286,11 +6307,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6290 "util/configparser.c" +#line 6311 "util/configparser.c" break; - case 571: -#line 3040 "./util/configparser.y" + case 573: +#line 3051 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6299,11 +6320,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6303 "util/configparser.c" +#line 6324 "util/configparser.c" break; - case 572: -#line 3050 "./util/configparser.y" + case 574: +#line 3061 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6312,47 +6333,47 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6316 "util/configparser.c" +#line 6337 "util/configparser.c" break; - case 573: -#line 3060 "./util/configparser.y" + case 575: +#line 3071 "./util/configparser.y" { OUTYY(("\nP(python:)\n")); } -#line 6324 "util/configparser.c" +#line 6345 "util/configparser.c" break; - case 577: -#line 3069 "./util/configparser.y" + case 579: +#line 3080 "./util/configparser.y" { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6334 "util/configparser.c" +#line 6355 "util/configparser.c" break; - case 578: -#line 3075 "./util/configparser.y" + case 580: +#line 3086 "./util/configparser.y" { OUTYY(("\nP(dynlib:)\n")); } -#line 6342 "util/configparser.c" +#line 6363 "util/configparser.c" break; - case 582: -#line 3084 "./util/configparser.y" + case 584: +#line 3095 "./util/configparser.y" { OUTYY(("P(dynlib-file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6352 "util/configparser.c" +#line 6373 "util/configparser.c" break; - case 583: -#line 3090 "./util/configparser.y" + case 585: +#line 3101 "./util/configparser.y" { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6361,21 +6382,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6365 "util/configparser.c" +#line 6386 "util/configparser.c" break; - case 584: -#line 3100 "./util/configparser.y" + case 586: +#line 3111 "./util/configparser.y" { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = (yyvsp[0].str); } -#line 6375 "util/configparser.c" +#line 6396 "util/configparser.c" break; - case 585: -#line 3107 "./util/configparser.y" + case 587: +#line 3118 "./util/configparser.y" { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -6383,30 +6404,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 6387 "util/configparser.c" +#line 6408 "util/configparser.c" break; - case 586: -#line 3116 "./util/configparser.y" + case 588: +#line 3127 "./util/configparser.y" { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 6398 "util/configparser.c" +#line 6419 "util/configparser.c" break; - case 587: -#line 3124 "./util/configparser.y" + case 589: +#line 3135 "./util/configparser.y" { OUTYY(("\nP(dnscrypt:)\n")); } -#line 6406 "util/configparser.c" +#line 6427 "util/configparser.c" break; - case 600: -#line 3140 "./util/configparser.y" + case 602: +#line 3151 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6414,11 +6435,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6418 "util/configparser.c" +#line 6439 "util/configparser.c" break; - case 601: -#line 3150 "./util/configparser.y" + case 603: +#line 3161 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6426,21 +6447,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6430 "util/configparser.c" +#line 6451 "util/configparser.c" break; - case 602: -#line 3159 "./util/configparser.y" + case 604: +#line 3170 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } -#line 6440 "util/configparser.c" +#line 6461 "util/configparser.c" break; - case 603: -#line 3166 "./util/configparser.y" + case 605: +#line 3177 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -6448,21 +6469,21 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 6452 "util/configparser.c" +#line 6473 "util/configparser.c" break; - case 604: -#line 3175 "./util/configparser.y" + case 606: +#line 3186 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); } -#line 6462 "util/configparser.c" +#line 6483 "util/configparser.c" break; - case 605: -#line 3182 "./util/configparser.y" + case 607: +#line 3193 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -6470,22 +6491,22 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 6474 "util/configparser.c" +#line 6495 "util/configparser.c" break; - case 606: -#line 3191 "./util/configparser.y" + case 608: +#line 3202 "./util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6485 "util/configparser.c" +#line 6506 "util/configparser.c" break; - case 607: -#line 3199 "./util/configparser.y" + case 609: +#line 3210 "./util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6497,22 +6518,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6501 "util/configparser.c" +#line 6522 "util/configparser.c" break; - case 608: -#line 3212 "./util/configparser.y" + case 610: +#line 3223 "./util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6512 "util/configparser.c" +#line 6533 "util/configparser.c" break; - case 609: -#line 3220 "./util/configparser.y" + case 611: +#line 3231 "./util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6524,19 +6545,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6528 "util/configparser.c" +#line 6549 "util/configparser.c" break; - case 610: -#line 3233 "./util/configparser.y" + case 612: +#line 3244 "./util/configparser.y" { OUTYY(("\nP(cachedb:)\n")); } -#line 6536 "util/configparser.c" +#line 6557 "util/configparser.c" break; - case 619: -#line 3244 "./util/configparser.y" + case 621: +#line 3255 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -6547,11 +6568,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6551 "util/configparser.c" +#line 6572 "util/configparser.c" break; - case 620: -#line 3256 "./util/configparser.y" + case 622: +#line 3267 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -6562,11 +6583,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6566 "util/configparser.c" +#line 6587 "util/configparser.c" break; - case 621: -#line 3268 "./util/configparser.y" + case 623: +#line 3279 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -6577,11 +6598,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6581 "util/configparser.c" +#line 6602 "util/configparser.c" break; - case 622: -#line 3280 "./util/configparser.y" + case 624: +#line 3291 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -6595,11 +6616,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6599 "util/configparser.c" +#line 6620 "util/configparser.c" break; - case 623: -#line 3295 "./util/configparser.y" + case 625: +#line 3306 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -6611,11 +6632,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6615 "util/configparser.c" +#line 6636 "util/configparser.c" break; - case 624: -#line 3308 "./util/configparser.y" + case 626: +#line 3319 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str))); @@ -6627,11 +6648,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6631 "util/configparser.c" +#line 6652 "util/configparser.c" break; - case 625: -#line 3321 "./util/configparser.y" + case 627: +#line 3332 "./util/configparser.y" { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -6641,19 +6662,19 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6645 "util/configparser.c" +#line 6666 "util/configparser.c" break; - case 626: -#line 3332 "./util/configparser.y" + case 628: +#line 3343 "./util/configparser.y" { OUTYY(("\nP(ipset:)\n")); } -#line 6653 "util/configparser.c" +#line 6674 "util/configparser.c" break; - case 631: -#line 3341 "./util/configparser.y" + case 633: +#line 3352 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); @@ -6667,11 +6688,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6671 "util/configparser.c" +#line 6692 "util/configparser.c" break; - case 632: -#line 3356 "./util/configparser.y" + case 634: +#line 3367 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); @@ -6685,11 +6706,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6689 "util/configparser.c" +#line 6710 "util/configparser.c" break; -#line 6693 "util/configparser.c" +#line 6714 "util/configparser.c" default: break; } @@ -6921,7 +6942,7 @@ yyreturn: #endif return yyresult; } -#line 3370 "./util/configparser.y" +#line 3381 "./util/configparser.y" /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index bf8fa618a..50782ec34 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -348,7 +348,8 @@ extern int yydebug; VAR_DYNLIB_FILE = 554, VAR_EDNS_CLIENT_TAG = 555, VAR_EDNS_CLIENT_TAG_OPCODE = 556, - VAR_ZONEMD_PERMISSIVE_MODE = 557 + VAR_ZONEMD_PERMISSIVE_MODE = 557, + VAR_ZONEMD_REJECT_ABSENCE = 558 }; #endif /* Tokens. */ @@ -652,6 +653,7 @@ extern int yydebug; #define VAR_EDNS_CLIENT_TAG 555 #define VAR_EDNS_CLIENT_TAG_OPCODE 556 #define VAR_ZONEMD_PERMISSIVE_MODE 557 +#define VAR_ZONEMD_REJECT_ABSENCE 558 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -661,7 +663,7 @@ union YYSTYPE char* str; -#line 665 "util/configparser.h" +#line 667 "util/configparser.h" }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index 8067d04ef..4f808723f 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -179,7 +179,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_TLS_SESSION_TICKET_KEYS VAR_RPZ VAR_TAGS VAR_RPZ_ACTION_OVERRIDE %token VAR_RPZ_CNAME_OVERRIDE VAR_RPZ_LOG VAR_RPZ_LOG_NAME %token VAR_DYNLIB VAR_DYNLIB_FILE VAR_EDNS_CLIENT_TAG VAR_EDNS_CLIENT_TAG_OPCODE -%token VAR_ZONEMD_PERMISSIVE_MODE +%token VAR_ZONEMD_PERMISSIVE_MODE VAR_ZONEMD_REJECT_ABSENCE %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -360,6 +360,7 @@ authstart: VAR_AUTH_ZONE s->for_downstream = 1; s->for_upstream = 1; s->fallback_enabled = 0; + s->zonemd_reject_absence = 0; s->isrpz = 0; } else yyerror("out of memory"); @@ -369,7 +370,7 @@ contents_auth: contents_auth content_auth | ; content_auth: auth_name | auth_zonefile | auth_master | auth_url | auth_for_downstream | auth_for_upstream | auth_fallback_enabled | - auth_allow_notify + auth_allow_notify | auth_zonemd_reject_absence ; rpz_tag: VAR_TAGS STRING_ARG @@ -2673,6 +2674,16 @@ auth_allow_notify: VAR_ALLOW_NOTIFY STRING_ARG yyerror("out of memory"); } ; +auth_zonemd_reject_absence: VAR_ZONEMD_REJECT_ABSENCE STRING_ARG + { + OUTYY(("P(zonemd-reject-absence:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->auths->zonemd_reject_absence = + (strcmp($2, "yes")==0); + free($2); + } + ; auth_for_downstream: VAR_FOR_DOWNSTREAM STRING_ARG { OUTYY(("P(for-downstream:%s)\n", $2)); From 639a773c39b1dcb5fc47817da7a60e964e314dcd Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 27 Oct 2020 13:44:44 +0100 Subject: [PATCH 054/168] zonemd, unit test for chain of trust from recursion to check ZONEMD. --- testdata/auth_zonemd_chain.rpl | 233 +++++++++++++++++++++++++++ testdata/auth_zonemd_chain_fail.rpl | 235 ++++++++++++++++++++++++++++ 2 files changed, 468 insertions(+) create mode 100644 testdata/auth_zonemd_chain.rpl create mode 100644 testdata/auth_zonemd_chain_fail.rpl diff --git a/testdata/auth_zonemd_chain.rpl b/testdata/auth_zonemd_chain.rpl new file mode 100644 index 000000000..b693f6c35 --- /dev/null +++ b/testdata/auth_zonemd_chain.rpl @@ -0,0 +1,233 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "com. DS 1444 8 2 0d72034e3e18a9ef383c164b68302433bbde957616e10cf44575fea2abae469c" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with ZONEMD from zonefile with chain of trust + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN DS +SECTION ANSWER +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN DNSKEY +SECTION ANSWER +com. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b} +com. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 com. BEOMfWvi6RgnHaHsst+Ed265hBuCkgMR7gDpu89J7ZrVL6DzMKnNVFdgjl/9xwLj/pkukc7qeLSHjAfLlN0E4THW7PVshscQnjvXCkktG2Ejx9fTyllAqeGDh9z9QDGlQZIGTMgb9413qZhNqe2Tda9PTJRpiZ8b4bdQp6V1kVo= +SECTION ADDITIONAL +ENTRY_END + +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 127.0.0.1 +ENTRY_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_chain_fail.rpl b/testdata/auth_zonemd_chain_fail.rpl new file mode 100644 index 000000000..d38367b9d --- /dev/null +++ b/testdata/auth_zonemd_chain_fail.rpl @@ -0,0 +1,235 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "com. DS 1444 8 2 0d72034e3e18a9ef383c164b68302433bbde957616e10cf44575fea2abae469c" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +; dnskey is wrong: +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+AAAAA ;{id = 55566 (zsk), size = 1024b} +; dnskey that was correct: +;example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with ZONEMD from zonefile with failed chain of trust + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN DS +SECTION ANSWER +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN DNSKEY +SECTION ANSWER +com. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b} +com. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 com. BEOMfWvi6RgnHaHsst+Ed265hBuCkgMR7gDpu89J7ZrVL6DzMKnNVFdgjl/9xwLj/pkukc7qeLSHjAfLlN0E4THW7PVshscQnjvXCkktG2Ejx9fTyllAqeGDh9z9QDGlQZIGTMgb9413qZhNqe2Tda9PTJRpiZ8b4bdQp6V1kVo= +SECTION ADDITIONAL +ENTRY_END + +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +SCENARIO_END From 7ebb890a4a96614e2dac545307d791f197ca80e4 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 28 Oct 2020 15:10:14 +0100 Subject: [PATCH 055/168] zonemd, unit test for zonemd from file and trust anchor directly for DNSSEC. --- testdata/auth_zonemd_anchor.rpl | 233 ++++++++++++++++++++++++++ testdata/auth_zonemd_anchor_fail.rpl | 235 +++++++++++++++++++++++++++ 2 files changed, 468 insertions(+) create mode 100644 testdata/auth_zonemd_anchor.rpl create mode 100644 testdata/auth_zonemd_anchor_fail.rpl diff --git a/testdata/auth_zonemd_anchor.rpl b/testdata/auth_zonemd_anchor.rpl new file mode 100644 index 000000000..7e4257513 --- /dev/null +++ b/testdata/auth_zonemd_anchor.rpl @@ -0,0 +1,233 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "example.com. DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with ZONEMD from zonefile with trust anchor + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN DS +SECTION ANSWER +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN DNSKEY +SECTION ANSWER +com. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b} +com. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 com. BEOMfWvi6RgnHaHsst+Ed265hBuCkgMR7gDpu89J7ZrVL6DzMKnNVFdgjl/9xwLj/pkukc7qeLSHjAfLlN0E4THW7PVshscQnjvXCkktG2Ejx9fTyllAqeGDh9z9QDGlQZIGTMgb9413qZhNqe2Tda9PTJRpiZ8b4bdQp6V1kVo= +SECTION ADDITIONAL +ENTRY_END + +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 127.0.0.1 +ENTRY_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_anchor_fail.rpl b/testdata/auth_zonemd_anchor_fail.rpl new file mode 100644 index 000000000..69492d5f8 --- /dev/null +++ b/testdata/auth_zonemd_anchor_fail.rpl @@ -0,0 +1,235 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + ; correct anchor + ; trust-anchor: "example.com. DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af" + ; wrong anchor + trust-anchor: "example.com. DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deeaaaaa" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with ZONEMD from zonefile with failed trust anchor + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN DS +SECTION ANSWER +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN DNSKEY +SECTION ANSWER +com. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b} +com. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 com. BEOMfWvi6RgnHaHsst+Ed265hBuCkgMR7gDpu89J7ZrVL6DzMKnNVFdgjl/9xwLj/pkukc7qeLSHjAfLlN0E4THW7PVshscQnjvXCkktG2Ejx9fTyllAqeGDh9z9QDGlQZIGTMgb9413qZhNqe2Tda9PTJRpiZ8b4bdQp6V1kVo= +SECTION ADDITIONAL +ENTRY_END + +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +SCENARIO_END From 3ab188ea218b49c7705264a354f00e3448962ddb Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 29 Oct 2020 08:40:22 +0100 Subject: [PATCH 056/168] zonemd, please doxygen zonemd, fix clang analyzer warning about null nsec3 salt pointer access. --- services/authzone.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/services/authzone.c b/services/authzone.c index 252d2884c..b5b50c92c 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -7673,9 +7673,14 @@ static int nsec3_of_param_has_type(struct auth_rrset* nsec3, int algo, if(!nsec3_get_params(&pk, i, &rralgo, &rriter, &rrsalt, &rrsaltlen)) continue; /* no parameters, malformed */ - if(rralgo != algo || rriter != iter || rrsaltlen != saltlen || - memcmp(rrsalt, salt, saltlen) != 0) + if(rralgo != algo || rriter != iter || rrsaltlen != saltlen) continue; /* different parameters */ + if(saltlen != 0) { + if(rrsalt == NULL || salt == NULL) + continue; + if(memcmp(rrsalt, salt, saltlen) != 0) + continue; /* different salt parameters */ + } if(nsec3_has_type(&pk, i, rrtype)) return 1; } @@ -7929,6 +7934,7 @@ auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env, * thus apply straight to the zone DNSKEY set. * @param z: the auth zone. * @param env: environment with time and temp buffers. + * @param mods: module stack for validator environment for dnssec validation. * @param anchor: trust anchor to use * @param is_insecure: returned, true if the zone is securely insecure. * @param why_bogus: if the routine fails, returns the failure reason. From 43e32eae3393ddb9f6ef1fe5b5dd7c54ce6bacb6 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 29 Oct 2020 09:55:03 +0100 Subject: [PATCH 057/168] zonemd, unit test for zonemd from axfr with trust anchor. --- testdata/auth_zonemd_xfr_anchor.rpl | 284 ++++++++++++++++++++++++++++ 1 file changed, 284 insertions(+) create mode 100644 testdata/auth_zonemd_xfr_anchor.rpl diff --git a/testdata/auth_zonemd_xfr_anchor.rpl b/testdata/auth_zonemd_xfr_anchor.rpl new file mode 100644 index 000000000..682d51b47 --- /dev/null +++ b/testdata/auth_zonemd_xfr_anchor.rpl @@ -0,0 +1,284 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "example.com. DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + master: 1.2.3.44 + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: yes + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with AXFR with ZONEMD with trust anchor + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN SOA +SECTION ANSWER +; serial, refresh, retry, expire, minimum +example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN AXFR +SECTION ANSWER +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +STEP 30 TIME_PASSES ELAPSE 10 +STEP 40 TRAFFIC + +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 60 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 127.0.0.1 +ENTRY_END + +; the zonefile was updated with new contents +STEP 70 CHECK_TEMPFILE example.com +FILE_BEGIN +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY ZONEMD +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN ZONEMD 200154054 1 2 58F7620F93204BBB31B44F795B3409CC4ABD9EF5601DECC15675BD7751213152984EDDCE0626E6062E744B03B3E47711202FBB79E4A2EB8BC5CF46741B5CAE6F +example.com. 3600 IN RRSIG ZONEMD 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= +FILE_END + +SCENARIO_END From 2757e0ff51905a1976816b99c47729f455662ddc Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 29 Oct 2020 10:00:59 +0100 Subject: [PATCH 058/168] zonemd, unit test for failed zonemd hash after axfr, zone is rejected and not written to file. --- testdata/auth_zonemd_xfr_anchor_fail.rpl | 265 +++++++++++++++++++++++ 1 file changed, 265 insertions(+) create mode 100644 testdata/auth_zonemd_xfr_anchor_fail.rpl diff --git a/testdata/auth_zonemd_xfr_anchor_fail.rpl b/testdata/auth_zonemd_xfr_anchor_fail.rpl new file mode 100644 index 000000000..2b2849546 --- /dev/null +++ b/testdata/auth_zonemd_xfr_anchor_fail.rpl @@ -0,0 +1,265 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "example.com. DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + master: 1.2.3.44 + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: yes + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with AXFR with ZONEMD fail with trust anchor + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN SOA +SECTION ANSWER +; serial, refresh, retry, expire, minimum +example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOTIMPL +SECTION QUESTION +example.com. IN IXFR +SECTION ANSWER +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN AXFR +SECTION ANSWER +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +; this is the bad RR that causes the wrong zonemd. RRSIG is wrong too. +bar.example.com. 3600 IN A 1.2.3.55 +; orig RR +;bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +STEP 30 TIME_PASSES ELAPSE 10 +STEP 40 TRAFFIC + +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 60 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +; the zonefile was updated with new contents +STEP 70 CHECK_TEMPFILE example.com +FILE_BEGIN +FILE_END + +SCENARIO_END From cd3d54b504cf48471c3b9bdb8cec51da82b705c6 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 29 Oct 2020 10:13:01 +0100 Subject: [PATCH 059/168] zonemd, unit test for failed zonemd hash after axfr with chain of trust, zone is written after axfr, but before check. But zone is then rejected after check completes.. --- testdata/auth_zonemd_xfr_chain.rpl | 309 +++++++++++++++++++++++ testdata/auth_zonemd_xfr_chain_fail.rpl | 320 ++++++++++++++++++++++++ 2 files changed, 629 insertions(+) create mode 100644 testdata/auth_zonemd_xfr_chain.rpl create mode 100644 testdata/auth_zonemd_xfr_chain_fail.rpl diff --git a/testdata/auth_zonemd_xfr_chain.rpl b/testdata/auth_zonemd_xfr_chain.rpl new file mode 100644 index 000000000..9d1fdcf68 --- /dev/null +++ b/testdata/auth_zonemd_xfr_chain.rpl @@ -0,0 +1,309 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "com. DS 1444 8 2 0d72034e3e18a9ef383c164b68302433bbde957616e10cf44575fea2abae469c" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + master: 1.2.3.44 + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: yes + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with AXFR with ZONEMD with chain of trust + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN DS +SECTION ANSWER +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN DNSKEY +SECTION ANSWER +com. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b} +com. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 com. BEOMfWvi6RgnHaHsst+Ed265hBuCkgMR7gDpu89J7ZrVL6DzMKnNVFdgjl/9xwLj/pkukc7qeLSHjAfLlN0E4THW7PVshscQnjvXCkktG2Ejx9fTyllAqeGDh9z9QDGlQZIGTMgb9413qZhNqe2Tda9PTJRpiZ8b4bdQp6V1kVo= +SECTION ADDITIONAL +ENTRY_END +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN SOA +SECTION ANSWER +; serial, refresh, retry, expire, minimum +example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN AXFR +SECTION ANSWER +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +STEP 30 TIME_PASSES ELAPSE 10 +STEP 40 TRAFFIC + +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 60 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 127.0.0.1 +ENTRY_END + +; the zonefile was updated with new contents +STEP 70 CHECK_TEMPFILE example.com +FILE_BEGIN +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY ZONEMD +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN ZONEMD 200154054 1 2 58F7620F93204BBB31B44F795B3409CC4ABD9EF5601DECC15675BD7751213152984EDDCE0626E6062E744B03B3E47711202FBB79E4A2EB8BC5CF46741B5CAE6F +example.com. 3600 IN RRSIG ZONEMD 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= +FILE_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_xfr_chain_fail.rpl b/testdata/auth_zonemd_xfr_chain_fail.rpl new file mode 100644 index 000000000..8b3ad74f0 --- /dev/null +++ b/testdata/auth_zonemd_xfr_chain_fail.rpl @@ -0,0 +1,320 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "com. DS 1444 8 2 0d72034e3e18a9ef383c164b68302433bbde957616e10cf44575fea2abae469c" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + master: 1.2.3.44 + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: yes + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with AXFR with ZONEMD failure with chain of trust + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN DS +SECTION ANSWER +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN DNSKEY +SECTION ANSWER +com. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b} +com. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 com. BEOMfWvi6RgnHaHsst+Ed265hBuCkgMR7gDpu89J7ZrVL6DzMKnNVFdgjl/9xwLj/pkukc7qeLSHjAfLlN0E4THW7PVshscQnjvXCkktG2Ejx9fTyllAqeGDh9z9QDGlQZIGTMgb9413qZhNqe2Tda9PTJRpiZ8b4bdQp6V1kVo= +SECTION ADDITIONAL +ENTRY_END +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN SOA +SECTION ANSWER +; serial, refresh, retry, expire, minimum +example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOTIMPL +SECTION QUESTION +example.com. IN IXFR +SECTION ANSWER +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN AXFR +SECTION ANSWER +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +; this is the bad RR that causes the wrong zonemd. RRSIG is wrong too. +bar.example.com. 3600 IN A 1.2.3.55 +; orig RR +;bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +STEP 30 TIME_PASSES ELAPSE 10 +STEP 40 TRAFFIC + +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 60 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +; the zonefile was updated with new contents +STEP 70 CHECK_TEMPFILE example.com +FILE_BEGIN +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY ZONEMD +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN ZONEMD 200154054 1 2 58F7620F93204BBB31B44F795B3409CC4ABD9EF5601DECC15675BD7751213152984EDDCE0626E6062E744B03B3E47711202FBB79E4A2EB8BC5CF46741B5CAE6F +example.com. 3600 IN RRSIG ZONEMD 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +bar.example.com. 3600 IN A 1.2.3.55 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= +FILE_END + +SCENARIO_END From e573f55dcd9ea74a991c6b86221fa77707598a28 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 29 Oct 2020 14:59:11 +0100 Subject: [PATCH 060/168] zonemd, unit tests for insecure delegation zones. --- testdata/auth_zonemd_insecure.rpl | 214 +++++++++++++++++ testdata/auth_zonemd_insecure_absent.rpl | 216 +++++++++++++++++ .../auth_zonemd_insecure_absent_reject.rpl | 217 ++++++++++++++++++ testdata/auth_zonemd_insecure_fail.rpl | 217 ++++++++++++++++++ testdata/auth_zonemd_nokey.rpl | 211 +++++++++++++++++ 5 files changed, 1075 insertions(+) create mode 100644 testdata/auth_zonemd_insecure.rpl create mode 100644 testdata/auth_zonemd_insecure_absent.rpl create mode 100644 testdata/auth_zonemd_insecure_absent_reject.rpl create mode 100644 testdata/auth_zonemd_insecure_fail.rpl create mode 100644 testdata/auth_zonemd_nokey.rpl diff --git a/testdata/auth_zonemd_insecure.rpl b/testdata/auth_zonemd_insecure.rpl new file mode 100644 index 000000000..b48992b4d --- /dev/null +++ b/testdata/auth_zonemd_insecure.rpl @@ -0,0 +1,214 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "com. DS 1444 8 2 0d72034e3e18a9ef383c164b68302433bbde957616e10cf44575fea2abae469c" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with ZONEMD that is securely insecure +; the trust anchor finds an online delegation with an insecure DS referral. + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN DS +SECTION AUTHORITY +com. SOA a.gtld-servers.net. nstld.verisign-grs.com. 1603979208 1800 900 604800 86400 +com. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 com. LTUZ8PlkMLX+dBZLGcJcahrzOgf1PgYbi/s5VKyR9iyYKeP6qdxO5VehUVHdXfmUiXrsszvhAHzo4AZnfRbDkK6uTfMKCSIB1aXOU4A74LpjhJBsXjyo3CN3IK/dMS/FpJfAb6JnuQV1E3ytDd34yNsoBazEjYeoN1kymGAttbM= +example.com. IN NSEC foo.com. NS RRSIG +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 com. KK6ci3DUnGJ9gaBBqS+71TiFBGcl51YLZAYGADDWuSgFOLLbh1nV//la08zE1i8ITQjjsqyRw7/MA8LWpPR3TnUjJLk6mBd/kB3dJ8BHWRqcyreFo6Pu383oCcXTpwkFcL4ulhp54LUxbA3arWVjWbx8815vvNKsEtWUyrz4LN8= +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. IN NSEC foo.com. NS RRSIG +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 com. KK6ci3DUnGJ9gaBBqS+71TiFBGcl51YLZAYGADDWuSgFOLLbh1nV//la08zE1i8ITQjjsqyRw7/MA8LWpPR3TnUjJLk6mBd/kB3dJ8BHWRqcyreFo6Pu383oCcXTpwkFcL4ulhp54LUxbA3arWVjWbx8815vvNKsEtWUyrz4LN8= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN DNSKEY +SECTION ANSWER +com. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b} +com. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 com. BEOMfWvi6RgnHaHsst+Ed265hBuCkgMR7gDpu89J7ZrVL6DzMKnNVFdgjl/9xwLj/pkukc7qeLSHjAfLlN0E4THW7PVshscQnjvXCkktG2Ejx9fTyllAqeGDh9z9QDGlQZIGTMgb9413qZhNqe2Tda9PTJRpiZ8b4bdQp6V1kVo= +SECTION ADDITIONAL +ENTRY_END + +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 127.0.0.1 +ENTRY_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_insecure_absent.rpl b/testdata/auth_zonemd_insecure_absent.rpl new file mode 100644 index 000000000..4706ccb0a --- /dev/null +++ b/testdata/auth_zonemd_insecure_absent.rpl @@ -0,0 +1,216 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "com. DS 1444 8 2 0d72034e3e18a9ef383c164b68302433bbde957616e10cf44575fea2abae469c" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +; the missing ZONEMD record +;example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with absent ZONEMD that is securely insecure +; the trust anchor finds an online delegation with an insecure DS referral. +; the ZONEMD is not there. + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN DS +SECTION AUTHORITY +com. SOA a.gtld-servers.net. nstld.verisign-grs.com. 1603979208 1800 900 604800 86400 +com. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 com. LTUZ8PlkMLX+dBZLGcJcahrzOgf1PgYbi/s5VKyR9iyYKeP6qdxO5VehUVHdXfmUiXrsszvhAHzo4AZnfRbDkK6uTfMKCSIB1aXOU4A74LpjhJBsXjyo3CN3IK/dMS/FpJfAb6JnuQV1E3ytDd34yNsoBazEjYeoN1kymGAttbM= +example.com. IN NSEC foo.com. NS RRSIG +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 com. KK6ci3DUnGJ9gaBBqS+71TiFBGcl51YLZAYGADDWuSgFOLLbh1nV//la08zE1i8ITQjjsqyRw7/MA8LWpPR3TnUjJLk6mBd/kB3dJ8BHWRqcyreFo6Pu383oCcXTpwkFcL4ulhp54LUxbA3arWVjWbx8815vvNKsEtWUyrz4LN8= +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. IN NSEC foo.com. NS RRSIG +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 com. KK6ci3DUnGJ9gaBBqS+71TiFBGcl51YLZAYGADDWuSgFOLLbh1nV//la08zE1i8ITQjjsqyRw7/MA8LWpPR3TnUjJLk6mBd/kB3dJ8BHWRqcyreFo6Pu383oCcXTpwkFcL4ulhp54LUxbA3arWVjWbx8815vvNKsEtWUyrz4LN8= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN DNSKEY +SECTION ANSWER +com. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b} +com. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 com. BEOMfWvi6RgnHaHsst+Ed265hBuCkgMR7gDpu89J7ZrVL6DzMKnNVFdgjl/9xwLj/pkukc7qeLSHjAfLlN0E4THW7PVshscQnjvXCkktG2Ejx9fTyllAqeGDh9z9QDGlQZIGTMgb9413qZhNqe2Tda9PTJRpiZ8b4bdQp6V1kVo= +SECTION ADDITIONAL +ENTRY_END + +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 127.0.0.1 +ENTRY_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_insecure_absent_reject.rpl b/testdata/auth_zonemd_insecure_absent_reject.rpl new file mode 100644 index 000000000..79225c936 --- /dev/null +++ b/testdata/auth_zonemd_insecure_absent_reject.rpl @@ -0,0 +1,217 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "com. DS 1444 8 2 0d72034e3e18a9ef383c164b68302433bbde957616e10cf44575fea2abae469c" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + zonemd-reject-absence: yes + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +; the missing ZONEMD record +;example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with reject-absence ZONEMD that is securely insecure +; the trust anchor finds an online delegation with an insecure DS referral. +; the ZONEMD is not there. This is not allowed by the zonemd-reject-absence +; option in config, so it fails the zone. + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN DS +SECTION AUTHORITY +com. SOA a.gtld-servers.net. nstld.verisign-grs.com. 1603979208 1800 900 604800 86400 +com. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 com. LTUZ8PlkMLX+dBZLGcJcahrzOgf1PgYbi/s5VKyR9iyYKeP6qdxO5VehUVHdXfmUiXrsszvhAHzo4AZnfRbDkK6uTfMKCSIB1aXOU4A74LpjhJBsXjyo3CN3IK/dMS/FpJfAb6JnuQV1E3ytDd34yNsoBazEjYeoN1kymGAttbM= +example.com. IN NSEC foo.com. NS RRSIG +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 com. KK6ci3DUnGJ9gaBBqS+71TiFBGcl51YLZAYGADDWuSgFOLLbh1nV//la08zE1i8ITQjjsqyRw7/MA8LWpPR3TnUjJLk6mBd/kB3dJ8BHWRqcyreFo6Pu383oCcXTpwkFcL4ulhp54LUxbA3arWVjWbx8815vvNKsEtWUyrz4LN8= +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. IN NSEC foo.com. NS RRSIG +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 com. KK6ci3DUnGJ9gaBBqS+71TiFBGcl51YLZAYGADDWuSgFOLLbh1nV//la08zE1i8ITQjjsqyRw7/MA8LWpPR3TnUjJLk6mBd/kB3dJ8BHWRqcyreFo6Pu383oCcXTpwkFcL4ulhp54LUxbA3arWVjWbx8815vvNKsEtWUyrz4LN8= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN DNSKEY +SECTION ANSWER +com. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b} +com. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 com. BEOMfWvi6RgnHaHsst+Ed265hBuCkgMR7gDpu89J7ZrVL6DzMKnNVFdgjl/9xwLj/pkukc7qeLSHjAfLlN0E4THW7PVshscQnjvXCkktG2Ejx9fTyllAqeGDh9z9QDGlQZIGTMgb9413qZhNqe2Tda9PTJRpiZ8b4bdQp6V1kVo= +SECTION ADDITIONAL +ENTRY_END + +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_insecure_fail.rpl b/testdata/auth_zonemd_insecure_fail.rpl new file mode 100644 index 000000000..03bbdd64c --- /dev/null +++ b/testdata/auth_zonemd_insecure_fail.rpl @@ -0,0 +1,217 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "com. DS 1444 8 2 0d72034e3e18a9ef383c164b68302433bbde957616e10cf44575fea2abae469c" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +; correct ZONEMD +;example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +; wrong ZONEMD +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D7AAAAA +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with ZONEMD fail that is securely insecure +; the trust anchor finds an online delegation with an insecure DS referral. +; the ZONEMD is wrong, eg. the hash does not match the zone data. + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN DS +SECTION AUTHORITY +com. SOA a.gtld-servers.net. nstld.verisign-grs.com. 1603979208 1800 900 604800 86400 +com. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 com. LTUZ8PlkMLX+dBZLGcJcahrzOgf1PgYbi/s5VKyR9iyYKeP6qdxO5VehUVHdXfmUiXrsszvhAHzo4AZnfRbDkK6uTfMKCSIB1aXOU4A74LpjhJBsXjyo3CN3IK/dMS/FpJfAb6JnuQV1E3ytDd34yNsoBazEjYeoN1kymGAttbM= +example.com. IN NSEC foo.com. NS RRSIG +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 com. KK6ci3DUnGJ9gaBBqS+71TiFBGcl51YLZAYGADDWuSgFOLLbh1nV//la08zE1i8ITQjjsqyRw7/MA8LWpPR3TnUjJLk6mBd/kB3dJ8BHWRqcyreFo6Pu383oCcXTpwkFcL4ulhp54LUxbA3arWVjWbx8815vvNKsEtWUyrz4LN8= +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. IN NSEC foo.com. NS RRSIG +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 com. KK6ci3DUnGJ9gaBBqS+71TiFBGcl51YLZAYGADDWuSgFOLLbh1nV//la08zE1i8ITQjjsqyRw7/MA8LWpPR3TnUjJLk6mBd/kB3dJ8BHWRqcyreFo6Pu383oCcXTpwkFcL4ulhp54LUxbA3arWVjWbx8815vvNKsEtWUyrz4LN8= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN DNSKEY +SECTION ANSWER +com. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b} +com. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 com. BEOMfWvi6RgnHaHsst+Ed265hBuCkgMR7gDpu89J7ZrVL6DzMKnNVFdgjl/9xwLj/pkukc7qeLSHjAfLlN0E4THW7PVshscQnjvXCkktG2Ejx9fTyllAqeGDh9z9QDGlQZIGTMgb9413qZhNqe2Tda9PTJRpiZ8b4bdQp6V1kVo= +SECTION ADDITIONAL +ENTRY_END + +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_nokey.rpl b/testdata/auth_zonemd_nokey.rpl new file mode 100644 index 000000000..57609337e --- /dev/null +++ b/testdata/auth_zonemd_nokey.rpl @@ -0,0 +1,211 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "com. DS 1444 8 2 0d72034e3e18a9ef383c164b68302433bbde957616e10cf44575fea2abae469c" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with ZONEMD that lacks a DNSKEY +; the zone has no DNSSEC, but the trust anchor requires it. + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN DS +SECTION ANSWER +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN DNSKEY +SECTION ANSWER +com. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b} +com. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 com. BEOMfWvi6RgnHaHsst+Ed265hBuCkgMR7gDpu89J7ZrVL6DzMKnNVFdgjl/9xwLj/pkukc7qeLSHjAfLlN0E4THW7PVshscQnjvXCkktG2Ejx9fTyllAqeGDh9z9QDGlQZIGTMgb9413qZhNqe2Tda9PTJRpiZ8b4bdQp6V1kVo= +SECTION ADDITIONAL +ENTRY_END + +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +SCENARIO_END From f44118408bb5a1bb4decd68d5faffa7e4487aac7 Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Tue, 24 Nov 2020 19:23:08 -0500 Subject: [PATCH 061/168] Make ICANN Update CA and DS Trust Key static data --- smallapp/unbound-anchor.c | 61 ++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/smallapp/unbound-anchor.c b/smallapp/unbound-anchor.c index a30523c76..9d0d46d9e 100644 --- a/smallapp/unbound-anchor.c +++ b/smallapp/unbound-anchor.c @@ -155,6 +155,36 @@ char* wsa_strerror(int err); #endif +static const char ICANN_UPDATE_CA[] = + /* The ICANN CA fetched at 24 Sep 2010. Valid to 2028 */ + "-----BEGIN CERTIFICATE-----\n" + "MIIDdzCCAl+gAwIBAgIBATANBgkqhkiG9w0BAQsFADBdMQ4wDAYDVQQKEwVJQ0FO\n" + "TjEmMCQGA1UECxMdSUNBTk4gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxFjAUBgNV\n" + "BAMTDUlDQU5OIFJvb3QgQ0ExCzAJBgNVBAYTAlVTMB4XDTA5MTIyMzA0MTkxMloX\n" + "DTI5MTIxODA0MTkxMlowXTEOMAwGA1UEChMFSUNBTk4xJjAkBgNVBAsTHUlDQU5O\n" + "IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRYwFAYDVQQDEw1JQ0FOTiBSb290IENB\n" + "MQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKDb\n" + "cLhPNNqc1NB+u+oVvOnJESofYS9qub0/PXagmgr37pNublVThIzyLPGCJ8gPms9S\n" + "G1TaKNIsMI7d+5IgMy3WyPEOECGIcfqEIktdR1YWfJufXcMReZwU4v/AdKzdOdfg\n" + "ONiwc6r70duEr1IiqPbVm5T05l1e6D+HkAvHGnf1LtOPGs4CHQdpIUcy2kauAEy2\n" + "paKcOcHASvbTHK7TbbvHGPB+7faAztABLoneErruEcumetcNfPMIjXKdv1V1E3C7\n" + "MSJKy+jAqqQJqjZoQGB0necZgUMiUv7JK1IPQRM2CXJllcyJrm9WFxY0c1KjBO29\n" + "iIKK69fcglKcBuFShUECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B\n" + "Af8EBAMCAf4wHQYDVR0OBBYEFLpS6UmDJIZSL8eZzfyNa2kITcBQMA0GCSqGSIb3\n" + "DQEBCwUAA4IBAQAP8emCogqHny2UYFqywEuhLys7R9UKmYY4suzGO4nkbgfPFMfH\n" + "6M+Zj6owwxlwueZt1j/IaCayoKU3QsrYYoDRolpILh+FPwx7wseUEV8ZKpWsoDoD\n" + "2JFbLg2cfB8u/OlE4RYmcxxFSmXBg0yQ8/IoQt/bxOcEEhhiQ168H2yE5rxJMt9h\n" + "15nu5JBSewrCkYqYYmaxyOC3WrVGfHZxVI7MpIFcGdvSb2a1uyuua8l0BKgk3ujF\n" + "0/wsHNeP22qNyVO+XVBzrM8fk8BSUFuiT/6tZTYXRtEt5aKQZgXbKU5dUF3jT9qg\n" + "j/Br5BZw3X/zd325TvnswzMC1+ljLzHnQGGk\n" + "-----END CERTIFICATE-----\n"; + +static const char DS_TRUST_ANCHOR[] = + /* The anchors must start on a new line with ". IN DS and end with \n"[;] + * because the makedist script greps on the source here */ + /* anchor 20326 is from 2017 */ + ". IN DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D\n"; + /** verbosity for this application */ static int verb = 0; @@ -213,41 +243,14 @@ usage(void) static const char* get_builtin_cert(void) { - return -/* The ICANN CA fetched at 24 Sep 2010. Valid to 2028 */ -"-----BEGIN CERTIFICATE-----\n" -"MIIDdzCCAl+gAwIBAgIBATANBgkqhkiG9w0BAQsFADBdMQ4wDAYDVQQKEwVJQ0FO\n" -"TjEmMCQGA1UECxMdSUNBTk4gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxFjAUBgNV\n" -"BAMTDUlDQU5OIFJvb3QgQ0ExCzAJBgNVBAYTAlVTMB4XDTA5MTIyMzA0MTkxMloX\n" -"DTI5MTIxODA0MTkxMlowXTEOMAwGA1UEChMFSUNBTk4xJjAkBgNVBAsTHUlDQU5O\n" -"IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRYwFAYDVQQDEw1JQ0FOTiBSb290IENB\n" -"MQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKDb\n" -"cLhPNNqc1NB+u+oVvOnJESofYS9qub0/PXagmgr37pNublVThIzyLPGCJ8gPms9S\n" -"G1TaKNIsMI7d+5IgMy3WyPEOECGIcfqEIktdR1YWfJufXcMReZwU4v/AdKzdOdfg\n" -"ONiwc6r70duEr1IiqPbVm5T05l1e6D+HkAvHGnf1LtOPGs4CHQdpIUcy2kauAEy2\n" -"paKcOcHASvbTHK7TbbvHGPB+7faAztABLoneErruEcumetcNfPMIjXKdv1V1E3C7\n" -"MSJKy+jAqqQJqjZoQGB0necZgUMiUv7JK1IPQRM2CXJllcyJrm9WFxY0c1KjBO29\n" -"iIKK69fcglKcBuFShUECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B\n" -"Af8EBAMCAf4wHQYDVR0OBBYEFLpS6UmDJIZSL8eZzfyNa2kITcBQMA0GCSqGSIb3\n" -"DQEBCwUAA4IBAQAP8emCogqHny2UYFqywEuhLys7R9UKmYY4suzGO4nkbgfPFMfH\n" -"6M+Zj6owwxlwueZt1j/IaCayoKU3QsrYYoDRolpILh+FPwx7wseUEV8ZKpWsoDoD\n" -"2JFbLg2cfB8u/OlE4RYmcxxFSmXBg0yQ8/IoQt/bxOcEEhhiQ168H2yE5rxJMt9h\n" -"15nu5JBSewrCkYqYYmaxyOC3WrVGfHZxVI7MpIFcGdvSb2a1uyuua8l0BKgk3ujF\n" -"0/wsHNeP22qNyVO+XVBzrM8fk8BSUFuiT/6tZTYXRtEt5aKQZgXbKU5dUF3jT9qg\n" -"j/Br5BZw3X/zd325TvnswzMC1+ljLzHnQGGk\n" -"-----END CERTIFICATE-----\n" - ; + return ICANN_UPDATE_CA; } /** return the built in root DS trust anchor */ static const char* get_builtin_ds(void) { - return -/* The anchors must start on a new line with ". IN DS and end with \n"[;] - * because the makedist script greps on the source here */ -/* anchor 20326 is from 2017 */ -". IN DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D\n"; + return DS_TRUST_ANCHOR; } /** print hex data */ From 328e8d22948f1641994d3b14a269b8321b26f29c Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Tue, 24 Nov 2020 19:24:48 -0500 Subject: [PATCH 062/168] Use size_t in place of int for length --- smallapp/unbound-anchor.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/smallapp/unbound-anchor.c b/smallapp/unbound-anchor.c index 9d0d46d9e..c4e9b3bfd 100644 --- a/smallapp/unbound-anchor.c +++ b/smallapp/unbound-anchor.c @@ -255,9 +255,9 @@ get_builtin_ds(void) /** print hex data */ static void -print_data(const char* msg, const char* data, int len) +print_data(const char* msg, const char* data, size_t len) { - int i; + size_t i; printf("%s: ", msg); for(i=0; i= 4) print_data("read data", data, (int)len); + if(verb >= 4) print_data("read data", data, len); m = BIO_new(BIO_s_mem()); if(!m) { if(verb) printf("out of memory\n"); From ddb751751cc2a1799c3b55d9af162e5b5950e178 Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Tue, 1 Dec 2020 15:19:17 +0100 Subject: [PATCH 063/168] NSID for Unbound --- util/config_file.c | 51 + util/config_file.h | 14 + util/configlexer.c | 4703 ++++++++++++++++++++-------------------- util/configlexer.lex | 1 + util/configparser.c | 4885 ++++++++++++++++++++---------------------- util/configparser.h | 625 +++--- util/configparser.y | 20 +- util/edns.c | 5 + 8 files changed, 5132 insertions(+), 5172 deletions(-) diff --git a/util/config_file.c b/util/config_file.c index 4c827b74e..6f662b6d9 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -237,6 +237,9 @@ config_create(void) cfg->hide_trustanchor = 0; cfg->identity = NULL; cfg->version = NULL; + cfg->nsid_cfg_str = NULL; + cfg->nsid = NULL; + cfg->nsid_len = 0; cfg->auto_trust_anchor_file_list = NULL; cfg->trust_anchor_file_list = NULL; cfg->trust_anchor_list = NULL; @@ -580,6 +583,20 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_YNO("hide-trustanchor:", hide_trustanchor) else S_STR("identity:", identity) else S_STR("version:", version) + else if(strcmp(opt, "nsid:") == 0) { + free(cfg->nsid_cfg_str); + if (!(cfg->nsid_cfg_str = strdup(val))) + return 0; + /* Empty string is just validly unsetting nsid */ + if (*val == 0) { + free(cfg->nsid); + cfg->nsid = NULL; + cfg->nsid_len = 0; + return 1; + } + cfg->nsid = cfg_parse_nsid(val, &cfg->nsid_len); + return cfg->nsid != NULL; + } else S_STRLIST("root-hints:", root_hints) else S_STR("target-fetch-policy:", target_fetch_policy) else S_YNO("harden-glue:", harden_glue) @@ -1015,6 +1032,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "hide-trustanchor", hide_trustanchor) else O_STR(opt, "identity", identity) else O_STR(opt, "version", version) + else O_STR(opt, "nsid", nsid_cfg_str) else O_STR(opt, "target-fetch-policy", target_fetch_policy) else O_YNO(opt, "harden-short-bufsize", harden_short_bufsize) else O_YNO(opt, "harden-large-queries", harden_large_queries) @@ -1482,6 +1500,8 @@ config_delete(struct config_file* cfg) #endif free(cfg->identity); free(cfg->version); + free(cfg->nsid_cfg_str); + free(cfg->nsid); free(cfg->module_conf); free(cfg->outgoing_avail_ports); config_delstrlist(cfg->caps_whitelist); @@ -2020,6 +2040,37 @@ uint8_t* config_parse_taglist(struct config_file* cfg, char* str, return taglist; } +uint8_t* cfg_parse_nsid(const char* str, uint16_t* nsid_len) +{ + uint8_t* nsid = NULL; + + if (strncasecmp(str, "ascii_", 6) == 0) { + if ((nsid = (uint8_t *)strdup(str + 6))) + *nsid_len = strlen(str + 6); + + } else if (strlen(str) % 2) + ; /* hex string has even number of characters */ + + else if (*str && (nsid = calloc(1, strlen(str) / 2))) { + const char *ch; + uint8_t *dp; + + for ( ch = str, dp = nsid + ; isxdigit(ch[0]) && isxdigit(ch[1]) + ; ch += 2, dp++) { + *dp = (uint8_t)sldns_hexdigit_to_int(ch[0]) * 16; + *dp += (uint8_t)sldns_hexdigit_to_int(ch[1]); + } + if (*ch) { + free(nsid); + nsid = NULL; + } else + *nsid_len = strlen(str) / 2; + } + return nsid; +} + + char* config_taglist2str(struct config_file* cfg, uint8_t* taglist, size_t taglen) { diff --git a/util/config_file.h b/util/config_file.h index 556544021..05b12fbaa 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -338,6 +338,10 @@ struct config_file { char* identity; /** version, package version returned if "". */ char* version; + /** nsid */ + char *nsid_cfg_str; + uint8_t *nsid; + uint16_t nsid_len; /** the module configuration string */ char* module_conf; @@ -1070,6 +1074,16 @@ int cfg_count_numbers(const char* str); */ int cfg_parse_memsize(const char* str, size_t* res); +/** + * Parse nsid from string into binary nsid. nsid is either a hexidecimal + * string or an ascii string prepended with ascii_ in which case the + * characters after ascii_ are simply copied. + * @param str: the string to parse. + * @param nsid_len: returns length of nsid in bytes. + * @return malloced bytes or NULL on parse error or malloc failure. + */ +uint8_t* cfg_parse_nsid(const char* str, uint16_t* nsid_len); + /** * Add a tag name to the config. It is added at the end with a new ID value. * @param cfg: the config structure. diff --git a/util/configlexer.c b/util/configlexer.c index f845e2057..4235cd04a 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -1,7 +1,7 @@ #include "config.h" #include "util/configyyrename.h" -#line 2 "" +#line 3 "" #define YY_INT_ALIGNED short int @@ -354,8 +354,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 337 -#define YY_END_OF_BUFFER 338 +#define YY_NUM_RULES 338 +#define YY_END_OF_BUFFER 339 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,370 +363,370 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[3292] = +static const flex_int16_t yy_accept[3296] = { 0, - 1, 1, 311, 311, 315, 315, 319, 319, 323, 323, - 1, 1, 327, 327, 331, 331, 338, 335, 1, 309, - 309, 336, 2, 336, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 311, 312, 312, 313, - 336, 315, 316, 316, 317, 336, 322, 319, 320, 320, - 321, 336, 323, 324, 324, 325, 336, 334, 310, 2, - 314, 336, 334, 330, 327, 328, 328, 329, 336, 331, - 332, 332, 333, 336, 335, 0, 1, 2, 2, 2, - 2, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 1, 1, 312, 312, 316, 316, 320, 320, 324, 324, + 1, 1, 328, 328, 332, 332, 339, 336, 1, 310, + 310, 337, 2, 337, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 312, 313, 313, 314, + 337, 316, 317, 317, 318, 337, 323, 320, 321, 321, + 322, 337, 324, 325, 325, 326, 337, 335, 311, 2, + 315, 337, 335, 331, 328, 329, 329, 330, 337, 332, + 333, 333, 334, 337, 336, 0, 1, 2, 2, 2, + 2, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 311, 0, 315, - 0, 322, 0, 319, 323, 0, 334, 0, 2, 2, - 334, 330, 0, 327, 331, 0, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 312, 0, + 316, 0, 323, 0, 320, 324, 0, 335, 0, 2, + 2, 335, 331, 0, 328, 332, 0, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 334, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 335, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 125, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 134, 335, 335, 335, 335, 335, 335, - 335, 334, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 125, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 134, 336, 336, 336, + 336, 336, 336, 336, 335, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 109, 335, 335, 335, 335, 335, 335, 8, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 126, 335, 335, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 109, 336, 309, 336, 336, 336, 336, + 336, 8, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 139, 335, - 334, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 302, 335, + 336, 126, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 139, 336, 335, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 336, 336, 302, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 334, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 64, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 238, - 335, 14, 15, 335, 19, 18, 335, 335, 222, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 132, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 336, 336, 336, 336, 336, 335, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 64, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 238, 336, 14, 15, 336, 19, 18, + 336, 336, 222, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 132, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 220, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 3, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 334, 335, 335, 335, - 335, 335, 335, 335, 296, 335, 335, 295, 335, 335, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 220, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 3, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 335, 336, 336, 336, 336, 336, 336, 336, 296, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 318, 335, 335, 335, 335, - 335, 335, 335, 335, 63, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 67, 335, 269, 335, 335, 335, 335, 335, 335, - 335, 335, 303, 304, 335, 335, 335, 335, 335, 68, + 336, 295, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 319, + 336, 336, 336, 336, 336, 336, 336, 336, 63, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 67, 336, 269, 336, 336, + 336, 336, 336, 336, 336, 336, 303, 304, 336, 336, - 335, 335, 133, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 129, 335, 335, - 335, 335, 335, 335, 335, 335, 209, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 21, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 158, 335, 335, - 334, 318, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 336, 336, 336, 68, 336, 336, 133, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 129, 336, 336, 336, 336, 336, 336, 336, 336, + 209, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 21, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 158, 336, 336, 335, 319, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 107, 335, 335, 335, 335, 335, 335, - 335, 277, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 181, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 157, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 336, 336, 336, 336, 336, 336, 336, 107, 336, 336, + 336, 336, 336, 336, 336, 277, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 181, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 157, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 106, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 32, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 33, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 65, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 131, 334, 335, 335, - 335, 335, 335, 124, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 66, + 336, 336, 336, 336, 336, 336, 106, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 32, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 33, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 65, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 131, 335, 336, 336, 336, 336, 336, 124, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 242, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 182, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 54, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 336, 336, 336, 66, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 242, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 182, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 54, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 260, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 58, 335, 59, 335, 335, 335, - 335, 335, 110, 335, 111, 335, 335, 335, 335, 108, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 7, - 335, 334, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 260, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 58, 336, + 59, 336, 336, 336, 336, 336, 110, 336, 111, 336, + 336, 336, 336, 108, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 7, 336, 335, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 231, 335, 335, 335, 335, 160, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 243, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 45, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 55, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 201, 335, 200, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 336, 336, 336, 336, 231, 336, 336, 336, 336, 160, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 243, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 45, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 55, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 201, 336, + 200, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 16, 17, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 69, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 208, 335, 335, 335, 335, 335, 335, 113, 335, 112, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 192, 335, 335, 335, 335, 335, 335, 335, - 335, 140, 334, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 101, 335, 335, 335, 335, 335, 335, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 16, 17, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 69, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 208, 336, 336, 336, 336, 336, + 336, 113, 336, 112, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 192, 336, 336, 336, + 336, 336, 336, 336, 336, 140, 335, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 101, 336, 336, - 335, 335, 335, 89, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 221, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 94, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 62, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 195, - 196, 335, 335, 335, 271, 335, 335, 335, 335, 335, + 336, 336, 336, 336, 336, 336, 336, 89, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 221, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 94, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 62, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 195, 196, 336, 336, 336, 271, 336, - 335, 335, 335, 335, 335, 335, 335, 6, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 275, - 335, 335, 335, 335, 335, 335, 297, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 42, 335, 335, - 335, 335, 44, 335, 335, 335, 90, 335, 335, 335, - 335, 335, 52, 335, 335, 335, 335, 335, 335, 335, - 334, 335, 188, 335, 335, 335, 135, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 213, 335, 189, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 6, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 275, 336, 336, 336, 336, 336, 336, + 297, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 42, 336, 336, 336, 336, 44, 336, 336, 336, + 90, 336, 336, 336, 336, 336, 52, 336, 336, 336, + 336, 336, 336, 336, 335, 336, 188, 336, 336, 336, + 135, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 228, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 53, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 137, 118, 335, 119, 335, - 335, 335, 117, 335, 335, 335, 335, 335, 335, 335, - 335, 155, 335, 335, 50, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 259, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 190, 335, 335, 335, 335, 335, 193, 335, 199, - 335, 335, 335, 335, 335, 227, 335, 335, 335, 335, + 336, 213, 336, 189, 336, 336, 336, 228, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 53, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 137, + 118, 336, 119, 336, 336, 336, 117, 336, 336, 336, + 336, 336, 336, 336, 336, 155, 336, 336, 50, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 259, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 190, 336, 336, 336, 336, + 336, 193, 336, 199, 336, 336, 336, 336, 336, 227, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 105, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 130, - 335, 335, 335, 335, 335, 335, 60, 335, 335, 335, - 26, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 20, 335, 335, 335, 335, 335, 335, 27, 36, 335, - 165, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 334, 335, 335, 335, 335, 335, - 335, 77, 79, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 279, 335, 335, 335, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 105, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 130, 336, 336, 336, 336, 336, 336, + 60, 336, 336, 336, 26, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 20, 336, 336, 336, 336, 336, + 336, 27, 36, 336, 165, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 335, 336, + 336, 336, 336, 336, 336, 77, 79, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 239, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 120, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 154, 335, 46, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 290, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 159, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 219, 335, 335, 335, 335, 335, 335, 335, 335, + 279, 336, 336, 336, 336, 239, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 120, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 154, 336, + 46, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 290, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 159, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 219, 336, 336, 336, 336, - 335, 300, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 176, 335, 335, 335, 335, 335, 335, - 335, 335, 114, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 171, 335, 183, 335, 335, 335, 335, 334, - 335, 143, 335, 335, 335, 335, 335, 100, 335, 335, - 335, 335, 211, 335, 335, 335, 335, 335, 335, 229, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 251, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 136, 335, 335, + 336, 336, 336, 336, 336, 300, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 176, 336, 336, + 336, 336, 336, 336, 336, 336, 114, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 171, 336, 183, 336, + 336, 336, 336, 335, 336, 143, 336, 336, 336, 336, + 336, 100, 336, 336, 336, 336, 211, 336, 336, 336, + 336, 336, 336, 229, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 251, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 175, 335, 335, 335, 335, 335, 335, 80, - 335, 81, 335, 335, 335, 335, 335, 61, 293, 335, - 335, 335, 335, 335, 88, 184, 335, 202, 335, 232, - 335, 335, 194, 272, 335, 335, 335, 335, 335, 73, - 335, 186, 335, 335, 335, 335, 335, 9, 335, 335, - 335, 104, 335, 335, 335, 335, 264, 335, 335, 335, - 335, 210, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 336, 136, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 175, 336, 336, 336, + 336, 336, 336, 80, 336, 81, 336, 336, 336, 336, + 336, 61, 293, 336, 336, 336, 336, 336, 88, 184, + 336, 202, 336, 232, 336, 336, 194, 272, 336, 336, + 336, 336, 336, 73, 336, 186, 336, 336, 336, 336, + 336, 9, 336, 336, 336, 104, 336, 336, 336, 336, + 264, 336, 336, 336, 336, 210, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 334, 335, 335, - 335, 335, 174, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 161, 335, 278, 335, 335, 335, 335, - 335, 250, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 223, 335, 335, 335, 335, 335, 270, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 294, 335, 185, 335, 335, 335, 335, 335, 335, 335, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 335, 336, 336, 336, 336, 174, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 161, 336, 278, + 336, 336, 336, 336, 336, 250, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 223, 336, 336, + 336, 336, 336, 270, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 294, 336, 185, 336, 336, 336, - 72, 74, 335, 335, 335, 335, 335, 335, 335, 103, - 335, 335, 335, 335, 262, 335, 335, 335, 335, 274, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 215, 34, 28, 30, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 35, 335, 29, 31, 335, 335, - 335, 335, 335, 335, 335, 335, 99, 335, 335, 335, - 335, 335, 335, 334, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 217, 214, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 71, 335, 335, 335, 138, + 336, 336, 336, 336, 72, 74, 336, 336, 336, 336, + 336, 336, 336, 103, 336, 336, 336, 336, 262, 336, + 336, 336, 336, 274, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 215, 34, 28, 30, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 35, 336, + 29, 31, 336, 336, 336, 336, 336, 336, 336, 336, + 99, 336, 336, 336, 336, 336, 336, 335, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 217, + 214, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 71, - 335, 121, 335, 335, 335, 335, 335, 335, 335, 335, - 156, 47, 335, 335, 335, 326, 13, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 288, 335, 291, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 12, 335, 335, 22, 335, 335, 335, 268, 335, 335, - 335, 335, 276, 335, 335, 335, 75, 335, 225, 335, - 335, 335, 335, 216, 335, 335, 70, 335, 335, 335, - 335, 23, 335, 43, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 170, 169, 326, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 218, 212, + 336, 336, 336, 138, 336, 121, 336, 336, 336, 336, + 336, 336, 336, 336, 156, 47, 336, 336, 336, 327, + 13, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 288, 336, 291, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 12, 336, 336, 22, 336, 336, + 336, 268, 336, 336, 336, 336, 276, 336, 336, 336, + 75, 336, 225, 336, 336, 336, 336, 216, 336, 336, + 70, 336, 336, 336, 336, 23, 336, 43, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 170, 169, 327, 336, 336, 336, 336, 336, 336, 336, - 335, 230, 335, 335, 280, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 82, 335, 335, - 335, 335, 263, 335, 335, 335, 335, 198, 335, 335, - 335, 335, 224, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 298, 299, 167, 335, 335, 76, 335, 335, - 335, 335, 177, 335, 335, 115, 116, 335, 335, 335, - 335, 162, 335, 164, 335, 203, 335, 335, 335, 335, - 168, 335, 335, 233, 335, 335, 335, 335, 335, 335, + 336, 336, 218, 212, 336, 230, 336, 336, 280, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 82, 336, 336, 336, 336, 263, 336, 336, 336, + 336, 198, 336, 336, 336, 336, 224, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 298, 299, 167, 336, + 336, 76, 336, 336, 336, 336, 177, 336, 336, 115, + 116, 336, 336, 336, 336, 162, 336, 164, 336, 203, + 336, 336, 336, 336, 168, 336, 336, 233, 336, 336, - 335, 145, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 241, 335, 335, 335, 335, 335, - 335, 335, 307, 335, 24, 335, 273, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 86, 204, 335, 335, 261, 335, 292, 335, 197, - 335, 335, 335, 335, 56, 335, 335, 335, 335, 4, - 335, 335, 335, 335, 128, 144, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 236, 37, 38, 335, 335, 335, - 335, 335, 335, 335, 281, 335, 335, 335, 335, 335, + 336, 336, 336, 336, 336, 145, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 241, 336, + 336, 336, 336, 336, 336, 336, 307, 336, 24, 336, + 273, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 86, 204, 336, 336, 261, + 336, 292, 336, 197, 336, 336, 336, 336, 56, 336, + 336, 336, 336, 4, 336, 336, 336, 336, 128, 144, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 236, 37, + 38, 336, 336, 336, 336, 336, 336, 336, 281, 336, - 335, 335, 249, 335, 335, 335, 335, 335, 335, 335, - 335, 207, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 85, 335, 57, 267, 335, 237, - 335, 335, 335, 335, 11, 335, 335, 335, 335, 335, - 335, 127, 335, 335, 335, 335, 205, 91, 335, 40, - 335, 335, 335, 335, 335, 335, 335, 335, 173, 335, - 335, 335, 335, 335, 147, 335, 335, 335, 335, 240, - 335, 335, 335, 335, 335, 248, 335, 335, 335, 335, - 141, 335, 335, 335, 122, 123, 335, 335, 335, 93, - 97, 92, 335, 335, 335, 335, 83, 335, 335, 335, + 336, 336, 336, 336, 336, 336, 249, 336, 336, 336, + 336, 336, 336, 336, 336, 207, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 85, 336, + 57, 267, 336, 237, 336, 336, 336, 336, 11, 336, + 336, 336, 336, 336, 336, 127, 336, 336, 336, 336, + 205, 91, 336, 40, 336, 336, 336, 336, 336, 336, + 336, 336, 173, 336, 336, 336, 336, 336, 147, 336, + 336, 336, 336, 240, 336, 336, 336, 336, 336, 248, + 336, 336, 336, 336, 141, 336, 336, 336, 122, 123, + 336, 336, 336, 93, 97, 92, 336, 336, 336, 336, - 335, 335, 10, 335, 335, 335, 265, 301, 335, 335, - 335, 335, 306, 39, 335, 335, 335, 335, 335, 172, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 98, 96, 335, 51, 335, 335, 84, - 289, 335, 335, 335, 335, 335, 335, 335, 191, 335, - 335, 335, 335, 335, 206, 335, 335, 335, 335, 335, - 335, 335, 335, 163, 78, 335, 335, 335, 335, 335, - 282, 335, 335, 335, 335, 335, 335, 335, 245, 335, - 335, 244, 142, 335, 335, 95, 48, 335, 148, 149, + 83, 336, 336, 336, 336, 336, 10, 336, 336, 336, + 265, 301, 336, 336, 336, 336, 306, 39, 336, 336, + 336, 336, 336, 172, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 98, 96, 336, + 51, 336, 336, 84, 289, 336, 336, 336, 336, 336, + 336, 336, 191, 336, 336, 336, 336, 336, 206, 336, + 336, 336, 336, 336, 336, 336, 336, 163, 78, 336, + 336, 336, 336, 336, 282, 336, 336, 336, 336, 336, + 336, 336, 245, 336, 336, 244, 142, 336, 336, 95, - 152, 153, 150, 151, 87, 335, 266, 335, 335, 335, - 335, 166, 335, 335, 335, 335, 335, 235, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 179, 178, 41, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 102, 335, 234, 335, - 258, 286, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 308, 335, 49, 5, 335, 335, 226, - 335, 335, 287, 335, 335, 335, 335, 335, 335, 335, + 48, 336, 148, 149, 152, 153, 150, 151, 87, 336, + 266, 336, 336, 336, 336, 166, 336, 336, 336, 336, + 336, 235, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 179, 178, 41, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 102, 336, 234, 336, 258, 286, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 308, 336, 49, + 5, 336, 336, 226, 336, 336, 287, 336, 336, 336, - 335, 335, 246, 25, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 247, 335, 335, 335, - 146, 335, 335, 335, 335, 335, 335, 335, 335, 180, - 335, 187, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 283, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 305, - 335, 335, 254, 335, 335, 335, 335, 335, 284, 335, - 335, 335, 335, 335, 335, 285, 335, 335, 335, 252, - 335, 255, 256, 335, 335, 335, 335, 335, 253, 257, - 0 + 336, 336, 336, 336, 336, 336, 246, 25, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 247, 336, 336, 336, 146, 336, 336, 336, 336, 336, + 336, 336, 336, 180, 336, 187, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 283, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 305, 336, 336, 254, 336, 336, 336, + 336, 336, 284, 336, 336, 336, 336, 336, 336, 285, + 336, 336, 336, 252, 336, 255, 256, 336, 336, 336, + 336, 336, 253, 257, 0 } ; @@ -770,743 +770,745 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[3310] = +static const flex_int16_t yy_base[3314] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 96, 118, 124, 136, 3493, 3402, 81, 6426, - 6426, 6426, 129, 52, 130, 63, 131, 152, 70, 140, + 90, 112, 96, 118, 124, 136, 2992, 2881, 81, 6437, + 6437, 6437, 129, 52, 130, 63, 131, 152, 70, 140, 149, 156, 57, 88, 76, 173, 175, 95, 184, 145, - 185, 205, 194, 204, 178, 123, 3176, 6426, 6426, 6426, - 107, 2960, 6426, 6426, 6426, 154, 2373, 2342, 6426, 6426, - 6426, 226, 2208, 6426, 6426, 6426, 163, 2071, 6426, 238, - 6426, 242, 148, 1858, 1710, 6426, 6426, 6426, 246, 1553, - 6426, 6426, 6426, 250, 1440, 254, 219, 0, 258, 0, - 0, 165, 250, 191, 215, 243, 252, 256, 92, 260, + 185, 205, 211, 217, 178, 123, 2560, 6437, 6437, 6437, + 107, 2496, 6437, 6437, 6437, 154, 2163, 1764, 6437, 6437, + 6437, 249, 1649, 6437, 6437, 6437, 163, 1451, 6437, 253, + 6437, 257, 148, 1354, 1226, 6437, 6437, 6437, 261, 1170, + 6437, 6437, 6437, 207, 1091, 267, 203, 0, 271, 0, + 0, 165, 204, 215, 206, 207, 216, 265, 92, 263, - 261, 262, 264, 265, 266, 273, 270, 277, 278, 281, - 271, 279, 290, 288, 296, 295, 299, 310, 303, 306, - 313, 314, 307, 323, 317, 312, 328, 326, 330, 334, - 337, 340, 342, 343, 344, 346, 349, 354, 348, 356, - 364, 357, 361, 359, 372, 376, 365, 360, 377, 380, - 384, 385, 387, 388, 391, 399, 389, 1400, 411, 1086, - 415, 984, 422, 871, 689, 426, 406, 430, 434, 0, - 411, 280, 438, 233, 181, 442, 430, 442, 419, 438, - 439, 441, 440, 443, 444, 445, 446, 449, 463, 455, - 456, 467, 471, 472, 469, 476, 474, 460, 482, 488, + 269, 273, 256, 267, 276, 284, 277, 280, 282, 288, + 286, 290, 226, 292, 228, 296, 303, 311, 298, 313, + 321, 301, 315, 234, 319, 314, 332, 331, 333, 316, + 334, 337, 335, 342, 343, 348, 345, 354, 355, 350, + 356, 366, 359, 368, 371, 360, 379, 374, 377, 364, + 382, 389, 387, 388, 392, 395, 401, 394, 962, 412, + 919, 417, 872, 426, 749, 518, 430, 357, 434, 438, + 0, 415, 293, 442, 244, 181, 446, 434, 446, 405, + 441, 442, 443, 444, 445, 447, 448, 449, 451, 465, + 458, 463, 470, 467, 474, 475, 480, 473, 478, 482, - 484, 481, 491, 494, 495, 497, 502, 503, 505, 504, - 506, 507, 523, 510, 499, 509, 532, 530, 534, 539, - 535, 542, 544, 537, 551, 547, 554, 556, 557, 508, - 559, 546, 561, 549, 560, 563, 569, 570, 572, 573, - 575, 583, 580, 578, 584, 581, 592, 590, 597, 593, - 594, 598, 601, 604, 612, 616, 602, 623, 607, 614, - 624, 627, 635, 636, 631, 615, 632, 622, 639, 640, - 641, 642, 643, 651, 652, 644, 654, 662, 655, 657, - 660, 663, 664, 665, 673, 676, 680, 668, 684, 674, - 685, 687, 675, 683, 693, 695, 694, 697, 707, 700, + 486, 476, 490, 498, 499, 500, 493, 501, 502, 504, + 506, 507, 508, 522, 520, 511, 514, 533, 534, 538, + 543, 529, 545, 547, 536, 552, 548, 560, 551, 564, + 559, 550, 561, 562, 565, 568, 569, 570, 573, 575, + 572, 576, 574, 586, 588, 579, 591, 589, 602, 598, + 605, 600, 601, 409, 603, 607, 610, 615, 608, 618, + 613, 619, 623, 629, 632, 636, 635, 621, 634, 631, + 638, 640, 641, 642, 645, 652, 655, 651, 653, 665, + 660, 662, 663, 664, 666, 667, 677, 669, 680, 683, + 673, 679, 685, 687, 689, 691, 690, 694, 695, 699, - 708, 709, 710, 712, 717, 715, 719, 727, 705, 722, - 723, 605, 728, 731, 724, 726, 732, 735, 736, 738, - 745, 743, 747, 749, 750, 766, 754, 739, 759, 767, - 758, 760, 768, 774, 793, 779, 781, 789, 790, 791, - 795, 797, 805, 807, 796, 809, 803, 810, 812, 813, - 822, 818, 6426, 817, 820, 833, 826, 834, 835, 836, - 841, 842, 823, 849, 847, 848, 852, 874, 856, 863, - 854, 864, 858, 6426, 867, 868, 898, 881, 871, 889, - 885, 878, 887, 892, 894, 902, 911, 904, 908, 909, - 922, 915, 919, 924, 918, 927, 925, 935, 936, 931, + 702, 700, 707, 709, 716, 713, 718, 715, 727, 728, + 703, 712, 724, 725, 731, 726, 733, 735, 736, 740, + 741, 743, 746, 744, 754, 750, 752, 767, 759, 757, + 760, 769, 770, 778, 771, 792, 799, 777, 763, 788, + 781, 797, 800, 802, 807, 803, 810, 813, 814, 815, + 816, 817, 818, 826, 822, 6437, 821, 824, 836, 838, + 839, 842, 832, 848, 831, 852, 855, 857, 854, 862, + 884, 858, 860, 861, 873, 866, 6437, 874, 868, 908, + 879, 886, 897, 892, 904, 870, 899, 906, 890, 918, + 902, 901, 916, 932, 929, 913, 917, 931, 935, 938, - 934, 941, 948, 943, 945, 947, 956, 949, 950, 957, - 958, 769, 960, 967, 970, 964, 959, 975, 976, 977, - 979, 982, 983, 987, 985, 998, 1005, 999, 1012, 986, - 1010, 1011, 1014, 1013, 1019, 1020, 1022, 1024, 1025, 1027, - 1028, 1032, 1033, 1031, 1034, 1036, 1038, 1044, 1042, 1047, - 1048, 1049, 1056, 1058, 1051, 1064, 1052, 1050, 1068, 1060, - 6426, 1072, 1070, 1075, 1076, 1074, 1077, 6426, 1078, 1079, - 1080, 1081, 1090, 1092, 1093, 1099, 1088, 1103, 1105, 1106, - 1107, 1115, 1110, 1113, 1118, 1117, 1119, 1121, 1123, 1125, - 1127, 1126, 1128, 1134, 1135, 1138, 1155, 6426, 1137, 1145, + 945, 941, 943, 944, 947, 954, 949, 950, 955, 967, + 951, 957, 959, 958, 968, 976, 977, 980, 982, 969, + 985, 986, 987, 989, 992, 993, 997, 995, 1008, 990, + 1009, 1021, 1016, 1017, 1020, 1019, 1025, 1026, 1027, 1029, + 1032, 1033, 1034, 1035, 1045, 1040, 1041, 1043, 1048, 1049, + 1050, 1055, 1052, 1057, 1058, 1060, 1061, 1062, 1068, 1066, + 1073, 1076, 1078, 6437, 1079, 6437, 1081, 1082, 1083, 1084, + 1085, 6437, 1087, 1088, 1089, 1096, 1099, 1086, 1114, 1098, + 1101, 1111, 1113, 1112, 1117, 1124, 1120, 1125, 1127, 1123, + 1129, 1130, 1133, 1131, 1136, 1138, 1139, 1142, 1143, 1146, - 1142, 1139, 1148, 1149, 1167, 1147, 1165, 1166, 1159, 1179, - 1177, 1178, 1180, 1186, 1187, 1188, 1190, 1195, 1191, 1140, - 1193, 1197, 1198, 1199, 1201, 1200, 1202, 1205, 6426, 1203, - 1214, 1227, 1213, 1222, 1223, 1224, 1226, 1228, 1229, 1230, - 1232, 1231, 1236, 1240, 1251, 1235, 1254, 1249, 1250, 1252, - 1256, 1257, 1260, 1258, 1259, 1270, 1265, 1273, 1280, 1282, - 1284, 1286, 1287, 1294, 1268, 1290, 1292, 1291, 1297, 1298, - 1300, 1299, 1301, 1307, 1305, 1314, 1311, 1310, 1312, 1313, - 1318, 1320, 1321, 1325, 1322, 1323, 1337, 1329, 1332, 1333, - 1339, 1347, 1340, 1349, 1350, 1351, 1352, 1353, 6426, 1360, + 1163, 6437, 1147, 1150, 1151, 1149, 1156, 1157, 1175, 1166, + 1173, 1174, 1176, 1192, 1187, 1188, 1191, 1195, 1196, 1198, + 1200, 1205, 1207, 1148, 1208, 1201, 1209, 1210, 1203, 1211, + 1213, 1221, 6437, 1217, 1229, 1238, 1224, 1219, 1235, 1237, + 1240, 1239, 1241, 1243, 1242, 1246, 1250, 1248, 1259, 1249, + 1266, 1252, 1262, 1263, 1267, 1268, 1269, 1271, 1275, 1284, + 1276, 1286, 1293, 1294, 1296, 1298, 1305, 1307, 1279, 1302, + 1308, 1304, 1303, 1310, 1312, 1316, 1313, 1319, 1320, 1323, + 1325, 1326, 1327, 1328, 1330, 1333, 1334, 1335, 1337, 1339, + 1347, 1345, 1343, 1358, 1346, 1351, 1349, 1356, 1360, 1363, - 1361, 1359, 1363, 1364, 1371, 1372, 1375, 1376, 1373, 1379, - 1378, 1381, 1385, 1386, 1387, 1382, 1388, 1390, 1399, 1403, - 1404, 1413, 1405, 1412, 1396, 1415, 1422, 1418, 1425, 1421, - 1420, 1426, 1433, 1428, 1430, 1434, 1442, 1437, 1435, 1446, - 1438, 1447, 1450, 1449, 1461, 1459, 1460, 1469, 1472, 1462, - 1464, 1470, 1474, 1475, 1477, 1478, 1479, 1480, 1488, 1481, - 1483, 1484, 1486, 1490, 1491, 1494, 1497, 1509, 1502, 1505, - 1504, 1507, 1511, 1513, 1514, 1518, 1519, 1520, 1522, 1521, - 1524, 1528, 1529, 1533, 1534, 1540, 1541, 1542, 1544, 1547, - 1548, 1551, 1550, 1559, 1561, 1549, 1562, 1565, 1568, 1570, + 1362, 1371, 6437, 1379, 1374, 1375, 1377, 1380, 1384, 1388, + 1382, 1389, 782, 1391, 1390, 1392, 1397, 1399, 1394, 1400, + 1401, 1402, 1411, 1409, 1417, 1421, 1422, 1423, 1406, 1426, + 1433, 1429, 1436, 1432, 1431, 1437, 1444, 1439, 1441, 1445, + 1453, 1448, 1446, 1457, 1449, 1458, 1274, 1460, 1472, 1461, + 1470, 1477, 1479, 1468, 1481, 1482, 1484, 1474, 1485, 1487, + 1488, 1489, 1496, 1491, 1497, 1498, 1499, 1494, 1500, 1504, + 1502, 1521, 1508, 1511, 1510, 1518, 1520, 1525, 1526, 1527, + 1528, 1530, 1531, 1534, 1532, 1535, 1538, 1540, 1544, 1550, + 1551, 1541, 1553, 1554, 1558, 1561, 1562, 1563, 1570, 1560, - 1571, 1572, 1573, 1580, 1575, 1578, 1581, 1585, 1586, 1591, - 1592, 1595, 1597, 1600, 6426, 1598, 1610, 1588, 1611, 1606, - 1603, 1605, 1619, 1612, 1614, 1616, 1622, 1624, 1648, 6426, - 1625, 6426, 6426, 315, 6426, 6426, 1626, 1627, 6426, 1630, - 1629, 1639, 1637, 1631, 1642, 1645, 1646, 1649, 1651, 1658, - 1672, 1654, 1661, 1662, 1665, 1675, 1677, 1678, 1666, 1686, - 1687, 1689, 1694, 1695, 1703, 1696, 1700, 1706, 1708, 1714, - 1710, 1719, 1720, 1709, 1716, 1723, 1724, 1726, 1725, 1728, - 1731, 1734, 1736, 1732, 1730, 1738, 1747, 1749, 1740, 1757, - 6426, 1753, 1761, 1765, 1762, 1769, 1768, 1764, 1766, 1773, + 1573, 1574, 1571, 1577, 1576, 1579, 1587, 1589, 1581, 1582, + 1592, 1594, 1596, 1598, 1600, 1603, 1599, 1605, 6437, 1606, + 1616, 1611, 1615, 1612, 1613, 1618, 1626, 1621, 1623, 1622, + 1627, 1628, 1653, 6437, 1632, 6437, 6437, 1633, 6437, 6437, + 1634, 1635, 6437, 1639, 1637, 1644, 1657, 1663, 1666, 1659, + 1651, 1642, 1654, 1677, 1678, 1676, 1668, 1683, 1684, 1686, + 1687, 1693, 1692, 1694, 1695, 1699, 1706, 1708, 1703, 1712, + 1713, 1716, 1714, 1721, 1723, 1726, 1729, 1722, 1730, 1732, + 1733, 1735, 1737, 1738, 1740, 1742, 1743, 1741, 1746, 1747, + 1757, 1760, 1762, 1772, 6437, 1763, 1770, 1773, 1774, 1781, - 1776, 1777, 1778, 1779, 1780, 1781, 1783, 1743, 1786, 1789, - 1797, 1790, 6426, 1792, 1793, 1795, 1798, 1799, 1804, 1805, - 1806, 1811, 1812, 1813, 1823, 1814, 1816, 1818, 1824, 1825, - 1827, 6426, 1832, 1829, 1835, 1839, 1840, 1842, 1843, 1845, - 1846, 1841, 1847, 1848, 1851, 1853, 1860, 1855, 1859, 1857, - 1865, 1868, 1873, 1875, 1878, 1881, 1882, 1883, 1884, 1885, - 1886, 1888, 1889, 1896, 1899, 1897, 1900, 1898, 1895, 1910, - 1919, 1902, 1914, 1916, 1917, 1918, 1920, 1929, 1924, 1925, - 1931, 1932, 1930, 1935, 1937, 1940, 1947, 1938, 1948, 1956, - 1942, 1949, 1954, 1951, 6426, 1958, 1960, 6426, 1962, 1961, + 1777, 1776, 1778, 1784, 1788, 1785, 1789, 1790, 1791, 1792, + 1797, 1794, 1800, 1802, 1805, 1804, 6437, 1806, 1809, 1810, + 1812, 1813, 1816, 1820, 1814, 1821, 1824, 1826, 1836, 1831, + 1827, 1829, 1838, 1837, 1840, 6437, 1748, 1845, 1841, 1849, + 1850, 1852, 1853, 1855, 1856, 1857, 1858, 1859, 1860, 1864, + 1874, 1870, 1875, 1865, 1880, 1882, 1885, 1886, 1890, 1892, + 1893, 1895, 1896, 1897, 1898, 1900, 1901, 1909, 1911, 1908, + 1913, 1910, 1906, 1929, 1931, 1914, 1916, 1927, 1928, 1930, + 1936, 1938, 1940, 1934, 1941, 1948, 1944, 1946, 1949, 1950, + 1959, 1956, 1957, 1962, 1960, 1965, 1968, 1969, 6437, 1966, - 1963, 1985, 1965, 1967, 1968, 1973, 1977, 1976, 1978, 1986, - 1987, 1989, 2005, 1998, 1995, 2008, 2010, 2011, 1979, 2013, - 2014, 2015, 2017, 2020, 2021, 2030, 2038, 2039, 2023, 2042, - 2040, 1997, 2041, 2043, 2062, 2044, 2045, 2051, 2046, 2047, - 2049, 2059, 2052, 2053, 2055, 2057, 2075, 2078, 2077, 2079, - 2064, 2084, 2086, 2087, 2090, 6426, 2098, 2093, 2094, 2095, - 2099, 2107, 2103, 2104, 6426, 2105, 2106, 2109, 2117, 2118, - 2116, 2119, 2120, 2122, 2121, 2126, 2128, 2130, 2142, 2129, - 2149, 6426, 2131, 6426, 2144, 2132, 2134, 2145, 2133, 2150, - 2155, 2156, 6426, 6426, 2157, 2154, 2166, 2170, 2168, 6426, + 1970, 6437, 1974, 1972, 1975, 1997, 1976, 1979, 1978, 1981, + 1986, 1991, 1989, 1998, 1994, 2001, 2020, 2007, 2003, 2005, + 2010, 2022, 2023, 2024, 2026, 2028, 2030, 2032, 2033, 2031, + 2048, 2051, 2047, 2043, 2056, 2052, 2034, 2054, 2075, 2055, + 2057, 2059, 2058, 2060, 2063, 2069, 2064, 2065, 2066, 2071, + 2086, 2088, 2079, 2082, 2090, 2092, 2097, 2098, 2099, 6437, + 2109, 2104, 2105, 2108, 2112, 2117, 2115, 2114, 6437, 2118, + 2121, 2116, 2128, 2126, 2123, 2129, 2131, 2136, 2137, 2140, + 2138, 2139, 2143, 2141, 2159, 6437, 2144, 6437, 2154, 2145, + 2155, 2156, 2146, 2161, 2162, 2166, 6437, 6437, 2172, 2169, - 2169, 2177, 6426, 2174, 2179, 2172, 2173, 2180, 2183, 2184, - 2187, 2194, 2189, 2198, 2190, 2195, 2199, 6426, 2203, 2191, - 2210, 2211, 2204, 2214, 2217, 2218, 6426, 2221, 2207, 2225, - 2232, 2229, 2224, 2234, 2235, 2236, 2239, 2240, 2241, 2242, - 2243, 2250, 2253, 2246, 2249, 2255, 2264, 6426, 2248, 2262, - 2269, 2265, 2268, 2271, 2272, 2273, 2274, 2275, 2276, 2277, - 2284, 2283, 2285, 2286, 2296, 2298, 2287, 2294, 2304, 2295, - 2306, 2300, 2311, 2308, 2309, 2310, 2313, 6426, 2315, 2317, - 2319, 171, 2321, 2322, 2324, 2323, 2331, 2333, 2325, 2347, - 2348, 2327, 2344, 2350, 2346, 2353, 2354, 2355, 2356, 2357, + 2179, 2181, 2173, 6437, 2182, 2189, 6437, 2190, 2184, 2185, + 2192, 2193, 2195, 2197, 2196, 2206, 2201, 2208, 2203, 2214, + 2215, 6437, 2204, 2205, 2217, 2220, 2216, 2223, 2230, 2224, + 6437, 2227, 2231, 2234, 2243, 2239, 2241, 2242, 2245, 2251, + 2244, 2246, 2249, 2253, 2254, 2261, 2263, 2259, 2266, 2268, + 2276, 6437, 2272, 2258, 2280, 2277, 2284, 2279, 2285, 2275, + 2281, 2286, 2292, 2287, 2291, 2297, 2299, 2301, 2308, 2309, + 2304, 2305, 2307, 2312, 2313, 2314, 2321, 2316, 2323, 2318, + 2322, 6437, 2324, 2329, 2325, 171, 2330, 2333, 2338, 2335, + 2342, 2353, 2336, 2355, 2360, 2341, 2358, 1867, 2359, 2361, - 2358, 2359, 2361, 6426, 2363, 2364, 2366, 2370, 2369, 2372, - 2377, 6426, 2379, 2386, 2389, 2398, 2381, 2390, 2399, 2395, - 2400, 2401, 2403, 2405, 2407, 2406, 2409, 2415, 2412, 6426, - 2417, 2420, 2422, 2413, 2429, 2428, 2421, 2435, 2436, 2437, - 2440, 2438, 2439, 2442, 2441, 2443, 2444, 2449, 2448, 2445, - 2447, 2457, 2458, 2459, 2468, 2469, 2461, 2470, 2471, 6426, - 2481, 2472, 2476, 2474, 2477, 2479, 2484, 2492, 2499, 2483, - 2494, 2496, 2500, 2510, 2503, 2505, 2512, 2520, 2517, 2525, - 2513, 2526, 2527, 2535, 2524, 2537, 2539, 2528, 2540, 2541, - 2543, 2546, 2547, 2549, 2559, 2560, 2552, 2562, 2555, 2576, + 2362, 2365, 2366, 2367, 2339, 2368, 2369, 6437, 2372, 2373, + 2374, 2378, 2379, 2377, 2384, 6437, 2390, 2395, 2399, 2402, + 2405, 2406, 2407, 2408, 2391, 2413, 2411, 2414, 2417, 2418, + 2421, 2415, 2419, 6437, 2425, 2431, 2432, 2428, 2434, 2440, + 2441, 2430, 2442, 2443, 2446, 2449, 2447, 2451, 2452, 2453, + 2455, 2459, 2460, 2456, 2461, 2468, 2467, 2466, 2472, 2469, + 2470, 2478, 2479, 6437, 2486, 2483, 2487, 2489, 2490, 2491, + 2500, 2492, 2509, 2494, 2502, 2506, 2511, 2520, 2514, 2515, + 2523, 2530, 2532, 2526, 2540, 2536, 2542, 2544, 2538, 2548, + 2550, 2546, 2551, 2552, 2554, 2557, 2556, 2558, 2571, 2573, - 2581, 2572, 6426, 2570, 2565, 2568, 2582, 2590, 2585, 2587, - 2588, 2592, 2595, 2596, 2597, 2598, 2605, 2600, 2602, 2603, - 2608, 2607, 2611, 2614, 2618, 2619, 2623, 2625, 2627, 2628, - 6426, 2631, 2633, 2629, 2635, 2637, 2639, 2642, 2645, 2647, - 2649, 2650, 2654, 2655, 2657, 2656, 2658, 2664, 2665, 2651, - 6426, 2674, 2666, 2678, 2668, 2679, 2672, 2685, 2686, 2687, - 2661, 2688, 2691, 2694, 2695, 2697, 6426, 2704, 2705, 2696, - 2712, 2707, 2703, 2708, 2714, 2711, 6426, 2715, 2717, 2718, - 2726, 2727, 2723, 6426, 2734, 2724, 2725, 2732, 2735, 2736, - 2733, 2739, 2742, 2743, 2746, 2748, 2755, 2749, 2756, 6426, + 2563, 2518, 2572, 2577, 2582, 2564, 6437, 2583, 2584, 2585, + 2589, 2597, 2593, 2594, 2595, 2601, 2604, 2605, 2606, 2607, + 2614, 2609, 2611, 2612, 2617, 2618, 2620, 2623, 2627, 2628, + 2631, 2634, 2636, 2380, 6437, 2637, 2638, 2639, 2642, 2645, + 2646, 2648, 2653, 2650, 2656, 2657, 2660, 2661, 2662, 2663, + 2664, 2667, 2668, 2671, 6437, 2672, 2673, 2674, 2680, 2682, + 2684, 2685, 2693, 2686, 2697, 2695, 2699, 2701, 2702, 2703, + 6437, 2710, 2711, 2708, 2712, 2714, 2715, 2718, 2720, 2721, + 6437, 2722, 2724, 2725, 2732, 2733, 2730, 6437, 2745, 2735, + 2731, 2738, 2728, 2742, 2743, 2746, 2750, 2752, 2753, 2754, - 2757, 2766, 2759, 2758, 2763, 2769, 2770, 2773, 2774, 2775, - 2778, 2781, 6426, 2792, 2789, 2787, 2800, 2790, 2530, 2796, - 2797, 2801, 2803, 2804, 2805, 2807, 6426, 2808, 2811, 2812, - 2815, 2813, 2818, 2819, 2826, 2823, 2825, 2828, 2831, 2832, - 2833, 2834, 2841, 2840, 2837, 2849, 2850, 2853, 2854, 2856, - 2859, 2867, 2870, 2843, 2866, 2869, 2862, 2871, 2872, 2879, - 2880, 2887, 2882, 2884, 6426, 2889, 2886, 2891, 2893, 2894, - 2895, 2897, 2896, 2898, 2901, 2902, 2908, 2904, 2905, 2920, - 2923, 2907, 2915, 2925, 2926, 2928, 2929, 2930, 2931, 2932, - 2939, 2935, 2936, 2947, 2938, 2942, 2952, 2953, 2954, 2955, + 2763, 2757, 2760, 6437, 2764, 2773, 2766, 2769, 2768, 2774, + 2775, 2779, 2781, 2782, 2785, 2792, 6437, 2799, 2796, 2798, + 2808, 2795, 2801, 2803, 2805, 2811, 2804, 2812, 2813, 2815, + 6437, 2817, 2819, 2820, 2823, 2825, 2826, 2828, 2836, 2833, + 2834, 2840, 2841, 2842, 2839, 2843, 2852, 2846, 2849, 2855, + 2860, 2850, 2862, 2863, 2868, 2872, 2876, 2873, 2875, 2878, + 2877, 2879, 2880, 2888, 2892, 2895, 2890, 2896, 6437, 2899, + 2901, 2894, 2902, 2904, 2907, 2908, 2906, 2909, 2911, 2914, + 2912, 2915, 2918, 2925, 2933, 2926, 2934, 2928, 2930, 2936, + 2938, 2939, 2940, 2941, 2948, 2950, 2944, 2957, 2952, 2956, - 2956, 2963, 2943, 2961, 2958, 2965, 2966, 2970, 2980, 2981, - 2967, 2982, 2983, 2984, 2985, 6426, 2988, 2989, 2990, 2993, - 2996, 2999, 3002, 3009, 3000, 3001, 3011, 3017, 3018, 3008, - 3019, 3010, 3026, 3024, 6426, 3025, 6426, 3027, 3029, 3031, - 3039, 3035, 6426, 3041, 6426, 3042, 3047, 3036, 3038, 6426, - 3050, 3044, 3049, 3056, 3051, 3059, 3060, 3062, 3061, 3068, - 3063, 3065, 3070, 3071, 3073, 3076, 3074, 3081, 3082, 3086, - 3090, 3091, 3078, 3102, 3084, 3094, 3100, 3092, 3107, 6426, - 3109, 3097, 3110, 3115, 3114, 3116, 3117, 3118, 3120, 3121, - 3123, 3127, 3122, 3132, 3124, 3136, 3135, 3145, 3146, 3153, + 2967, 2953, 2954, 2963, 2964, 2965, 2966, 2969, 2974, 2977, + 2976, 2986, 2990, 2991, 2993, 2968, 2992, 2994, 2998, 6437, + 2995, 3003, 2999, 3002, 3005, 3010, 3006, 3018, 3015, 3016, + 3019, 3023, 3028, 3020, 3025, 3026, 3037, 3034, 6437, 3035, + 6437, 3036, 3039, 3041, 3051, 3038, 6437, 3048, 6437, 3049, + 3055, 3050, 3056, 6437, 3059, 3060, 3061, 3063, 3067, 3065, + 3068, 3069, 3071, 3075, 3079, 3073, 3077, 3078, 3081, 3083, + 3090, 3089, 3093, 3094, 3096, 3102, 3097, 3099, 3105, 3108, + 3110, 3111, 3113, 6437, 3116, 3112, 3120, 3121, 3122, 3123, + 3124, 3125, 3129, 3131, 3132, 3140, 3136, 3143, 3133, 3144, - 6426, 3148, 3150, 3151, 3152, 6426, 3154, 3155, 3156, 3160, - 3163, 3164, 3165, 3168, 3172, 3167, 3169, 3174, 3183, 3184, - 3187, 3188, 6426, 3190, 3193, 3175, 3202, 3196, 3203, 3210, - 3206, 3208, 3212, 3220, 3216, 3215, 3217, 3218, 3219, 3222, - 3229, 3230, 3226, 3233, 3232, 3236, 3243, 3240, 3234, 3238, - 3244, 3246, 3247, 3248, 3249, 3250, 3253, 3254, 3251, 6426, - 3259, 3265, 3263, 3272, 3268, 3269, 3273, 3278, 3274, 6426, - 3280, 3281, 3282, 3284, 3289, 3283, 3286, 3291, 3294, 3297, - 3299, 3302, 3304, 3303, 6426, 3305, 6426, 3307, 3308, 3318, - 3322, 3323, 3310, 3324, 3330, 3326, 3331, 3333, 3336, 3334, + 3150, 3160, 3147, 3162, 6437, 3157, 3159, 3161, 3163, 6437, + 3165, 3164, 3172, 3174, 3168, 3166, 3176, 3178, 3185, 3177, + 3187, 3183, 3190, 3198, 3189, 3197, 6437, 3201, 3202, 3179, + 3206, 3212, 3219, 3220, 3217, 3223, 3225, 3221, 3227, 3205, + 3228, 3229, 3230, 3231, 3239, 3241, 3237, 3244, 3236, 3240, + 3252, 3249, 3243, 3247, 3253, 3255, 3256, 3257, 3258, 3260, + 3262, 3263, 3264, 6437, 3268, 3272, 3274, 3281, 3277, 3278, + 3279, 3282, 3286, 6437, 3289, 3290, 3293, 3291, 3300, 3302, + 3292, 3295, 3304, 3305, 3308, 3309, 3312, 3311, 6437, 3313, + 6437, 3315, 3326, 3331, 3335, 3320, 3318, 3338, 3343, 3337, - 3340, 3337, 3342, 3343, 3345, 3357, 3348, 3344, 3349, 3358, - 3359, 3363, 3360, 6426, 6426, 3365, 3366, 3367, 3369, 3371, - 3370, 3377, 3374, 3382, 3381, 3388, 3389, 3397, 6426, 3394, - 3395, 3393, 3398, 3406, 3401, 3405, 3417, 3413, 3420, 3416, - 6426, 3412, 3421, 3429, 3424, 3425, 3433, 6426, 3430, 6426, - 3426, 3431, 3436, 3439, 3440, 3441, 3442, 3443, 3447, 3455, - 3458, 3451, 3460, 3461, 3462, 3463, 3466, 3470, 3473, 3469, - 3471, 3472, 6426, 3475, 3476, 3484, 3489, 3492, 3493, 3477, - 3478, 6426, 3495, 3485, 3503, 3499, 3504, 3505, 3509, 3506, - 3510, 3511, 3513, 6426, 3512, 3514, 3521, 3526, 3519, 3522, + 3325, 3346, 3347, 3339, 3345, 3348, 3349, 3353, 3354, 3366, + 3356, 3359, 3364, 3367, 3369, 3370, 3372, 6437, 6437, 3371, + 3373, 3374, 3376, 3378, 3388, 3380, 3389, 3394, 3382, 3390, + 3397, 3408, 6437, 3403, 3404, 3405, 3409, 3412, 3410, 3421, + 3422, 3413, 3429, 3424, 6437, 3425, 3426, 3437, 3433, 3432, + 3442, 6437, 3439, 6437, 3434, 3438, 3443, 3449, 3448, 3450, + 3452, 3454, 3456, 3465, 3470, 3460, 3472, 3462, 3467, 3469, + 3475, 3476, 3484, 3479, 3480, 3481, 6437, 3487, 3483, 3490, + 3492, 3493, 3495, 3502, 3491, 6437, 3504, 3505, 3507, 3508, + 3509, 3510, 3513, 3517, 3515, 3518, 3523, 6437, 3519, 3524, - 3530, 3532, 3540, 6426, 3536, 3533, 3549, 3545, 3546, 3548, - 3551, 3527, 3552, 3553, 3555, 3556, 3557, 3559, 3560, 3563, - 3564, 3566, 3565, 3577, 3576, 3579, 3584, 3586, 3570, 6426, - 3587, 3590, 3592, 3593, 3595, 3596, 3598, 3601, 3603, 3604, - 3615, 3616, 3605, 3607, 3619, 3621, 3629, 3627, 6426, 3637, - 3620, 3639, 3611, 3632, 3641, 3622, 3643, 3645, 3634, 3646, - 3647, 3650, 3653, 3660, 3656, 3657, 3655, 3659, 3671, 3661, - 6426, 3684, 3662, 3672, 3664, 3663, 3680, 3688, 3685, 3686, - 3689, 3691, 3692, 3696, 3693, 3698, 3699, 3702, 3703, 6426, - 6426, 3705, 3707, 3708, 6426, 3712, 3709, 3722, 3715, 3719, + 3532, 3525, 3528, 3533, 3541, 3542, 3548, 6437, 3549, 3534, + 3556, 3552, 3553, 3555, 3558, 3559, 3560, 3562, 3563, 3564, + 3566, 3567, 3572, 3568, 3570, 3577, 3573, 3585, 3587, 3574, + 3595, 3602, 3588, 6437, 3591, 3598, 3600, 3601, 3603, 3604, + 3606, 3612, 3614, 3608, 3623, 3624, 3615, 3619, 3627, 3629, + 3637, 3632, 6437, 3644, 3630, 3645, 3634, 3643, 3642, 3647, + 3649, 3651, 3653, 3652, 3655, 3656, 3658, 3670, 3662, 3665, + 3661, 3666, 3677, 3669, 6437, 3684, 3680, 3672, 3688, 3682, + 3691, 3698, 3695, 3696, 3697, 3700, 3701, 3702, 3705, 3707, + 3708, 3711, 3712, 6437, 6437, 3714, 3715, 3717, 6437, 3719, - 3711, 3724, 3725, 3727, 3728, 3733, 3735, 6426, 3736, 3743, - 3738, 3739, 3748, 3750, 3755, 3747, 3756, 3749, 3745, 3760, - 3763, 3757, 3761, 3767, 3776, 3777, 3762, 3773, 3774, 6426, - 3779, 3780, 3781, 3784, 3785, 3790, 6426, 3789, 3791, 3792, - 3797, 3801, 3803, 3809, 3811, 3793, 3812, 3796, 3813, 3816, - 3817, 3827, 3819, 3823, 3830, 3831, 3835, 6426, 3824, 3838, - 3822, 3841, 6426, 3844, 3851, 3852, 6426, 3853, 3848, 3855, - 3856, 3863, 6426, 3858, 3861, 3859, 3862, 3872, 3864, 3873, - 3875, 3869, 6426, 3876, 3877, 3878, 6426, 3879, 3884, 3890, - 3892, 3893, 3900, 3895, 3897, 3898, 3899, 6426, 3905, 6426, + 3720, 3730, 3722, 3723, 3731, 3735, 3734, 3733, 3736, 3738, + 3739, 6437, 3745, 3753, 3748, 3749, 3757, 3758, 3761, 3762, + 3754, 3765, 3769, 3766, 3770, 3771, 3772, 3774, 3782, 3783, + 3779, 3780, 3786, 6437, 3781, 3787, 3791, 3793, 3784, 3797, + 6437, 3794, 3800, 3802, 3805, 3811, 3815, 3807, 3817, 3820, + 3821, 3824, 3822, 3825, 3826, 3834, 3829, 3831, 3833, 3837, + 3847, 6437, 3830, 3842, 3840, 3849, 6437, 3855, 3862, 3863, + 6437, 3865, 3850, 3864, 3866, 3873, 6437, 3868, 3870, 3871, + 3852, 3881, 3872, 3885, 3882, 3884, 6437, 3886, 3888, 3890, + 6437, 3889, 3899, 3902, 3904, 3891, 3912, 3908, 3905, 3909, - 3903, 3907, 3911, 6426, 3909, 3914, 3915, 3917, 3918, 3923, - 3924, 3922, 3931, 3932, 3933, 3935, 3936, 3934, 3939, 3943, - 3940, 3941, 3945, 3946, 6426, 3947, 3949, 3956, 3951, 3961, - 3957, 3964, 3954, 3968, 3969, 6426, 6426, 3978, 6426, 3980, - 3970, 3972, 6426, 3974, 3979, 3987, 3984, 3990, 3992, 3996, - 3997, 6426, 3999, 4002, 6426, 3985, 4000, 4010, 4007, 4009, - 4012, 4015, 4011, 4013, 4017, 4018, 4021, 4023, 4019, 4022, - 4027, 6426, 4024, 4025, 4026, 4040, 4041, 4042, 4047, 4049, - 4043, 6426, 4051, 4053, 4052, 4060, 4057, 6426, 4058, 6426, - 4061, 4066, 4068, 4069, 4072, 6426, 4074, 4073, 4078, 4081, + 3913, 6437, 3916, 6437, 3917, 3918, 3923, 6437, 3919, 3925, + 3927, 3929, 3926, 3933, 3934, 3940, 3942, 3936, 3944, 3945, + 3946, 3893, 3947, 3954, 3949, 3950, 3951, 3957, 6437, 3960, + 3955, 3966, 3958, 3976, 3970, 3962, 3964, 3981, 3980, 6437, + 6437, 3983, 6437, 3984, 3988, 3989, 6437, 3991, 3994, 3996, + 3992, 3997, 3999, 4003, 4007, 6437, 4011, 4012, 6437, 3995, + 4014, 4022, 4017, 4019, 4023, 4025, 4021, 4027, 4028, 4032, + 4031, 4033, 4029, 4034, 4047, 6437, 4036, 4035, 4038, 4052, + 4039, 4042, 4060, 4054, 4061, 6437, 4064, 4065, 4068, 4070, + 4071, 6437, 4073, 6437, 4072, 4074, 4076, 4077, 4080, 6437, - 4083, 4082, 4085, 4089, 4086, 4092, 4099, 4095, 4096, 4097, - 6426, 4098, 4101, 4103, 4110, 4106, 4108, 4119, 4118, 4114, - 4120, 4124, 4126, 4122, 4129, 4135, 4133, 4139, 4127, 6426, - 4137, 4141, 4131, 4154, 4147, 4150, 6426, 4151, 4155, 4159, - 6426, 4157, 4158, 4165, 4167, 4161, 4168, 4169, 4173, 4175, - 6426, 4171, 4172, 4176, 4177, 4188, 4180, 6426, 6426, 4191, - 6426, 4192, 4181, 4194, 4195, 4199, 4202, 4201, 4203, 4206, - 4207, 4214, 4215, 4208, 4216, 4223, 4225, 4233, 4228, 4229, - 4230, 6426, 6426, 4235, 4239, 4232, 4243, 4244, 4236, 4246, - 4253, 4251, 4257, 4260, 4261, 4255, 6426, 4263, 4252, 4269, + 4085, 4084, 4092, 4089, 4095, 4094, 4097, 4101, 4093, 4103, + 4110, 4107, 4105, 4108, 6437, 4109, 4113, 4120, 4121, 4114, + 4117, 4130, 4126, 4132, 4125, 4133, 4136, 4138, 4139, 4144, + 4142, 4147, 4146, 6437, 4148, 4153, 4154, 4162, 4158, 4159, + 6437, 4165, 4163, 4169, 6437, 4166, 4170, 4172, 4183, 4173, + 4176, 4180, 4178, 4184, 6437, 4185, 4186, 4187, 4188, 4195, + 4201, 6437, 6437, 4202, 6437, 4203, 4189, 4204, 4205, 4206, + 4211, 4214, 4215, 4217, 4218, 4222, 4225, 4227, 4228, 4235, + 4238, 4239, 4241, 4243, 4236, 6437, 6437, 4246, 4247, 4249, + 4253, 4254, 4257, 4242, 4265, 4261, 4263, 4268, 4270, 4277, - 4262, 6426, 4268, 4270, 4271, 4274, 4276, 4277, 4280, 4278, - 4279, 4283, 4286, 4287, 4288, 4292, 4290, 4299, 4300, 4301, - 4302, 4306, 4304, 4309, 6426, 4310, 4311, 4313, 4314, 4315, - 4321, 4323, 4324, 4325, 6426, 4326, 6426, 4329, 4331, 4327, - 4347, 4335, 4338, 4348, 4350, 4352, 4354, 4355, 4358, 4359, - 4365, 4353, 4360, 4369, 4362, 4376, 4378, 4379, 6426, 4380, - 4372, 4381, 4382, 4387, 4389, 4383, 4391, 4393, 4396, 4397, - 4398, 4400, 4405, 4406, 4407, 4408, 4409, 6426, 4410, 4414, - 4417, 4419, 4421, 4423, 4424, 4425, 4431, 4432, 4433, 4434, - 4438, 6426, 4435, 4440, 4442, 4443, 4445, 4446, 4449, 4452, + 6437, 4272, 4274, 4278, 4279, 6437, 4280, 4281, 4283, 4285, + 4284, 4290, 4287, 4291, 4288, 4292, 4296, 4297, 4298, 4302, + 4304, 4309, 4310, 4312, 4315, 4316, 4317, 4319, 6437, 4324, + 4321, 4323, 4325, 4326, 4328, 4333, 4334, 4336, 6437, 4337, + 6437, 4338, 4339, 4343, 4356, 4345, 4355, 4359, 4361, 4363, + 4365, 4366, 4369, 4370, 4376, 4364, 4371, 4380, 4373, 4387, + 4389, 4390, 6437, 4391, 4383, 4392, 4393, 4398, 4400, 4394, + 4402, 4404, 4407, 4408, 4409, 4411, 4416, 4417, 4418, 4419, + 4420, 6437, 4421, 4425, 4428, 4430, 4432, 4434, 4435, 4436, + 4442, 4443, 4444, 4445, 4449, 6437, 4446, 4451, 4453, 4454, - 4456, 6426, 4459, 4450, 4461, 4460, 4462, 4464, 4466, 4472, - 4469, 4475, 4476, 6426, 4481, 4483, 4484, 4485, 4486, 4487, - 4490, 4491, 6426, 4497, 4498, 4500, 4507, 4504, 4511, 4509, - 4513, 4506, 4516, 4519, 4512, 4523, 4524, 4526, 4520, 4536, - 4543, 4538, 6426, 4527, 6426, 4539, 4540, 4550, 4545, 4551, - 4549, 6426, 4552, 4557, 4559, 4555, 4553, 6426, 4560, 4561, - 4563, 4564, 6426, 4579, 4575, 4565, 4574, 4567, 4583, 6426, - 4588, 4589, 4590, 4597, 4599, 4594, 4601, 4596, 4604, 4602, - 4598, 4606, 4607, 4615, 4613, 4611, 6426, 4617, 4619, 4624, - 4626, 4620, 4628, 4618, 4630, 4633, 4635, 6426, 4636, 4639, + 4456, 4457, 4460, 4463, 4467, 6437, 4470, 4461, 4472, 4471, + 4473, 4475, 4477, 4483, 4480, 4486, 4487, 6437, 4492, 4494, + 4495, 4496, 4497, 4498, 4501, 4502, 6437, 4508, 4509, 4511, + 4518, 4515, 4522, 4520, 4524, 4517, 4527, 4530, 4523, 4534, + 4535, 4537, 4531, 4547, 4554, 4549, 6437, 4538, 6437, 4550, + 4551, 4561, 4556, 4562, 4560, 6437, 4563, 4568, 4570, 4566, + 4564, 6437, 4571, 4572, 4574, 4575, 6437, 4590, 4586, 4576, + 4585, 4578, 4594, 6437, 4599, 4600, 4601, 4608, 4610, 4605, + 4612, 4607, 4615, 4613, 4609, 4617, 4618, 4626, 4624, 4622, + 6437, 4628, 4630, 4635, 4637, 4631, 4639, 4629, 4641, 4644, - 4640, 4642, 4643, 4644, 4645, 4652, 4649, 4651, 4653, 4654, - 4657, 4658, 6426, 4663, 4661, 4665, 4674, 4676, 4678, 6426, - 4681, 6426, 4671, 4666, 4683, 4682, 4687, 6426, 6426, 4689, - 4697, 4692, 4695, 4696, 6426, 6426, 4699, 6426, 4700, 6426, - 4701, 4703, 6426, 6426, 4702, 4706, 4709, 4711, 4713, 6426, - 4721, 6426, 4723, 4724, 4710, 4722, 4728, 6426, 4727, 4729, - 4731, 6426, 4734, 4742, 4735, 4737, 6426, 4739, 4745, 4740, - 4747, 6426, 4749, 4755, 4751, 4757, 4758, 4761, 4760, 4763, - 4764, 4768, 4769, 4770, 4771, 4773, 4782, 4784, 4786, 4779, - 4787, 4788, 4794, 4796, 4789, 4792, 4798, 4799, 4803, 4800, + 4646, 6437, 4647, 4650, 4651, 4653, 4654, 4655, 4656, 4663, + 4660, 4662, 4664, 4665, 4668, 4669, 6437, 4674, 4672, 4676, + 4685, 4687, 4689, 6437, 4692, 6437, 4682, 4677, 4694, 4693, + 4698, 6437, 6437, 4700, 4708, 4703, 4706, 4707, 6437, 6437, + 4710, 6437, 4711, 6437, 4712, 4714, 6437, 6437, 4713, 4717, + 4720, 4722, 4724, 6437, 4732, 6437, 4734, 4735, 4721, 4733, + 4739, 6437, 4738, 4740, 4742, 6437, 4745, 4753, 4746, 4748, + 6437, 4750, 4756, 4751, 4758, 6437, 4760, 4766, 4762, 4768, + 4769, 4772, 4771, 4774, 4775, 4779, 4780, 4781, 4782, 4784, + 4793, 4795, 4797, 4790, 4798, 4799, 4805, 4807, 4800, 4803, - 4807, 4809, 4810, 4811, 4813, 4812, 4814, 4817, 4816, 4825, - 4827, 4828, 4829, 4830, 4831, 4832, 4833, 4839, 4840, 4843, - 4838, 4842, 6426, 4846, 4848, 4835, 4859, 4849, 4860, 4861, - 4868, 4872, 4873, 6426, 4875, 6426, 4877, 4869, 4879, 4880, - 4881, 6426, 4882, 4883, 4884, 4885, 4886, 4888, 4889, 4892, - 4893, 4897, 4903, 6426, 4910, 4900, 4894, 4898, 4918, 6426, - 4913, 4920, 4921, 4923, 4924, 4925, 4926, 4927, 4930, 4928, - 4933, 4935, 4929, 4936, 4937, 4951, 4953, 4948, 4938, 4955, - 4957, 4958, 4959, 4960, 4961, 4962, 4963, 4969, 4971, 4975, - 6426, 4966, 6426, 4977, 4978, 4979, 4982, 4983, 4984, 4987, + 4809, 4810, 4814, 4811, 4818, 4820, 4821, 4822, 4824, 4823, + 4825, 4828, 4827, 4836, 4838, 4839, 4840, 4841, 4842, 4843, + 4844, 4850, 4851, 4854, 4849, 4853, 6437, 4857, 4859, 4846, + 4870, 4860, 4871, 4872, 4879, 4883, 4884, 6437, 4886, 6437, + 4888, 4880, 4890, 4891, 4892, 6437, 4893, 4894, 4895, 4896, + 4897, 4899, 4900, 4903, 4904, 4908, 4914, 6437, 4921, 4911, + 4905, 4909, 4929, 6437, 4924, 4931, 4932, 4934, 4935, 4936, + 4937, 4938, 4941, 4939, 4944, 4946, 4940, 4947, 4948, 4962, + 4964, 4959, 4949, 4966, 4968, 4969, 4970, 4971, 4972, 4973, + 4974, 4980, 4982, 4986, 6437, 4977, 6437, 4988, 4989, 4990, - 6426, 6426, 4989, 4990, 4995, 4992, 4996, 4999, 5001, 6426, - 5000, 5008, 5011, 5003, 6426, 5013, 5017, 5018, 5020, 6426, - 5021, 5022, 5023, 5025, 5026, 5030, 5034, 5032, 5035, 5036, - 5043, 6426, 6426, 6426, 6426, 5046, 5040, 5050, 5044, 5052, - 5054, 5055, 5059, 5053, 6426, 5061, 6426, 6426, 5066, 5067, - 5056, 5069, 5073, 5075, 5076, 5078, 6426, 5077, 5079, 5082, - 5080, 5089, 5091, 5097, 5093, 5098, 5083, 5099, 5108, 5104, - 5105, 5107, 5110, 5112, 5114, 6426, 6426, 5116, 5119, 5120, - 5127, 5125, 5128, 5124, 5137, 5132, 5134, 5135, 5140, 5141, - 5142, 5151, 5152, 5143, 5147, 6426, 5150, 5153, 5161, 6426, + 4993, 4994, 4995, 4998, 6437, 6437, 5000, 5001, 5006, 5003, + 5007, 5010, 5012, 6437, 5011, 5019, 5022, 5014, 6437, 5024, + 5028, 5029, 5031, 6437, 5032, 5033, 5034, 5036, 5037, 5041, + 5045, 5043, 5046, 5047, 5054, 6437, 6437, 6437, 6437, 5057, + 5051, 5061, 5055, 5063, 5065, 5066, 5070, 5064, 6437, 5072, + 6437, 6437, 5077, 5078, 5067, 5080, 5084, 5086, 5087, 5089, + 6437, 5088, 5090, 5093, 5091, 5100, 5102, 5108, 5104, 5109, + 5094, 5110, 5119, 5115, 5116, 5118, 5121, 5123, 5125, 6437, + 6437, 5127, 5130, 5131, 5138, 5136, 5139, 5135, 5148, 5143, + 5145, 5146, 5151, 5152, 5153, 5162, 5163, 5154, 5158, 6437, - 5154, 6426, 5160, 5162, 5156, 5168, 5169, 5170, 5171, 5173, - 6426, 6426, 5175, 5183, 5180, 6426, 6426, 5176, 5184, 5187, - 5189, 5185, 5190, 5191, 5196, 5198, 5194, 6426, 5199, 6426, - 5201, 5203, 5216, 5202, 5218, 5223, 5225, 5229, 5222, 5205, - 6426, 5224, 5226, 6426, 5231, 5220, 5232, 6426, 5236, 5238, - 5241, 5243, 6426, 5245, 5246, 5248, 6426, 5252, 6426, 5249, - 5254, 5255, 5263, 6426, 5258, 5260, 6426, 5265, 5271, 5272, - 5266, 6426, 5268, 6426, 5273, 5277, 5280, 5283, 5274, 5285, - 5287, 5288, 5290, 5297, 5295, 5292, 6426, 6426, 135, 5308, - 5298, 5299, 5303, 5305, 5315, 5301, 5310, 5313, 6426, 6426, + 5161, 5164, 5172, 6437, 5165, 6437, 5171, 5173, 5167, 5179, + 5180, 5181, 5182, 5184, 6437, 6437, 5186, 5194, 5191, 6437, + 6437, 5187, 5195, 5198, 5200, 5196, 5201, 5202, 5207, 5209, + 5205, 6437, 5210, 6437, 5212, 5214, 5227, 5213, 5229, 5234, + 5236, 5240, 5233, 5216, 6437, 5235, 5237, 6437, 5242, 5231, + 5243, 6437, 5247, 5249, 5252, 5254, 6437, 5256, 5257, 5259, + 6437, 5263, 6437, 5260, 5265, 5266, 5274, 6437, 5269, 5271, + 6437, 5276, 5282, 5283, 5277, 6437, 5279, 6437, 5284, 5288, + 5291, 5294, 5285, 5296, 5298, 5299, 5301, 5308, 5306, 5303, + 6437, 6437, 135, 5319, 5309, 5310, 5314, 5316, 5326, 5312, - 5317, 6426, 5316, 5325, 6426, 5318, 5327, 5331, 5320, 5329, - 5333, 5335, 5336, 5340, 5342, 5341, 5345, 5346, 5349, 5354, - 5364, 5347, 5361, 5367, 5369, 5371, 5373, 5362, 5375, 5376, - 5377, 5379, 5381, 5382, 5383, 5385, 5386, 6426, 5389, 5391, - 5394, 5393, 6426, 5399, 5395, 5408, 5404, 6426, 5413, 5401, - 5414, 5415, 6426, 5416, 5418, 5421, 5419, 5420, 5432, 5427, - 5429, 5433, 6426, 6426, 6426, 5436, 5443, 6426, 5445, 5439, - 5422, 5430, 6426, 5446, 5449, 6426, 6426, 5450, 5451, 5452, - 5462, 6426, 5454, 6426, 5457, 6426, 5458, 5459, 5467, 5465, - 6426, 5471, 5469, 6426, 5480, 5482, 5484, 5477, 5485, 5487, + 5321, 5324, 6437, 6437, 5328, 6437, 5327, 5336, 6437, 5329, + 5338, 5342, 5331, 5340, 5344, 5346, 5347, 5351, 5353, 5352, + 5356, 5357, 5360, 5365, 5375, 5358, 5372, 5378, 5380, 5382, + 5384, 5373, 5386, 5387, 5388, 5390, 5392, 5393, 5394, 5396, + 5397, 6437, 5400, 5402, 5405, 5404, 6437, 5410, 5406, 5419, + 5415, 6437, 5424, 5412, 5425, 5426, 6437, 5427, 5429, 5432, + 5430, 5431, 5443, 5438, 5440, 5444, 6437, 6437, 6437, 5447, + 5454, 6437, 5456, 5450, 5433, 5441, 6437, 5457, 5460, 6437, + 6437, 5461, 5462, 5463, 5473, 6437, 5465, 6437, 5468, 6437, + 5469, 5470, 5478, 5476, 6437, 5482, 5480, 6437, 5491, 5493, - 5488, 6426, 5495, 5491, 5492, 5499, 5490, 5500, 5494, 5502, - 5501, 5509, 5504, 5511, 6426, 5513, 5516, 5518, 5524, 5514, - 5520, 5522, 6426, 5526, 6426, 5528, 6426, 5530, 5531, 5532, - 5538, 5534, 5539, 5540, 5549, 5541, 5551, 5545, 5552, 5556, - 5553, 6426, 6426, 5562, 5565, 6426, 5559, 6426, 5567, 6426, - 5557, 5568, 5569, 5570, 6426, 5577, 5571, 5574, 5579, 6426, - 5581, 5586, 5583, 5588, 6426, 6426, 5589, 5596, 5594, 5592, - 5604, 5606, 5593, 5608, 5601, 5610, 5595, 5617, 5616, 5618, - 5620, 5622, 5623, 5624, 6426, 6426, 6426, 5629, 5628, 5637, - 5633, 5636, 5644, 5634, 6426, 5642, 5646, 5649, 5643, 5656, + 5495, 5488, 5496, 5498, 5499, 6437, 5506, 5502, 5503, 5510, + 5501, 5511, 5505, 5513, 5512, 5520, 5515, 5522, 6437, 5524, + 5527, 5529, 5535, 5525, 5531, 5533, 6437, 5537, 6437, 5539, + 6437, 5541, 5542, 5543, 5549, 5545, 5550, 5551, 5560, 5552, + 5562, 5556, 5563, 5567, 5564, 6437, 6437, 5573, 5576, 6437, + 5570, 6437, 5578, 6437, 5568, 5579, 5580, 5581, 6437, 5588, + 5582, 5585, 5590, 6437, 5592, 5597, 5594, 5599, 6437, 6437, + 5600, 5607, 5605, 5603, 5615, 5617, 5604, 5619, 5612, 5621, + 5606, 5628, 5627, 5629, 5631, 5633, 5634, 5635, 6437, 6437, + 6437, 5640, 5639, 5648, 5644, 5647, 5655, 5645, 6437, 5653, - 5651, 5658, 6426, 5653, 5655, 5659, 5661, 5664, 5660, 5666, - 5667, 6426, 5671, 5678, 5675, 5672, 5683, 5690, 5692, 5694, - 5685, 5681, 5701, 5697, 6426, 5700, 6426, 6426, 5687, 6426, - 5696, 5703, 5704, 5708, 6426, 5711, 5705, 5712, 5713, 5715, - 5717, 6426, 5727, 5720, 5723, 5724, 6426, 6426, 5731, 6426, - 5734, 5736, 5735, 5743, 5738, 5739, 5745, 5746, 6426, 5728, - 5752, 5753, 5754, 5755, 6426, 5756, 5757, 5759, 5760, 6426, - 5763, 5762, 5765, 5767, 5768, 6426, 5769, 5770, 5777, 5784, - 6426, 5775, 5791, 5785, 6426, 6426, 5787, 5793, 5796, 6426, - 6426, 6426, 5802, 5799, 5797, 5806, 6426, 5808, 5812, 5817, + 5657, 5660, 5654, 5667, 5662, 5669, 6437, 5664, 5666, 5670, + 5672, 5675, 5671, 5677, 5678, 6437, 5682, 5689, 5686, 5683, + 5694, 5701, 5703, 5705, 5696, 5692, 5712, 5708, 6437, 5711, + 6437, 6437, 5698, 6437, 5707, 5714, 5715, 5719, 6437, 5722, + 5716, 5723, 5724, 5726, 5728, 6437, 5738, 5731, 5734, 5735, + 6437, 6437, 5742, 6437, 5745, 5747, 5746, 5754, 5749, 5750, + 5756, 5757, 6437, 5739, 5763, 5764, 5765, 5766, 6437, 5767, + 5768, 5770, 5771, 6437, 5774, 5773, 5776, 5778, 5779, 6437, + 5780, 5781, 5788, 5795, 6437, 5786, 5802, 5796, 6437, 6437, + 5798, 5804, 5807, 6437, 6437, 6437, 5813, 5810, 5808, 5817, - 5821, 5820, 6426, 5823, 5811, 5813, 6426, 6426, 5825, 5826, - 5828, 5831, 6426, 6426, 5832, 5834, 5835, 5838, 5836, 6426, - 5837, 5840, 5842, 5853, 5859, 5848, 5856, 5860, 5868, 5850, - 5854, 5865, 5864, 5866, 5870, 5873, 5877, 5884, 5881, 5883, - 5889, 5886, 5890, 6426, 6426, 5894, 6426, 5897, 5891, 6426, - 6426, 5899, 5903, 5905, 5907, 5909, 5911, 5913, 6426, 5914, - 5916, 5917, 5918, 5919, 6426, 5921, 5925, 5920, 5928, 5922, - 5931, 5927, 5937, 6426, 6426, 5929, 5943, 5933, 5944, 5938, - 6426, 5948, 5955, 5950, 5952, 5953, 5958, 5954, 6426, 5960, - 5962, 6426, 6426, 5961, 5963, 6426, 6426, 5967, 6426, 6426, + 6437, 5819, 5823, 5828, 5832, 5831, 6437, 5834, 5822, 5824, + 6437, 6437, 5836, 5837, 5839, 5842, 6437, 6437, 5843, 5845, + 5846, 5849, 5847, 6437, 5848, 5851, 5853, 5864, 5870, 5859, + 5867, 5871, 5879, 5861, 5865, 5876, 5875, 5877, 5881, 5884, + 5888, 5895, 5892, 5894, 5900, 5897, 5901, 6437, 6437, 5905, + 6437, 5908, 5902, 6437, 6437, 5910, 5914, 5916, 5918, 5920, + 5922, 5924, 6437, 5925, 5927, 5928, 5929, 5930, 6437, 5932, + 5936, 5931, 5939, 5933, 5942, 5938, 5948, 6437, 6437, 5940, + 5954, 5944, 5955, 5949, 6437, 5959, 5966, 5961, 5963, 5964, + 5969, 5965, 6437, 5971, 5973, 6437, 6437, 5972, 5974, 6437, - 6426, 6426, 6426, 6426, 6426, 5974, 6426, 5968, 5980, 5983, - 5985, 6426, 5969, 5986, 5987, 5988, 5975, 6426, 5973, 5990, - 5994, 5998, 5997, 6002, 6004, 6005, 6007, 6006, 6009, 6011, - 6010, 6015, 6013, 6014, 6016, 6020, 6023, 6426, 6426, 6426, - 6029, 6030, 6032, 6033, 6037, 6038, 6045, 6047, 6041, 6048, - 6049, 6051, 6053, 6054, 6055, 6063, 6059, 6062, 6061, 6065, - 6067, 6072, 6076, 6069, 6077, 6081, 6426, 6078, 6426, 6082, - 6426, 6426, 6086, 6088, 6083, 6090, 6098, 6101, 6094, 6097, - 6099, 6102, 6104, 6426, 6106, 6426, 6426, 6111, 6113, 6426, - 6112, 6115, 6426, 6114, 6116, 6117, 6122, 6124, 6120, 6123, + 6437, 5978, 6437, 6437, 6437, 6437, 6437, 6437, 6437, 5985, + 6437, 5979, 5991, 5994, 5996, 6437, 5980, 5997, 5998, 5999, + 5986, 6437, 5984, 6001, 6005, 6009, 6008, 6013, 6015, 6016, + 6018, 6017, 6020, 6022, 6021, 6026, 6024, 6025, 6027, 6031, + 6034, 6437, 6437, 6437, 6040, 6041, 6043, 6044, 6048, 6049, + 6056, 6058, 6052, 6059, 6060, 6062, 6064, 6065, 6066, 6074, + 6070, 6073, 6072, 6076, 6078, 6083, 6087, 6080, 6088, 6092, + 6437, 6089, 6437, 6093, 6437, 6437, 6097, 6099, 6094, 6101, + 6109, 6112, 6105, 6108, 6110, 6113, 6115, 6437, 6117, 6437, + 6437, 6122, 6124, 6437, 6123, 6126, 6437, 6125, 6127, 6128, - 6125, 6141, 6426, 6426, 6127, 6131, 6129, 6143, 6145, 6144, - 6151, 6153, 6154, 6155, 6146, 6162, 6426, 6164, 6161, 6168, - 6426, 6169, 6157, 6170, 6171, 6172, 6180, 6175, 6179, 6426, - 6181, 6426, 6184, 6186, 6188, 6178, 6185, 6187, 6201, 6203, - 6196, 6426, 6189, 6205, 6199, 6210, 6212, 6214, 6216, 6207, - 6221, 6217, 6225, 6229, 6224, 6230, 6232, 6233, 6234, 6426, - 6236, 6239, 6426, 6240, 6241, 6242, 6243, 6247, 6426, 6250, - 6244, 6252, 6254, 6257, 6259, 6426, 6265, 6268, 6269, 6426, - 6270, 6426, 6426, 6272, 6260, 6273, 6281, 6283, 6426, 6426, - 6426, 6306, 6313, 6320, 6327, 6334, 6341, 6348, 88, 6355, + 6133, 6135, 6131, 6134, 6136, 6152, 6437, 6437, 6138, 6142, + 6140, 6154, 6156, 6155, 6162, 6164, 6165, 6166, 6157, 6173, + 6437, 6175, 6172, 6179, 6437, 6180, 6168, 6181, 6182, 6183, + 6191, 6186, 6190, 6437, 6192, 6437, 6195, 6197, 6199, 6189, + 6196, 6198, 6212, 6214, 6207, 6437, 6200, 6216, 6210, 6221, + 6223, 6225, 6227, 6218, 6232, 6228, 6236, 6240, 6235, 6241, + 6243, 6244, 6245, 6437, 6247, 6250, 6437, 6251, 6252, 6253, + 6254, 6258, 6437, 6261, 6255, 6263, 6265, 6268, 6270, 6437, + 6276, 6279, 6280, 6437, 6281, 6437, 6437, 6283, 6271, 6284, + 6292, 6294, 6437, 6437, 6437, 6317, 6324, 6331, 6338, 6345, - 6362, 6369, 6376, 6383, 6390, 6397, 6404, 6411, 6418 + 6352, 6359, 88, 6366, 6373, 6380, 6387, 6394, 6401, 6408, + 6415, 6422, 6429 } ; -static const flex_int16_t yy_def[3310] = +static const flex_int16_t yy_def[3314] = { 0, - 3291, 1, 3292, 3292, 3293, 3293, 3294, 3294, 3295, 3295, - 3296, 3296, 3297, 3297, 3298, 3298, 3291, 3299, 3291, 3291, - 3291, 3291, 3300, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3301, 3291, 3291, 3291, - 3301, 3302, 3291, 3291, 3291, 3302, 3303, 3291, 3291, 3291, - 3291, 3303, 3304, 3291, 3291, 3291, 3304, 3305, 3291, 3306, - 3291, 3305, 3305, 3307, 3291, 3291, 3291, 3291, 3307, 3308, - 3291, 3291, 3291, 3308, 3299, 3299, 3291, 3309, 3300, 3309, - 3300, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3295, 1, 3296, 3296, 3297, 3297, 3298, 3298, 3299, 3299, + 3300, 3300, 3301, 3301, 3302, 3302, 3295, 3303, 3295, 3295, + 3295, 3295, 3304, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3305, 3295, 3295, 3295, + 3305, 3306, 3295, 3295, 3295, 3306, 3307, 3295, 3295, 3295, + 3295, 3307, 3308, 3295, 3295, 3295, 3308, 3309, 3295, 3310, + 3295, 3309, 3309, 3311, 3295, 3295, 3295, 3295, 3311, 3312, + 3295, 3295, 3295, 3312, 3303, 3303, 3295, 3313, 3304, 3313, + 3304, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3301, 3301, 3302, - 3302, 3303, 3303, 3291, 3304, 3304, 3305, 3305, 3306, 3306, - 3305, 3307, 3307, 3291, 3308, 3308, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3305, 3305, + 3306, 3306, 3307, 3307, 3295, 3308, 3308, 3309, 3309, 3310, + 3310, 3309, 3311, 3311, 3295, 3312, 3312, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3305, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3309, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3305, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3309, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3295, 3303, 3295, 3303, 3303, 3303, 3303, + 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, - 3305, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, + 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3295, 3303, 3309, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, - 3299, 3305, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, - 3299, 3291, 3291, 3299, 3291, 3291, 3299, 3299, 3291, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3303, 3303, 3303, 3303, 3303, 3309, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3295, 3303, 3295, 3295, 3303, 3295, 3295, + 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3305, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3291, 3299, 3299, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3309, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3291, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3291, + 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3295, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3295, 3303, 3303, - 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, - 3305, 3305, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3303, 3303, 3303, 3295, 3303, 3303, 3295, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3295, 3303, 3303, 3309, 3309, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, - 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, - 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3305, 3299, 3299, - 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, + 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3295, 3309, 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3291, 3299, 3291, 3299, 3299, 3299, - 3299, 3299, 3291, 3299, 3291, 3299, 3299, 3299, 3299, 3291, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, - 3299, 3305, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, + 3295, 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3295, 3303, + 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3295, 3303, 3309, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, - 3291, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3291, 3299, 3291, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3295, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, + 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3291, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3291, 3305, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3295, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, + 3303, 3295, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3295, 3309, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, - 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, - 3291, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3295, 3295, 3303, 3303, 3303, 3295, 3303, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, - 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, - 3299, 3299, 3291, 3299, 3299, 3299, 3291, 3299, 3299, 3299, - 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3305, 3299, 3291, 3299, 3299, 3299, 3291, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3291, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, + 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3295, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, + 3295, 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3309, 3303, 3295, 3303, 3303, 3303, + 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, - 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3291, 3291, 3299, 3291, 3299, - 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3291, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3291, - 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, + 3303, 3295, 3303, 3295, 3303, 3303, 3303, 3295, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, + 3295, 3303, 3295, 3303, 3303, 3303, 3295, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3295, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, + 3303, 3295, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3295, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, - 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, - 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3291, 3299, - 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3305, 3299, 3299, 3299, 3299, 3299, - 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, + 3295, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, + 3303, 3295, 3295, 3303, 3295, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3309, 3303, + 3303, 3303, 3303, 3303, 3303, 3295, 3295, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, - 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3291, 3299, 3291, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3295, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, + 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, - 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3291, 3299, 3291, 3299, 3299, 3299, 3299, 3305, - 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, - 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3291, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, + 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3295, 3303, + 3303, 3303, 3303, 3309, 3303, 3295, 3303, 3303, 3303, 3303, + 3303, 3295, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, + 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3291, - 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3291, 3291, 3299, - 3299, 3299, 3299, 3299, 3291, 3291, 3299, 3291, 3299, 3291, - 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3291, - 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, - 3299, 3291, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, - 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, + 3303, 3303, 3303, 3295, 3303, 3295, 3303, 3303, 3303, 3303, + 3303, 3295, 3295, 3303, 3303, 3303, 3303, 3303, 3295, 3295, + 3303, 3295, 3303, 3295, 3303, 3303, 3295, 3295, 3303, 3303, + 3303, 3303, 3303, 3295, 3303, 3295, 3303, 3303, 3303, 3303, + 3303, 3295, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, + 3295, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3305, 3299, 3299, - 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3291, 3299, 3291, 3299, 3299, 3299, 3299, - 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3291, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3291, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3309, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3295, + 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, + 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3295, 3303, 3295, 3303, 3303, 3303, - 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, - 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3291, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3291, 3291, 3291, 3291, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3291, 3299, 3291, 3291, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, - 3299, 3299, 3299, 3305, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3291, 3291, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3291, + 3303, 3303, 3303, 3303, 3295, 3295, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3295, 3303, + 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3295, 3295, 3295, 3295, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, + 3295, 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3309, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, + 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, - 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3291, 3291, 3299, 3299, 3299, 3291, 3291, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3291, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3291, 3299, 3299, 3291, 3299, 3299, 3299, 3291, 3299, 3299, - 3299, 3299, 3291, 3299, 3299, 3299, 3291, 3299, 3291, 3299, - 3299, 3299, 3299, 3291, 3299, 3299, 3291, 3299, 3299, 3299, - 3299, 3291, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3291, 3305, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3291, + 3303, 3303, 3303, 3295, 3303, 3295, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3295, 3295, 3303, 3303, 3303, 3295, + 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3295, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3295, 3303, 3303, + 3303, 3295, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, + 3295, 3303, 3295, 3303, 3303, 3303, 3303, 3295, 3303, 3303, + 3295, 3303, 3303, 3303, 3303, 3295, 3303, 3295, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3295, 3295, 3309, 3303, 3303, 3303, 3303, 3303, 3303, 3303, - 3299, 3291, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, - 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3291, 3299, 3299, - 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3291, 3291, 3291, 3299, 3299, 3291, 3299, 3299, - 3299, 3299, 3291, 3299, 3299, 3291, 3291, 3299, 3299, 3299, - 3299, 3291, 3299, 3291, 3299, 3291, 3299, 3299, 3299, 3299, - 3291, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, + 3303, 3303, 3295, 3295, 3303, 3295, 3303, 3303, 3295, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3295, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, + 3303, 3295, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3295, 3295, 3303, + 3303, 3295, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3295, + 3295, 3303, 3303, 3303, 3303, 3295, 3303, 3295, 3303, 3295, + 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3295, 3303, 3303, - 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3291, 3299, 3291, 3299, 3291, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3291, 3291, 3299, 3299, 3291, 3299, 3291, 3299, 3291, - 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3291, - 3299, 3299, 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3291, 3291, 3291, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, + 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3295, 3303, + 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3295, 3295, 3303, 3303, 3295, + 3303, 3295, 3303, 3295, 3303, 3303, 3303, 3303, 3295, 3303, + 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3295, 3295, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3295, + 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, - 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3291, 3299, 3291, 3291, 3299, 3291, - 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, - 3299, 3291, 3299, 3299, 3299, 3299, 3291, 3291, 3299, 3291, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, - 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3291, - 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, - 3291, 3299, 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3291, - 3291, 3291, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, + 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, + 3295, 3295, 3303, 3295, 3303, 3303, 3303, 3303, 3295, 3303, + 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, + 3295, 3295, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3295, 3303, + 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3295, + 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3295, 3295, + 3303, 3303, 3303, 3295, 3295, 3295, 3303, 3303, 3303, 3303, - 3299, 3299, 3291, 3299, 3299, 3299, 3291, 3291, 3299, 3299, - 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3291, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3291, 3291, 3299, 3291, 3299, 3299, 3291, - 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, - 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299, - 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, - 3299, 3291, 3291, 3299, 3299, 3291, 3291, 3299, 3291, 3291, + 3295, 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, + 3295, 3295, 3303, 3303, 3303, 3303, 3295, 3295, 3303, 3303, + 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3295, 3303, + 3295, 3303, 3303, 3295, 3295, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3295, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3295, 3303, + 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3295, 3303, 3303, 3295, 3295, 3303, 3303, 3295, - 3291, 3291, 3291, 3291, 3291, 3299, 3291, 3299, 3299, 3299, - 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3291, 3291, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3291, 3299, - 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3291, 3299, 3291, 3291, 3299, 3299, 3291, - 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, + 3295, 3303, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3303, + 3295, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, + 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3295, 3295, 3295, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3295, 3303, 3295, 3303, 3295, 3295, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3295, + 3295, 3303, 3303, 3295, 3303, 3303, 3295, 3303, 3303, 3303, - 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, - 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, - 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, - 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, - 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3291, 3299, - 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3291, - 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3291, 3291, - 0, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, + 3303, 3303, 3303, 3303, 3303, 3303, 3295, 3295, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3295, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3295, 3303, 3295, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3295, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, + 3303, 3303, 3303, 3295, 3303, 3303, 3295, 3303, 3303, 3303, + 3303, 3303, 3295, 3303, 3303, 3303, 3303, 3303, 3303, 3295, + 3303, 3303, 3303, 3295, 3303, 3295, 3295, 3303, 3303, 3303, + 3303, 3303, 3295, 3295, 0, 3295, 3295, 3295, 3295, 3295, - 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291 + 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, + 3295, 3295, 3295 } ; -static const flex_int16_t yy_nxt[6467] = +static const flex_int16_t yy_nxt[6478] = { 0, 18, 19, 20, 21, 22, 23, 22, 18, 18, 18, 18, 18, 22, 24, 25, 26, 27, 28, 29, 30, @@ -1520,708 +1522,709 @@ static const flex_int16_t yy_nxt[6467] = 67, 19, 20, 21, 69, 70, 71, 75, 76, 77, 78, 86, 22, 72, 121, 86, 120, 109, 86, 79, - 158, 158, 73, 19, 20, 21, 69, 70, 71, 75, - 76, 77, 78, 185, 22, 72, 81, 82, 83, 129, + 159, 159, 73, 19, 20, 21, 69, 70, 71, 75, + 76, 77, 78, 186, 22, 72, 81, 82, 83, 130, 90, 79, 90, 90, 73, 90, 86, 84, 81, 82, - 83, 90, 91, 86, 86, 98, 92, 93, 168, 84, - 94, 157, 99, 86, 110, 95, 100, 160, 86, 101, - 160, 168, 86, 112, 96, 86, 165, 165, 111, 86, - 102, 113, 135, 115, 103, 171, 116, 104, 86, 105, - 106, 177, 114, 117, 168, 118, 86, 122, 86, 126, - 107, 86, 154, 127, 176, 123, 155, 86, 86, 136, + 83, 90, 91, 86, 86, 98, 92, 93, 169, 84, + 94, 158, 99, 86, 110, 95, 100, 161, 86, 101, + 161, 169, 86, 112, 96, 86, 166, 166, 111, 86, + 102, 113, 136, 115, 103, 172, 116, 104, 86, 105, + 106, 178, 114, 117, 169, 118, 86, 122, 86, 126, + 107, 86, 155, 127, 177, 123, 156, 86, 86, 137, - 156, 124, 130, 137, 86, 125, 131, 86, 146, 128, - 147, 179, 132, 138, 139, 133, 140, 86, 86, 148, - 87, 150, 134, 141, 88, 149, 142, 162, 86, 162, - 162, 151, 162, 143, 174, 152, 153, 144, 145, 90, - 180, 90, 90, 167, 90, 167, 167, 172, 167, 172, - 172, 170, 172, 175, 175, 85, 86, 85, 85, 90, - 85, 90, 90, 86, 90, 86, 85, 178, 182, 86, - 90, 91, 183, 86, 86, 86, 181, 86, 86, 86, - 195, 188, 186, 86, 86, 184, 86, 189, 187, 190, - 86, 86, 86, 173, 86, 191, 192, 197, 194, 196, + 157, 124, 131, 138, 87, 125, 132, 128, 88, 129, + 176, 176, 133, 139, 140, 134, 141, 86, 86, 86, + 86, 179, 135, 142, 86, 147, 143, 148, 86, 86, + 86, 181, 183, 144, 151, 180, 149, 145, 146, 86, + 182, 86, 150, 206, 152, 175, 208, 86, 153, 154, + 163, 225, 163, 163, 90, 163, 90, 90, 168, 90, + 168, 168, 173, 168, 173, 173, 171, 173, 85, 86, + 85, 85, 90, 85, 90, 90, 86, 90, 86, 85, + 86, 184, 86, 90, 91, 187, 86, 192, 193, 86, + 86, 196, 189, 86, 185, 86, 188, 86, 190, 86, - 193, 86, 203, 86, 198, 200, 201, 205, 86, 86, - 204, 199, 86, 202, 207, 209, 86, 213, 210, 86, - 86, 206, 208, 86, 216, 86, 86, 86, 86, 218, - 86, 211, 212, 219, 223, 215, 86, 225, 226, 86, - 224, 86, 214, 86, 217, 922, 221, 86, 227, 220, - 86, 222, 228, 86, 231, 86, 86, 86, 236, 86, - 233, 86, 86, 229, 234, 230, 238, 86, 248, 86, - 86, 232, 86, 86, 86, 239, 235, 86, 86, 237, - 244, 240, 241, 247, 249, 86, 250, 242, 243, 86, - 86, 245, 256, 86, 255, 246, 253, 86, 86, 259, + 191, 86, 194, 86, 198, 86, 174, 199, 195, 86, + 197, 86, 201, 202, 86, 200, 86, 204, 214, 210, + 203, 205, 211, 209, 86, 207, 86, 86, 86, 86, + 216, 217, 86, 222, 86, 212, 213, 219, 223, 226, + 227, 220, 224, 215, 86, 86, 86, 86, 86, 231, + 86, 218, 228, 229, 233, 86, 86, 221, 86, 230, + 235, 86, 238, 86, 236, 232, 234, 86, 86, 86, + 169, 240, 86, 86, 252, 250, 237, 86, 239, 86, + 241, 86, 246, 243, 86, 249, 242, 86, 245, 244, + 86, 253, 86, 247, 254, 86, 251, 248, 259, 255, - 86, 86, 86, 251, 86, 263, 252, 254, 260, 258, - 262, 257, 86, 264, 158, 158, 267, 266, 160, 168, - 261, 160, 265, 162, 168, 162, 162, 268, 162, 165, - 165, 167, 86, 167, 167, 90, 167, 90, 90, 172, - 90, 172, 172, 86, 172, 175, 175, 170, 269, 270, - 272, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 274, 277, 86, 280, 271, 276, 273, 275, 86, 86, - 283, 282, 279, 86, 286, 278, 86, 284, 288, 281, - 86, 287, 86, 289, 86, 86, 292, 86, 290, 86, - 297, 293, 299, 285, 86, 86, 294, 86, 304, 298, + 86, 86, 86, 257, 261, 86, 265, 86, 86, 258, + 256, 260, 264, 262, 86, 159, 159, 266, 86, 268, + 161, 269, 86, 161, 367, 263, 267, 163, 169, 163, + 163, 270, 163, 166, 166, 168, 274, 168, 168, 90, + 168, 90, 90, 173, 90, 173, 173, 86, 173, 176, + 176, 171, 271, 272, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 276, 86, 279, 282, 278, 273, 275, + 277, 86, 285, 284, 290, 281, 86, 280, 86, 286, + 86, 288, 283, 86, 289, 291, 86, 86, 86, 86, + 292, 86, 294, 86, 299, 86, 287, 295, 300, 86, - 300, 86, 295, 296, 86, 291, 301, 86, 86, 302, - 86, 306, 86, 307, 303, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 314, 315, 308, 305, 321, 309, - 311, 310, 322, 312, 339, 313, 86, 316, 323, 324, - 317, 326, 318, 86, 325, 86, 328, 86, 86, 330, - 86, 331, 86, 327, 319, 86, 320, 86, 334, 86, - 86, 336, 86, 337, 86, 335, 332, 86, 329, 86, - 86, 333, 86, 86, 86, 343, 86, 338, 340, 341, - 342, 345, 86, 86, 344, 86, 86, 347, 86, 346, - 352, 86, 348, 86, 86, 353, 86, 86, 354, 358, + 302, 304, 296, 86, 303, 306, 86, 293, 297, 298, + 301, 86, 86, 86, 86, 86, 308, 86, 309, 86, + 86, 86, 310, 305, 86, 316, 317, 86, 311, 313, + 312, 167, 314, 86, 307, 86, 318, 315, 323, 319, + 326, 320, 86, 325, 324, 328, 86, 86, 327, 86, + 330, 86, 332, 321, 333, 322, 86, 329, 86, 336, + 86, 86, 331, 86, 86, 86, 337, 338, 339, 334, + 335, 340, 86, 86, 86, 86, 342, 86, 86, 341, + 343, 86, 86, 86, 345, 86, 86, 86, 86, 86, + 348, 350, 86, 355, 346, 344, 349, 351, 356, 86, - 349, 356, 350, 86, 361, 86, 86, 86, 351, 355, - 86, 86, 363, 364, 86, 86, 357, 86, 86, 367, - 86, 359, 360, 368, 366, 86, 362, 86, 86, 86, - 370, 428, 371, 365, 369, 168, 86, 86, 373, 374, - 86, 372, 375, 377, 86, 86, 378, 382, 86, 86, - 381, 380, 86, 86, 86, 86, 86, 86, 388, 389, - 386, 384, 390, 379, 86, 86, 376, 86, 86, 392, - 86, 383, 391, 86, 385, 86, 86, 86, 86, 387, - 399, 86, 402, 393, 394, 397, 86, 86, 86, 86, - 396, 395, 400, 86, 403, 401, 86, 86, 86, 405, + 352, 86, 86, 347, 86, 353, 357, 354, 359, 361, + 358, 86, 364, 86, 86, 86, 86, 370, 86, 366, + 86, 86, 371, 86, 360, 373, 86, 369, 86, 362, + 363, 86, 86, 365, 86, 368, 86, 376, 374, 378, + 372, 377, 86, 380, 169, 86, 375, 86, 86, 86, + 381, 86, 384, 86, 86, 86, 385, 383, 86, 391, + 389, 387, 392, 379, 86, 86, 86, 382, 86, 393, + 386, 394, 395, 86, 388, 86, 86, 86, 86, 86, + 86, 390, 86, 406, 402, 403, 86, 400, 396, 397, + 86, 399, 86, 86, 398, 404, 86, 405, 86, 408, - 86, 406, 166, 398, 407, 404, 86, 86, 86, 409, - 86, 408, 410, 86, 413, 415, 411, 417, 86, 412, - 86, 86, 86, 86, 416, 86, 422, 414, 86, 418, - 86, 420, 86, 421, 423, 86, 86, 86, 425, 86, - 86, 86, 429, 432, 86, 86, 419, 430, 86, 86, - 435, 86, 86, 426, 440, 431, 86, 427, 86, 424, - 86, 437, 86, 86, 433, 441, 434, 86, 439, 436, - 450, 86, 86, 86, 455, 442, 449, 451, 438, 86, - 86, 86, 86, 452, 564, 453, 456, 86, 443, 458, - 459, 444, 86, 457, 86, 462, 445, 446, 447, 448, + 86, 409, 86, 86, 86, 401, 412, 86, 86, 416, + 407, 413, 86, 86, 418, 86, 86, 414, 410, 411, + 86, 415, 86, 420, 419, 86, 86, 417, 86, 86, + 421, 86, 423, 424, 425, 426, 428, 86, 86, 86, + 86, 86, 433, 429, 86, 432, 86, 422, 86, 86, + 165, 431, 435, 86, 86, 438, 86, 86, 430, 86, + 427, 443, 440, 86, 434, 86, 444, 86, 436, 442, + 86, 437, 86, 86, 439, 466, 86, 445, 454, 441, + 86, 452, 86, 86, 86, 455, 458, 456, 453, 446, + 86, 86, 447, 465, 86, 86, 460, 448, 449, 450, - 460, 454, 86, 86, 86, 461, 86, 468, 86, 86, - 86, 463, 466, 467, 464, 469, 86, 465, 86, 470, - 86, 471, 86, 86, 472, 86, 86, 473, 474, 478, - 86, 86, 479, 86, 480, 86, 86, 496, 483, 86, - 484, 477, 475, 481, 485, 476, 86, 86, 86, 86, - 482, 488, 486, 489, 86, 86, 497, 491, 487, 498, - 86, 86, 86, 490, 495, 86, 499, 86, 500, 86, - 492, 86, 164, 493, 501, 494, 86, 86, 502, 511, - 86, 86, 513, 516, 86, 515, 503, 86, 504, 510, - 505, 168, 514, 527, 86, 518, 528, 512, 86, 517, + 451, 86, 791, 457, 459, 86, 463, 461, 462, 469, + 86, 464, 86, 86, 472, 86, 86, 474, 467, 470, + 86, 468, 471, 86, 475, 473, 86, 86, 86, 86, + 86, 86, 477, 482, 86, 86, 483, 86, 484, 86, + 478, 476, 487, 488, 86, 86, 481, 485, 479, 86, + 480, 86, 86, 499, 486, 86, 489, 490, 492, 494, + 493, 86, 501, 491, 495, 86, 500, 86, 86, 502, + 86, 86, 503, 86, 86, 86, 515, 496, 504, 86, + 497, 86, 498, 86, 505, 164, 86, 86, 506, 517, + 520, 514, 86, 519, 516, 522, 507, 86, 508, 86, - 86, 529, 86, 506, 530, 86, 507, 86, 508, 526, - 509, 86, 531, 519, 520, 86, 534, 86, 536, 532, - 533, 86, 86, 521, 86, 522, 523, 524, 86, 540, - 525, 86, 86, 542, 535, 86, 539, 86, 86, 541, - 86, 538, 549, 537, 86, 547, 546, 86, 86, 86, - 550, 543, 544, 548, 86, 554, 86, 545, 86, 552, - 86, 86, 86, 86, 551, 557, 558, 559, 553, 86, - 86, 86, 86, 86, 556, 565, 566, 86, 571, 561, - 86, 555, 560, 86, 568, 563, 562, 569, 86, 86, - 86, 572, 86, 567, 585, 86, 86, 163, 86, 86, + 509, 518, 536, 86, 532, 86, 521, 530, 531, 533, + 86, 534, 86, 510, 86, 86, 511, 169, 512, 86, + 513, 86, 539, 523, 524, 540, 86, 537, 538, 86, + 86, 86, 162, 525, 542, 526, 527, 528, 535, 544, + 529, 541, 86, 543, 86, 86, 548, 546, 86, 545, + 549, 86, 553, 551, 86, 554, 86, 86, 86, 550, + 86, 558, 86, 86, 86, 547, 552, 86, 86, 556, + 86, 86, 86, 561, 557, 160, 555, 562, 563, 560, + 86, 86, 86, 568, 564, 567, 565, 559, 566, 86, + 86, 569, 570, 86, 572, 86, 575, 573, 86, 86, - 86, 580, 570, 573, 577, 574, 576, 586, 575, 581, - 582, 86, 86, 583, 584, 578, 587, 579, 86, 590, - 591, 589, 588, 86, 86, 86, 86, 86, 593, 592, - 594, 595, 86, 86, 597, 86, 599, 86, 86, 603, - 86, 86, 602, 600, 86, 86, 86, 86, 598, 86, - 604, 86, 596, 601, 607, 86, 608, 86, 609, 605, - 86, 86, 86, 86, 86, 86, 610, 611, 606, 86, - 619, 86, 615, 86, 614, 616, 617, 86, 618, 613, - 612, 86, 621, 86, 620, 86, 623, 86, 86, 86, - 86, 86, 86, 86, 86, 622, 625, 634, 626, 161, + 86, 576, 86, 86, 589, 86, 86, 592, 86, 571, + 86, 584, 574, 577, 581, 578, 580, 590, 579, 585, + 586, 86, 86, 587, 588, 582, 591, 583, 594, 86, + 86, 593, 86, 86, 86, 598, 596, 597, 86, 86, + 86, 601, 86, 599, 603, 86, 86, 86, 86, 606, + 595, 604, 607, 86, 86, 602, 86, 608, 86, 600, + 605, 86, 86, 86, 613, 86, 611, 612, 86, 609, + 86, 86, 614, 86, 86, 86, 619, 610, 620, 86, + 615, 86, 622, 618, 623, 616, 86, 621, 617, 86, + 625, 86, 86, 627, 86, 86, 86, 86, 86, 86, - 636, 86, 628, 86, 624, 86, 86, 627, 633, 629, - 631, 630, 86, 632, 635, 638, 86, 637, 86, 86, - 86, 641, 644, 86, 639, 647, 86, 640, 86, 646, - 86, 86, 86, 642, 86, 643, 86, 650, 86, 86, - 86, 86, 653, 645, 649, 654, 656, 86, 86, 648, - 86, 86, 86, 86, 655, 86, 651, 652, 86, 670, - 86, 86, 86, 657, 659, 692, 673, 658, 86, 660, - 668, 671, 86, 669, 661, 676, 662, 672, 86, 86, - 86, 680, 663, 677, 664, 674, 681, 665, 666, 675, - 86, 86, 86, 86, 667, 678, 685, 682, 679, 86, + 86, 86, 86, 629, 86, 630, 638, 624, 639, 86, + 632, 86, 86, 626, 86, 628, 641, 631, 633, 635, + 634, 640, 636, 637, 86, 86, 86, 86, 642, 645, + 86, 648, 643, 86, 651, 644, 86, 86, 86, 646, + 86, 650, 86, 86, 86, 647, 86, 654, 657, 86, + 653, 86, 86, 649, 658, 86, 86, 660, 652, 86, + 86, 86, 86, 86, 86, 655, 659, 656, 674, 86, + 86, 661, 663, 696, 677, 662, 86, 664, 673, 86, + 672, 675, 665, 177, 666, 676, 86, 86, 86, 86, + 667, 681, 668, 678, 680, 669, 670, 679, 684, 685, - 86, 86, 688, 86, 86, 683, 86, 684, 86, 690, - 86, 86, 86, 86, 86, 86, 86, 696, 86, 691, - 687, 693, 686, 697, 700, 701, 86, 168, 689, 694, - 699, 702, 698, 695, 703, 86, 86, 86, 704, 86, - 86, 86, 86, 86, 86, 86, 710, 712, 86, 86, - 705, 707, 715, 86, 708, 706, 711, 714, 716, 709, - 717, 718, 86, 86, 86, 86, 720, 86, 713, 86, - 86, 86, 86, 86, 719, 723, 724, 729, 86, 721, - 725, 86, 730, 86, 722, 732, 86, 726, 728, 734, - 727, 731, 733, 86, 737, 86, 735, 86, 736, 86, + 86, 86, 671, 682, 86, 86, 683, 689, 86, 86, + 686, 86, 692, 86, 86, 687, 86, 688, 86, 694, + 86, 86, 86, 86, 86, 701, 86, 175, 700, 691, + 86, 690, 86, 698, 86, 695, 697, 86, 693, 705, + 704, 703, 169, 702, 699, 707, 706, 709, 86, 708, + 86, 86, 86, 86, 86, 86, 86, 716, 714, 86, + 719, 86, 86, 86, 711, 86, 720, 710, 712, 715, + 713, 718, 86, 722, 721, 86, 86, 723, 724, 86, + 86, 86, 86, 717, 86, 728, 727, 86, 86, 86, + 725, 733, 86, 729, 829, 726, 734, 86, 736, 86, - 86, 738, 740, 86, 86, 86, 739, 86, 742, 743, - 86, 86, 86, 86, 86, 741, 746, 747, 86, 745, - 86, 751, 750, 86, 86, 86, 86, 86, 752, 744, - 754, 86, 756, 86, 86, 86, 86, 748, 86, 749, - 755, 753, 86, 759, 762, 86, 86, 763, 757, 765, - 86, 760, 86, 86, 766, 758, 761, 767, 768, 764, - 86, 770, 86, 86, 86, 86, 86, 777, 773, 774, - 769, 771, 86, 86, 86, 779, 86, 86, 772, 775, - 780, 776, 782, 778, 86, 86, 86, 783, 86, 86, - 784, 86, 86, 787, 86, 86, 789, 791, 86, 86, + 730, 738, 735, 731, 732, 737, 86, 86, 739, 86, + 740, 86, 741, 744, 742, 86, 86, 86, 86, 743, + 86, 86, 747, 86, 746, 86, 86, 745, 750, 86, + 755, 749, 86, 86, 751, 748, 86, 754, 86, 86, + 86, 86, 756, 86, 760, 758, 86, 86, 86, 752, + 86, 753, 86, 763, 766, 759, 86, 757, 86, 86, + 86, 761, 86, 767, 86, 774, 764, 174, 762, 86, + 768, 86, 765, 86, 769, 86, 86, 773, 777, 770, + 775, 778, 771, 772, 86, 776, 781, 86, 86, 779, + 86, 783, 86, 86, 784, 86, 782, 86, 786, 780, - 86, 86, 781, 86, 785, 788, 797, 786, 792, 86, - 795, 794, 86, 159, 790, 796, 86, 86, 86, 793, - 799, 802, 798, 800, 801, 86, 86, 804, 86, 806, - 803, 86, 808, 86, 86, 86, 807, 809, 86, 86, - 812, 86, 805, 86, 811, 813, 86, 86, 86, 819, - 86, 86, 816, 86, 814, 86, 815, 821, 810, 86, - 86, 824, 86, 86, 822, 826, 817, 818, 828, 820, - 825, 823, 86, 86, 86, 86, 831, 86, 830, 835, - 827, 832, 86, 86, 829, 86, 833, 86, 86, 837, - 86, 86, 86, 86, 86, 843, 86, 86, 844, 86, + 787, 86, 86, 86, 86, 86, 788, 86, 793, 795, + 86, 789, 86, 86, 86, 86, 785, 792, 801, 86, + 790, 796, 86, 799, 86, 794, 797, 800, 802, 798, + 86, 804, 805, 803, 86, 86, 86, 808, 806, 86, + 810, 807, 86, 812, 86, 86, 86, 811, 813, 86, + 86, 816, 86, 809, 86, 815, 817, 86, 86, 86, + 823, 86, 86, 820, 169, 818, 86, 819, 825, 814, + 86, 86, 828, 86, 86, 826, 830, 821, 822, 832, + 824, 86, 827, 86, 835, 86, 833, 86, 834, 836, + 86, 831, 86, 837, 86, 86, 839, 86, 86, 841, - 834, 86, 836, 86, 86, 845, 838, 86, 839, 840, - 86, 841, 846, 842, 847, 86, 852, 86, 86, 850, - 86, 848, 86, 849, 86, 851, 86, 86, 857, 853, - 854, 86, 86, 86, 86, 86, 855, 86, 866, 856, - 864, 86, 86, 859, 858, 867, 86, 86, 865, 860, - 861, 862, 863, 86, 86, 86, 868, 86, 870, 872, - 86, 86, 86, 86, 86, 869, 176, 871, 876, 877, - 878, 873, 86, 875, 86, 86, 874, 879, 86, 880, - 881, 86, 882, 86, 86, 168, 86, 883, 86, 888, - 887, 86, 885, 86, 86, 884, 886, 889, 86, 86, + 86, 86, 86, 847, 86, 842, 838, 86, 848, 86, + 86, 86, 86, 86, 840, 86, 843, 86, 844, 849, + 845, 86, 846, 86, 86, 852, 850, 851, 856, 854, + 855, 86, 853, 86, 86, 857, 858, 861, 86, 86, + 86, 86, 859, 86, 86, 86, 870, 86, 86, 868, + 860, 86, 871, 86, 86, 863, 862, 86, 864, 865, + 866, 869, 867, 86, 86, 872, 86, 86, 874, 876, + 877, 86, 873, 86, 86, 86, 86, 875, 880, 881, + 879, 883, 882, 86, 86, 878, 86, 86, 884, 86, + 86, 885, 169, 886, 86, 86, 887, 891, 888, 889, - 891, 86, 890, 895, 86, 86, 896, 898, 86, 892, - 86, 86, 893, 86, 897, 899, 86, 902, 86, 86, - 894, 903, 900, 86, 86, 86, 908, 86, 904, 86, - 901, 905, 86, 909, 910, 86, 907, 86, 86, 86, - 86, 906, 86, 86, 86, 929, 924, 911, 923, 925, - 86, 926, 86, 921, 928, 86, 930, 913, 86, 86, - 912, 86, 86, 914, 86, 935, 915, 86, 927, 931, - 916, 86, 943, 917, 86, 86, 933, 932, 86, 86, - 918, 919, 946, 920, 934, 86, 936, 937, 86, 938, - 86, 86, 939, 945, 948, 944, 950, 940, 951, 86, + 86, 890, 86, 892, 895, 86, 893, 86, 894, 86, + 899, 86, 86, 86, 900, 902, 86, 903, 86, 86, + 896, 897, 901, 906, 86, 86, 86, 904, 86, 86, + 898, 86, 908, 912, 86, 86, 86, 909, 905, 86, + 86, 86, 913, 914, 907, 86, 86, 86, 86, 911, + 86, 910, 86, 915, 928, 86, 927, 86, 929, 930, + 925, 917, 167, 926, 86, 916, 86, 86, 918, 937, + 86, 919, 86, 931, 932, 920, 86, 933, 921, 86, + 934, 86, 936, 935, 939, 922, 923, 938, 924, 86, + 86, 86, 940, 941, 947, 942, 86, 86, 943, 86, - 86, 955, 86, 941, 942, 954, 956, 86, 86, 86, - 949, 174, 947, 86, 952, 957, 86, 958, 960, 86, - 961, 86, 86, 86, 959, 953, 962, 86, 964, 86, - 963, 965, 86, 86, 967, 966, 86, 86, 86, 86, - 969, 86, 973, 86, 86, 86, 972, 86, 968, 86, - 976, 86, 982, 86, 980, 978, 86, 970, 971, 974, - 86, 975, 86, 977, 983, 1001, 86, 981, 986, 984, - 86, 985, 987, 979, 86, 86, 989, 86, 86, 86, - 988, 86, 86, 991, 990, 993, 86, 992, 994, 86, - 86, 86, 86, 86, 86, 1000, 86, 997, 995, 86, + 86, 950, 948, 944, 952, 86, 86, 86, 86, 945, + 946, 954, 86, 959, 949, 958, 86, 962, 960, 86, + 953, 86, 956, 951, 955, 86, 86, 86, 961, 86, + 965, 964, 966, 957, 86, 86, 86, 967, 969, 86, + 963, 968, 86, 86, 970, 86, 86, 971, 86, 973, + 86, 86, 977, 86, 86, 86, 86, 980, 976, 86, + 86, 86, 972, 1030, 984, 165, 974, 975, 978, 979, + 86, 982, 981, 86, 986, 86, 86, 990, 985, 987, + 991, 989, 983, 86, 988, 86, 86, 86, 993, 86, + 86, 86, 992, 994, 86, 995, 997, 86, 86, 996, - 998, 1003, 86, 86, 1004, 86, 86, 1002, 86, 996, - 86, 86, 86, 999, 1006, 1007, 1009, 86, 86, 86, - 1011, 1010, 1005, 1012, 86, 86, 86, 86, 1019, 86, - 1017, 86, 1008, 1013, 1015, 1018, 86, 86, 86, 1016, - 86, 1027, 86, 1024, 1020, 86, 1022, 1026, 86, 1014, - 1021, 1025, 86, 86, 86, 86, 86, 1029, 86, 86, - 86, 86, 1023, 1035, 86, 1037, 86, 1040, 86, 1028, - 86, 173, 86, 86, 1030, 1031, 1032, 1041, 86, 1034, - 1033, 86, 1038, 1036, 1042, 1039, 86, 1045, 86, 1043, - 1048, 86, 1044, 1047, 86, 86, 86, 86, 86, 86, + 998, 86, 86, 86, 86, 86, 999, 86, 1001, 1004, + 86, 1002, 1008, 86, 1007, 86, 1005, 86, 86, 86, + 1000, 1006, 86, 86, 1003, 86, 86, 86, 1010, 86, + 1013, 1011, 1015, 86, 86, 1014, 1009, 86, 1016, 86, + 86, 1017, 86, 1021, 86, 1023, 1019, 1012, 1022, 86, + 86, 86, 1020, 86, 86, 1024, 1028, 1031, 86, 1018, + 1026, 1025, 86, 86, 1029, 86, 86, 1033, 86, 86, + 86, 86, 86, 86, 1027, 1032, 1041, 86, 86, 1039, + 86, 1044, 1294, 86, 1034, 1035, 1036, 86, 86, 1038, + 1037, 1042, 1045, 86, 1040, 86, 1043, 1047, 86, 86, - 1046, 86, 86, 1057, 1050, 1052, 1058, 1060, 86, 86, - 86, 86, 86, 86, 1049, 86, 1051, 1063, 1053, 1065, - 1055, 1054, 1056, 86, 1059, 1061, 1064, 86, 1062, 86, - 86, 86, 86, 86, 1071, 1069, 1072, 86, 86, 1076, - 1073, 1067, 86, 86, 86, 86, 1066, 1078, 86, 1068, - 86, 86, 1070, 86, 1081, 86, 1074, 1075, 1080, 1082, - 168, 86, 86, 1077, 86, 1084, 1083, 86, 1079, 86, - 1085, 86, 1088, 86, 86, 86, 86, 1086, 86, 1101, - 86, 86, 1087, 1089, 1102, 1104, 86, 1091, 1092, 86, - 86, 86, 86, 1106, 1093, 1090, 1103, 1094, 86, 86, + 1046, 1049, 1052, 86, 1051, 86, 86, 1048, 86, 86, + 86, 86, 1050, 86, 86, 1054, 1061, 1056, 1062, 86, + 1064, 86, 86, 86, 86, 1053, 86, 86, 1055, 86, + 1057, 1069, 1059, 1058, 1060, 1063, 1067, 1065, 1068, 1066, + 86, 86, 86, 86, 86, 1076, 1073, 86, 1070, 86, + 1075, 86, 1071, 86, 86, 1080, 1077, 86, 1082, 86, + 1072, 86, 86, 86, 1074, 1078, 1085, 1079, 1084, 86, + 86, 1086, 169, 86, 1088, 86, 1089, 1081, 86, 86, + 1083, 86, 86, 86, 1087, 86, 1092, 86, 86, 86, + 1105, 86, 86, 1108, 86, 1090, 1106, 1095, 1091, 86, - 86, 1095, 86, 1096, 1120, 1109, 1107, 1097, 86, 1098, - 86, 86, 1111, 1108, 1099, 1105, 1110, 1112, 86, 1100, - 1113, 86, 1114, 86, 86, 1115, 86, 86, 86, 1118, - 86, 1121, 1133, 86, 86, 1130, 86, 1116, 1117, 1119, - 1126, 1122, 1125, 86, 1124, 1128, 1129, 1132, 1127, 1123, - 1131, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 1147, 86, 1144, 86, 86, 86, 1148, 86, 1143, - 86, 1146, 86, 1134, 1135, 86, 1136, 86, 1145, 1150, - 1149, 1137, 1154, 1138, 168, 1151, 1153, 1152, 86, 1139, - 86, 86, 86, 1158, 1140, 1141, 1155, 86, 1160, 86, + 1096, 1093, 86, 1094, 86, 1097, 1107, 86, 1110, 1098, + 86, 86, 1113, 1099, 86, 1100, 86, 1111, 86, 1101, + 86, 1102, 1119, 86, 1109, 1112, 1103, 1115, 1114, 1117, + 1118, 1104, 1116, 86, 1120, 86, 86, 86, 1121, 86, + 1122, 86, 1125, 86, 86, 86, 86, 86, 1124, 1131, + 1123, 1135, 1130, 1126, 1129, 1132, 86, 1128, 1133, 1134, + 86, 86, 1127, 1136, 86, 86, 1138, 86, 86, 86, + 86, 86, 86, 86, 1151, 1148, 86, 86, 86, 86, + 1147, 1152, 86, 1150, 86, 1139, 1149, 1137, 86, 1140, + 1153, 1154, 86, 1158, 1141, 86, 1142, 1155, 1156, 86, - 86, 1142, 1156, 86, 1161, 1163, 86, 86, 86, 1164, - 1157, 86, 86, 1166, 1168, 1159, 86, 86, 86, 86, - 86, 1169, 86, 1162, 1174, 1167, 1165, 1171, 1172, 86, - 86, 86, 86, 86, 86, 86, 1170, 1177, 1173, 86, - 1175, 86, 86, 86, 86, 86, 86, 86, 1176, 1179, - 1182, 1181, 1183, 1178, 1180, 86, 1186, 86, 86, 1185, - 1187, 1184, 86, 86, 1192, 1189, 1190, 86, 86, 86, - 86, 1188, 1191, 1194, 1195, 1196, 1197, 1199, 1193, 86, - 1198, 86, 86, 86, 1202, 86, 86, 86, 1204, 1203, - 86, 1205, 86, 86, 1200, 1206, 86, 86, 1201, 1207, + 1157, 86, 1143, 86, 1160, 86, 1159, 1144, 1145, 1164, + 86, 86, 86, 1161, 1146, 1165, 1167, 86, 86, 1162, + 1168, 86, 86, 1163, 1172, 86, 1170, 86, 86, 86, + 86, 86, 1166, 1173, 86, 1178, 86, 1169, 1171, 86, + 1175, 86, 86, 1176, 86, 1177, 1174, 1181, 1179, 86, + 86, 86, 86, 86, 86, 1180, 86, 86, 86, 86, + 1186, 1187, 1188, 1183, 1182, 1185, 1190, 86, 86, 86, + 1184, 1189, 86, 1191, 86, 86, 164, 1196, 1193, 86, + 1198, 1192, 86, 1195, 1199, 86, 86, 1194, 1203, 1197, + 1200, 1201, 86, 1202, 86, 86, 1206, 86, 86, 1204, - 86, 1213, 86, 86, 86, 1215, 1208, 86, 86, 1209, - 1211, 86, 86, 1217, 1210, 1212, 86, 86, 1216, 1219, - 86, 166, 1214, 86, 86, 1220, 1218, 86, 1221, 1222, - 86, 86, 1224, 1223, 86, 1225, 1228, 86, 86, 1230, - 1227, 1231, 86, 1226, 1229, 86, 1232, 86, 86, 86, - 1235, 1234, 86, 86, 86, 86, 86, 1241, 1239, 86, - 1242, 86, 86, 86, 1243, 1233, 86, 1244, 86, 1240, - 1236, 1246, 1237, 1245, 1238, 86, 1249, 86, 86, 1247, - 1251, 86, 86, 1250, 86, 86, 86, 86, 86, 86, - 86, 1256, 1257, 1252, 1253, 1248, 86, 86, 86, 86, + 1210, 1207, 86, 86, 1208, 86, 86, 1209, 86, 86, + 86, 1205, 1211, 1217, 86, 1219, 86, 86, 86, 86, + 1223, 86, 1213, 1215, 1216, 1212, 1214, 86, 86, 86, + 86, 1220, 1221, 86, 1218, 1225, 86, 86, 1226, 1224, + 86, 1228, 1222, 86, 86, 1227, 1231, 86, 1229, 1230, + 1234, 1235, 86, 1233, 86, 86, 86, 86, 86, 86, + 1232, 1238, 86, 1236, 86, 1239, 86, 86, 1245, 1243, + 1246, 86, 86, 1237, 86, 1240, 86, 1247, 1241, 86, + 1244, 86, 1242, 1250, 1248, 86, 1249, 1253, 86, 86, + 86, 1252, 86, 86, 86, 1254, 1255, 86, 86, 86, - 86, 1258, 1259, 1263, 1254, 1264, 1255, 86, 86, 86, - 1261, 86, 1266, 86, 1260, 1265, 1267, 86, 1262, 86, - 1271, 86, 86, 86, 86, 1270, 86, 1268, 86, 1277, - 86, 1273, 168, 1269, 86, 86, 86, 86, 86, 1272, - 86, 1282, 1274, 164, 86, 1284, 86, 1276, 1279, 1281, - 1280, 1275, 1278, 1283, 1286, 1287, 1288, 86, 1285, 86, - 86, 86, 1289, 86, 1291, 1290, 86, 86, 86, 86, - 86, 86, 86, 1294, 86, 1300, 86, 86, 1297, 86, - 1292, 1293, 86, 86, 1295, 86, 163, 1298, 1304, 1296, - 86, 1301, 86, 1299, 86, 1306, 1310, 1302, 1303, 86, + 86, 1256, 1260, 1251, 86, 86, 1258, 1257, 1261, 1263, + 86, 1262, 86, 1259, 86, 1267, 1268, 86, 86, 1271, + 86, 86, 86, 1270, 1265, 86, 86, 86, 1264, 86, + 1275, 86, 1269, 1266, 86, 86, 86, 86, 169, 1274, + 1273, 1281, 86, 86, 1272, 1277, 86, 1276, 86, 86, + 1278, 86, 86, 1286, 86, 86, 1280, 1283, 1282, 1301, + 1279, 1284, 1290, 1285, 1287, 1288, 86, 1291, 86, 1289, + 1292, 86, 86, 86, 86, 86, 1293, 1295, 86, 86, + 86, 86, 86, 1298, 1304, 86, 86, 86, 1296, 1297, + 86, 86, 86, 86, 1299, 1442, 1302, 86, 1308, 1300, - 1311, 1314, 86, 86, 1307, 1305, 1308, 1312, 86, 1309, - 1313, 86, 86, 86, 86, 1316, 86, 1315, 86, 86, - 86, 1320, 86, 1319, 1323, 86, 86, 1317, 86, 1327, - 86, 1318, 1322, 86, 86, 86, 1324, 1321, 1328, 1325, - 1329, 86, 86, 1333, 1326, 1332, 1330, 1331, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 1339, - 86, 86, 86, 1334, 1335, 1337, 1338, 1340, 1344, 1336, - 86, 86, 86, 1341, 86, 1343, 1345, 1342, 1346, 1348, - 1347, 86, 86, 86, 86, 86, 1349, 86, 1356, 86, - 86, 1350, 86, 1351, 86, 1359, 86, 86, 1354, 1353, + 1305, 1303, 1310, 86, 86, 1306, 1307, 1314, 86, 1315, + 1309, 1311, 86, 1312, 1317, 86, 1313, 1316, 86, 86, + 86, 86, 1322, 1320, 86, 1318, 86, 86, 86, 1324, + 86, 86, 86, 1319, 86, 1323, 1327, 1331, 86, 1329, + 1321, 86, 1326, 86, 86, 86, 1325, 86, 1328, 1332, + 1333, 1330, 1335, 86, 86, 86, 86, 1336, 1338, 86, + 86, 1334, 86, 1337, 86, 86, 86, 1343, 86, 86, + 1339, 1341, 86, 86, 86, 1340, 1344, 1342, 1348, 86, + 86, 86, 86, 86, 1345, 86, 1347, 1346, 1349, 1350, + 1352, 86, 86, 1360, 1351, 1353, 86, 1355, 1354, 86, - 1357, 1352, 1362, 1358, 1355, 86, 1364, 86, 1361, 86, - 1360, 1365, 86, 86, 1369, 1366, 86, 1363, 86, 1379, - 1383, 1367, 1368, 86, 1370, 86, 86, 1378, 1371, 1377, - 86, 1372, 1373, 86, 1380, 1381, 1374, 86, 86, 86, - 86, 86, 1375, 86, 1384, 1385, 1376, 1382, 86, 1386, - 86, 1388, 86, 86, 86, 1389, 86, 1390, 1387, 86, - 86, 1391, 86, 1393, 1395, 86, 1398, 1399, 86, 1525, - 1400, 1392, 86, 86, 1396, 86, 1394, 1402, 86, 1401, - 1397, 86, 1403, 86, 1404, 86, 1405, 1411, 1406, 86, - 1407, 1408, 1409, 1412, 86, 86, 1410, 1415, 86, 1413, + 86, 1356, 86, 86, 86, 86, 1358, 86, 1357, 162, + 1363, 1361, 1359, 86, 1362, 86, 1368, 1367, 1366, 86, + 1365, 1369, 86, 1364, 86, 1373, 1370, 86, 86, 1371, + 1383, 86, 1372, 86, 1374, 1405, 86, 1382, 1375, 86, + 1381, 1376, 1377, 86, 1384, 86, 1378, 1387, 1386, 86, + 1385, 86, 1379, 86, 1388, 86, 1380, 86, 1390, 86, + 1389, 86, 1392, 86, 86, 86, 1393, 86, 1394, 86, + 86, 86, 1391, 160, 1397, 1399, 86, 86, 1402, 1395, + 1403, 1404, 1396, 1400, 86, 86, 86, 1398, 1414, 1401, + 86, 1411, 1412, 1413, 1406, 86, 86, 86, 86, 1407, - 86, 86, 1416, 86, 1414, 86, 1419, 1417, 86, 86, - 86, 86, 1425, 86, 1426, 86, 86, 1421, 86, 1420, - 86, 86, 1418, 1427, 86, 1424, 1429, 86, 1422, 1423, - 1428, 86, 86, 1431, 1430, 1435, 86, 1434, 86, 1437, - 86, 86, 86, 1438, 86, 1432, 86, 1439, 86, 1443, - 86, 1440, 86, 1436, 1445, 86, 1433, 1442, 86, 1446, - 86, 1441, 86, 86, 86, 1447, 1450, 86, 86, 86, - 86, 86, 1444, 1452, 86, 1467, 1454, 86, 86, 86, - 1456, 86, 1457, 1448, 1449, 86, 1455, 86, 1451, 1453, - 1458, 86, 86, 1463, 1459, 1461, 1460, 1462, 86, 86, + 1415, 1408, 86, 1409, 1419, 1410, 86, 86, 86, 1420, + 86, 1418, 1416, 1423, 86, 1421, 1417, 86, 86, 86, + 86, 1429, 86, 1430, 86, 86, 1425, 86, 1424, 1422, + 86, 86, 1431, 86, 1428, 1433, 86, 1426, 1427, 1432, + 86, 86, 1435, 1439, 86, 1434, 1438, 86, 1441, 86, + 86, 86, 86, 1443, 1436, 86, 1444, 1447, 86, 86, + 1449, 86, 1440, 86, 1446, 1437, 86, 1450, 1451, 86, + 86, 1445, 1454, 86, 86, 86, 86, 86, 1456, 1448, + 86, 86, 1458, 1460, 86, 86, 86, 86, 1462, 1459, + 1452, 1453, 1464, 86, 1455, 86, 1457, 86, 86, 86, - 86, 86, 1465, 1464, 86, 1466, 1468, 86, 86, 86, - 86, 1473, 1474, 1470, 1475, 1471, 86, 86, 86, 1476, - 86, 86, 1469, 1472, 86, 86, 1480, 86, 168, 1477, - 86, 86, 1479, 1485, 1486, 1478, 86, 86, 86, 86, - 86, 1488, 1487, 1482, 1481, 86, 86, 86, 86, 86, - 1483, 1489, 86, 1496, 1484, 86, 86, 1490, 1491, 86, - 1493, 86, 86, 1494, 1495, 1492, 1500, 1501, 86, 86, - 86, 86, 86, 1505, 1503, 1497, 86, 1499, 1506, 86, - 1508, 1498, 86, 86, 1509, 1502, 86, 86, 86, 1504, - 1507, 86, 1514, 1517, 86, 1515, 1510, 1516, 1511, 1519, + 1466, 1463, 1461, 1468, 1470, 1467, 86, 1465, 86, 1469, + 86, 1471, 86, 1472, 86, 86, 86, 1477, 1478, 1480, + 1474, 86, 1475, 86, 86, 86, 1479, 86, 86, 1476, + 1473, 86, 1484, 86, 86, 169, 1481, 86, 86, 1489, + 1490, 86, 1483, 86, 86, 86, 86, 1482, 86, 1491, + 1486, 86, 1492, 1497, 1485, 86, 86, 1487, 86, 86, + 1500, 1488, 1493, 86, 1495, 86, 86, 86, 1494, 1498, + 86, 1496, 1504, 86, 1499, 1505, 86, 86, 1507, 86, + 1509, 86, 86, 1501, 1503, 1510, 86, 86, 86, 1513, + 1502, 1512, 86, 1506, 86, 86, 1508, 1511, 86, 1518, - 86, 1512, 86, 86, 1513, 86, 1520, 1522, 1518, 86, - 86, 1521, 1523, 86, 86, 1527, 86, 86, 86, 1528, - 86, 86, 1524, 1531, 86, 86, 86, 1526, 86, 1536, - 1537, 86, 86, 1540, 1529, 1533, 86, 1530, 86, 86, - 1532, 86, 1534, 1535, 86, 86, 86, 86, 1541, 1538, - 86, 1539, 1547, 86, 86, 1543, 86, 1542, 1549, 1544, - 1545, 1548, 86, 86, 1552, 1546, 86, 86, 1550, 86, - 1559, 1551, 86, 1556, 1557, 86, 1554, 1558, 1560, 86, - 86, 1553, 86, 86, 86, 86, 1565, 1566, 1561, 1555, - 1564, 1562, 86, 86, 1567, 86, 1568, 86, 1569, 86, + 1521, 1514, 1519, 1515, 1520, 86, 1523, 1516, 86, 86, + 1517, 86, 86, 1524, 86, 1526, 86, 86, 86, 1522, + 1527, 86, 1525, 1531, 86, 86, 86, 1528, 86, 1532, + 86, 1535, 86, 86, 1530, 1533, 86, 1540, 86, 86, + 1529, 86, 1541, 1544, 1537, 1534, 86, 86, 1536, 86, + 1538, 1539, 86, 86, 86, 86, 86, 1542, 1545, 86, + 1543, 1551, 86, 86, 1553, 86, 1546, 1547, 86, 1548, + 1549, 1550, 1552, 86, 1556, 86, 86, 1555, 1557, 1561, + 1554, 86, 1560, 1562, 1558, 86, 86, 1564, 86, 86, + 86, 86, 86, 86, 86, 1569, 1559, 1565, 1568, 1570, - 86, 1570, 86, 1571, 86, 1563, 86, 86, 86, 86, - 86, 86, 1578, 1572, 86, 86, 1577, 86, 86, 1574, - 86, 86, 1575, 1580, 1573, 1576, 1581, 1584, 86, 1589, - 1586, 1582, 1585, 86, 1579, 1587, 86, 1583, 86, 86, - 1588, 86, 86, 86, 86, 86, 1597, 1593, 86, 86, - 1592, 86, 86, 1598, 1600, 86, 86, 1590, 1591, 1603, - 86, 1602, 1594, 1596, 1595, 86, 86, 86, 86, 86, - 1601, 86, 1611, 161, 86, 1599, 86, 1609, 86, 86, - 86, 1612, 1614, 86, 1617, 1604, 1605, 1606, 1607, 1610, - 1608, 1613, 1615, 86, 86, 86, 86, 86, 86, 1616, + 1563, 86, 1571, 86, 1572, 86, 1566, 86, 86, 86, + 1573, 1574, 86, 1567, 86, 86, 1576, 86, 1575, 86, + 86, 86, 86, 1582, 86, 86, 1581, 86, 86, 1578, + 1585, 86, 1588, 1577, 1579, 1584, 1580, 1589, 86, 86, + 1590, 86, 1586, 86, 1583, 1591, 86, 86, 1593, 86, + 1587, 86, 86, 86, 86, 1601, 1597, 86, 1596, 1592, + 1594, 86, 1595, 86, 1604, 86, 86, 86, 1602, 86, + 86, 1598, 1600, 1599, 1607, 1606, 86, 86, 86, 86, + 86, 86, 86, 1603, 1605, 1608, 1609, 86, 1615, 86, + 86, 3295, 1612, 1616, 1622, 1610, 1611, 1614, 1618, 86, - 1621, 86, 86, 86, 1622, 1619, 86, 1625, 1618, 86, - 1620, 1629, 86, 86, 86, 86, 1631, 1623, 1626, 1624, - 1630, 86, 86, 86, 86, 1628, 1627, 1633, 1632, 1634, - 86, 86, 86, 1640, 1635, 1636, 1641, 86, 86, 86, - 86, 1637, 86, 1639, 86, 1645, 1646, 1644, 86, 86, - 1638, 86, 86, 1648, 86, 86, 1642, 86, 1649, 1650, - 86, 1643, 86, 86, 86, 1651, 1653, 1652, 1647, 86, - 1656, 1655, 86, 86, 86, 86, 86, 1654, 86, 1657, - 1660, 86, 1662, 86, 86, 1663, 86, 86, 1661, 86, - 1668, 86, 1659, 1658, 86, 86, 1664, 86, 1665, 86, + 1613, 1617, 1619, 86, 86, 86, 86, 86, 86, 1620, + 1621, 86, 86, 1625, 1623, 86, 86, 1626, 86, 86, + 1624, 1629, 1633, 86, 1634, 1635, 1628, 1630, 86, 86, + 1627, 86, 86, 86, 1632, 1631, 86, 1638, 86, 86, + 1639, 86, 1637, 1636, 1644, 1640, 1645, 86, 86, 86, + 86, 86, 86, 1641, 86, 1649, 1642, 1648, 1650, 1643, + 1652, 86, 86, 86, 86, 1653, 1646, 1654, 86, 86, + 1647, 1651, 86, 86, 86, 1657, 86, 1660, 86, 1655, + 86, 86, 86, 1659, 86, 1656, 86, 1664, 86, 1666, + 86, 86, 86, 1658, 86, 1661, 86, 1672, 1665, 1662, - 1671, 1669, 1673, 86, 86, 86, 1667, 86, 1674, 1666, - 168, 1675, 1670, 86, 1672, 86, 1676, 1679, 1678, 1677, - 86, 1682, 86, 86, 1680, 1681, 1683, 86, 86, 86, - 86, 86, 1690, 86, 86, 86, 86, 86, 1691, 1694, - 86, 1684, 1685, 1688, 1695, 86, 1686, 1687, 86, 86, - 1696, 1698, 1700, 1699, 1692, 1689, 1693, 1697, 86, 86, - 1702, 86, 1704, 86, 86, 86, 86, 86, 86, 86, - 1709, 1706, 1707, 86, 1710, 1703, 86, 86, 86, 1701, - 86, 86, 86, 1705, 1714, 86, 1715, 86, 86, 159, - 1711, 1722, 1708, 1713, 1717, 1712, 86, 86, 1716, 1719, + 1663, 1667, 86, 86, 1668, 1669, 86, 86, 1677, 86, + 86, 1675, 86, 1680, 1671, 86, 1670, 1673, 86, 1678, + 1674, 86, 1676, 86, 86, 169, 86, 1683, 1686, 86, + 1679, 1685, 1682, 86, 86, 86, 86, 86, 86, 1694, + 1681, 1687, 86, 1684, 86, 86, 86, 1695, 1689, 86, + 1692, 1688, 1698, 86, 1690, 1691, 86, 86, 1699, 1702, + 86, 1700, 1693, 86, 1696, 1697, 1701, 1704, 1703, 1706, + 86, 1708, 86, 86, 86, 86, 86, 86, 86, 86, + 1705, 86, 1710, 1711, 1707, 86, 1713, 86, 1714, 86, + 86, 86, 86, 1709, 1718, 1715, 86, 1716, 86, 1719, - 86, 86, 1720, 86, 1724, 1723, 86, 1718, 1730, 86, - 1731, 1727, 1726, 1728, 1721, 86, 86, 1732, 1729, 86, - 1725, 86, 1734, 86, 1733, 86, 1735, 1736, 86, 86, - 86, 86, 86, 86, 1737, 86, 1743, 1744, 1742, 86, - 1746, 1738, 86, 86, 1745, 86, 86, 86, 1739, 86, - 1740, 86, 1741, 86, 1748, 1749, 86, 86, 1750, 86, - 86, 86, 86, 86, 86, 1751, 86, 86, 1747, 1760, - 1759, 1752, 86, 1754, 1755, 1756, 86, 1753, 86, 1765, - 1757, 86, 86, 1761, 1762, 86, 86, 86, 1758, 1764, - 1763, 86, 1771, 86, 86, 86, 86, 86, 1767, 86, + 86, 1712, 86, 86, 1717, 1726, 1723, 1727, 1720, 1724, + 86, 86, 1721, 1728, 86, 86, 1722, 1732, 86, 86, + 1731, 1725, 1733, 1730, 1734, 86, 1735, 1736, 1740, 1729, + 86, 1742, 86, 86, 86, 1737, 86, 1738, 86, 1739, + 86, 86, 86, 86, 86, 1741, 1747, 1746, 1748, 86, + 86, 1750, 86, 86, 86, 1749, 86, 86, 1752, 1743, + 86, 1744, 86, 1745, 1753, 86, 86, 1754, 86, 86, + 86, 86, 1751, 86, 1755, 86, 86, 86, 1764, 1763, + 1756, 86, 1758, 1759, 1760, 86, 1757, 86, 1769, 1761, + 86, 86, 86, 1766, 86, 86, 1765, 1767, 1762, 86, - 1773, 1766, 86, 1775, 86, 1769, 1768, 86, 1770, 1774, - 86, 1776, 86, 1777, 1772, 86, 86, 86, 86, 1780, - 86, 86, 1782, 86, 1789, 1779, 1783, 1781, 1778, 1784, - 1790, 86, 1785, 1786, 1791, 86, 86, 86, 1787, 86, - 1794, 1793, 1795, 86, 86, 1788, 86, 86, 1792, 86, - 86, 1798, 1796, 86, 1799, 86, 86, 86, 86, 1802, - 1808, 86, 86, 1797, 1807, 1804, 1800, 1806, 1805, 1801, - 86, 86, 86, 86, 1803, 1810, 86, 1809, 86, 86, - 86, 1817, 86, 86, 86, 1814, 1812, 86, 1820, 1811, - 86, 1821, 1813, 1819, 86, 86, 1823, 1816, 1818, 1824, + 1768, 1775, 86, 86, 86, 86, 86, 1771, 86, 1773, + 1770, 1777, 1772, 86, 1779, 86, 1778, 86, 86, 1781, + 1774, 86, 86, 1776, 86, 86, 86, 1784, 86, 1786, + 1780, 86, 1782, 86, 1787, 1783, 1785, 1788, 86, 86, + 1789, 1790, 1793, 1794, 86, 1796, 1791, 1795, 86, 1797, + 86, 86, 86, 1792, 1798, 1799, 86, 1801, 86, 86, + 86, 86, 86, 1800, 1802, 1803, 86, 86, 1812, 86, + 1806, 1804, 86, 1811, 1805, 1808, 1810, 86, 1809, 86, + 86, 1807, 86, 86, 86, 86, 86, 86, 1821, 86, + 1814, 86, 1813, 86, 1825, 86, 1816, 1818, 1815, 1817, - 1825, 86, 86, 1815, 1829, 1822, 86, 86, 86, 1830, - 86, 86, 1826, 1835, 86, 86, 1834, 1837, 86, 86, - 1828, 1831, 1827, 1832, 1838, 86, 86, 1840, 1833, 86, - 86, 1839, 1836, 86, 86, 1841, 1844, 86, 86, 86, - 1848, 1846, 86, 86, 86, 1842, 86, 1847, 1843, 86, - 1845, 1849, 86, 86, 86, 86, 86, 1852, 1850, 1858, - 86, 1853, 1860, 1851, 86, 1861, 1854, 1855, 86, 1856, - 1857, 86, 1863, 86, 86, 86, 86, 1862, 1867, 86, - 1869, 1859, 86, 86, 86, 86, 86, 1873, 86, 86, - 86, 86, 3291, 1865, 1864, 1866, 1868, 86, 86, 1879, + 1823, 86, 86, 86, 1820, 1822, 1824, 86, 1826, 1819, + 86, 1827, 1829, 1830, 1828, 1833, 86, 86, 86, 1839, + 1834, 86, 86, 86, 1831, 86, 86, 1838, 1832, 1842, + 1835, 1843, 1836, 1841, 86, 86, 1844, 86, 86, 86, + 1837, 1840, 86, 1845, 1848, 86, 86, 86, 1850, 1852, + 86, 86, 86, 1847, 1851, 86, 86, 3295, 1846, 1849, + 1853, 86, 86, 86, 1856, 86, 1854, 86, 1862, 86, + 1855, 1857, 1864, 86, 1858, 86, 1859, 1865, 86, 1860, + 86, 1861, 86, 86, 1867, 86, 1866, 1871, 86, 86, + 1863, 1873, 86, 86, 86, 1868, 86, 86, 1869, 1877, - 1871, 1875, 86, 1872, 1870, 86, 86, 1876, 168, 1874, - 1877, 1878, 86, 1882, 1880, 1883, 86, 86, 86, 86, - 1881, 1887, 86, 86, 86, 86, 86, 86, 1894, 1885, - 1889, 1884, 86, 1888, 86, 86, 1890, 1886, 1891, 86, - 86, 1897, 1898, 86, 1892, 86, 86, 1893, 1899, 86, - 1896, 1895, 1900, 86, 1901, 1902, 1903, 1904, 86, 86, - 1908, 86, 86, 1906, 86, 86, 86, 1907, 86, 86, - 86, 1905, 86, 86, 1912, 1913, 86, 86, 86, 86, - 3291, 1914, 1917, 86, 1910, 1915, 1911, 1909, 1918, 86, - 86, 1916, 86, 1926, 1923, 1921, 1925, 86, 1920, 86, + 86, 1870, 1872, 86, 86, 86, 86, 1879, 86, 1875, + 1880, 1881, 1876, 1882, 1874, 86, 1878, 169, 86, 1887, + 86, 86, 86, 86, 1883, 1891, 86, 1884, 86, 1885, + 86, 86, 86, 1886, 1889, 1893, 86, 86, 86, 1898, + 1888, 86, 1890, 1894, 1892, 86, 86, 86, 1895, 3295, + 1899, 1896, 1901, 1902, 86, 86, 1906, 1897, 1903, 1900, + 1904, 86, 86, 1907, 1908, 86, 86, 1905, 86, 86, + 1910, 86, 86, 86, 1911, 86, 86, 86, 1909, 86, + 86, 86, 1916, 86, 1917, 86, 86, 86, 1921, 1918, + 86, 3295, 1912, 1914, 1915, 1913, 1920, 1919, 86, 1922, - 86, 1919, 1922, 86, 1927, 86, 86, 1924, 86, 86, - 1932, 86, 1935, 1936, 86, 1937, 86, 86, 86, 1928, - 86, 1930, 1929, 1933, 86, 1934, 1931, 1939, 86, 86, - 1940, 1943, 86, 86, 86, 86, 1945, 1938, 1944, 1941, - 86, 1942, 86, 1946, 1947, 86, 1949, 86, 1951, 1950, - 86, 1948, 86, 1952, 86, 1953, 86, 1955, 86, 86, - 86, 1954, 1956, 86, 1959, 1958, 86, 1961, 86, 86, - 86, 1960, 86, 86, 86, 86, 86, 86, 1969, 1975, - 1957, 1962, 1963, 1964, 86, 86, 1967, 1976, 1965, 1973, - 1966, 1971, 1968, 86, 1970, 1978, 1972, 86, 86, 86, + 86, 86, 1928, 1925, 86, 1927, 1924, 1929, 86, 1930, + 1926, 86, 1923, 86, 86, 86, 86, 86, 1936, 86, + 1939, 86, 1931, 1932, 1940, 86, 1941, 86, 86, 1934, + 1933, 1937, 86, 1938, 1935, 1943, 86, 86, 1944, 1947, + 86, 1942, 86, 86, 1949, 86, 1948, 86, 1950, 1945, + 86, 1951, 1953, 1946, 1956, 86, 86, 86, 86, 1955, + 86, 1952, 86, 1959, 86, 86, 86, 1958, 86, 86, + 1963, 86, 1954, 1962, 86, 86, 1964, 1965, 86, 86, + 1957, 1960, 86, 86, 1973, 86, 1961, 1966, 1967, 1968, + 86, 1975, 1971, 86, 1969, 86, 1976, 86, 1970, 1972, - 1974, 86, 86, 1982, 86, 86, 86, 1979, 1977, 86, - 1984, 86, 86, 1987, 1988, 86, 86, 1990, 86, 1980, - 86, 86, 86, 1981, 86, 86, 1985, 1996, 86, 1995, - 1992, 1983, 86, 1986, 1993, 86, 1989, 86, 86, 1998, - 86, 86, 2002, 1994, 1999, 1991, 86, 2000, 86, 86, - 2006, 86, 86, 1997, 2005, 2009, 86, 2010, 86, 2008, - 86, 86, 86, 86, 2004, 2012, 2001, 2011, 86, 86, - 86, 2007, 2003, 86, 86, 86, 86, 2015, 2013, 2017, - 86, 2020, 2014, 2021, 2022, 2016, 86, 86, 2018, 86, - 86, 2025, 86, 86, 86, 2023, 2030, 86, 86, 2029, + 1978, 86, 1974, 1979, 86, 1982, 1980, 1977, 86, 86, + 86, 86, 1986, 86, 86, 86, 1988, 1983, 86, 1981, + 86, 86, 1991, 1992, 86, 86, 1994, 86, 86, 1984, + 86, 1985, 86, 86, 2000, 86, 86, 1999, 1989, 1996, + 1987, 1997, 1990, 86, 86, 1993, 86, 86, 86, 86, + 2006, 86, 86, 1995, 1998, 2003, 2004, 2001, 86, 2002, + 2010, 86, 86, 2009, 2013, 2014, 86, 86, 2008, 2012, + 86, 86, 2005, 2015, 86, 86, 2017, 2007, 86, 86, + 2016, 2011, 86, 86, 86, 86, 2021, 86, 2024, 2025, + 2026, 2020, 86, 86, 86, 86, 86, 86, 2018, 86, - 2019, 2024, 86, 86, 86, 86, 86, 2026, 2034, 86, - 86, 2035, 2027, 2037, 86, 2028, 86, 2031, 2032, 2036, - 2038, 2033, 86, 2041, 86, 86, 86, 2042, 2044, 86, - 86, 2045, 86, 2039, 2048, 86, 86, 86, 2040, 2043, - 86, 2050, 2051, 86, 86, 2052, 2054, 2049, 86, 2046, - 2047, 86, 2053, 2058, 86, 2057, 2059, 86, 2060, 2062, - 2063, 86, 2055, 2061, 86, 86, 86, 2056, 86, 86, - 2067, 86, 86, 2065, 86, 86, 86, 86, 2069, 2072, - 2074, 2066, 86, 2068, 2070, 86, 86, 2064, 168, 86, - 86, 86, 86, 2075, 2076, 2080, 2079, 86, 2081, 2073, + 86, 2019, 2022, 2029, 86, 2034, 86, 86, 2028, 2033, + 86, 2023, 2027, 86, 2031, 86, 2035, 2038, 86, 2030, + 86, 2039, 2032, 2041, 86, 2036, 2037, 2040, 86, 2045, + 86, 2043, 2042, 86, 86, 86, 2044, 86, 86, 86, + 2049, 2052, 86, 86, 86, 2055, 86, 86, 2047, 2054, + 86, 2056, 2058, 86, 2046, 86, 2048, 2053, 2050, 2051, + 86, 2062, 86, 86, 2057, 86, 2059, 2063, 86, 2064, + 2066, 2060, 2067, 2061, 2065, 86, 86, 86, 86, 86, + 2071, 86, 2069, 86, 86, 86, 86, 2073, 2076, 2068, + 2075, 2070, 2078, 2072, 86, 169, 2074, 86, 86, 86, - 2071, 2077, 2082, 86, 2083, 86, 86, 2085, 86, 2078, - 86, 86, 86, 86, 2086, 2087, 86, 2088, 86, 2091, - 86, 2089, 86, 2090, 86, 2093, 2084, 86, 86, 2097, - 86, 86, 2092, 2096, 2094, 86, 86, 86, 2101, 2095, - 2098, 2099, 2100, 2102, 86, 86, 86, 86, 86, 86, - 2109, 2107, 86, 86, 86, 2104, 86, 2108, 86, 86, - 86, 2114, 86, 2111, 86, 2103, 2105, 86, 2106, 86, - 86, 2110, 2115, 2113, 86, 2119, 2112, 86, 2117, 2120, - 2116, 86, 86, 86, 2118, 86, 2123, 86, 2122, 2121, - 2125, 86, 86, 86, 2131, 2124, 2126, 86, 86, 2127, + 2079, 86, 86, 86, 86, 2084, 86, 2077, 2083, 2080, + 2111, 2081, 86, 2085, 2086, 86, 2087, 86, 86, 2089, + 2082, 86, 86, 2091, 2088, 86, 86, 2090, 2092, 86, + 86, 86, 86, 2095, 2094, 2093, 86, 2097, 86, 86, + 86, 2101, 86, 2096, 2098, 2100, 86, 86, 2102, 86, + 2099, 2103, 2104, 86, 2106, 86, 2105, 86, 86, 86, + 86, 2113, 86, 86, 86, 2112, 2108, 86, 86, 2107, + 86, 86, 2115, 86, 2118, 86, 2109, 86, 2110, 86, + 2114, 3295, 2116, 86, 2117, 2119, 2120, 2125, 2121, 86, + 2123, 2122, 2124, 86, 86, 2129, 86, 86, 2126, 2127, - 86, 2128, 2129, 86, 2133, 86, 2130, 2134, 2135, 86, - 86, 2137, 86, 86, 2132, 86, 2138, 2141, 2136, 2140, - 86, 2139, 86, 86, 86, 86, 86, 2142, 86, 2145, - 86, 86, 86, 2146, 86, 86, 86, 86, 86, 86, - 86, 3291, 2148, 2149, 2143, 2144, 2154, 2147, 2151, 2150, - 2153, 2158, 2159, 86, 86, 86, 86, 2156, 2152, 2155, - 86, 2157, 86, 2162, 86, 86, 86, 2163, 2166, 2165, - 86, 86, 2160, 86, 86, 2161, 2164, 2169, 2168, 86, - 2170, 86, 86, 2167, 2174, 86, 86, 86, 2172, 2176, - 2178, 86, 2171, 2173, 86, 86, 86, 2181, 86, 86, + 2130, 86, 86, 2135, 86, 86, 2128, 86, 86, 86, + 86, 2137, 86, 3295, 2138, 2139, 86, 2131, 2132, 2133, + 86, 2134, 2136, 2141, 86, 86, 2142, 86, 2140, 2145, + 86, 2143, 86, 2144, 86, 86, 86, 2146, 86, 2149, + 86, 86, 86, 2150, 86, 86, 86, 86, 86, 86, + 3295, 86, 86, 2152, 2147, 86, 2148, 2153, 2155, 2154, + 86, 2151, 2157, 2162, 2163, 86, 2158, 86, 2156, 2160, + 2164, 2161, 2167, 86, 86, 2165, 2166, 86, 86, 2159, + 2170, 86, 2169, 86, 86, 86, 86, 86, 2172, 86, + 86, 2173, 2178, 86, 2168, 2174, 2176, 86, 86, 2171, - 2177, 2180, 86, 2182, 2175, 86, 2186, 2183, 86, 86, - 86, 86, 86, 2187, 86, 2192, 86, 2184, 2189, 86, - 2179, 86, 2188, 86, 2193, 2185, 2196, 86, 2191, 2198, - 2190, 86, 86, 86, 2194, 86, 2197, 86, 2202, 86, - 86, 2195, 86, 2204, 86, 2200, 86, 2203, 86, 2205, - 86, 2199, 86, 2201, 86, 2206, 2211, 2207, 2208, 2209, - 86, 2213, 2210, 86, 86, 2212, 2214, 86, 86, 2215, - 86, 86, 86, 2218, 86, 2216, 2217, 2219, 86, 2223, - 86, 86, 86, 2220, 86, 86, 86, 2222, 86, 86, - 86, 2221, 2224, 86, 86, 2232, 2229, 2230, 2226, 2225, + 2180, 2177, 86, 2175, 2182, 86, 86, 86, 86, 2185, + 86, 2181, 2179, 2184, 86, 2186, 86, 2190, 86, 2187, + 86, 86, 86, 86, 2188, 2191, 86, 86, 2183, 2193, + 86, 2192, 2196, 86, 86, 2197, 2189, 2200, 86, 86, + 2195, 2194, 2198, 86, 2201, 86, 86, 2202, 2206, 86, + 2199, 86, 86, 2208, 2204, 86, 2203, 86, 2209, 86, + 86, 86, 2205, 2207, 2210, 2211, 86, 86, 2215, 2217, + 2213, 86, 86, 2214, 2218, 86, 86, 2212, 86, 86, + 2219, 2222, 86, 86, 2220, 86, 86, 2223, 2216, 86, + 2221, 86, 2224, 86, 2226, 2227, 86, 86, 86, 86, - 2227, 86, 2234, 2228, 86, 86, 2233, 86, 86, 2231, - 2235, 2237, 86, 2243, 86, 86, 86, 2238, 2245, 86, - 86, 86, 2239, 2236, 2242, 2244, 2240, 86, 86, 168, - 2251, 2247, 2253, 2248, 2249, 2252, 86, 2241, 86, 2246, - 2254, 86, 86, 86, 2255, 86, 86, 2258, 86, 86, - 2256, 2250, 86, 2259, 2262, 2263, 86, 86, 2264, 86, - 2267, 2265, 2272, 2257, 86, 86, 86, 2260, 86, 2268, - 86, 2269, 2270, 86, 86, 86, 86, 2266, 2261, 2271, - 2273, 86, 86, 86, 86, 2274, 2275, 86, 2278, 86, - 86, 86, 86, 86, 2281, 2276, 86, 2285, 2287, 86, + 86, 86, 86, 2225, 2228, 2231, 2236, 2229, 86, 2230, + 2233, 2234, 2232, 2237, 86, 86, 86, 86, 86, 86, + 2235, 2239, 2241, 2238, 86, 2242, 2247, 86, 86, 2249, + 86, 86, 2243, 2246, 2240, 86, 2244, 2248, 86, 2251, + 86, 169, 2255, 2252, 2245, 2257, 2258, 2256, 86, 86, + 2250, 86, 86, 2253, 86, 86, 86, 2259, 2262, 86, + 86, 2263, 86, 2254, 2260, 2267, 86, 86, 2268, 2261, + 86, 2266, 2271, 2270, 86, 2264, 86, 2273, 86, 2272, + 2274, 86, 2269, 86, 2276, 86, 2265, 86, 2275, 2277, + 86, 86, 86, 86, 86, 2279, 86, 86, 86, 2282, - 86, 86, 2280, 86, 2288, 86, 2277, 2279, 2282, 2283, - 2290, 2284, 86, 86, 86, 86, 2289, 86, 2286, 86, - 2295, 2298, 86, 86, 86, 2293, 86, 86, 86, 2291, - 2292, 2299, 2296, 2294, 86, 2297, 86, 86, 86, 86, - 86, 3291, 86, 2300, 86, 2301, 2311, 2313, 86, 2306, - 2302, 86, 2303, 2304, 2308, 2309, 2314, 2305, 2310, 2307, - 86, 86, 2312, 86, 2315, 86, 86, 86, 86, 2319, - 2320, 86, 86, 86, 2321, 86, 2316, 2322, 86, 2317, - 2318, 2323, 86, 2325, 2326, 86, 2324, 2327, 2328, 86, - 2329, 86, 86, 86, 86, 86, 86, 2330, 2331, 2335, + 86, 86, 2285, 86, 86, 86, 2289, 2278, 2291, 86, + 86, 86, 2280, 2284, 2292, 86, 2287, 86, 2281, 2283, + 2294, 2286, 86, 86, 2288, 86, 2293, 2290, 86, 86, + 86, 2302, 86, 2299, 86, 2297, 86, 86, 86, 86, + 2296, 86, 2300, 2295, 2298, 2303, 86, 86, 2301, 86, + 86, 86, 86, 2304, 3295, 2305, 86, 2317, 86, 2310, + 2308, 2306, 2315, 2307, 2313, 2312, 2314, 2309, 86, 86, + 2311, 2316, 86, 2318, 86, 2319, 86, 86, 86, 86, + 2323, 2324, 86, 86, 86, 2325, 86, 2320, 2326, 86, + 2321, 2322, 2327, 86, 2329, 2330, 86, 2328, 2331, 2332, - 86, 2336, 86, 2338, 86, 2332, 86, 2334, 2340, 86, - 86, 86, 2343, 86, 2333, 2337, 2342, 2344, 86, 86, - 86, 86, 86, 86, 2339, 2341, 2350, 86, 2349, 2346, - 86, 2352, 86, 2345, 86, 2347, 86, 86, 86, 2356, - 2355, 2348, 2354, 2358, 86, 86, 86, 86, 86, 2351, - 2362, 86, 2353, 86, 2357, 86, 86, 2367, 86, 86, - 2366, 2360, 86, 86, 2359, 86, 2361, 2369, 2363, 86, - 2365, 2372, 86, 86, 86, 86, 2364, 86, 2368, 86, - 2370, 2374, 86, 2373, 2371, 86, 2379, 2375, 86, 86, - 2381, 2380, 2382, 2376, 86, 2377, 86, 86, 86, 86, + 86, 2333, 86, 86, 86, 86, 86, 86, 2334, 2335, + 2339, 86, 2340, 86, 2342, 86, 2336, 86, 2338, 2344, + 86, 86, 86, 2347, 86, 2337, 2341, 2346, 2348, 86, + 86, 86, 86, 86, 86, 2343, 2345, 2354, 86, 2353, + 2350, 86, 2356, 86, 2349, 86, 2351, 86, 86, 86, + 2360, 2359, 2352, 2358, 2362, 86, 86, 86, 86, 86, + 2355, 2366, 86, 2357, 86, 2361, 86, 86, 2371, 86, + 86, 2370, 2364, 86, 86, 2363, 86, 2365, 2373, 2367, + 86, 2369, 2376, 86, 86, 86, 86, 2368, 86, 2372, + 86, 2374, 2378, 86, 2377, 2375, 86, 2383, 2379, 86, - 86, 2386, 2387, 86, 86, 2378, 2385, 2383, 2391, 2384, - 86, 86, 2389, 86, 2396, 2393, 2394, 86, 2398, 86, - 86, 2390, 86, 2388, 86, 86, 86, 2399, 2395, 86, - 2392, 2400, 86, 86, 2404, 2403, 86, 86, 2397, 86, - 86, 3291, 2402, 2409, 2401, 2405, 2406, 2408, 2407, 86, - 2410, 86, 86, 86, 2414, 2411, 86, 2415, 86, 2416, - 2412, 2413, 86, 86, 168, 86, 86, 2417, 86, 2418, - 86, 2423, 86, 86, 86, 2425, 86, 86, 86, 2434, - 86, 2421, 2419, 2424, 2420, 2426, 2422, 86, 86, 2429, - 2427, 2428, 86, 2431, 3291, 2430, 86, 2435, 2432, 2433, + 86, 2385, 2384, 2386, 2380, 86, 2381, 86, 86, 86, + 86, 86, 2390, 2391, 86, 86, 2382, 2389, 2387, 2395, + 2388, 86, 86, 2393, 86, 2400, 2397, 2398, 86, 2402, + 86, 86, 2394, 86, 2392, 86, 86, 86, 2403, 2399, + 86, 2396, 2404, 86, 86, 2408, 2407, 86, 86, 2401, + 86, 86, 3295, 2406, 2413, 2405, 2409, 2410, 2412, 2411, + 86, 2414, 86, 86, 86, 2418, 2415, 86, 2419, 86, + 2420, 2416, 2417, 86, 86, 169, 86, 86, 2421, 86, + 2422, 86, 2427, 86, 86, 86, 2429, 86, 86, 86, + 2438, 86, 2425, 2423, 2428, 2424, 2430, 2426, 86, 86, - 2436, 86, 86, 86, 2439, 2437, 2440, 86, 2438, 86, - 86, 86, 86, 2442, 86, 86, 2441, 86, 2444, 86, - 86, 2448, 2449, 2443, 86, 2446, 86, 2445, 86, 2451, - 86, 86, 86, 86, 2452, 2453, 2454, 86, 2447, 86, - 2450, 86, 2456, 86, 2455, 2460, 86, 2459, 86, 86, - 2457, 2458, 86, 86, 2462, 86, 86, 86, 86, 2469, - 2466, 2461, 86, 2468, 86, 86, 86, 86, 2470, 2465, - 86, 86, 2463, 2464, 86, 2474, 86, 2467, 86, 86, - 2484, 2479, 2471, 2478, 86, 2472, 2473, 86, 2476, 86, - 2477, 86, 2475, 2481, 86, 86, 86, 2480, 2483, 2485, + 2433, 2431, 2432, 86, 2435, 3295, 2434, 86, 2439, 2436, + 2437, 2440, 86, 86, 86, 2443, 2441, 2444, 86, 2442, + 86, 86, 86, 86, 2446, 86, 86, 2445, 86, 2448, + 86, 86, 2452, 2453, 2447, 86, 2450, 86, 2449, 86, + 2455, 86, 86, 86, 86, 2456, 2457, 2458, 86, 2451, + 86, 2454, 86, 2460, 86, 2459, 2464, 86, 2463, 86, + 86, 2461, 2462, 86, 86, 2466, 86, 86, 86, 86, + 2473, 2470, 2465, 86, 2472, 86, 86, 86, 86, 2474, + 2469, 86, 86, 2467, 2468, 86, 2478, 86, 2471, 86, + 86, 2488, 2483, 2475, 2482, 86, 2476, 2477, 86, 2480, - 86, 2487, 86, 2482, 2489, 86, 2488, 2491, 86, 86, - 86, 2493, 86, 86, 86, 86, 86, 2490, 2492, 86, - 2497, 2486, 86, 86, 86, 2501, 86, 2499, 2495, 2500, - 2503, 2494, 2496, 2502, 86, 86, 86, 86, 2504, 2505, - 86, 86, 86, 2510, 86, 2498, 2507, 86, 86, 2512, - 86, 2515, 86, 86, 2509, 86, 2511, 2506, 86, 2508, - 86, 2516, 86, 2519, 86, 2514, 2513, 2520, 86, 2521, - 86, 86, 2517, 86, 86, 2525, 86, 86, 2518, 2524, - 2523, 86, 86, 86, 86, 2532, 86, 2529, 2522, 2531, - 2526, 2527, 86, 2528, 2533, 86, 2534, 86, 2535, 86, + 86, 2481, 86, 2479, 2485, 86, 86, 86, 2484, 2487, + 2489, 86, 2491, 86, 2486, 2493, 86, 2492, 2495, 86, + 86, 86, 2497, 86, 86, 86, 86, 86, 2494, 2496, + 86, 2501, 2490, 86, 86, 86, 2505, 86, 2503, 2499, + 2504, 2507, 2498, 2500, 2506, 86, 86, 86, 86, 2508, + 2509, 86, 86, 86, 2514, 86, 2502, 2511, 86, 86, + 2516, 86, 2519, 86, 86, 2513, 86, 2515, 2510, 86, + 2512, 86, 2520, 86, 2523, 86, 2518, 2517, 2524, 86, + 2525, 86, 86, 2521, 86, 86, 2529, 86, 86, 2522, + 2528, 2527, 86, 86, 86, 86, 2536, 86, 2533, 2526, - 86, 86, 86, 2530, 2536, 86, 2538, 86, 2539, 86, - 2540, 86, 86, 86, 2541, 2545, 86, 2542, 2537, 2547, - 86, 2548, 86, 86, 86, 86, 86, 86, 2544, 86, - 86, 2543, 2546, 2551, 2549, 2554, 2550, 2552, 86, 2557, - 86, 86, 86, 86, 86, 86, 86, 2553, 86, 2555, - 2558, 86, 168, 86, 2565, 86, 86, 2561, 2556, 86, - 2563, 86, 86, 2560, 2564, 2566, 2567, 3291, 2559, 2562, - 2568, 2571, 86, 86, 86, 2572, 2573, 2569, 2574, 2575, - 2576, 86, 86, 2570, 2577, 86, 86, 2578, 86, 2579, - 86, 2580, 86, 86, 86, 86, 86, 86, 86, 86, + 2535, 2530, 2531, 86, 2532, 2537, 86, 2538, 86, 2539, + 86, 86, 86, 86, 2534, 2540, 86, 2542, 86, 2543, + 86, 2544, 86, 86, 86, 2545, 2549, 86, 2546, 2541, + 2551, 86, 2552, 86, 86, 86, 86, 86, 86, 2548, + 86, 86, 2547, 2550, 2555, 2553, 2558, 2554, 2556, 86, + 2561, 86, 86, 86, 86, 86, 86, 86, 2557, 86, + 2559, 2562, 86, 169, 86, 2569, 86, 86, 2565, 2560, + 86, 2567, 86, 86, 2564, 2568, 2570, 2571, 3295, 2563, + 2566, 2572, 2575, 86, 86, 86, 2576, 2577, 2573, 2578, + 2579, 2580, 86, 86, 2574, 2581, 86, 86, 2582, 86, - 2581, 86, 86, 2582, 2591, 86, 86, 86, 2589, 2584, - 86, 86, 2583, 86, 2586, 2585, 86, 2595, 2588, 2587, - 2599, 2590, 2596, 86, 2593, 2592, 86, 2597, 2594, 2598, - 2600, 86, 2602, 86, 86, 2601, 86, 86, 86, 86, - 86, 86, 86, 86, 2605, 2611, 86, 2612, 86, 86, - 86, 86, 2603, 2606, 2604, 2618, 2615, 2607, 2608, 2609, - 2610, 86, 2613, 2616, 86, 2617, 86, 2614, 86, 2619, - 86, 86, 86, 86, 86, 86, 86, 2623, 2627, 86, - 2626, 2628, 86, 2620, 86, 2622, 2629, 2630, 86, 2621, - 86, 86, 86, 2624, 2625, 86, 86, 86, 2631, 2632, + 2583, 86, 2584, 86, 86, 86, 86, 86, 86, 86, + 86, 2585, 86, 86, 2586, 2595, 86, 86, 86, 2593, + 2588, 86, 86, 2587, 86, 2590, 2589, 86, 2599, 2592, + 2591, 2603, 2594, 2600, 86, 2597, 2596, 86, 2601, 2598, + 2602, 2604, 86, 2606, 86, 86, 2605, 86, 86, 86, + 86, 86, 86, 86, 86, 2609, 2615, 86, 2616, 86, + 86, 86, 86, 2607, 2610, 2608, 2622, 2619, 2611, 2612, + 2613, 2614, 86, 2617, 2620, 86, 2621, 86, 2618, 86, + 2623, 86, 86, 86, 86, 86, 86, 86, 2627, 2631, + 86, 2630, 2632, 86, 2624, 86, 2626, 2633, 2634, 86, - 86, 2636, 86, 86, 2634, 86, 2640, 2641, 86, 86, - 2633, 2644, 86, 86, 86, 2635, 86, 2637, 2645, 2638, - 2642, 86, 2639, 2648, 86, 2647, 86, 2643, 2646, 2649, - 86, 86, 2653, 86, 86, 86, 86, 2657, 86, 86, - 2656, 2650, 2659, 86, 2655, 86, 2654, 86, 86, 86, - 2651, 2652, 2660, 86, 2661, 2664, 86, 86, 2658, 86, - 2665, 2663, 2667, 86, 2662, 86, 86, 86, 86, 86, - 2668, 2672, 86, 2674, 86, 2666, 2670, 2671, 2669, 86, - 86, 2673, 86, 2677, 2675, 2676, 86, 2678, 86, 86, - 86, 86, 86, 86, 2679, 86, 86, 2684, 2681, 2682, + 2625, 86, 86, 86, 2628, 2629, 86, 86, 86, 2635, + 2636, 86, 2640, 86, 86, 2638, 86, 2644, 2645, 86, + 86, 2637, 2648, 86, 86, 86, 2639, 86, 2641, 2649, + 2642, 2646, 86, 2643, 2652, 86, 2651, 86, 2647, 2650, + 2653, 86, 86, 2657, 86, 86, 86, 86, 2661, 86, + 86, 2660, 2654, 2663, 86, 2659, 86, 2658, 86, 86, + 86, 2655, 2656, 2664, 86, 2665, 2668, 86, 86, 2662, + 86, 2669, 2667, 2671, 86, 2666, 86, 86, 86, 86, + 86, 2672, 2676, 86, 2678, 86, 2670, 2674, 2675, 2673, + 86, 86, 2677, 86, 2681, 2679, 2680, 86, 2682, 86, - 2685, 2687, 86, 2688, 86, 2683, 86, 2680, 2686, 2689, - 168, 86, 86, 2690, 2692, 2694, 2691, 86, 86, 2696, - 86, 86, 2695, 86, 2699, 86, 2700, 86, 2698, 86, - 2693, 2702, 86, 86, 2704, 2697, 2703, 86, 86, 2705, - 86, 86, 2701, 2706, 2709, 86, 2707, 86, 86, 2710, - 86, 2708, 2711, 86, 86, 86, 86, 2712, 2716, 2717, - 86, 2718, 2714, 86, 86, 86, 86, 86, 2713, 86, - 2720, 2721, 2719, 86, 86, 86, 2715, 2722, 2724, 2723, - 2725, 86, 86, 86, 86, 2730, 86, 2726, 86, 86, - 2733, 2728, 2729, 86, 2727, 2731, 86, 86, 86, 2734, + 86, 86, 86, 86, 86, 2683, 86, 86, 2688, 2685, + 2686, 2689, 2691, 86, 2692, 86, 2687, 86, 2684, 2690, + 2693, 169, 86, 86, 2694, 2696, 2698, 2695, 86, 86, + 2700, 86, 86, 2699, 86, 2703, 86, 2704, 86, 2702, + 86, 2697, 2706, 86, 86, 2708, 2701, 2707, 86, 86, + 2709, 86, 86, 2705, 2710, 2713, 86, 2711, 86, 86, + 2714, 86, 2712, 2715, 86, 86, 86, 86, 2716, 2720, + 2721, 86, 2722, 2718, 86, 86, 86, 86, 86, 2717, + 86, 2724, 2725, 2723, 86, 86, 86, 2719, 2726, 2728, + 2727, 2729, 86, 86, 86, 86, 2734, 86, 2730, 86, - 86, 2738, 86, 86, 86, 2739, 2732, 86, 2735, 86, - 2743, 86, 86, 2741, 86, 86, 86, 2736, 86, 2737, - 2747, 3291, 2740, 2755, 2742, 2750, 2744, 2745, 2748, 86, - 2751, 86, 2752, 86, 2746, 86, 86, 86, 86, 86, - 2749, 2753, 86, 2754, 86, 86, 2756, 2759, 2758, 86, - 2761, 86, 2757, 2763, 86, 2764, 86, 2765, 86, 86, - 2760, 86, 86, 2766, 2768, 86, 2767, 86, 86, 2762, - 2772, 86, 2770, 86, 2775, 2773, 86, 2776, 86, 86, - 2771, 86, 2769, 2777, 86, 86, 86, 86, 2778, 2782, - 86, 2774, 2779, 86, 2783, 2784, 86, 2786, 86, 2780, + 86, 2737, 2732, 2733, 86, 2731, 2735, 86, 86, 86, + 2738, 86, 2742, 86, 86, 86, 2743, 2736, 86, 2739, + 86, 2747, 86, 86, 2745, 86, 86, 86, 2740, 86, + 2741, 2751, 3295, 2744, 2759, 2746, 2754, 2748, 2749, 2752, + 86, 2755, 86, 2756, 86, 2750, 86, 86, 86, 86, + 86, 2753, 2757, 86, 2758, 86, 86, 2760, 2763, 2762, + 86, 2765, 86, 2761, 2767, 86, 2768, 86, 2769, 86, + 86, 2764, 86, 86, 2770, 2772, 86, 2771, 86, 86, + 2766, 2776, 86, 2774, 86, 2779, 2777, 86, 2780, 86, + 86, 2775, 86, 2773, 2781, 86, 86, 86, 86, 2782, - 86, 86, 2785, 86, 2790, 86, 2781, 2791, 86, 2792, - 86, 86, 86, 2787, 86, 2793, 86, 2789, 86, 2788, - 2794, 86, 2799, 86, 2798, 2802, 86, 2801, 86, 86, - 86, 86, 2796, 86, 2795, 2803, 2797, 2804, 86, 2800, - 86, 2805, 86, 2807, 86, 2808, 86, 2811, 86, 86, - 2809, 2810, 2815, 86, 86, 86, 2806, 2817, 86, 86, - 86, 2822, 86, 2814, 2812, 2818, 2823, 86, 2813, 2816, - 2821, 2824, 2819, 2827, 86, 86, 2825, 86, 2820, 2826, - 86, 2828, 86, 2829, 86, 2830, 86, 2831, 86, 86, - 86, 2832, 86, 2833, 86, 86, 86, 2836, 86, 86, + 2786, 86, 2778, 2783, 86, 2787, 2788, 86, 2790, 86, + 2784, 86, 86, 2789, 86, 2794, 86, 2785, 2795, 86, + 2796, 86, 86, 86, 2791, 86, 2797, 86, 2793, 86, + 2792, 2798, 86, 2803, 86, 2802, 2806, 86, 2805, 86, + 86, 86, 86, 2800, 86, 2799, 2807, 2801, 2808, 86, + 2804, 86, 2809, 86, 2811, 86, 2812, 86, 2815, 86, + 86, 2813, 2814, 2819, 86, 86, 86, 2810, 2821, 86, + 86, 86, 2826, 86, 2818, 2816, 2822, 2827, 86, 2817, + 2820, 2825, 2828, 2823, 2831, 86, 86, 2829, 86, 2824, + 2830, 86, 2832, 86, 2833, 86, 2834, 86, 2835, 86, - 2838, 2842, 86, 2843, 86, 2839, 86, 86, 86, 2834, - 2844, 2846, 86, 2837, 86, 2847, 2835, 86, 2840, 2841, - 2848, 86, 2849, 2851, 2845, 2850, 86, 86, 86, 86, - 2855, 86, 86, 86, 86, 86, 2852, 2853, 2856, 2859, - 86, 2857, 86, 86, 2860, 86, 86, 2854, 2858, 86, - 2863, 2862, 86, 2861, 2864, 2865, 86, 2866, 86, 86, - 2868, 2869, 86, 86, 86, 86, 2867, 86, 2870, 2875, - 86, 86, 86, 2873, 2871, 86, 2878, 2879, 86, 2876, - 86, 2880, 86, 2883, 86, 2874, 2884, 2881, 2872, 2882, - 86, 2877, 2885, 86, 2886, 86, 2887, 86, 86, 2888, + 86, 86, 2836, 86, 2837, 86, 86, 86, 2840, 86, + 86, 2842, 2846, 86, 2847, 86, 2843, 86, 86, 86, + 2838, 2848, 2850, 86, 2841, 86, 2851, 2839, 86, 2844, + 2845, 2852, 86, 2853, 2855, 2849, 2854, 86, 86, 86, + 86, 2859, 86, 86, 86, 86, 86, 2856, 2857, 2860, + 2863, 86, 2861, 86, 86, 2864, 86, 86, 2858, 2862, + 86, 2867, 2866, 86, 2865, 2868, 2869, 86, 2870, 86, + 86, 2872, 2873, 86, 86, 86, 86, 2871, 86, 2874, + 2879, 86, 86, 86, 2877, 2875, 86, 2882, 2883, 86, + 2880, 86, 2884, 86, 2887, 86, 2878, 2888, 2885, 2876, - 86, 86, 2892, 86, 86, 86, 2891, 86, 86, 2893, - 2894, 2895, 86, 86, 86, 86, 2901, 86, 2889, 2890, - 2899, 2896, 86, 2903, 86, 2897, 86, 86, 2898, 86, - 2904, 86, 2900, 86, 2905, 86, 2906, 86, 2907, 86, - 2912, 86, 2902, 86, 86, 86, 2908, 86, 2909, 2915, - 2910, 86, 86, 86, 86, 2921, 2913, 2914, 86, 2911, - 2916, 2919, 86, 2917, 86, 86, 86, 2920, 2925, 86, - 86, 2918, 86, 2922, 2927, 86, 2923, 2928, 86, 2930, - 86, 86, 86, 86, 86, 2926, 2931, 86, 2934, 2935, - 86, 2924, 86, 2929, 86, 2939, 86, 2932, 2933, 86, + 2886, 86, 2881, 2889, 86, 2890, 86, 2891, 86, 86, + 2892, 86, 86, 2896, 86, 86, 86, 2895, 86, 86, + 2897, 2898, 2899, 86, 86, 86, 86, 2905, 86, 2893, + 2894, 2903, 2900, 86, 2907, 86, 2901, 86, 86, 2902, + 86, 2908, 86, 2904, 86, 2909, 86, 2910, 86, 2911, + 86, 2916, 86, 2906, 86, 86, 86, 2912, 86, 2913, + 2919, 2914, 86, 86, 86, 86, 2925, 2917, 2918, 86, + 2915, 2920, 2923, 86, 2921, 86, 86, 86, 2924, 2929, + 86, 86, 2922, 86, 2926, 2931, 86, 2927, 2932, 86, + 2934, 86, 86, 86, 86, 86, 2930, 2935, 86, 2938, - 2942, 86, 86, 2944, 2936, 86, 86, 86, 86, 86, - 2937, 2938, 2945, 2940, 86, 2941, 2947, 86, 2948, 86, - 2950, 86, 2943, 86, 2955, 2952, 2949, 2946, 2954, 86, - 86, 86, 2953, 86, 2959, 86, 86, 86, 2961, 2960, - 2951, 86, 86, 2957, 2964, 2965, 86, 86, 2956, 86, - 86, 2967, 2966, 2958, 2962, 86, 86, 86, 2970, 86, - 2969, 2963, 86, 2973, 86, 2968, 86, 2971, 86, 86, - 2976, 86, 86, 86, 86, 2972, 2981, 86, 2977, 86, - 86, 2974, 2975, 2985, 86, 86, 2978, 2980, 86, 2984, - 2986, 86, 2982, 2987, 86, 2983, 86, 2979, 86, 2988, + 2939, 86, 2928, 86, 2933, 86, 2943, 86, 2936, 2937, + 86, 2946, 86, 86, 2948, 2940, 86, 86, 86, 86, + 86, 2941, 2942, 2949, 2944, 86, 2945, 2951, 86, 2952, + 86, 2954, 86, 2947, 86, 2959, 2956, 2953, 2950, 2958, + 86, 86, 86, 2957, 86, 2963, 86, 86, 86, 2965, + 2964, 2955, 86, 86, 2961, 2968, 2969, 86, 86, 2960, + 86, 86, 2971, 2970, 2962, 2966, 86, 86, 86, 2974, + 86, 2973, 2967, 86, 2977, 86, 2972, 86, 2975, 86, + 86, 2980, 86, 86, 86, 86, 2976, 2985, 86, 2981, + 86, 86, 2978, 2979, 2989, 86, 86, 2982, 2984, 86, - 86, 2989, 2990, 86, 2991, 86, 2992, 86, 2995, 86, - 86, 2993, 2997, 86, 86, 2996, 86, 86, 86, 2998, - 2994, 86, 3002, 3003, 86, 86, 86, 3007, 86, 3008, - 86, 2999, 3004, 86, 3009, 3006, 86, 86, 3000, 3001, - 86, 86, 3012, 3013, 86, 3005, 3014, 86, 86, 86, - 3017, 86, 86, 3010, 3015, 3011, 86, 3020, 86, 86, - 3019, 3022, 3016, 3018, 3021, 86, 86, 86, 86, 86, - 86, 3024, 86, 86, 3026, 86, 86, 3027, 86, 3025, - 86, 86, 86, 86, 3039, 3023, 3036, 3037, 86, 3028, - 86, 3032, 3029, 3030, 3031, 3033, 3034, 86, 86, 3044, + 2988, 2990, 86, 2986, 2991, 86, 2987, 86, 2983, 86, + 2992, 86, 2993, 2994, 86, 2995, 86, 2996, 86, 2999, + 86, 86, 2997, 3001, 86, 86, 3000, 86, 86, 86, + 3002, 2998, 86, 3006, 3007, 86, 86, 86, 3011, 86, + 3012, 86, 3003, 3008, 86, 3013, 3010, 86, 86, 3004, + 3005, 86, 86, 3016, 3017, 86, 3009, 3018, 86, 86, + 86, 3021, 86, 86, 3014, 3019, 3015, 86, 3024, 86, + 86, 3023, 3026, 3020, 3022, 3025, 86, 86, 86, 86, + 86, 86, 3028, 86, 86, 3030, 86, 86, 3031, 86, + 3029, 86, 86, 86, 86, 3043, 3027, 3040, 3041, 86, - 86, 3035, 3040, 3038, 86, 3045, 86, 3042, 3041, 86, - 86, 3043, 86, 3046, 3047, 86, 3291, 3048, 3050, 86, - 3051, 86, 3052, 3053, 86, 86, 86, 3054, 3055, 3049, - 86, 3056, 3057, 86, 86, 3059, 86, 3058, 86, 86, - 3061, 86, 3060, 3065, 86, 86, 3064, 86, 86, 86, - 86, 86, 3068, 86, 3067, 86, 3073, 3082, 3062, 3063, - 3069, 86, 3072, 86, 3070, 3074, 86, 86, 3071, 86, - 3066, 3075, 86, 86, 3077, 3080, 3076, 86, 86, 86, - 3081, 86, 3078, 86, 3086, 3079, 86, 3291, 3087, 3089, - 86, 3090, 3083, 3084, 86, 3092, 86, 86, 3085, 86, + 3032, 86, 3036, 3033, 3034, 3035, 3037, 3038, 86, 86, + 3048, 86, 3039, 3044, 3042, 86, 3049, 86, 3046, 3045, + 86, 86, 3047, 86, 3050, 3051, 86, 3295, 3052, 3054, + 86, 3055, 86, 3056, 3057, 86, 86, 86, 3058, 3059, + 3053, 86, 3060, 3061, 86, 86, 3063, 86, 3062, 86, + 86, 3065, 86, 3064, 3069, 86, 86, 3068, 86, 86, + 86, 86, 86, 3072, 86, 3071, 86, 3077, 3086, 3066, + 3067, 3073, 86, 3076, 86, 3074, 3078, 86, 86, 3075, + 86, 3070, 3079, 86, 86, 3081, 3084, 3080, 86, 86, + 86, 3085, 86, 3082, 86, 3090, 3083, 86, 3295, 3091, - 3091, 3093, 86, 86, 86, 3088, 3096, 86, 3095, 3097, - 86, 3099, 86, 3098, 3094, 3100, 86, 3101, 86, 3102, - 86, 3103, 86, 3104, 86, 3105, 86, 86, 3107, 86, - 86, 86, 86, 86, 86, 86, 3106, 3112, 86, 3108, - 86, 86, 86, 3109, 86, 3116, 86, 3115, 3113, 3118, - 86, 86, 3110, 3111, 3114, 3117, 86, 86, 3122, 3120, - 3119, 86, 3125, 86, 3124, 86, 86, 86, 86, 3123, - 3127, 86, 3121, 86, 86, 86, 86, 3126, 3133, 3131, - 86, 86, 86, 3130, 3132, 3128, 86, 86, 86, 3129, - 3136, 3134, 3138, 86, 3137, 3139, 86, 3140, 86, 86, + 3093, 86, 3094, 3087, 3088, 86, 3096, 86, 86, 3089, + 86, 3095, 3097, 86, 86, 86, 3092, 3100, 86, 3099, + 3101, 86, 3103, 86, 3102, 3098, 3104, 86, 3105, 86, + 3106, 86, 3107, 86, 3108, 86, 3109, 86, 86, 3111, + 86, 86, 86, 86, 86, 86, 86, 3110, 3116, 86, + 3112, 86, 86, 86, 3113, 86, 3120, 86, 3119, 3117, + 3122, 86, 86, 3114, 3115, 3118, 3121, 86, 86, 3126, + 3124, 3123, 86, 3129, 86, 3128, 86, 86, 86, 86, + 3127, 3131, 86, 3125, 86, 86, 86, 86, 3130, 3137, + 3135, 86, 86, 86, 3134, 3136, 3132, 86, 86, 86, - 86, 86, 3145, 86, 3143, 3141, 3135, 86, 3142, 3146, - 86, 86, 3148, 3149, 3147, 86, 3151, 86, 86, 86, - 86, 3144, 86, 86, 86, 3150, 86, 86, 86, 86, - 3152, 3160, 3158, 86, 3162, 3155, 86, 3153, 3154, 3157, - 3159, 3164, 86, 86, 3167, 86, 86, 3156, 3161, 3169, - 86, 86, 3170, 3163, 86, 3168, 3165, 3171, 86, 3172, - 86, 86, 86, 3166, 86, 3175, 86, 86, 86, 3176, - 3180, 3177, 86, 3173, 86, 86, 86, 3184, 86, 3183, - 86, 3174, 86, 3179, 3186, 86, 3181, 3182, 3187, 86, - 86, 86, 3178, 3190, 86, 86, 86, 3188, 3193, 86, + 3133, 3140, 3138, 3142, 86, 3141, 3143, 86, 3144, 86, + 86, 86, 86, 3149, 86, 3147, 3145, 3139, 86, 3146, + 3150, 86, 86, 3152, 3153, 3151, 86, 3155, 86, 86, + 86, 86, 3148, 86, 86, 86, 3154, 86, 86, 86, + 86, 3156, 3164, 3162, 86, 3166, 3159, 86, 3157, 3158, + 3161, 3163, 3168, 86, 86, 3171, 86, 86, 3160, 3165, + 3173, 86, 86, 3174, 3167, 86, 3172, 3169, 3175, 86, + 3176, 86, 86, 86, 3170, 86, 3179, 86, 86, 86, + 3180, 3184, 3181, 86, 3177, 86, 86, 86, 3188, 86, + 3187, 86, 3178, 86, 3183, 3190, 86, 3185, 3186, 3191, - 3185, 86, 3194, 86, 3195, 3197, 3191, 86, 3198, 3189, - 86, 86, 86, 3192, 86, 86, 3203, 86, 3204, 86, - 3202, 3199, 3196, 3200, 86, 86, 86, 86, 86, 86, - 86, 3201, 3208, 86, 3210, 86, 86, 86, 86, 3207, - 86, 3215, 86, 3216, 86, 3205, 3206, 3209, 3212, 3211, - 3213, 3223, 3214, 3217, 86, 3221, 86, 86, 86, 86, - 3218, 3220, 3219, 3222, 86, 3224, 86, 86, 86, 3229, - 86, 3225, 3226, 3227, 86, 86, 3230, 86, 3228, 3231, - 3232, 86, 86, 86, 86, 86, 3233, 3238, 86, 3234, - 3235, 86, 86, 86, 86, 3241, 3242, 86, 86, 86, + 86, 86, 86, 3182, 3194, 86, 86, 86, 3192, 3197, + 86, 3189, 86, 3198, 86, 3199, 3201, 3195, 86, 3202, + 3193, 86, 86, 86, 3196, 86, 86, 3207, 86, 3208, + 86, 3206, 3203, 3200, 3204, 86, 86, 86, 86, 86, + 86, 86, 3205, 3212, 86, 3214, 86, 86, 86, 86, + 3211, 86, 3219, 86, 3220, 86, 3209, 3210, 3213, 3216, + 3215, 3217, 3227, 3218, 3221, 86, 3225, 86, 86, 86, + 86, 3222, 3224, 3223, 3226, 86, 3228, 86, 86, 86, + 3233, 86, 3229, 3230, 3231, 86, 86, 3234, 86, 3232, + 3235, 3236, 86, 86, 86, 86, 86, 3237, 3242, 86, - 86, 86, 86, 3236, 3237, 3240, 3245, 3239, 3243, 86, - 3246, 3244, 86, 3248, 86, 3249, 86, 3247, 86, 3253, - 86, 3250, 3251, 86, 3255, 86, 3256, 86, 3252, 86, - 86, 3254, 3257, 3260, 86, 3261, 3258, 86, 86, 3259, - 3262, 3263, 86, 86, 3264, 86, 86, 86, 3269, 86, - 3265, 3267, 86, 86, 86, 86, 86, 86, 3271, 3272, - 86, 3275, 3276, 86, 3266, 86, 3268, 86, 3279, 3280, - 86, 3270, 86, 86, 3273, 3274, 3277, 3282, 86, 3281, - 3283, 86, 86, 86, 3278, 86, 86, 3291, 3285, 3284, - 3286, 3291, 3287, 3289, 86, 3290, 86, 3291, 3291, 3291, + 3238, 3239, 86, 86, 86, 86, 3245, 3246, 86, 86, + 86, 86, 86, 86, 3240, 3241, 3244, 3249, 3243, 3247, + 86, 3250, 3248, 86, 3252, 86, 3253, 86, 3251, 86, + 3257, 86, 3254, 3255, 86, 3259, 86, 3260, 86, 3256, + 86, 86, 3258, 3261, 3264, 86, 3265, 3262, 86, 86, + 3263, 3266, 3267, 86, 86, 3268, 86, 86, 86, 3273, + 86, 3269, 3271, 86, 86, 86, 86, 86, 86, 3275, + 3276, 86, 3279, 3280, 86, 3270, 86, 3272, 86, 3283, + 3284, 86, 3274, 86, 86, 3277, 3278, 3281, 3286, 86, + 3285, 3287, 86, 86, 86, 3282, 86, 86, 3295, 3289, - 3291, 3291, 3291, 3291, 3291, 3288, 47, 47, 47, 47, - 47, 47, 47, 52, 52, 52, 52, 52, 52, 52, - 57, 57, 57, 57, 57, 57, 57, 63, 63, 63, - 63, 63, 63, 63, 68, 68, 68, 68, 68, 68, - 68, 74, 74, 74, 74, 74, 74, 74, 80, 80, - 80, 80, 80, 80, 80, 89, 89, 3291, 89, 89, - 89, 89, 158, 158, 3291, 3291, 3291, 158, 158, 160, - 160, 3291, 3291, 160, 3291, 160, 162, 3291, 3291, 3291, - 3291, 3291, 162, 165, 165, 3291, 3291, 3291, 165, 165, - 167, 3291, 3291, 3291, 3291, 3291, 167, 169, 169, 3291, + 3288, 3290, 3295, 3291, 3293, 86, 3294, 86, 3295, 3295, + 3295, 3295, 3295, 3295, 3295, 3295, 3292, 47, 47, 47, + 47, 47, 47, 47, 52, 52, 52, 52, 52, 52, + 52, 57, 57, 57, 57, 57, 57, 57, 63, 63, + 63, 63, 63, 63, 63, 68, 68, 68, 68, 68, + 68, 68, 74, 74, 74, 74, 74, 74, 74, 80, + 80, 80, 80, 80, 80, 80, 89, 89, 3295, 89, + 89, 89, 89, 159, 159, 3295, 3295, 3295, 159, 159, + 161, 161, 3295, 3295, 161, 3295, 161, 163, 3295, 3295, + 3295, 3295, 3295, 163, 166, 166, 3295, 3295, 3295, 166, - 169, 169, 169, 169, 172, 3291, 3291, 3291, 3291, 3291, - 172, 175, 175, 3291, 3291, 3291, 175, 175, 90, 90, - 3291, 90, 90, 90, 90, 17, 3291, 3291, 3291, 3291, - 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, - 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, - 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, - 3291, 3291, 3291, 3291, 3291, 3291 + 166, 168, 3295, 3295, 3295, 3295, 3295, 168, 170, 170, + 3295, 170, 170, 170, 170, 173, 3295, 3295, 3295, 3295, + 3295, 173, 176, 176, 3295, 3295, 3295, 176, 176, 90, + 90, 3295, 90, 90, 90, 90, 17, 3295, 3295, 3295, + 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, + 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, + 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, + 3295, 3295, 3295, 3295, 3295, 3295, 3295 } ; -static const flex_int16_t yy_chk[6467] = +static const flex_int16_t yy_chk[6478] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2231,709 +2234,710 @@ static const flex_int16_t yy_chk[6467] = 5, 3, 6, 24, 4, 24, 24, 5, 24, 6, 7, 7, 7, 7, 24, 7, 8, 8, 8, 8, 33, 8, 7, 9, 9, 9, 26, 26, 8, 10, - 10, 10, 19, 29, 9, 33, 19, 29, 3299, 35, + 10, 10, 19, 29, 9, 33, 19, 29, 3303, 35, 10, 11, 11, 11, 11, 11, 11, 13, 13, 13, 13, 34, 13, 11, 35, 99, 34, 29, 38, 13, 51, 51, 11, 12, 12, 12, 12, 12, 12, 14, 14, 14, 14, 99, 14, 12, 15, 15, 15, 38, 23, 14, 23, 23, 12, 23, 46, 15, 16, 16, - 16, 23, 23, 25, 27, 27, 25, 25, 2689, 16, + 16, 23, 23, 25, 27, 27, 25, 25, 2693, 16, 25, 46, 27, 30, 30, 25, 27, 56, 40, 27, 56, 73, 31, 31, 25, 28, 67, 67, 30, 32, 28, 31, 40, 32, 28, 73, 32, 28, 92, 28, - 28, 92, 31, 32, 1082, 32, 36, 36, 37, 37, - 28, 45, 45, 37, 175, 36, 45, 39, 41, 41, + 28, 92, 31, 32, 1086, 32, 36, 36, 37, 37, + 28, 45, 45, 37, 176, 36, 45, 39, 41, 41, - 45, 36, 39, 41, 94, 36, 39, 43, 43, 37, - 43, 94, 39, 41, 41, 39, 41, 44, 42, 43, - 87, 44, 39, 42, 87, 43, 42, 62, 95, 62, - 62, 44, 62, 42, 174, 44, 44, 42, 42, 70, - 95, 70, 70, 72, 70, 72, 72, 79, 72, 79, - 79, 70, 79, 84, 84, 86, 96, 86, 86, 89, - 86, 89, 89, 93, 89, 97, 86, 93, 97, 98, - 89, 89, 98, 100, 101, 102, 96, 103, 104, 105, - 106, 102, 100, 107, 111, 98, 106, 102, 101, 102, - 108, 109, 112, 172, 110, 103, 103, 107, 105, 106, + 45, 36, 39, 41, 87, 36, 39, 37, 87, 37, + 84, 84, 39, 41, 41, 39, 41, 93, 42, 95, + 96, 93, 39, 42, 43, 43, 42, 43, 94, 97, + 44, 95, 97, 42, 44, 94, 43, 42, 42, 113, + 96, 115, 43, 113, 44, 175, 115, 124, 44, 44, + 62, 124, 62, 62, 70, 62, 70, 70, 72, 70, + 72, 72, 79, 72, 79, 79, 70, 79, 86, 103, + 86, 86, 89, 86, 89, 89, 100, 89, 98, 86, + 104, 98, 101, 89, 89, 100, 102, 103, 103, 105, + 107, 106, 102, 108, 98, 109, 101, 106, 102, 111, - 104, 114, 111, 113, 108, 110, 110, 113, 116, 115, - 112, 109, 117, 110, 115, 117, 119, 118, 117, 120, - 123, 114, 116, 118, 120, 126, 121, 122, 734, 121, - 125, 117, 117, 121, 123, 119, 124, 125, 126, 128, - 124, 127, 118, 129, 120, 734, 122, 130, 127, 121, - 131, 122, 128, 132, 131, 133, 134, 135, 135, 136, - 133, 139, 137, 129, 133, 130, 137, 138, 143, 140, - 142, 132, 144, 148, 143, 137, 134, 141, 147, 136, - 141, 137, 138, 142, 144, 145, 145, 139, 140, 146, - 149, 141, 148, 150, 147, 141, 146, 151, 152, 151, + 102, 110, 104, 112, 107, 114, 173, 108, 105, 116, + 106, 119, 110, 110, 122, 109, 117, 111, 118, 117, + 110, 112, 117, 116, 118, 114, 120, 126, 123, 130, + 119, 120, 125, 122, 121, 117, 117, 121, 122, 125, + 126, 121, 123, 118, 128, 127, 129, 131, 133, 130, + 132, 120, 127, 128, 132, 134, 135, 121, 137, 129, + 134, 136, 136, 140, 134, 131, 133, 138, 139, 141, + 168, 138, 143, 146, 146, 144, 135, 150, 137, 142, + 138, 144, 142, 139, 145, 143, 138, 148, 141, 140, + 149, 146, 147, 142, 146, 151, 145, 142, 150, 147, - 153, 154, 157, 145, 155, 153, 145, 146, 151, 150, - 152, 149, 156, 154, 159, 159, 157, 156, 161, 167, - 151, 161, 155, 163, 171, 163, 163, 171, 163, 166, - 166, 168, 179, 168, 168, 169, 168, 169, 169, 173, - 169, 173, 173, 177, 173, 176, 176, 169, 177, 178, - 179, 180, 181, 183, 182, 178, 184, 185, 186, 187, - 181, 183, 188, 186, 178, 182, 180, 181, 190, 191, - 189, 188, 185, 198, 191, 184, 189, 189, 193, 187, - 192, 192, 195, 194, 193, 194, 195, 197, 194, 196, - 196, 195, 198, 190, 202, 199, 195, 201, 203, 197, + 153, 154, 152, 148, 152, 155, 154, 158, 156, 149, + 147, 151, 153, 152, 157, 160, 160, 155, 180, 157, + 162, 158, 254, 162, 254, 152, 156, 164, 172, 164, + 164, 172, 164, 167, 167, 169, 180, 169, 169, 170, + 169, 170, 170, 174, 170, 174, 174, 178, 174, 177, + 177, 170, 178, 179, 181, 182, 183, 184, 185, 179, + 186, 187, 188, 182, 189, 184, 187, 183, 179, 181, + 182, 191, 190, 189, 194, 186, 192, 185, 190, 190, + 194, 192, 188, 193, 193, 195, 198, 195, 196, 202, + 195, 199, 196, 197, 197, 200, 191, 196, 198, 201, - 199, 200, 195, 195, 203, 194, 200, 204, 205, 201, - 206, 204, 215, 205, 202, 207, 208, 210, 209, 211, - 212, 230, 216, 214, 211, 212, 206, 203, 214, 207, - 209, 208, 215, 209, 230, 210, 213, 213, 216, 217, - 213, 219, 213, 218, 218, 217, 220, 219, 221, 222, - 224, 223, 220, 219, 213, 222, 213, 223, 225, 232, - 226, 227, 234, 228, 225, 226, 223, 227, 221, 228, - 229, 224, 231, 235, 233, 234, 236, 229, 231, 232, - 233, 235, 237, 238, 234, 239, 240, 237, 241, 236, - 242, 244, 238, 243, 246, 242, 242, 245, 243, 247, + 200, 202, 196, 203, 201, 204, 207, 195, 196, 196, + 199, 204, 205, 206, 208, 209, 205, 210, 206, 211, + 212, 213, 207, 203, 216, 212, 213, 217, 208, 210, + 209, 166, 210, 215, 204, 214, 214, 211, 215, 214, + 218, 214, 222, 217, 216, 220, 218, 219, 219, 225, + 221, 220, 223, 214, 224, 214, 221, 220, 223, 226, + 224, 227, 222, 232, 229, 226, 227, 228, 229, 224, + 225, 230, 231, 228, 233, 234, 232, 230, 235, 231, + 233, 236, 237, 238, 235, 241, 239, 243, 240, 242, + 237, 239, 246, 244, 236, 234, 238, 240, 244, 244, - 239, 245, 240, 248, 249, 247, 250, 251, 241, 244, - 249, 252, 251, 252, 253, 257, 246, 254, 312, 255, - 259, 248, 248, 256, 254, 255, 250, 260, 266, 256, - 258, 312, 259, 253, 257, 268, 258, 261, 261, 262, - 262, 260, 263, 264, 265, 267, 265, 268, 263, 264, - 267, 266, 269, 270, 271, 272, 273, 276, 274, 275, - 272, 270, 276, 265, 274, 275, 263, 277, 279, 278, - 280, 269, 277, 281, 271, 278, 282, 283, 284, 273, - 285, 288, 288, 279, 280, 283, 285, 290, 293, 286, - 282, 281, 286, 287, 289, 287, 294, 289, 291, 291, + 241, 245, 248, 236, 247, 242, 245, 243, 247, 249, + 246, 250, 251, 252, 253, 249, 255, 257, 251, 253, + 256, 259, 258, 257, 248, 260, 261, 256, 258, 250, + 250, 260, 262, 252, 268, 255, 263, 263, 261, 265, + 259, 264, 264, 266, 270, 265, 262, 269, 267, 266, + 267, 271, 269, 272, 273, 274, 270, 268, 275, 276, + 274, 272, 277, 265, 278, 276, 279, 267, 277, 278, + 271, 279, 280, 281, 273, 282, 283, 284, 280, 285, + 286, 275, 288, 291, 287, 288, 291, 285, 281, 282, + 287, 284, 292, 289, 283, 289, 290, 290, 293, 293, - 292, 292, 165, 284, 293, 290, 295, 297, 296, 295, - 298, 294, 296, 300, 299, 301, 297, 303, 309, 298, - 299, 301, 302, 303, 302, 304, 307, 300, 306, 304, - 305, 305, 307, 306, 308, 310, 311, 315, 309, 316, - 308, 313, 313, 316, 314, 317, 304, 314, 318, 319, - 319, 320, 328, 310, 323, 315, 322, 311, 321, 308, - 323, 321, 324, 325, 317, 324, 318, 327, 322, 320, - 328, 331, 329, 332, 331, 325, 327, 329, 321, 326, - 330, 333, 412, 330, 412, 330, 332, 334, 326, 334, - 334, 326, 336, 333, 337, 336, 326, 326, 326, 326, + 294, 294, 295, 297, 296, 286, 297, 298, 299, 301, + 292, 298, 300, 302, 303, 301, 311, 299, 295, 296, + 303, 300, 304, 305, 304, 312, 306, 302, 308, 305, + 306, 307, 307, 308, 309, 310, 311, 313, 314, 316, + 309, 310, 316, 312, 315, 315, 317, 306, 318, 319, + 165, 314, 318, 320, 321, 321, 322, 324, 313, 323, + 310, 325, 323, 326, 317, 327, 326, 325, 319, 324, + 330, 320, 329, 331, 322, 339, 339, 327, 331, 323, + 328, 329, 332, 333, 335, 332, 333, 332, 330, 328, + 338, 334, 328, 338, 341, 613, 335, 328, 328, 328, - 335, 330, 338, 339, 340, 335, 335, 341, 341, 345, - 342, 337, 339, 340, 337, 342, 347, 338, 343, 343, - 344, 344, 346, 348, 345, 349, 350, 346, 347, 351, - 354, 352, 352, 355, 352, 351, 363, 363, 355, 357, - 356, 350, 348, 352, 357, 349, 356, 358, 359, 360, - 354, 359, 358, 359, 361, 362, 364, 361, 358, 365, - 365, 366, 364, 360, 362, 367, 366, 371, 367, 369, - 361, 373, 164, 361, 367, 361, 370, 372, 367, 370, - 375, 376, 371, 375, 379, 373, 367, 368, 368, 369, - 368, 382, 372, 379, 378, 376, 380, 370, 381, 375, + 328, 340, 613, 332, 334, 336, 337, 336, 336, 341, + 342, 337, 337, 343, 344, 344, 346, 346, 340, 342, + 345, 340, 343, 347, 347, 345, 348, 349, 350, 351, + 352, 353, 349, 354, 357, 355, 355, 358, 355, 354, + 350, 348, 358, 359, 365, 363, 353, 355, 351, 359, + 352, 360, 361, 365, 357, 362, 360, 361, 362, 363, + 362, 364, 367, 361, 364, 366, 366, 369, 367, 368, + 368, 372, 369, 373, 374, 370, 373, 364, 370, 376, + 364, 379, 364, 386, 370, 163, 375, 378, 370, 374, + 378, 372, 381, 376, 373, 379, 370, 371, 371, 382, - 383, 380, 380, 368, 381, 384, 368, 385, 368, 378, - 368, 377, 382, 377, 377, 386, 385, 388, 387, 383, - 384, 389, 390, 377, 387, 377, 377, 377, 392, 391, - 377, 395, 393, 392, 386, 391, 390, 394, 397, 391, - 396, 389, 398, 388, 400, 396, 395, 401, 398, 399, - 399, 392, 393, 397, 402, 403, 404, 394, 405, 401, - 406, 403, 408, 409, 400, 406, 407, 407, 402, 407, - 410, 411, 417, 413, 405, 413, 413, 416, 416, 409, - 414, 404, 408, 415, 414, 411, 410, 415, 418, 419, - 420, 417, 421, 413, 424, 422, 423, 162, 425, 430, + 371, 375, 386, 389, 383, 384, 378, 381, 382, 383, + 383, 384, 387, 371, 392, 391, 371, 385, 371, 388, + 371, 380, 389, 380, 380, 390, 396, 387, 388, 393, + 397, 390, 161, 380, 392, 380, 380, 380, 385, 394, + 380, 391, 395, 393, 398, 394, 396, 395, 399, 394, + 397, 400, 401, 399, 402, 402, 403, 404, 401, 398, + 405, 406, 407, 408, 411, 395, 400, 406, 409, 404, + 412, 414, 413, 409, 405, 159, 403, 410, 410, 408, + 410, 415, 420, 415, 411, 414, 412, 407, 413, 416, + 417, 416, 416, 418, 417, 419, 419, 418, 421, 422, - 424, 423, 415, 418, 422, 419, 421, 425, 420, 423, - 423, 426, 428, 423, 423, 422, 426, 422, 427, 429, - 430, 428, 427, 431, 432, 429, 434, 433, 432, 431, - 433, 434, 435, 436, 436, 437, 438, 438, 439, 442, - 440, 441, 441, 439, 444, 442, 443, 445, 437, 446, - 443, 447, 435, 440, 446, 449, 447, 448, 448, 444, - 450, 451, 452, 458, 455, 457, 448, 449, 445, 453, - 457, 454, 453, 460, 452, 454, 455, 456, 456, 451, - 450, 459, 459, 463, 458, 462, 462, 466, 464, 465, - 467, 469, 470, 471, 472, 460, 464, 473, 465, 160, + 423, 420, 424, 430, 427, 425, 426, 430, 428, 416, + 427, 426, 418, 421, 425, 422, 424, 428, 423, 426, + 426, 429, 431, 426, 426, 425, 429, 425, 432, 433, + 434, 431, 436, 435, 432, 436, 434, 435, 437, 438, + 439, 439, 440, 437, 441, 441, 442, 443, 444, 444, + 433, 442, 445, 446, 447, 440, 448, 446, 445, 438, + 443, 449, 450, 451, 451, 453, 449, 450, 452, 447, + 454, 455, 451, 456, 457, 458, 456, 448, 457, 460, + 452, 459, 459, 455, 460, 453, 461, 458, 454, 462, + 462, 463, 465, 465, 467, 468, 469, 470, 471, 478, - 475, 477, 467, 473, 463, 474, 475, 466, 472, 469, - 470, 469, 476, 471, 474, 477, 478, 476, 479, 480, - 481, 479, 482, 483, 478, 485, 484, 478, 482, 484, - 486, 485, 487, 480, 488, 481, 489, 487, 490, 492, - 491, 493, 490, 483, 486, 491, 493, 494, 495, 485, - 499, 496, 502, 520, 492, 501, 488, 489, 500, 501, - 506, 503, 504, 494, 496, 520, 504, 495, 497, 497, - 499, 502, 509, 500, 497, 506, 497, 503, 507, 508, - 505, 509, 497, 507, 497, 505, 510, 497, 497, 505, - 511, 512, 510, 513, 497, 508, 513, 510, 508, 514, + 473, 474, 475, 468, 85, 469, 477, 461, 478, 476, + 471, 480, 477, 463, 481, 467, 480, 470, 473, 474, + 473, 479, 475, 476, 482, 484, 483, 479, 481, 483, + 485, 486, 482, 487, 489, 482, 490, 486, 488, 484, + 489, 488, 491, 492, 494, 485, 493, 491, 494, 495, + 490, 496, 497, 487, 495, 498, 499, 497, 489, 500, + 503, 524, 506, 504, 505, 492, 496, 493, 505, 507, + 508, 498, 500, 524, 508, 499, 501, 501, 504, 510, + 503, 506, 501, 80, 501, 507, 511, 512, 509, 513, + 501, 511, 501, 509, 510, 501, 501, 509, 513, 514, - 515, 516, 516, 517, 519, 511, 521, 512, 518, 518, - 522, 523, 524, 526, 525, 527, 530, 524, 528, 519, - 515, 521, 514, 525, 528, 530, 533, 531, 517, 522, - 527, 531, 526, 523, 532, 534, 535, 536, 533, 537, - 532, 538, 539, 540, 542, 541, 539, 541, 546, 543, - 534, 536, 544, 544, 537, 535, 540, 543, 545, 538, - 546, 547, 548, 549, 545, 550, 549, 547, 542, 551, - 552, 554, 555, 553, 548, 552, 553, 556, 557, 550, - 554, 565, 556, 556, 551, 558, 558, 554, 555, 560, - 554, 557, 559, 559, 563, 560, 561, 561, 562, 562, + 515, 516, 501, 512, 517, 514, 512, 517, 518, 519, + 514, 520, 520, 521, 526, 515, 529, 516, 522, 522, + 523, 525, 527, 528, 530, 529, 531, 75, 528, 519, + 534, 518, 538, 526, 532, 523, 525, 537, 521, 534, + 532, 531, 535, 530, 527, 536, 535, 538, 539, 537, + 540, 536, 542, 541, 543, 545, 544, 545, 543, 546, + 548, 548, 550, 547, 540, 552, 549, 539, 541, 544, + 542, 547, 549, 551, 550, 553, 554, 552, 553, 551, + 555, 556, 557, 546, 558, 557, 556, 647, 559, 561, + 554, 560, 569, 558, 647, 555, 560, 560, 562, 562, - 563, 564, 565, 566, 568, 567, 564, 564, 567, 568, - 569, 570, 572, 571, 573, 566, 571, 572, 575, 570, - 574, 576, 575, 578, 577, 579, 580, 576, 577, 569, - 579, 581, 581, 582, 583, 585, 586, 573, 584, 574, - 580, 578, 588, 584, 587, 589, 590, 588, 582, 590, - 587, 585, 591, 593, 590, 583, 586, 590, 590, 589, - 592, 592, 594, 595, 596, 597, 598, 600, 595, 596, - 591, 593, 602, 600, 601, 602, 603, 604, 594, 597, - 603, 598, 604, 601, 605, 606, 609, 605, 607, 608, - 606, 611, 610, 609, 612, 616, 611, 613, 613, 614, + 558, 564, 561, 558, 559, 563, 563, 564, 565, 565, + 566, 566, 567, 569, 568, 570, 573, 572, 567, 568, + 568, 571, 572, 574, 571, 575, 577, 570, 575, 576, + 580, 574, 578, 579, 576, 573, 580, 579, 581, 582, + 583, 584, 581, 585, 585, 583, 586, 587, 588, 577, + 589, 578, 590, 588, 591, 584, 593, 582, 592, 595, + 591, 586, 597, 592, 596, 596, 589, 74, 587, 598, + 593, 594, 590, 599, 594, 601, 600, 595, 599, 594, + 597, 600, 594, 594, 602, 598, 604, 605, 606, 601, + 607, 606, 604, 608, 607, 611, 605, 609, 608, 602, - 615, 617, 603, 618, 607, 610, 619, 608, 614, 625, - 617, 616, 619, 158, 612, 618, 620, 621, 623, 615, - 621, 623, 620, 622, 622, 624, 622, 625, 626, 627, - 624, 628, 629, 631, 630, 627, 628, 630, 629, 632, - 633, 634, 626, 635, 632, 633, 633, 636, 639, 637, - 638, 641, 636, 85, 634, 637, 635, 639, 631, 640, - 642, 642, 644, 643, 640, 644, 636, 636, 645, 638, - 643, 641, 646, 647, 645, 650, 648, 651, 647, 651, - 644, 648, 648, 652, 646, 649, 649, 653, 654, 653, - 655, 656, 657, 658, 660, 659, 661, 662, 660, 663, + 609, 610, 612, 615, 614, 616, 610, 619, 615, 617, + 617, 611, 618, 620, 621, 622, 607, 614, 623, 629, + 612, 618, 624, 621, 623, 616, 619, 622, 624, 620, + 625, 626, 626, 625, 626, 627, 628, 629, 627, 630, + 631, 628, 632, 633, 635, 634, 631, 632, 634, 633, + 636, 637, 638, 630, 639, 636, 637, 637, 640, 643, + 641, 642, 645, 640, 68, 638, 641, 639, 643, 635, + 644, 646, 646, 648, 650, 644, 648, 640, 640, 649, + 642, 654, 645, 651, 652, 649, 650, 658, 651, 652, + 652, 648, 653, 653, 655, 656, 655, 657, 659, 657, - 650, 659, 652, 664, 665, 661, 654, 666, 655, 656, - 667, 657, 662, 658, 663, 669, 668, 671, 670, 666, - 672, 664, 668, 665, 673, 667, 674, 675, 673, 669, - 670, 676, 677, 678, 680, 679, 671, 681, 681, 672, - 679, 682, 683, 675, 674, 682, 684, 685, 680, 676, - 677, 677, 678, 686, 687, 688, 683, 689, 685, 687, - 690, 691, 696, 693, 692, 684, 80, 686, 691, 692, - 693, 688, 694, 690, 695, 697, 689, 694, 698, 695, - 696, 699, 697, 700, 701, 702, 703, 698, 705, 703, - 702, 706, 700, 704, 707, 699, 701, 704, 708, 709, + 660, 661, 662, 663, 664, 658, 654, 668, 664, 663, + 665, 666, 667, 669, 656, 671, 659, 670, 660, 665, + 661, 673, 662, 675, 674, 668, 666, 667, 672, 670, + 671, 676, 669, 677, 672, 673, 674, 677, 678, 679, + 680, 681, 675, 682, 683, 685, 685, 684, 686, 683, + 676, 687, 686, 688, 692, 679, 678, 689, 680, 681, + 681, 684, 682, 690, 691, 687, 693, 694, 689, 691, + 692, 695, 688, 700, 696, 697, 698, 690, 695, 696, + 694, 698, 697, 699, 703, 693, 701, 702, 699, 705, + 704, 700, 706, 701, 709, 710, 702, 706, 703, 704, - 706, 718, 705, 710, 710, 711, 711, 712, 712, 707, - 713, 716, 708, 714, 711, 713, 721, 717, 722, 720, - 709, 718, 714, 717, 719, 724, 723, 725, 719, 726, - 716, 720, 723, 724, 725, 727, 722, 728, 731, 737, - 738, 721, 741, 740, 744, 744, 738, 726, 737, 740, - 743, 741, 742, 731, 743, 745, 745, 728, 746, 747, - 727, 729, 748, 729, 749, 750, 729, 752, 742, 746, - 729, 750, 752, 729, 753, 754, 748, 747, 755, 759, - 729, 729, 755, 729, 749, 751, 751, 751, 756, 751, - 757, 758, 751, 754, 757, 753, 758, 751, 759, 760, + 707, 705, 708, 707, 710, 711, 708, 712, 709, 713, + 714, 714, 717, 715, 715, 716, 716, 717, 718, 720, + 711, 712, 715, 721, 722, 724, 725, 718, 723, 721, + 713, 726, 723, 727, 728, 730, 729, 724, 720, 727, + 731, 732, 728, 729, 722, 735, 738, 741, 742, 726, + 745, 725, 744, 730, 742, 752, 741, 746, 744, 745, + 735, 732, 63, 738, 751, 731, 733, 753, 733, 752, + 747, 733, 750, 746, 747, 733, 748, 748, 733, 749, + 749, 757, 751, 750, 754, 733, 733, 753, 733, 756, + 754, 755, 755, 755, 756, 755, 758, 759, 755, 760, - 761, 763, 762, 751, 751, 762, 763, 763, 764, 766, - 757, 75, 756, 767, 760, 764, 765, 765, 767, 768, - 768, 769, 774, 771, 766, 761, 769, 770, 771, 775, - 770, 772, 772, 773, 774, 773, 776, 777, 779, 778, - 776, 780, 780, 785, 781, 784, 779, 782, 775, 783, - 783, 786, 789, 789, 787, 785, 808, 777, 778, 781, - 787, 782, 788, 784, 790, 808, 792, 788, 793, 790, - 790, 792, 794, 786, 793, 795, 796, 798, 794, 799, - 795, 797, 796, 798, 797, 800, 800, 799, 801, 801, - 802, 803, 804, 805, 806, 807, 807, 804, 802, 809, + 761, 759, 757, 755, 761, 763, 762, 764, 765, 755, + 755, 762, 766, 767, 758, 766, 769, 769, 767, 767, + 761, 768, 764, 760, 763, 770, 771, 773, 768, 772, + 772, 771, 773, 765, 774, 778, 775, 774, 776, 776, + 770, 775, 777, 779, 777, 780, 781, 778, 782, 780, + 783, 784, 784, 785, 788, 786, 787, 787, 783, 789, + 790, 837, 779, 837, 791, 58, 781, 782, 785, 786, + 791, 789, 788, 792, 793, 793, 796, 797, 792, 794, + 798, 796, 790, 797, 794, 794, 798, 799, 800, 802, + 801, 803, 799, 801, 800, 802, 804, 804, 806, 803, - 805, 810, 810, 812, 811, 814, 815, 809, 816, 803, - 811, 817, 818, 806, 814, 815, 817, 819, 820, 821, - 819, 818, 812, 820, 822, 823, 824, 826, 826, 827, - 825, 828, 816, 821, 823, 825, 825, 829, 830, 824, - 831, 834, 834, 831, 827, 833, 829, 833, 835, 822, - 828, 831, 836, 837, 842, 838, 839, 836, 840, 841, - 843, 844, 830, 842, 845, 844, 846, 847, 848, 835, - 850, 74, 849, 847, 837, 838, 839, 848, 851, 841, - 840, 852, 845, 843, 849, 846, 853, 852, 854, 850, - 855, 855, 851, 854, 856, 857, 858, 859, 860, 861, + 805, 805, 807, 808, 809, 810, 806, 812, 808, 811, + 811, 809, 815, 813, 814, 814, 812, 816, 815, 818, + 807, 813, 819, 820, 810, 821, 822, 825, 818, 823, + 821, 819, 823, 824, 826, 822, 816, 827, 824, 828, + 831, 825, 832, 829, 830, 830, 827, 820, 829, 829, + 834, 833, 828, 835, 839, 831, 835, 838, 838, 826, + 833, 832, 840, 841, 835, 842, 843, 840, 844, 845, + 846, 847, 848, 849, 834, 839, 848, 850, 854, 846, + 1098, 851, 1098, 852, 841, 842, 843, 851, 853, 845, + 844, 849, 852, 855, 847, 856, 850, 854, 857, 858, - 853, 862, 863, 864, 857, 859, 865, 867, 869, 864, - 866, 868, 865, 867, 856, 872, 858, 870, 860, 872, - 862, 861, 863, 870, 866, 868, 871, 873, 869, 874, - 875, 876, 871, 877, 877, 875, 878, 879, 880, 882, - 879, 874, 878, 883, 881, 882, 873, 884, 884, 874, - 885, 888, 876, 886, 887, 891, 880, 881, 886, 887, - 887, 889, 892, 883, 894, 889, 888, 893, 885, 890, - 890, 896, 893, 897, 900, 899, 901, 891, 903, 903, - 904, 905, 892, 894, 904, 906, 906, 897, 899, 908, - 907, 909, 919, 908, 900, 896, 905, 901, 902, 910, + 853, 856, 859, 859, 858, 860, 861, 855, 862, 863, + 864, 865, 857, 866, 867, 861, 868, 863, 869, 873, + 871, 870, 868, 872, 869, 860, 871, 876, 862, 877, + 864, 876, 866, 865, 867, 870, 874, 872, 875, 873, + 878, 879, 874, 880, 875, 882, 879, 884, 877, 881, + 881, 882, 878, 883, 885, 886, 883, 887, 888, 888, + 878, 886, 889, 890, 880, 884, 891, 885, 890, 892, + 893, 891, 891, 895, 893, 894, 894, 887, 896, 900, + 889, 897, 898, 901, 892, 904, 897, 903, 905, 907, + 907, 909, 908, 910, 910, 895, 908, 901, 896, 911, - 911, 902, 912, 902, 919, 911, 909, 902, 915, 902, - 932, 914, 913, 910, 902, 907, 912, 913, 913, 902, - 914, 916, 915, 917, 918, 916, 920, 921, 922, 918, - 923, 920, 932, 924, 925, 929, 929, 916, 917, 918, - 925, 921, 924, 926, 923, 927, 928, 931, 926, 922, - 930, 927, 928, 931, 933, 930, 934, 936, 937, 939, - 940, 940, 941, 937, 938, 943, 944, 941, 945, 936, - 946, 939, 942, 933, 934, 935, 935, 951, 938, 943, - 942, 935, 947, 935, 68, 944, 946, 945, 947, 935, - 949, 948, 950, 951, 935, 935, 948, 952, 953, 953, + 903, 898, 913, 900, 912, 904, 909, 915, 912, 905, + 906, 914, 915, 906, 916, 906, 919, 913, 920, 906, + 918, 906, 920, 921, 911, 914, 906, 917, 916, 918, + 919, 906, 917, 917, 920, 922, 923, 924, 921, 925, + 922, 926, 924, 927, 930, 928, 929, 937, 923, 930, + 922, 934, 929, 925, 928, 931, 934, 927, 932, 933, + 933, 931, 926, 935, 932, 936, 937, 938, 940, 935, + 941, 943, 942, 944, 944, 941, 945, 947, 948, 949, + 940, 945, 946, 943, 950, 938, 942, 936, 939, 939, + 946, 947, 953, 951, 939, 954, 939, 948, 949, 951, - 954, 935, 949, 955, 954, 957, 958, 959, 960, 958, - 950, 957, 961, 960, 962, 952, 963, 964, 966, 967, - 962, 963, 968, 955, 969, 961, 959, 966, 967, 971, - 969, 970, 972, 973, 975, 974, 964, 972, 968, 976, - 970, 977, 980, 978, 983, 986, 989, 987, 971, 974, - 977, 976, 978, 973, 975, 979, 981, 985, 988, 980, - 983, 979, 981, 990, 989, 986, 987, 996, 991, 992, - 995, 985, 988, 991, 992, 995, 996, 998, 990, 997, - 997, 999, 1001, 998, 1002, 1006, 1007, 1004, 1004, 1002, - 1002, 1004, 1005, 1008, 999, 1005, 1009, 1010, 1001, 1006, + 950, 952, 939, 955, 953, 956, 952, 939, 939, 957, + 957, 958, 959, 954, 939, 958, 961, 962, 963, 955, + 962, 964, 961, 956, 966, 965, 964, 968, 967, 972, + 966, 970, 959, 967, 971, 973, 975, 963, 965, 974, + 970, 973, 976, 971, 977, 972, 968, 976, 974, 978, + 979, 981, 982, 980, 984, 975, 983, 987, 990, 993, + 981, 982, 983, 978, 977, 980, 985, 989, 991, 992, + 979, 984, 985, 987, 994, 995, 57, 993, 990, 996, + 995, 989, 1000, 992, 996, 999, 1003, 991, 1002, 994, + 999, 1000, 1001, 1001, 1002, 1005, 1006, 1009, 1010, 1003, - 1011, 1012, 1013, 1015, 1020, 1014, 1007, 1012, 1016, 1008, - 1010, 1014, 1017, 1016, 1009, 1011, 1019, 1023, 1015, 1019, - 1029, 63, 1013, 1021, 1022, 1020, 1017, 1024, 1021, 1022, - 1025, 1026, 1024, 1023, 1028, 1025, 1029, 1033, 1030, 1031, - 1028, 1032, 1032, 1026, 1030, 1031, 1033, 1034, 1035, 1036, - 1036, 1035, 1037, 1038, 1039, 1040, 1041, 1042, 1040, 1044, - 1043, 1049, 1045, 1042, 1044, 1034, 1043, 1045, 1046, 1041, - 1037, 1047, 1038, 1046, 1039, 1050, 1051, 1047, 1052, 1049, - 1053, 1053, 1051, 1052, 1054, 1055, 1056, 1057, 1058, 1059, - 1060, 1058, 1059, 1054, 1055, 1050, 1062, 1061, 1063, 1064, + 1009, 1006, 1006, 1008, 1008, 1011, 1012, 1008, 1013, 1015, + 1014, 1005, 1010, 1016, 1017, 1018, 1019, 1023, 1024, 1016, + 1023, 1018, 1012, 1014, 1015, 1011, 1013, 1020, 1021, 1027, + 1025, 1019, 1020, 1026, 1017, 1025, 1028, 1030, 1026, 1024, + 1032, 1028, 1021, 1029, 1033, 1027, 1032, 1034, 1029, 1030, + 1035, 1036, 1036, 1034, 1037, 1038, 1035, 1041, 1039, 1042, + 1033, 1039, 1043, 1037, 1040, 1040, 1044, 1045, 1046, 1044, + 1047, 1054, 1048, 1038, 1046, 1041, 1047, 1048, 1042, 1049, + 1045, 1050, 1043, 1051, 1049, 1053, 1050, 1055, 1060, 1051, + 1056, 1054, 1058, 1055, 1061, 1056, 1057, 1057, 1059, 1062, - 1067, 1060, 1061, 1065, 1056, 1066, 1057, 1068, 1070, 1065, - 1063, 1066, 1068, 1072, 1062, 1067, 1069, 1069, 1064, 1071, - 1073, 1074, 1075, 1076, 1073, 1072, 1077, 1070, 1079, 1080, - 1080, 1075, 1081, 1071, 1083, 1084, 1086, 1085, 1089, 1074, - 1092, 1086, 1076, 58, 1087, 1088, 1088, 1079, 1083, 1085, - 1084, 1077, 1081, 1087, 1090, 1091, 1092, 1093, 1089, 1095, - 1090, 1091, 1093, 1094, 1095, 1094, 1096, 1097, 1098, 1099, - 1100, 1101, 1102, 1098, 1103, 1105, 1105, 1106, 1101, 1107, - 1096, 1097, 1109, 1108, 1099, 1110, 57, 1102, 1109, 1100, - 1111, 1106, 1113, 1103, 1117, 1111, 1113, 1107, 1108, 1114, + 1064, 1058, 1062, 1053, 1065, 1063, 1060, 1059, 1063, 1065, + 1066, 1064, 1067, 1061, 1068, 1069, 1070, 1071, 1072, 1073, + 1073, 1069, 1070, 1072, 1067, 1074, 1075, 1076, 1066, 1078, + 1077, 1080, 1071, 1068, 1077, 1081, 1079, 1083, 1085, 1076, + 1075, 1084, 1084, 1087, 1074, 1079, 1088, 1078, 1090, 1093, + 1080, 1089, 1105, 1090, 1096, 1091, 1083, 1087, 1085, 1105, + 1081, 1088, 1094, 1089, 1091, 1092, 1092, 1095, 1094, 1093, + 1096, 1097, 1099, 1095, 1100, 1101, 1097, 1099, 1102, 1103, + 1104, 1106, 1107, 1102, 1109, 1109, 1110, 1111, 1100, 1101, + 1114, 1112, 1113, 1234, 1103, 1234, 1106, 1115, 1113, 1104, - 1114, 1117, 1115, 1118, 1111, 1110, 1111, 1115, 1120, 1111, - 1116, 1116, 1119, 1121, 1122, 1119, 1123, 1118, 1124, 1126, - 1125, 1123, 1127, 1122, 1126, 1129, 1134, 1120, 1128, 1131, - 1131, 1121, 1125, 1132, 1137, 1133, 1127, 1124, 1132, 1128, - 1133, 1136, 1135, 1137, 1129, 1136, 1134, 1135, 1138, 1139, - 1140, 1142, 1143, 1141, 1145, 1144, 1146, 1147, 1150, 1143, - 1151, 1149, 1148, 1138, 1139, 1141, 1142, 1144, 1148, 1140, - 1152, 1153, 1154, 1145, 1157, 1147, 1149, 1146, 1150, 1152, - 1151, 1155, 1156, 1158, 1159, 1162, 1153, 1164, 1161, 1163, - 1165, 1154, 1166, 1155, 1161, 1164, 1170, 1167, 1158, 1157, + 1110, 1107, 1115, 1117, 1125, 1111, 1112, 1117, 1118, 1118, + 1114, 1115, 1119, 1115, 1120, 1120, 1115, 1119, 1121, 1122, + 1123, 1124, 1125, 1123, 1127, 1121, 1126, 1128, 1132, 1127, + 1129, 1130, 1133, 1122, 1131, 1126, 1130, 1135, 1135, 1132, + 1124, 1138, 1129, 1142, 1136, 1137, 1128, 1139, 1131, 1136, + 1137, 1133, 1139, 1140, 1141, 1143, 1144, 1140, 1142, 1145, + 1147, 1138, 1146, 1141, 1148, 1149, 1150, 1147, 1151, 1154, + 1143, 1145, 1152, 1153, 1155, 1144, 1148, 1146, 1152, 1158, + 1157, 1156, 1160, 1161, 1149, 1159, 1151, 1150, 1153, 1154, + 1156, 1162, 1163, 1165, 1155, 1157, 1166, 1159, 1158, 1165, - 1162, 1156, 1167, 1163, 1159, 1168, 1169, 1171, 1166, 1172, - 1165, 1169, 1169, 1173, 1173, 1170, 1175, 1168, 1176, 1177, - 1181, 1171, 1172, 1174, 1174, 1177, 1181, 1176, 1174, 1175, - 1179, 1174, 1174, 1178, 1178, 1179, 1174, 1185, 1180, 1182, - 1183, 1188, 1174, 1319, 1182, 1183, 1174, 1180, 1184, 1184, - 1186, 1186, 1187, 1189, 1190, 1187, 1191, 1187, 1185, 1192, - 1193, 1188, 1194, 1190, 1192, 1197, 1195, 1196, 1199, 1319, - 1197, 1189, 1195, 1196, 1193, 1198, 1191, 1199, 1205, 1198, - 1194, 1206, 1199, 1204, 1199, 1202, 1199, 1204, 1199, 1200, - 1200, 1201, 1201, 1205, 1201, 1207, 1202, 1208, 1209, 1206, + 1167, 1160, 1168, 1169, 1170, 1172, 1162, 1174, 1161, 52, + 1168, 1166, 1163, 1171, 1167, 1175, 1173, 1172, 1171, 1176, + 1170, 1173, 1173, 1169, 1177, 1177, 1174, 1179, 1180, 1175, + 1181, 1202, 1176, 1178, 1178, 1202, 1181, 1180, 1178, 1184, + 1179, 1178, 1178, 1182, 1182, 1183, 1178, 1185, 1184, 1186, + 1183, 1189, 1178, 1185, 1186, 1187, 1178, 1188, 1188, 1192, + 1187, 1190, 1190, 1191, 1193, 1194, 1191, 1195, 1191, 1197, + 1196, 1198, 1189, 47, 1194, 1196, 1201, 1206, 1199, 1192, + 1200, 1201, 1193, 1197, 1199, 1203, 1200, 1195, 1206, 1198, + 1204, 1204, 1205, 1205, 1203, 1205, 1208, 1209, 1210, 1203, - 1210, 1211, 1208, 1208, 1207, 1212, 1211, 1209, 1213, 1214, - 1215, 1216, 1217, 1218, 1218, 1219, 1220, 1213, 1217, 1212, - 1222, 1221, 1210, 1219, 1223, 1216, 1221, 1224, 1214, 1215, - 1220, 1225, 1226, 1223, 1222, 1227, 1227, 1226, 1228, 1229, - 1229, 1230, 1234, 1230, 1232, 1224, 1233, 1232, 1235, 1236, - 1236, 1233, 1237, 1228, 1238, 1238, 1225, 1235, 1239, 1239, - 1240, 1234, 1241, 1242, 1250, 1240, 1243, 1243, 1244, 1246, - 1245, 1247, 1237, 1245, 1261, 1261, 1247, 1248, 1249, 1253, - 1249, 1255, 1250, 1241, 1242, 1257, 1248, 1252, 1244, 1246, - 1252, 1254, 1256, 1257, 1253, 1255, 1254, 1256, 1258, 1259, + 1208, 1203, 1211, 1203, 1212, 1203, 1213, 1214, 1215, 1212, + 1212, 1211, 1209, 1215, 1216, 1213, 1210, 1217, 1218, 1219, + 1220, 1221, 1222, 1222, 1223, 1224, 1217, 1221, 1216, 1214, + 1225, 1226, 1223, 1227, 1220, 1225, 1228, 1218, 1219, 1224, + 1229, 1230, 1227, 1231, 1231, 1226, 1230, 1232, 1233, 1233, + 1236, 1237, 1238, 1236, 1228, 1239, 1237, 1240, 1240, 1241, + 1242, 1242, 1232, 1244, 1239, 1229, 1243, 1243, 1244, 1245, + 1246, 1238, 1247, 1247, 1248, 1249, 1250, 1251, 1249, 1241, + 1252, 1253, 1251, 1253, 1254, 1256, 1257, 1258, 1256, 1252, + 1245, 1246, 1258, 1259, 1248, 1260, 1250, 1261, 1262, 1264, - 1260, 1262, 1259, 1258, 1263, 1260, 1262, 1264, 1265, 1270, - 1266, 1268, 1269, 1264, 1270, 1265, 1273, 1268, 1269, 1271, - 1272, 1274, 1263, 1266, 1276, 1271, 1275, 1275, 1278, 1272, - 1279, 1280, 1274, 1281, 1282, 1273, 1283, 1286, 1287, 1281, - 1282, 1285, 1283, 1278, 1276, 1288, 1291, 1285, 1289, 1290, - 1279, 1286, 1292, 1292, 1280, 1293, 1294, 1286, 1287, 1295, - 1289, 1296, 1298, 1290, 1291, 1288, 1296, 1297, 1297, 1299, - 1301, 1304, 1303, 1302, 1299, 1293, 1305, 1295, 1302, 1302, - 1304, 1294, 1306, 1307, 1305, 1298, 1308, 1309, 1310, 1301, - 1303, 1311, 1309, 1311, 1312, 1309, 1306, 1310, 1307, 1314, + 1260, 1257, 1254, 1262, 1264, 1261, 1263, 1259, 1266, 1263, + 1265, 1265, 1267, 1266, 1268, 1269, 1270, 1272, 1273, 1275, + 1268, 1274, 1269, 1272, 1273, 1275, 1274, 1276, 1277, 1270, + 1267, 1278, 1279, 1279, 1280, 1282, 1276, 1283, 1284, 1285, + 1286, 1293, 1278, 1287, 1291, 1285, 1286, 1277, 1290, 1287, + 1282, 1292, 1289, 1293, 1280, 1294, 1295, 1283, 1289, 1296, + 1296, 1284, 1290, 1297, 1291, 1298, 1299, 1300, 1290, 1294, + 1302, 1292, 1300, 1303, 1295, 1301, 1301, 1305, 1303, 1307, + 1306, 1309, 1308, 1297, 1299, 1306, 1306, 1310, 1311, 1309, + 1298, 1308, 1312, 1302, 1313, 1314, 1305, 1307, 1315, 1313, - 1316, 1308, 1315, 1318, 1308, 1314, 1315, 1317, 1312, 1320, - 1321, 1316, 1317, 1317, 1322, 1321, 1323, 1324, 1325, 1322, - 1326, 1328, 1318, 1325, 1329, 1330, 1332, 1320, 1331, 1331, - 1332, 1333, 1334, 1335, 1323, 1328, 1336, 1324, 1337, 1335, - 1326, 1338, 1329, 1330, 1339, 1340, 1341, 1342, 1336, 1333, - 1345, 1334, 1342, 1344, 1343, 1338, 1354, 1337, 1344, 1339, - 1340, 1343, 1346, 1347, 1347, 1341, 1348, 1349, 1345, 1350, - 1354, 1346, 1351, 1351, 1352, 1357, 1349, 1353, 1355, 1355, - 1352, 1348, 1356, 1353, 1358, 1359, 1360, 1361, 1356, 1350, - 1359, 1357, 1360, 1361, 1362, 1363, 1363, 1364, 1364, 1367, + 1315, 1310, 1313, 1311, 1314, 1316, 1318, 1312, 1322, 1319, + 1312, 1320, 1318, 1319, 1323, 1321, 1324, 1327, 1325, 1316, + 1321, 1321, 1320, 1325, 1326, 1328, 1329, 1322, 1330, 1326, + 1332, 1329, 1333, 1334, 1324, 1327, 1335, 1335, 1336, 1337, + 1323, 1338, 1336, 1339, 1332, 1328, 1340, 1341, 1330, 1339, + 1333, 1334, 1345, 1342, 1343, 1344, 1346, 1337, 1340, 1348, + 1338, 1346, 1349, 1352, 1348, 1347, 1341, 1342, 1350, 1343, + 1344, 1345, 1347, 1351, 1351, 1353, 1354, 1350, 1352, 1356, + 1349, 1355, 1355, 1357, 1353, 1356, 1358, 1359, 1359, 1357, + 1361, 1360, 1362, 1363, 18, 1364, 1354, 1360, 1363, 1365, - 1362, 1366, 1366, 1367, 1368, 1358, 1369, 1370, 1371, 1373, - 1372, 1374, 1374, 1368, 1375, 1376, 1373, 1378, 1379, 1370, - 1382, 1377, 1371, 1376, 1369, 1372, 1377, 1380, 1383, 1383, - 1381, 1378, 1380, 1380, 1375, 1381, 1381, 1379, 1384, 1385, - 1382, 1386, 1387, 1388, 1389, 1390, 1391, 1387, 1392, 1393, - 1386, 1395, 1391, 1392, 1394, 1396, 1403, 1384, 1385, 1397, - 1394, 1396, 1388, 1390, 1389, 1397, 1398, 1399, 1400, 1401, - 1395, 1405, 1405, 52, 1404, 1393, 1402, 1403, 1406, 1407, - 1411, 1406, 1408, 1408, 1411, 1398, 1399, 1400, 1401, 1404, - 1402, 1407, 1409, 1409, 1410, 1412, 1413, 1414, 1415, 1410, + 1358, 1364, 1366, 1367, 1367, 1365, 1361, 1372, 1366, 1368, + 1368, 1370, 1370, 1362, 1371, 1373, 1372, 1374, 1371, 1377, + 1375, 1376, 1378, 1378, 1379, 1381, 1377, 1380, 1382, 1374, + 1381, 1383, 1384, 1373, 1375, 1380, 1376, 1384, 1384, 1386, + 1385, 1388, 1382, 1389, 1379, 1385, 1385, 1387, 1387, 1390, + 1383, 1391, 1392, 1393, 1394, 1395, 1391, 1397, 1390, 1386, + 1388, 1395, 1389, 1396, 1398, 1399, 1402, 1403, 1396, 1400, + 1398, 1392, 1394, 1393, 1401, 1400, 1404, 1405, 1406, 1407, + 1401, 1416, 1408, 1397, 1399, 1402, 1403, 1409, 1409, 1411, + 1410, 17, 1406, 1410, 1416, 1404, 1405, 1408, 1412, 1412, - 1415, 1417, 1418, 1419, 1415, 1413, 1420, 1418, 1412, 1421, - 1414, 1422, 1422, 1425, 1426, 1423, 1424, 1415, 1419, 1417, - 1423, 1430, 1424, 1432, 1427, 1421, 1420, 1426, 1425, 1427, - 1428, 1429, 1431, 1433, 1428, 1429, 1434, 1434, 1436, 1433, - 1438, 1430, 1439, 1432, 1440, 1440, 1441, 1439, 1442, 1448, - 1431, 1449, 1441, 1444, 1444, 1446, 1436, 1452, 1446, 1447, - 1447, 1438, 1453, 1451, 1455, 1448, 1451, 1449, 1442, 1454, - 1454, 1453, 1456, 1457, 1459, 1458, 1461, 1452, 1462, 1455, - 1458, 1460, 1460, 1463, 1464, 1461, 1465, 1467, 1459, 1466, - 1466, 1473, 1457, 1456, 1468, 1469, 1462, 1475, 1463, 1470, + 1407, 1411, 1413, 1413, 1414, 1417, 1415, 1418, 1421, 1414, + 1415, 1419, 1423, 1419, 1417, 1424, 1422, 1419, 1425, 1427, + 1418, 1422, 1426, 1426, 1427, 1428, 1421, 1423, 1429, 1430, + 1419, 1428, 1431, 1434, 1425, 1424, 1432, 1431, 1435, 1436, + 1432, 1433, 1430, 1429, 1437, 1433, 1438, 1438, 1440, 1442, + 1437, 1446, 1443, 1434, 1444, 1444, 1435, 1443, 1445, 1436, + 1448, 1448, 1450, 1452, 1445, 1450, 1440, 1451, 1451, 1453, + 1442, 1446, 1455, 1456, 1457, 1455, 1458, 1458, 1460, 1452, + 1459, 1461, 1462, 1457, 1463, 1453, 1466, 1462, 1464, 1464, + 1467, 1468, 1465, 1456, 1469, 1459, 1470, 1470, 1463, 1460, - 1469, 1467, 1471, 1471, 1472, 1478, 1465, 1476, 1472, 1464, - 1482, 1473, 1468, 1477, 1470, 1474, 1474, 1477, 1476, 1475, - 1479, 1481, 1481, 1483, 1478, 1479, 1482, 1485, 1484, 1486, - 1487, 1488, 1488, 1489, 1490, 1493, 1491, 1495, 1489, 1492, - 1492, 1483, 1484, 1486, 1493, 1494, 1485, 1485, 1497, 1496, - 1494, 1496, 1498, 1497, 1490, 1487, 1491, 1495, 1498, 1499, - 1500, 1502, 1503, 1503, 1504, 1505, 1500, 1507, 1508, 1509, - 1509, 1505, 1507, 1510, 1510, 1502, 1511, 1512, 1513, 1499, - 1516, 1514, 1517, 1504, 1514, 1515, 1515, 1518, 1526, 47, - 1511, 1520, 1508, 1513, 1517, 1512, 1519, 1520, 1516, 1519, + 1461, 1465, 1472, 1471, 1466, 1467, 1473, 1474, 1475, 1475, + 1477, 1473, 1478, 1478, 1469, 1476, 1468, 1471, 1479, 1476, + 1472, 1480, 1474, 1481, 1482, 1486, 1483, 1481, 1485, 1485, + 1477, 1483, 1480, 1487, 1488, 1489, 1490, 1491, 1492, 1492, + 1479, 1486, 1493, 1482, 1494, 1495, 1499, 1493, 1488, 1497, + 1490, 1487, 1496, 1496, 1489, 1489, 1498, 1500, 1497, 1500, + 1503, 1498, 1491, 1501, 1494, 1495, 1499, 1502, 1501, 1504, + 1506, 1507, 1507, 1502, 1508, 1504, 1509, 1512, 1511, 1516, + 1503, 1515, 1509, 1511, 1506, 1513, 1513, 1514, 1514, 1517, + 1520, 1518, 1530, 1508, 1518, 1515, 1522, 1516, 1519, 1519, - 1521, 1522, 1519, 1524, 1522, 1521, 1525, 1518, 1528, 1528, - 1529, 1525, 1524, 1526, 1519, 1527, 1529, 1530, 1527, 1531, - 1522, 1532, 1532, 1530, 1531, 1533, 1533, 1534, 1536, 1535, - 1537, 1538, 1539, 1534, 1535, 1540, 1541, 1542, 1540, 1543, - 1544, 1536, 1541, 1542, 1543, 1545, 1544, 1549, 1537, 1546, - 1538, 1550, 1539, 1548, 1546, 1547, 1547, 1551, 1548, 1552, - 1553, 1554, 1555, 1556, 1559, 1549, 1557, 1558, 1545, 1558, - 1557, 1550, 1561, 1552, 1553, 1554, 1563, 1551, 1562, 1564, - 1555, 1565, 1566, 1559, 1561, 1564, 1567, 1569, 1556, 1563, - 1562, 1568, 1571, 1571, 1572, 1573, 1576, 1574, 1566, 1577, + 1521, 1512, 1525, 1523, 1517, 1524, 1523, 1525, 1520, 1523, + 1526, 1524, 1521, 1526, 1528, 1529, 1522, 1530, 1540, 1531, + 1529, 1523, 1531, 1528, 1532, 1532, 1533, 1534, 1538, 1526, + 1535, 1540, 1533, 1534, 1538, 1535, 1536, 1536, 1537, 1537, + 1539, 1541, 1542, 1543, 1544, 1539, 1545, 1544, 1546, 1549, + 1547, 1548, 1545, 1550, 1546, 1547, 1553, 1548, 1550, 1541, + 1554, 1542, 1552, 1543, 1551, 1551, 1555, 1552, 1556, 1557, + 1558, 1559, 1549, 1560, 1553, 1561, 1562, 1563, 1562, 1561, + 1554, 1565, 1556, 1557, 1558, 1566, 1555, 1567, 1568, 1559, + 1569, 1570, 1571, 1565, 1568, 1572, 1563, 1566, 1560, 1573, - 1573, 1565, 1575, 1575, 1578, 1568, 1567, 1579, 1569, 1574, - 1580, 1576, 1581, 1577, 1572, 1582, 1584, 1583, 1586, 1580, - 1588, 1589, 1582, 1593, 1589, 1579, 1583, 1581, 1578, 1583, - 1590, 1590, 1584, 1586, 1591, 1591, 1592, 1594, 1586, 1596, - 1594, 1593, 1595, 1595, 1597, 1588, 1598, 1600, 1592, 1599, - 1602, 1598, 1596, 1601, 1599, 1603, 1604, 1608, 1605, 1602, - 1607, 1607, 1609, 1597, 1606, 1604, 1600, 1605, 1604, 1601, - 1606, 1610, 1611, 1613, 1603, 1609, 1612, 1608, 1616, 1617, - 1618, 1618, 1619, 1621, 1620, 1613, 1611, 1623, 1621, 1610, - 1622, 1622, 1612, 1620, 1625, 1624, 1623, 1617, 1619, 1623, + 1567, 1575, 1575, 1576, 1578, 1581, 1577, 1570, 1582, 1572, + 1569, 1577, 1571, 1579, 1579, 1580, 1578, 1583, 1584, 1581, + 1573, 1585, 1586, 1576, 1588, 1587, 1590, 1584, 1592, 1586, + 1580, 1597, 1582, 1596, 1587, 1583, 1585, 1587, 1601, 1593, + 1588, 1590, 1593, 1594, 1594, 1596, 1590, 1595, 1595, 1597, + 1600, 1598, 1604, 1592, 1598, 1599, 1599, 1601, 1605, 1602, + 1603, 1606, 1607, 1600, 1602, 1603, 1608, 1609, 1611, 1611, + 1606, 1604, 1612, 1610, 1605, 1608, 1609, 1613, 1608, 1610, + 1614, 1607, 1615, 1616, 1620, 1617, 1621, 1622, 1622, 1623, + 1613, 1624, 1612, 1626, 1626, 1629, 1615, 1617, 1614, 1616, - 1624, 1626, 1627, 1616, 1628, 1622, 1632, 1630, 1631, 1628, - 1628, 1633, 1625, 1634, 1635, 18, 1633, 1636, 1636, 1634, - 1627, 1630, 1626, 1631, 1637, 1642, 1638, 1639, 1632, 1640, - 1637, 1638, 1635, 1639, 1643, 1640, 1644, 1645, 1646, 1651, - 1647, 1646, 1644, 1649, 1652, 1642, 1647, 1646, 1643, 1653, - 1645, 1649, 1654, 1655, 1656, 1657, 1658, 1653, 1651, 1659, - 1659, 1654, 1660, 1652, 1662, 1661, 1655, 1656, 1660, 1657, - 1658, 1661, 1663, 1663, 1664, 1665, 1666, 1662, 1667, 1667, - 1669, 1659, 1670, 1668, 1671, 1672, 1669, 1674, 1674, 1675, - 1680, 1681, 17, 1665, 1664, 1666, 1668, 1676, 1684, 1680, + 1624, 1625, 1627, 1630, 1621, 1623, 1625, 1628, 1626, 1620, + 1631, 1627, 1628, 1629, 1627, 1632, 1634, 1635, 1636, 1638, + 1632, 1632, 1637, 1639, 1630, 1638, 1642, 1637, 1631, 1641, + 1634, 1642, 1635, 1640, 1640, 1641, 1643, 1644, 1646, 1647, + 1636, 1639, 1643, 1644, 1648, 1650, 1649, 1655, 1650, 1651, + 1648, 1656, 1653, 1647, 1650, 1651, 1657, 0, 1646, 1649, + 1653, 1659, 1658, 1660, 1657, 1661, 1655, 1662, 1663, 1663, + 1656, 1658, 1664, 1666, 1659, 1668, 1660, 1665, 1664, 1661, + 1669, 1662, 1670, 1665, 1667, 1667, 1666, 1671, 1671, 1672, + 1663, 1673, 1674, 1675, 1676, 1668, 1679, 1673, 1669, 1678, - 1671, 1676, 1677, 1672, 1670, 1678, 1679, 1677, 1683, 1675, - 1678, 1679, 1686, 1684, 1681, 1685, 1685, 1687, 1688, 1690, - 1683, 1689, 1689, 1691, 1692, 1695, 1693, 1696, 1697, 1687, - 1691, 1686, 1699, 1690, 1697, 1700, 1692, 1688, 1693, 1698, - 1712, 1700, 1701, 1701, 1695, 1702, 1706, 1696, 1702, 1705, - 1699, 1698, 1703, 1703, 1705, 1706, 1707, 1708, 1708, 1709, - 1712, 1710, 1707, 1710, 1711, 1713, 1714, 1711, 1715, 1716, - 1717, 1709, 1718, 1719, 1716, 1717, 1720, 1721, 1723, 1722, - 0, 1718, 1721, 1729, 1714, 1719, 1715, 1713, 1722, 1725, - 1724, 1720, 1726, 1728, 1725, 1724, 1727, 1727, 1723, 1728, + 1678, 1670, 1672, 1680, 1685, 1681, 1682, 1680, 1683, 1675, + 1681, 1682, 1676, 1683, 1674, 1684, 1679, 1687, 1688, 1689, + 1689, 1690, 1691, 1692, 1684, 1693, 1693, 1685, 1695, 1687, + 1694, 1696, 1699, 1688, 1691, 1695, 1697, 1700, 1702, 1701, + 1690, 1703, 1692, 1696, 1694, 1701, 1704, 1710, 1697, 0, + 1702, 1699, 1704, 1705, 1705, 1706, 1710, 1700, 1706, 1703, + 1707, 1707, 1709, 1711, 1712, 1712, 1713, 1709, 1714, 1711, + 1714, 1715, 1716, 1717, 1715, 1718, 1719, 1720, 1713, 1721, + 1722, 1724, 1720, 1725, 1721, 1723, 1727, 1730, 1725, 1722, + 1726, 0, 1716, 1718, 1719, 1717, 1724, 1723, 1728, 1726, - 1731, 1722, 1724, 1732, 1729, 1733, 1734, 1726, 1735, 1736, - 1735, 1737, 1737, 1738, 1738, 1739, 1739, 1740, 1743, 1731, - 1744, 1733, 1732, 1736, 1753, 1736, 1734, 1741, 1741, 1742, - 1742, 1745, 1745, 1751, 1746, 1756, 1747, 1740, 1746, 1743, - 1748, 1744, 1747, 1748, 1750, 1754, 1752, 1759, 1754, 1753, - 1750, 1751, 1752, 1755, 1755, 1756, 1757, 1758, 1758, 1760, - 1761, 1757, 1759, 1762, 1762, 1761, 1763, 1764, 1767, 1765, - 1766, 1763, 1768, 1764, 1770, 1773, 1776, 1775, 1769, 1775, - 1760, 1765, 1765, 1765, 1769, 1774, 1767, 1776, 1765, 1773, - 1766, 1772, 1768, 1777, 1770, 1778, 1772, 1772, 1779, 1780, + 1729, 1733, 1730, 1728, 1735, 1729, 1727, 1731, 1731, 1732, + 1728, 1736, 1726, 1737, 1738, 1732, 1739, 1740, 1739, 1741, + 1741, 1744, 1733, 1735, 1742, 1742, 1743, 1743, 1747, 1737, + 1736, 1740, 1748, 1740, 1738, 1745, 1745, 1746, 1746, 1749, + 1749, 1744, 1750, 1755, 1751, 1752, 1750, 1757, 1752, 1747, + 1751, 1754, 1756, 1748, 1759, 1759, 1758, 1754, 1756, 1758, + 1760, 1755, 1761, 1762, 1762, 1764, 1763, 1761, 1765, 1766, + 1766, 1767, 1757, 1765, 1771, 1769, 1767, 1768, 1770, 1772, + 1760, 1763, 1774, 1768, 1773, 1778, 1764, 1769, 1769, 1769, + 1773, 1776, 1771, 1777, 1769, 1780, 1776, 1776, 1770, 1772, - 1774, 1778, 1781, 1782, 1782, 1783, 1785, 1779, 1777, 1784, - 1784, 1786, 1787, 1787, 1788, 1788, 1789, 1792, 1792, 1780, - 1793, 1794, 1797, 1781, 1801, 1796, 1785, 1799, 1799, 1798, - 1794, 1783, 1800, 1786, 1796, 1798, 1789, 1802, 1803, 1801, - 1804, 1805, 1805, 1797, 1802, 1793, 1806, 1803, 1807, 1809, - 1810, 1811, 1812, 1800, 1809, 1813, 1810, 1814, 1819, 1812, - 1816, 1813, 1818, 1814, 1807, 1816, 1804, 1815, 1815, 1817, - 1822, 1811, 1806, 1820, 1823, 1827, 1821, 1819, 1817, 1821, - 1824, 1824, 1818, 1825, 1826, 1820, 1828, 1829, 1822, 1825, - 1826, 1829, 1831, 1832, 1833, 1827, 1834, 1834, 1835, 1833, + 1778, 1779, 1774, 1779, 1781, 1782, 1780, 1777, 1783, 1784, + 1785, 1782, 1786, 1786, 1787, 1788, 1788, 1783, 1789, 1781, + 1790, 1791, 1791, 1792, 1792, 1793, 1796, 1796, 1797, 1784, + 1798, 1785, 1800, 1801, 1803, 1803, 1804, 1802, 1789, 1798, + 1787, 1800, 1790, 1802, 1805, 1793, 1808, 1807, 1806, 1809, + 1809, 1810, 1811, 1797, 1801, 1806, 1807, 1804, 1813, 1805, + 1814, 1815, 1816, 1813, 1817, 1818, 1814, 1821, 1811, 1816, + 1817, 1818, 1808, 1819, 1819, 1820, 1821, 1810, 1822, 1824, + 1820, 1815, 1823, 1825, 1826, 1827, 1825, 1828, 1828, 1829, + 1830, 1824, 1831, 1832, 1835, 1829, 1830, 1839, 1822, 1833, - 1823, 1828, 1838, 1836, 1839, 1840, 1846, 1829, 1839, 1848, - 1841, 1840, 1831, 1842, 1842, 1832, 1843, 1835, 1836, 1841, - 1843, 1838, 1844, 1845, 1845, 1847, 1849, 1846, 1848, 1850, - 1851, 1849, 1853, 1844, 1852, 1861, 1854, 1859, 1844, 1847, - 1852, 1854, 1855, 1855, 1856, 1856, 1859, 1853, 1857, 1850, - 1851, 1860, 1857, 1862, 1862, 1861, 1864, 1864, 1865, 1866, - 1868, 1869, 1860, 1865, 1865, 1866, 1868, 1860, 1870, 1871, - 1872, 1874, 1876, 1870, 1875, 1877, 1872, 1879, 1875, 1878, - 1880, 1871, 1882, 1874, 1876, 1878, 1880, 1869, 1881, 1884, - 1885, 1886, 1888, 1881, 1882, 1888, 1886, 1889, 1889, 1879, + 1836, 1823, 1826, 1833, 1837, 1838, 1838, 1842, 1832, 1837, + 1840, 1827, 1831, 1843, 1835, 1844, 1839, 1843, 1845, 1833, + 1848, 1844, 1836, 1846, 1846, 1840, 1842, 1845, 1847, 1849, + 1849, 1848, 1847, 1850, 1851, 1853, 1848, 1852, 1854, 1855, + 1853, 1856, 1857, 1863, 1858, 1859, 1859, 1856, 1851, 1858, + 1860, 1860, 1863, 1865, 1850, 1864, 1852, 1857, 1854, 1855, + 1861, 1866, 1866, 1873, 1861, 1881, 1864, 1868, 1868, 1869, + 1870, 1864, 1872, 1865, 1869, 1869, 1870, 1874, 1872, 1875, + 1876, 1878, 1874, 1879, 1880, 1883, 1876, 1879, 1882, 1873, + 1881, 1875, 1884, 1878, 1882, 1885, 1880, 1886, 1884, 1888, - 1877, 1884, 1890, 1890, 1891, 1891, 1892, 1893, 1894, 1885, - 1895, 1896, 1897, 1893, 1894, 1895, 1901, 1896, 1899, 1901, - 1902, 1897, 1905, 1899, 1903, 1903, 1892, 1906, 1907, 1908, - 1908, 1909, 1902, 1907, 1905, 1912, 1910, 1911, 1912, 1906, - 1909, 1910, 1911, 1913, 1913, 1914, 1915, 1918, 1916, 1917, - 1920, 1918, 1919, 1921, 1922, 1915, 1920, 1919, 1923, 1924, - 1926, 1926, 1927, 1922, 1929, 1914, 1916, 1933, 1917, 1928, - 1931, 1921, 1926, 1924, 1930, 1930, 1923, 1932, 1928, 1931, - 1927, 1934, 1935, 1941, 1929, 1942, 1934, 1944, 1933, 1932, - 1938, 1938, 1945, 1940, 1946, 1935, 1940, 1947, 1956, 1941, + 1885, 1889, 1892, 1890, 1896, 1892, 1922, 1883, 1890, 1886, + 1922, 1888, 1893, 1893, 1894, 1894, 1895, 1895, 1899, 1897, + 1889, 1898, 1900, 1899, 1896, 1897, 1901, 1898, 1900, 1903, + 1905, 1906, 1909, 1905, 1903, 1901, 1907, 1907, 1910, 1913, + 1911, 1912, 1912, 1906, 1909, 1911, 1914, 1915, 1913, 1918, + 1910, 1914, 1915, 1916, 1917, 1917, 1916, 1919, 1920, 1921, + 1923, 1924, 1925, 1926, 1927, 1923, 1919, 1924, 1931, 1918, + 1928, 1933, 1926, 1930, 1930, 1936, 1920, 1937, 1921, 1932, + 1925, 0, 1927, 1935, 1928, 1930, 1931, 1936, 1932, 1934, + 1934, 1933, 1935, 1939, 1938, 1942, 1942, 1944, 1937, 1938, - 1946, 1942, 1944, 1948, 1948, 1949, 1945, 1949, 1950, 1950, - 1951, 1953, 1953, 1957, 1947, 1954, 1954, 1958, 1951, 1957, - 1959, 1956, 1960, 1958, 1963, 1961, 1964, 1959, 1962, 1962, - 1965, 1966, 1969, 1963, 1967, 1970, 1968, 1973, 1974, 1975, - 1971, 0, 1965, 1966, 1960, 1961, 1971, 1964, 1968, 1967, - 1970, 1975, 1976, 1976, 1977, 1978, 1981, 1973, 1969, 1971, - 1979, 1974, 1980, 1979, 1983, 1985, 1984, 1980, 1984, 1983, - 1987, 1989, 1977, 1986, 1991, 1978, 1981, 1987, 1986, 1992, - 1989, 1993, 1994, 1985, 1994, 1995, 1998, 1997, 1992, 1997, - 1999, 1999, 1991, 1993, 2000, 2002, 2001, 2002, 2003, 2005, + 1944, 1945, 1946, 1950, 1948, 1951, 1939, 1949, 1960, 1950, + 1952, 1952, 1953, 0, 1953, 1954, 1954, 1945, 1946, 1948, + 1955, 1949, 1951, 1957, 1957, 1958, 1958, 1961, 1955, 1962, + 1963, 1960, 1964, 1961, 1967, 1962, 1965, 1963, 1966, 1966, + 1968, 1969, 1973, 1967, 1971, 1970, 1972, 1974, 1978, 1977, + 0, 1979, 1981, 1969, 1964, 1982, 1965, 1970, 1972, 1971, + 1975, 1968, 1974, 1979, 1980, 1980, 1975, 1984, 1973, 1977, + 1981, 1978, 1984, 1983, 1985, 1982, 1983, 1987, 1988, 1975, + 1988, 1989, 1987, 1990, 1991, 1995, 1993, 1996, 1990, 1997, + 1998, 1991, 1998, 1999, 1985, 1993, 1996, 2002, 2001, 1989, - 1998, 2001, 2004, 2003, 1995, 2006, 2007, 2004, 2008, 2009, - 2010, 2012, 2007, 2008, 2013, 2014, 2014, 2005, 2010, 2016, - 2000, 2017, 2009, 2015, 2015, 2006, 2018, 2020, 2013, 2020, - 2012, 2019, 2018, 2021, 2016, 2024, 2019, 2022, 2023, 2023, - 2029, 2017, 2025, 2025, 2033, 2022, 2027, 2024, 2026, 2026, - 2031, 2021, 2028, 2022, 2032, 2027, 2032, 2028, 2029, 2031, - 2035, 2034, 2031, 2036, 2038, 2033, 2034, 2034, 2039, 2035, - 2042, 2043, 2040, 2039, 2046, 2036, 2038, 2040, 2044, 2045, - 2045, 2047, 2048, 2042, 2052, 2053, 2049, 2044, 2050, 2054, - 2055, 2043, 2046, 2057, 2063, 2055, 2052, 2053, 2048, 2047, + 2001, 1997, 2004, 1995, 2003, 2003, 2009, 2006, 2005, 2006, + 2007, 2002, 1999, 2005, 2008, 2007, 2010, 2011, 2013, 2008, + 2012, 2014, 2016, 2011, 2009, 2012, 2017, 2020, 2004, 2014, + 2021, 2013, 2018, 2018, 2019, 2019, 2010, 2022, 2025, 2023, + 2017, 2016, 2020, 2022, 2023, 2024, 2026, 2024, 2027, 2027, + 2021, 2028, 2029, 2029, 2026, 2031, 2025, 2030, 2030, 2033, + 2032, 2035, 2026, 2028, 2031, 2032, 2036, 2037, 2036, 2038, + 2035, 2039, 2040, 2035, 2038, 2038, 2043, 2033, 2042, 2046, + 2039, 2043, 2044, 2047, 2040, 2048, 2050, 2044, 2037, 2051, + 2042, 2053, 2046, 2052, 2048, 2049, 2049, 2054, 2056, 2057, - 2049, 2056, 2057, 2050, 2060, 2062, 2056, 2064, 2065, 2054, - 2060, 2062, 2066, 2068, 2068, 2067, 2069, 2063, 2070, 2070, - 2071, 2074, 2064, 2060, 2067, 2069, 2065, 2072, 2073, 2075, - 2076, 2072, 2077, 2073, 2074, 2076, 2076, 2066, 2077, 2071, - 2078, 2079, 2080, 2081, 2079, 2086, 2078, 2084, 2084, 2089, - 2080, 2075, 2085, 2085, 2086, 2087, 2087, 2088, 2088, 2090, - 2091, 2089, 2096, 2081, 2092, 2099, 2091, 2085, 2096, 2092, - 2093, 2093, 2094, 2094, 2095, 2101, 2098, 2090, 2085, 2095, - 2098, 2103, 2100, 2104, 2105, 2099, 2100, 2106, 2104, 2107, - 2108, 2110, 2111, 2109, 2107, 2101, 2112, 2111, 2113, 2113, + 2058, 2059, 2067, 2047, 2050, 2053, 2059, 2051, 2060, 2052, + 2056, 2057, 2054, 2060, 2061, 2064, 2066, 2068, 2069, 2070, + 2058, 2064, 2066, 2061, 2071, 2067, 2072, 2072, 2073, 2074, + 2074, 2075, 2068, 2071, 2064, 2076, 2069, 2073, 2077, 2076, + 2078, 2079, 2080, 2077, 2070, 2081, 2082, 2080, 2080, 2085, + 2075, 2081, 2082, 2078, 2083, 2094, 2084, 2083, 2088, 2088, + 2089, 2089, 2090, 2079, 2084, 2091, 2091, 2092, 2092, 2085, + 2093, 2090, 2095, 2094, 2096, 2089, 2097, 2097, 2095, 2096, + 2098, 2098, 2093, 2099, 2100, 2102, 2089, 2103, 2099, 2102, + 2100, 2104, 2105, 2107, 2108, 2104, 2109, 2111, 2110, 2108, - 2114, 2115, 2106, 2117, 2114, 2116, 2103, 2105, 2108, 2109, - 2116, 2110, 2118, 2119, 2120, 2121, 2115, 2123, 2112, 2122, - 2121, 2124, 2124, 2126, 2127, 2119, 2128, 2129, 2130, 2117, - 2118, 2126, 2122, 2120, 2131, 2123, 2132, 2133, 2134, 2136, - 2140, 0, 2138, 2127, 2139, 2128, 2140, 2142, 2142, 2133, - 2129, 2143, 2130, 2131, 2136, 2138, 2143, 2132, 2139, 2134, - 2141, 2144, 2141, 2145, 2144, 2146, 2152, 2147, 2148, 2148, - 2149, 2149, 2150, 2153, 2150, 2155, 2145, 2151, 2151, 2146, - 2147, 2152, 2154, 2154, 2155, 2161, 2153, 2155, 2156, 2156, - 2157, 2157, 2158, 2160, 2162, 2163, 2166, 2158, 2160, 2164, + 2113, 2115, 2111, 2112, 2114, 2116, 2115, 2103, 2117, 2117, + 2118, 2119, 2105, 2110, 2118, 2120, 2113, 2121, 2107, 2109, + 2120, 2112, 2122, 2123, 2114, 2124, 2119, 2116, 2125, 2126, + 2127, 2128, 2128, 2125, 2131, 2123, 2132, 2130, 2133, 2134, + 2122, 2135, 2126, 2121, 2124, 2130, 2136, 2137, 2127, 2138, + 2140, 2142, 2143, 2131, 0, 2132, 2144, 2146, 2146, 2137, + 2135, 2133, 2144, 2134, 2142, 2140, 2143, 2136, 2147, 2145, + 2138, 2145, 2148, 2147, 2149, 2148, 2150, 2156, 2151, 2152, + 2152, 2153, 2153, 2154, 2157, 2154, 2159, 2149, 2155, 2155, + 2150, 2151, 2156, 2158, 2158, 2159, 2165, 2157, 2159, 2160, - 2164, 2165, 2165, 2167, 2167, 2161, 2168, 2163, 2169, 2169, - 2170, 2171, 2172, 2172, 2162, 2166, 2171, 2173, 2173, 2174, - 2175, 2176, 2177, 2179, 2168, 2170, 2180, 2180, 2179, 2175, - 2181, 2182, 2182, 2174, 2183, 2176, 2184, 2185, 2186, 2186, - 2185, 2177, 2184, 2187, 2187, 2188, 2189, 2190, 2193, 2181, - 2191, 2191, 2183, 2194, 2186, 2195, 2196, 2197, 2197, 2198, - 2196, 2189, 2199, 2204, 2188, 2200, 2190, 2199, 2193, 2201, - 2195, 2203, 2203, 2206, 2205, 2207, 2194, 2208, 2198, 2209, - 2200, 2205, 2211, 2204, 2201, 2210, 2210, 2206, 2212, 2213, - 2212, 2211, 2213, 2207, 2215, 2208, 2216, 2217, 2218, 2219, + 2160, 2161, 2161, 2162, 2164, 2166, 2167, 2170, 2162, 2164, + 2168, 2168, 2169, 2169, 2171, 2171, 2165, 2172, 2167, 2173, + 2173, 2174, 2175, 2176, 2176, 2166, 2170, 2175, 2177, 2177, + 2178, 2179, 2180, 2181, 2183, 2172, 2174, 2184, 2184, 2183, + 2179, 2185, 2186, 2186, 2178, 2187, 2180, 2188, 2189, 2190, + 2190, 2189, 2181, 2188, 2191, 2191, 2192, 2193, 2194, 2197, + 2185, 2195, 2195, 2187, 2198, 2190, 2199, 2200, 2201, 2201, + 2202, 2200, 2193, 2203, 2208, 2192, 2204, 2194, 2203, 2197, + 2205, 2199, 2207, 2207, 2210, 2209, 2211, 2198, 2212, 2202, + 2213, 2204, 2209, 2215, 2208, 2205, 2214, 2214, 2210, 2216, - 2220, 2216, 2217, 2221, 2222, 2209, 2215, 2213, 2221, 2213, - 2224, 2225, 2219, 2226, 2227, 2224, 2225, 2228, 2229, 2232, - 2227, 2220, 2230, 2218, 2229, 2235, 2231, 2230, 2226, 2233, - 2222, 2231, 2234, 2239, 2235, 2234, 2236, 2237, 2228, 2238, - 2244, 0, 2233, 2240, 2232, 2236, 2237, 2239, 2238, 2240, - 2241, 2242, 2246, 2247, 2247, 2242, 2241, 2248, 2249, 2249, - 2244, 2246, 2251, 2248, 2250, 2253, 2257, 2249, 2256, 2250, - 2254, 2255, 2255, 2259, 2260, 2257, 2261, 2262, 2266, 2268, - 2268, 2253, 2251, 2256, 2251, 2259, 2254, 2267, 2265, 2262, - 2260, 2261, 2264, 2265, 0, 2264, 2269, 2269, 2266, 2267, + 2217, 2216, 2215, 2217, 2211, 2219, 2212, 2220, 2221, 2222, + 2223, 2224, 2220, 2221, 2225, 2226, 2213, 2219, 2217, 2225, + 2217, 2228, 2229, 2223, 2230, 2231, 2228, 2229, 2232, 2233, + 2236, 2231, 2224, 2234, 2222, 2233, 2239, 2235, 2234, 2230, + 2237, 2226, 2235, 2238, 2243, 2239, 2238, 2240, 2241, 2232, + 2242, 2248, 0, 2237, 2244, 2236, 2240, 2241, 2243, 2242, + 2244, 2245, 2246, 2250, 2251, 2251, 2246, 2245, 2252, 2253, + 2253, 2248, 2250, 2255, 2252, 2254, 2257, 2261, 2253, 2260, + 2254, 2258, 2259, 2259, 2263, 2264, 2261, 2265, 2266, 2270, + 2272, 2272, 2257, 2255, 2260, 2255, 2263, 2258, 2271, 2269, - 2271, 2271, 2272, 2273, 2274, 2272, 2275, 2276, 2273, 2278, - 2274, 2281, 2275, 2277, 2277, 2280, 2276, 2279, 2279, 2282, - 2283, 2283, 2284, 2278, 2286, 2281, 2285, 2280, 2284, 2286, - 2288, 2294, 2289, 2292, 2288, 2289, 2290, 2290, 2282, 2291, - 2285, 2293, 2292, 2295, 2291, 2296, 2296, 2295, 2297, 2299, - 2293, 2294, 2300, 2301, 2299, 2302, 2303, 2304, 2305, 2306, - 2303, 2297, 2307, 2305, 2308, 2306, 2309, 2310, 2307, 2302, - 2311, 2312, 2300, 2301, 2315, 2311, 2314, 2304, 2316, 2324, - 2324, 2317, 2308, 2316, 2323, 2309, 2310, 2317, 2314, 2318, - 2315, 2319, 2312, 2319, 2321, 2326, 2325, 2318, 2323, 2325, + 2266, 2264, 2265, 2268, 2269, 0, 2268, 2273, 2273, 2270, + 2271, 2275, 2275, 2276, 2277, 2278, 2276, 2279, 2280, 2277, + 2282, 2278, 2285, 2279, 2281, 2281, 2284, 2280, 2283, 2283, + 2286, 2287, 2287, 2288, 2282, 2290, 2285, 2289, 2284, 2288, + 2290, 2292, 2298, 2293, 2296, 2292, 2293, 2294, 2294, 2286, + 2295, 2289, 2297, 2296, 2299, 2295, 2300, 2300, 2299, 2301, + 2303, 2297, 2298, 2304, 2305, 2303, 2306, 2307, 2308, 2309, + 2310, 2307, 2301, 2311, 2309, 2312, 2310, 2313, 2314, 2311, + 2306, 2315, 2316, 2304, 2305, 2319, 2315, 2318, 2308, 2320, + 2328, 2328, 2321, 2312, 2320, 2327, 2313, 2314, 2321, 2318, - 2327, 2327, 2330, 2321, 2331, 2332, 2330, 2333, 2333, 2334, - 2331, 2337, 2337, 2339, 2341, 2345, 2342, 2332, 2334, 2346, - 2345, 2326, 2347, 2355, 2348, 2349, 2349, 2347, 2341, 2348, - 2353, 2339, 2342, 2351, 2351, 2356, 2353, 2354, 2354, 2355, - 2359, 2357, 2360, 2361, 2361, 2346, 2357, 2363, 2365, 2364, - 2366, 2368, 2368, 2370, 2360, 2364, 2363, 2356, 2369, 2359, - 2371, 2369, 2373, 2373, 2375, 2366, 2365, 2374, 2374, 2375, - 2376, 2377, 2370, 2379, 2378, 2379, 2380, 2381, 2371, 2378, - 2377, 2382, 2383, 2384, 2385, 2386, 2386, 2383, 2376, 2385, - 2380, 2381, 2390, 2382, 2387, 2387, 2388, 2388, 2389, 2389, + 2322, 2319, 2323, 2316, 2323, 2325, 2330, 2329, 2322, 2327, + 2329, 2331, 2331, 2334, 2325, 2335, 2336, 2334, 2337, 2337, + 2338, 2335, 2341, 2341, 2343, 2345, 2349, 2346, 2336, 2338, + 2350, 2349, 2330, 2351, 2359, 2352, 2353, 2353, 2351, 2345, + 2352, 2357, 2343, 2346, 2355, 2355, 2360, 2357, 2358, 2358, + 2359, 2363, 2361, 2364, 2365, 2365, 2350, 2361, 2367, 2369, + 2368, 2370, 2372, 2372, 2374, 2364, 2368, 2367, 2360, 2373, + 2363, 2375, 2373, 2377, 2377, 2379, 2370, 2369, 2378, 2378, + 2379, 2380, 2381, 2374, 2383, 2382, 2383, 2384, 2385, 2375, + 2382, 2381, 2386, 2387, 2388, 2389, 2390, 2390, 2387, 2380, - 2391, 2392, 2395, 2384, 2390, 2396, 2392, 2393, 2393, 2394, - 2394, 2397, 2398, 2400, 2395, 2399, 2399, 2396, 2391, 2401, - 2401, 2402, 2402, 2403, 2404, 2406, 2405, 2407, 2398, 2409, - 2408, 2397, 2400, 2405, 2403, 2408, 2404, 2406, 2410, 2411, - 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2407, 2426, 2409, - 2412, 2421, 2418, 2419, 2419, 2422, 2420, 2415, 2410, 2424, - 2417, 2425, 2428, 2414, 2418, 2420, 2421, 0, 2413, 2416, - 2422, 2426, 2427, 2429, 2430, 2427, 2428, 2424, 2429, 2430, - 2431, 2431, 2438, 2425, 2432, 2432, 2433, 2433, 2435, 2435, - 2437, 2437, 2439, 2440, 2441, 2443, 2444, 2445, 2446, 2447, + 2389, 2384, 2385, 2394, 2386, 2391, 2391, 2392, 2392, 2393, + 2393, 2395, 2396, 2399, 2388, 2394, 2400, 2396, 2397, 2397, + 2398, 2398, 2401, 2402, 2404, 2399, 2403, 2403, 2400, 2395, + 2405, 2405, 2406, 2406, 2407, 2408, 2410, 2409, 2411, 2402, + 2413, 2412, 2401, 2404, 2409, 2407, 2412, 2408, 2410, 2414, + 2415, 2415, 2416, 2417, 2418, 2419, 2420, 2421, 2411, 2430, + 2413, 2416, 2425, 2422, 2423, 2423, 2426, 2424, 2419, 2414, + 2428, 2421, 2429, 2432, 2418, 2422, 2424, 2425, 0, 2417, + 2420, 2426, 2430, 2431, 2433, 2434, 2431, 2432, 2428, 2433, + 2434, 2435, 2435, 2442, 2429, 2436, 2436, 2437, 2437, 2439, - 2438, 2448, 2449, 2439, 2449, 2450, 2451, 2457, 2447, 2441, - 2452, 2458, 2440, 2456, 2444, 2443, 2453, 2453, 2446, 2445, - 2458, 2448, 2455, 2455, 2451, 2450, 2461, 2456, 2452, 2457, - 2459, 2459, 2462, 2462, 2463, 2461, 2464, 2465, 2466, 2467, - 2468, 2470, 2473, 2469, 2465, 2471, 2471, 2472, 2472, 2474, - 2475, 2479, 2463, 2466, 2464, 2478, 2475, 2467, 2468, 2469, - 2470, 2478, 2473, 2476, 2476, 2477, 2477, 2474, 2480, 2479, - 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2483, 2487, 2492, - 2486, 2488, 2488, 2480, 2489, 2482, 2489, 2490, 2490, 2481, - 2494, 2495, 2496, 2484, 2485, 2497, 2498, 2499, 2492, 2494, + 2439, 2441, 2441, 2443, 2444, 2445, 2447, 2448, 2449, 2450, + 2451, 2442, 2452, 2453, 2443, 2453, 2454, 2455, 2461, 2451, + 2445, 2456, 2462, 2444, 2460, 2448, 2447, 2457, 2457, 2450, + 2449, 2462, 2452, 2459, 2459, 2455, 2454, 2465, 2460, 2456, + 2461, 2463, 2463, 2466, 2466, 2467, 2465, 2468, 2469, 2470, + 2471, 2472, 2474, 2477, 2473, 2469, 2475, 2475, 2476, 2476, + 2478, 2479, 2483, 2467, 2470, 2468, 2482, 2479, 2471, 2472, + 2473, 2474, 2482, 2477, 2480, 2480, 2481, 2481, 2478, 2484, + 2483, 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2487, 2491, + 2496, 2490, 2492, 2492, 2484, 2493, 2486, 2493, 2494, 2494, - 2500, 2498, 2503, 2504, 2496, 2506, 2504, 2505, 2505, 2507, - 2495, 2508, 2508, 2511, 2509, 2497, 2514, 2499, 2509, 2500, - 2506, 2512, 2503, 2513, 2513, 2512, 2516, 2507, 2511, 2514, - 2517, 2518, 2519, 2519, 2521, 2522, 2523, 2524, 2524, 2525, - 2523, 2516, 2526, 2526, 2522, 2528, 2521, 2527, 2529, 2530, - 2517, 2518, 2527, 2537, 2528, 2531, 2531, 2539, 2525, 2536, - 2536, 2530, 2538, 2538, 2529, 2540, 2544, 2541, 2542, 2551, - 2539, 2543, 2543, 2546, 2546, 2537, 2541, 2542, 2540, 2549, - 2550, 2544, 2552, 2551, 2549, 2550, 2553, 2552, 2554, 2555, - 2558, 2556, 2559, 2561, 2553, 2560, 2567, 2559, 2555, 2556, + 2485, 2498, 2499, 2500, 2488, 2489, 2501, 2502, 2503, 2496, + 2498, 2504, 2502, 2507, 2508, 2500, 2510, 2508, 2509, 2509, + 2511, 2499, 2512, 2512, 2515, 2513, 2501, 2518, 2503, 2513, + 2504, 2510, 2516, 2507, 2517, 2517, 2516, 2520, 2511, 2515, + 2518, 2521, 2522, 2523, 2523, 2525, 2526, 2527, 2528, 2528, + 2529, 2527, 2520, 2530, 2530, 2526, 2532, 2525, 2531, 2533, + 2534, 2521, 2522, 2531, 2541, 2532, 2535, 2535, 2543, 2529, + 2540, 2540, 2534, 2542, 2542, 2533, 2544, 2548, 2545, 2546, + 2555, 2543, 2547, 2547, 2550, 2550, 2541, 2545, 2546, 2544, + 2553, 2554, 2548, 2556, 2555, 2553, 2554, 2557, 2556, 2558, - 2560, 2562, 2562, 2563, 2563, 2558, 2565, 2554, 2561, 2564, - 2564, 2566, 2568, 2565, 2567, 2569, 2566, 2570, 2571, 2571, - 2572, 2569, 2570, 2573, 2574, 2574, 2575, 2575, 2573, 2578, - 2568, 2579, 2579, 2580, 2581, 2572, 2580, 2584, 2582, 2581, - 2581, 2583, 2578, 2582, 2585, 2586, 2583, 2587, 2588, 2586, - 2585, 2584, 2587, 2589, 2590, 2591, 2594, 2588, 2592, 2593, - 2595, 2594, 2590, 2597, 2592, 2593, 2598, 2601, 2589, 2605, - 2597, 2598, 2595, 2603, 2599, 2604, 2591, 2599, 2603, 2601, - 2604, 2606, 2607, 2608, 2609, 2609, 2610, 2605, 2613, 2618, - 2614, 2607, 2608, 2615, 2606, 2610, 2614, 2619, 2622, 2615, + 2559, 2562, 2560, 2563, 2565, 2557, 2564, 2571, 2563, 2559, + 2560, 2564, 2566, 2566, 2567, 2567, 2562, 2569, 2558, 2565, + 2568, 2568, 2570, 2572, 2569, 2571, 2573, 2570, 2574, 2575, + 2575, 2576, 2573, 2574, 2577, 2578, 2578, 2579, 2579, 2577, + 2582, 2572, 2583, 2583, 2584, 2585, 2576, 2584, 2588, 2586, + 2585, 2585, 2587, 2582, 2586, 2589, 2590, 2587, 2591, 2592, + 2590, 2589, 2588, 2591, 2593, 2594, 2595, 2598, 2592, 2596, + 2597, 2599, 2598, 2594, 2601, 2596, 2597, 2602, 2605, 2593, + 2609, 2601, 2602, 2599, 2607, 2603, 2608, 2595, 2603, 2607, + 2605, 2608, 2610, 2611, 2612, 2613, 2613, 2614, 2609, 2617, - 2620, 2621, 2621, 2623, 2624, 2622, 2613, 2627, 2618, 2625, - 2626, 2626, 2629, 2624, 2631, 2634, 2632, 2619, 2640, 2620, - 2632, 0, 2623, 2640, 2625, 2635, 2627, 2629, 2633, 2633, - 2636, 2635, 2637, 2646, 2631, 2639, 2636, 2642, 2637, 2643, - 2634, 2638, 2638, 2639, 2645, 2647, 2642, 2646, 2645, 2649, - 2649, 2650, 2643, 2651, 2651, 2652, 2652, 2654, 2654, 2655, - 2647, 2656, 2660, 2655, 2658, 2658, 2656, 2661, 2662, 2650, - 2663, 2665, 2661, 2666, 2666, 2663, 2663, 2668, 2668, 2671, - 2662, 2673, 2660, 2669, 2669, 2670, 2675, 2679, 2670, 2676, - 2676, 2665, 2671, 2677, 2677, 2678, 2678, 2680, 2680, 2673, + 2622, 2618, 2611, 2612, 2619, 2610, 2614, 2618, 2623, 2626, + 2619, 2624, 2625, 2625, 2627, 2628, 2626, 2617, 2631, 2622, + 2629, 2630, 2630, 2633, 2628, 2635, 2638, 2636, 2623, 2644, + 2624, 2636, 0, 2627, 2644, 2629, 2639, 2631, 2633, 2637, + 2637, 2640, 2639, 2641, 2650, 2635, 2643, 2640, 2646, 2641, + 2647, 2638, 2642, 2642, 2643, 2649, 2651, 2646, 2650, 2649, + 2653, 2653, 2654, 2647, 2655, 2655, 2656, 2656, 2658, 2658, + 2659, 2651, 2660, 2664, 2659, 2662, 2662, 2660, 2665, 2666, + 2654, 2667, 2669, 2665, 2670, 2670, 2667, 2667, 2672, 2672, + 2675, 2666, 2677, 2664, 2673, 2673, 2674, 2679, 2683, 2674, - 2681, 2682, 2679, 2683, 2684, 2686, 2675, 2685, 2685, 2686, - 2684, 2691, 2692, 2681, 2696, 2690, 2693, 2683, 2694, 2682, - 2690, 2690, 2695, 2697, 2694, 2698, 2698, 2697, 2695, 2703, - 2701, 2706, 2692, 2709, 2691, 2701, 2693, 2703, 2704, 2696, - 2707, 2704, 2710, 2707, 2708, 2708, 2711, 2710, 2712, 2713, - 2709, 2709, 2714, 2714, 2716, 2715, 2706, 2716, 2717, 2718, - 2722, 2720, 2719, 2713, 2711, 2716, 2720, 2720, 2712, 2715, - 2719, 2721, 2717, 2723, 2723, 2728, 2721, 2721, 2718, 2722, - 2724, 2724, 2725, 2725, 2726, 2726, 2727, 2727, 2729, 2730, - 2731, 2728, 2732, 2729, 2733, 2734, 2735, 2732, 2736, 2737, + 2680, 2680, 2669, 2675, 2681, 2681, 2682, 2682, 2684, 2684, + 2677, 2685, 2686, 2683, 2687, 2688, 2690, 2679, 2689, 2689, + 2690, 2688, 2695, 2696, 2685, 2700, 2694, 2697, 2687, 2698, + 2686, 2694, 2694, 2699, 2701, 2698, 2702, 2702, 2701, 2699, + 2707, 2705, 2710, 2696, 2713, 2695, 2705, 2697, 2707, 2708, + 2700, 2711, 2708, 2714, 2711, 2712, 2712, 2715, 2714, 2716, + 2717, 2713, 2713, 2718, 2718, 2720, 2719, 2710, 2720, 2721, + 2722, 2726, 2724, 2723, 2717, 2715, 2720, 2724, 2724, 2716, + 2719, 2723, 2725, 2721, 2727, 2727, 2732, 2725, 2725, 2722, + 2726, 2728, 2728, 2729, 2729, 2730, 2730, 2731, 2731, 2733, - 2734, 2739, 2739, 2740, 2740, 2735, 2742, 2741, 2745, 2730, - 2741, 2744, 2744, 2733, 2750, 2745, 2731, 2747, 2736, 2737, - 2746, 2746, 2747, 2750, 2742, 2749, 2749, 2751, 2752, 2754, - 2755, 2755, 2757, 2758, 2756, 2771, 2751, 2752, 2756, 2759, - 2760, 2757, 2761, 2772, 2759, 2759, 2762, 2754, 2758, 2766, - 2762, 2761, 2770, 2760, 2766, 2767, 2767, 2769, 2769, 2774, - 2771, 2772, 2775, 2778, 2779, 2780, 2770, 2783, 2774, 2781, - 2785, 2787, 2788, 2779, 2775, 2781, 2787, 2788, 2790, 2783, - 2789, 2789, 2793, 2793, 2792, 2780, 2793, 2790, 2778, 2792, - 2798, 2785, 2795, 2795, 2796, 2796, 2797, 2797, 2799, 2798, + 2734, 2735, 2732, 2736, 2733, 2737, 2738, 2739, 2736, 2740, + 2741, 2738, 2743, 2743, 2744, 2744, 2739, 2746, 2745, 2749, + 2734, 2745, 2748, 2748, 2737, 2754, 2749, 2735, 2751, 2740, + 2741, 2750, 2750, 2751, 2754, 2746, 2753, 2753, 2755, 2756, + 2758, 2759, 2759, 2761, 2762, 2760, 2775, 2755, 2756, 2760, + 2763, 2764, 2761, 2765, 2776, 2763, 2763, 2766, 2758, 2762, + 2770, 2766, 2765, 2774, 2764, 2770, 2771, 2771, 2773, 2773, + 2778, 2775, 2776, 2779, 2782, 2783, 2784, 2774, 2787, 2778, + 2785, 2789, 2791, 2792, 2783, 2779, 2785, 2791, 2792, 2794, + 2787, 2793, 2793, 2797, 2797, 2796, 2784, 2797, 2794, 2782, - 2800, 2801, 2803, 2807, 2804, 2805, 2801, 2809, 2803, 2804, - 2805, 2806, 2806, 2808, 2811, 2810, 2812, 2813, 2799, 2800, - 2810, 2807, 2812, 2814, 2814, 2808, 2816, 2820, 2809, 2817, - 2816, 2818, 2811, 2821, 2817, 2822, 2818, 2819, 2819, 2824, - 2826, 2826, 2813, 2828, 2829, 2830, 2820, 2832, 2821, 2830, - 2822, 2831, 2833, 2834, 2836, 2836, 2828, 2829, 2838, 2824, - 2831, 2834, 2835, 2832, 2837, 2839, 2841, 2835, 2840, 2840, - 2851, 2833, 2847, 2837, 2844, 2844, 2838, 2845, 2845, 2849, - 2849, 2852, 2853, 2854, 2857, 2841, 2851, 2858, 2854, 2856, - 2856, 2839, 2859, 2847, 2861, 2861, 2863, 2852, 2853, 2862, + 2796, 2802, 2789, 2799, 2799, 2800, 2800, 2801, 2801, 2803, + 2802, 2804, 2805, 2807, 2811, 2808, 2809, 2805, 2813, 2807, + 2808, 2809, 2810, 2810, 2812, 2815, 2814, 2816, 2817, 2803, + 2804, 2814, 2811, 2816, 2818, 2818, 2812, 2820, 2824, 2813, + 2821, 2820, 2822, 2815, 2825, 2821, 2826, 2822, 2823, 2823, + 2828, 2830, 2830, 2817, 2832, 2833, 2834, 2824, 2836, 2825, + 2834, 2826, 2835, 2837, 2838, 2840, 2840, 2832, 2833, 2842, + 2828, 2835, 2838, 2839, 2836, 2841, 2843, 2845, 2839, 2844, + 2844, 2855, 2837, 2851, 2841, 2848, 2848, 2842, 2849, 2849, + 2853, 2853, 2856, 2857, 2858, 2861, 2845, 2855, 2862, 2858, - 2864, 2864, 2867, 2868, 2857, 2870, 2873, 2869, 2877, 2868, - 2858, 2859, 2869, 2862, 2875, 2863, 2871, 2871, 2872, 2872, - 2874, 2874, 2867, 2876, 2878, 2875, 2873, 2870, 2877, 2879, - 2878, 2880, 2876, 2881, 2882, 2882, 2883, 2884, 2884, 2883, - 2874, 2889, 2888, 2880, 2890, 2891, 2891, 2894, 2879, 2892, - 2890, 2893, 2892, 2881, 2888, 2896, 2899, 2893, 2897, 2897, - 2896, 2889, 2898, 2900, 2901, 2894, 2904, 2898, 2905, 2900, - 2902, 2902, 2906, 2909, 2907, 2899, 2908, 2908, 2904, 2910, - 2911, 2901, 2901, 2913, 2913, 2916, 2905, 2907, 2915, 2911, - 2914, 2914, 2909, 2915, 2922, 2910, 2917, 2906, 2921, 2916, + 2860, 2860, 2843, 2863, 2851, 2865, 2865, 2867, 2856, 2857, + 2866, 2868, 2868, 2871, 2872, 2861, 2874, 2877, 2873, 2881, + 2872, 2862, 2863, 2873, 2866, 2879, 2867, 2875, 2875, 2876, + 2876, 2878, 2878, 2871, 2880, 2882, 2879, 2877, 2874, 2881, + 2883, 2882, 2884, 2880, 2885, 2886, 2886, 2887, 2888, 2888, + 2887, 2878, 2893, 2892, 2884, 2894, 2895, 2895, 2898, 2883, + 2896, 2894, 2897, 2896, 2885, 2892, 2900, 2903, 2897, 2901, + 2901, 2900, 2893, 2902, 2904, 2905, 2898, 2908, 2902, 2909, + 2904, 2906, 2906, 2910, 2913, 2911, 2903, 2912, 2912, 2908, + 2914, 2915, 2905, 2905, 2917, 2917, 2920, 2909, 2911, 2919, - 2929, 2917, 2918, 2918, 2919, 2919, 2920, 2920, 2923, 2931, - 2924, 2921, 2926, 2926, 2923, 2924, 2932, 2933, 2937, 2929, - 2922, 2934, 2934, 2936, 2936, 2938, 2939, 2940, 2940, 2941, - 2941, 2931, 2937, 2944, 2943, 2939, 2945, 2946, 2932, 2933, - 2943, 2960, 2946, 2949, 2949, 2938, 2951, 2951, 2953, 2952, - 2954, 2955, 2956, 2944, 2952, 2945, 2954, 2957, 2957, 2958, - 2956, 2960, 2953, 2955, 2958, 2961, 2962, 2963, 2964, 2966, - 2967, 2962, 2968, 2969, 2964, 2972, 2971, 2966, 2973, 2963, - 2974, 2975, 2977, 2978, 2979, 2961, 2975, 2977, 2982, 2967, - 2979, 2972, 2968, 2969, 2971, 2973, 2973, 2980, 2984, 2987, + 2915, 2918, 2918, 2913, 2919, 2926, 2914, 2921, 2910, 2925, + 2920, 2933, 2921, 2922, 2922, 2923, 2923, 2924, 2924, 2927, + 2935, 2928, 2925, 2930, 2930, 2927, 2928, 2936, 2937, 2941, + 2933, 2926, 2938, 2938, 2940, 2940, 2942, 2943, 2944, 2944, + 2945, 2945, 2935, 2941, 2948, 2947, 2943, 2949, 2950, 2936, + 2937, 2947, 2964, 2950, 2953, 2953, 2942, 2955, 2955, 2957, + 2956, 2958, 2959, 2960, 2948, 2956, 2949, 2958, 2961, 2961, + 2962, 2960, 2964, 2957, 2959, 2962, 2965, 2966, 2967, 2968, + 2970, 2971, 2966, 2972, 2973, 2968, 2976, 2975, 2970, 2977, + 2967, 2978, 2979, 2981, 2982, 2983, 2965, 2979, 2981, 2986, - 2987, 2974, 2980, 2978, 2983, 2988, 2988, 2983, 2982, 2989, - 2995, 2984, 2994, 2989, 2993, 2993, 0, 2994, 2996, 2996, - 2998, 2998, 2999, 2999, 3005, 2999, 3006, 3000, 3000, 2995, - 3000, 3001, 3001, 3002, 3001, 3004, 3004, 3002, 3009, 3010, - 3006, 3011, 3005, 3012, 3012, 3015, 3011, 3016, 3017, 3019, - 3021, 3018, 3017, 3022, 3016, 3023, 3023, 3030, 3009, 3010, - 3018, 3026, 3022, 3030, 3019, 3024, 3024, 3031, 3021, 3027, - 3015, 3025, 3025, 3028, 3027, 3029, 3026, 3033, 3032, 3034, - 3029, 3029, 3028, 3035, 3034, 3028, 3036, 0, 3035, 3037, - 3037, 3038, 3031, 3032, 3039, 3040, 3040, 3038, 3033, 3042, + 2971, 2983, 2976, 2972, 2973, 2975, 2977, 2977, 2984, 2988, + 2991, 2991, 2978, 2984, 2982, 2987, 2992, 2992, 2987, 2986, + 2993, 2999, 2988, 2998, 2993, 2997, 2997, 0, 2998, 3000, + 3000, 3002, 3002, 3003, 3003, 3009, 3003, 3010, 3004, 3004, + 2999, 3004, 3005, 3005, 3006, 3005, 3008, 3008, 3006, 3013, + 3014, 3010, 3015, 3009, 3016, 3016, 3019, 3015, 3020, 3021, + 3023, 3025, 3022, 3021, 3026, 3020, 3027, 3027, 3034, 3013, + 3014, 3022, 3030, 3026, 3034, 3023, 3028, 3028, 3035, 3025, + 3031, 3019, 3029, 3029, 3032, 3031, 3033, 3030, 3037, 3036, + 3038, 3033, 3033, 3032, 3039, 3038, 3032, 3040, 0, 3039, - 3039, 3041, 3041, 3043, 3049, 3036, 3046, 3046, 3043, 3048, - 3048, 3052, 3052, 3049, 3042, 3053, 3053, 3054, 3054, 3055, - 3055, 3056, 3056, 3057, 3057, 3058, 3058, 3060, 3061, 3061, - 3062, 3063, 3064, 3068, 3066, 3070, 3060, 3067, 3067, 3062, - 3072, 3069, 3076, 3063, 3071, 3071, 3078, 3070, 3068, 3073, - 3073, 3080, 3064, 3066, 3069, 3072, 3077, 3079, 3079, 3077, - 3076, 3082, 3083, 3084, 3082, 3085, 3086, 3088, 3083, 3080, - 3085, 3087, 3078, 3090, 3094, 3091, 3095, 3084, 3094, 3090, - 3098, 3108, 3113, 3088, 3091, 3086, 3119, 3106, 3117, 3087, - 3106, 3095, 3109, 3109, 3108, 3110, 3110, 3111, 3111, 3114, + 3041, 3041, 3042, 3035, 3036, 3043, 3044, 3044, 3042, 3037, + 3046, 3043, 3045, 3045, 3047, 3053, 3040, 3050, 3050, 3047, + 3052, 3052, 3056, 3056, 3053, 3046, 3057, 3057, 3058, 3058, + 3059, 3059, 3060, 3060, 3061, 3061, 3062, 3062, 3064, 3065, + 3065, 3066, 3067, 3068, 3072, 3070, 3074, 3064, 3071, 3071, + 3066, 3076, 3073, 3080, 3067, 3075, 3075, 3082, 3074, 3072, + 3077, 3077, 3084, 3068, 3070, 3073, 3076, 3081, 3083, 3083, + 3081, 3080, 3086, 3087, 3088, 3086, 3089, 3090, 3092, 3087, + 3084, 3089, 3091, 3082, 3094, 3098, 3095, 3099, 3088, 3098, + 3094, 3102, 3112, 3117, 3092, 3095, 3090, 3123, 3110, 3121, - 3115, 3116, 3117, 3120, 3115, 3113, 3098, 3121, 3114, 3119, - 3123, 3122, 3121, 3122, 3120, 3124, 3124, 3125, 3126, 3128, - 3127, 3116, 3129, 3131, 3130, 3123, 3133, 3134, 3132, 3135, - 3125, 3133, 3131, 3136, 3135, 3128, 3137, 3126, 3127, 3130, - 3132, 3137, 3141, 3142, 3143, 3143, 3144, 3129, 3134, 3145, - 3145, 3146, 3146, 3136, 3149, 3144, 3141, 3147, 3147, 3148, - 3148, 3150, 3151, 3142, 3152, 3151, 3153, 3154, 3155, 3152, - 3156, 3153, 3157, 3149, 3159, 3158, 3156, 3160, 3160, 3159, - 3161, 3150, 3164, 3155, 3162, 3162, 3157, 3158, 3163, 3163, - 3165, 3168, 3154, 3166, 3166, 3170, 3175, 3164, 3173, 3173, + 3091, 3110, 3099, 3113, 3113, 3112, 3114, 3114, 3115, 3115, + 3118, 3119, 3120, 3121, 3124, 3119, 3117, 3102, 3125, 3118, + 3123, 3127, 3126, 3125, 3126, 3124, 3128, 3128, 3129, 3130, + 3132, 3131, 3120, 3133, 3135, 3134, 3127, 3137, 3138, 3136, + 3139, 3129, 3137, 3135, 3140, 3139, 3132, 3141, 3130, 3131, + 3134, 3136, 3141, 3145, 3146, 3147, 3147, 3148, 3133, 3138, + 3149, 3149, 3150, 3150, 3140, 3153, 3148, 3145, 3151, 3151, + 3152, 3152, 3154, 3155, 3146, 3156, 3155, 3157, 3158, 3159, + 3156, 3160, 3157, 3161, 3153, 3163, 3162, 3160, 3164, 3164, + 3163, 3165, 3154, 3168, 3159, 3166, 3166, 3161, 3162, 3167, - 3161, 3174, 3174, 3176, 3175, 3177, 3168, 3179, 3178, 3165, - 3180, 3177, 3181, 3170, 3178, 3182, 3183, 3183, 3185, 3185, - 3182, 3179, 3176, 3180, 3188, 3191, 3189, 3194, 3192, 3195, - 3196, 3181, 3192, 3199, 3195, 3197, 3200, 3198, 3201, 3191, - 3205, 3200, 3207, 3201, 3206, 3188, 3189, 3194, 3197, 3196, - 3198, 3210, 3199, 3202, 3202, 3208, 3208, 3210, 3209, 3215, - 3205, 3207, 3206, 3209, 3211, 3211, 3212, 3213, 3214, 3216, - 3223, 3212, 3213, 3214, 3219, 3216, 3218, 3218, 3215, 3219, - 3220, 3220, 3222, 3224, 3225, 3226, 3222, 3227, 3228, 3223, - 3224, 3236, 3229, 3227, 3231, 3231, 3233, 3233, 3237, 3234, + 3167, 3169, 3172, 3158, 3170, 3170, 3174, 3179, 3168, 3177, + 3177, 3165, 3178, 3178, 3180, 3179, 3181, 3172, 3183, 3182, + 3169, 3184, 3181, 3185, 3174, 3182, 3186, 3187, 3187, 3189, + 3189, 3186, 3183, 3180, 3184, 3192, 3195, 3193, 3198, 3196, + 3199, 3200, 3185, 3196, 3203, 3199, 3201, 3204, 3202, 3205, + 3195, 3209, 3204, 3211, 3205, 3210, 3192, 3193, 3198, 3201, + 3200, 3202, 3214, 3203, 3206, 3206, 3212, 3212, 3214, 3213, + 3219, 3209, 3211, 3210, 3213, 3215, 3215, 3216, 3217, 3218, + 3220, 3227, 3216, 3217, 3218, 3223, 3220, 3222, 3222, 3219, + 3223, 3224, 3224, 3226, 3228, 3229, 3230, 3226, 3231, 3232, - 3238, 3235, 3243, 3225, 3226, 3229, 3235, 3228, 3234, 3241, - 3236, 3234, 3245, 3238, 3239, 3239, 3240, 3237, 3244, 3244, - 3250, 3240, 3241, 3246, 3246, 3247, 3247, 3248, 3243, 3249, - 3252, 3245, 3248, 3251, 3251, 3252, 3249, 3255, 3253, 3250, - 3253, 3254, 3254, 3256, 3255, 3257, 3258, 3259, 3261, 3261, - 3256, 3258, 3262, 3264, 3265, 3266, 3267, 3271, 3264, 3265, - 3268, 3268, 3270, 3270, 3257, 3272, 3259, 3273, 3273, 3274, - 3274, 3262, 3275, 3285, 3266, 3267, 3271, 3277, 3277, 3275, - 3278, 3278, 3279, 3281, 3272, 3284, 3286, 0, 3281, 3279, - 3284, 0, 3285, 3287, 3287, 3288, 3288, 0, 0, 0, + 3227, 3228, 3240, 3233, 3231, 3235, 3235, 3237, 3237, 3241, + 3238, 3242, 3239, 3247, 3229, 3230, 3233, 3239, 3232, 3238, + 3245, 3240, 3238, 3249, 3242, 3243, 3243, 3244, 3241, 3248, + 3248, 3254, 3244, 3245, 3250, 3250, 3251, 3251, 3252, 3247, + 3253, 3256, 3249, 3252, 3255, 3255, 3256, 3253, 3259, 3257, + 3254, 3257, 3258, 3258, 3260, 3259, 3261, 3262, 3263, 3265, + 3265, 3260, 3262, 3266, 3268, 3269, 3270, 3271, 3275, 3268, + 3269, 3272, 3272, 3274, 3274, 3261, 3276, 3263, 3277, 3277, + 3278, 3278, 3266, 3279, 3289, 3270, 3271, 3275, 3281, 3281, + 3279, 3282, 3282, 3283, 3285, 3276, 3288, 3290, 0, 3285, - 0, 0, 0, 0, 0, 3286, 3292, 3292, 3292, 3292, - 3292, 3292, 3292, 3293, 3293, 3293, 3293, 3293, 3293, 3293, - 3294, 3294, 3294, 3294, 3294, 3294, 3294, 3295, 3295, 3295, - 3295, 3295, 3295, 3295, 3296, 3296, 3296, 3296, 3296, 3296, - 3296, 3297, 3297, 3297, 3297, 3297, 3297, 3297, 3298, 3298, - 3298, 3298, 3298, 3298, 3298, 3300, 3300, 0, 3300, 3300, - 3300, 3300, 3301, 3301, 0, 0, 0, 3301, 3301, 3302, - 3302, 0, 0, 3302, 0, 3302, 3303, 0, 0, 0, - 0, 0, 3303, 3304, 3304, 0, 0, 0, 3304, 3304, - 3305, 0, 0, 0, 0, 0, 3305, 3306, 3306, 0, + 3283, 3288, 0, 3289, 3291, 3291, 3292, 3292, 0, 0, + 0, 0, 0, 0, 0, 0, 3290, 3296, 3296, 3296, + 3296, 3296, 3296, 3296, 3297, 3297, 3297, 3297, 3297, 3297, + 3297, 3298, 3298, 3298, 3298, 3298, 3298, 3298, 3299, 3299, + 3299, 3299, 3299, 3299, 3299, 3300, 3300, 3300, 3300, 3300, + 3300, 3300, 3301, 3301, 3301, 3301, 3301, 3301, 3301, 3302, + 3302, 3302, 3302, 3302, 3302, 3302, 3304, 3304, 0, 3304, + 3304, 3304, 3304, 3305, 3305, 0, 0, 0, 3305, 3305, + 3306, 3306, 0, 0, 3306, 0, 3306, 3307, 0, 0, + 0, 0, 0, 3307, 3308, 3308, 0, 0, 0, 3308, - 3306, 3306, 3306, 3306, 3307, 0, 0, 0, 0, 0, - 3307, 3308, 3308, 0, 0, 0, 3308, 3308, 3309, 3309, - 0, 3309, 3309, 3309, 3309, 3291, 3291, 3291, 3291, 3291, - 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, - 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, - 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, - 3291, 3291, 3291, 3291, 3291, 3291 + 3308, 3309, 0, 0, 0, 0, 0, 3309, 3310, 3310, + 0, 3310, 3310, 3310, 3310, 3311, 0, 0, 0, 0, + 0, 3311, 3312, 3312, 0, 0, 0, 3312, 3312, 3313, + 3313, 0, 3313, 3313, 3313, 3313, 3295, 3295, 3295, 3295, + 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, + 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, + 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295, + 3295, 3295, 3295, 3295, 3295, 3295, 3295 } ; static yy_state_type yy_last_accepting_state; @@ -3139,7 +3143,7 @@ static void config_end_include(void) } #endif -#line 3140 "" +#line 3145 "" #define YY_NO_INPUT 1 #line 191 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -3148,9 +3152,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 3149 "" +#line 3154 "" -#line 3151 "" +#line 3156 "" #define INITIAL 0 #define quotedstring 1 @@ -3374,7 +3378,7 @@ YY_DECL { #line 211 "./util/configlexer.lex" -#line 3375 "" +#line 3380 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3407,13 +3411,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3292 ) + if ( yy_current_state >= 3296 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 6426 ); + while ( yy_base[yy_current_state] != 6437 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -4992,40 +4996,45 @@ YY_RULE_SETUP { YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } YY_BREAK case 309: -/* rule 309 can match eol */ YY_RULE_SETUP #line 534 "./util/configlexer.lex" +{ YDVAR(1, VAR_NSID ) } + YY_BREAK +case 310: +/* rule 310 can match eol */ +YY_RULE_SETUP +#line 535 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 310: +case 311: YY_RULE_SETUP -#line 537 "./util/configlexer.lex" +#line 538 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 538 "./util/configlexer.lex" +#line 539 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 311: -YY_RULE_SETUP -#line 543 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 312: -/* rule 312 can match eol */ YY_RULE_SETUP #line 544 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 313: +/* rule 313 can match eol */ +YY_RULE_SETUP +#line 545 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 313: +case 314: YY_RULE_SETUP -#line 546 "./util/configlexer.lex" +#line 547 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -5038,34 +5047,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 314: +case 315: YY_RULE_SETUP -#line 558 "./util/configlexer.lex" +#line 559 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 559 "./util/configlexer.lex" +#line 560 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 315: -YY_RULE_SETUP -#line 564 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 316: -/* rule 316 can match eol */ YY_RULE_SETUP #line 565 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 317: +/* rule 317 can match eol */ +YY_RULE_SETUP +#line 566 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 317: +case 318: YY_RULE_SETUP -#line 567 "./util/configlexer.lex" +#line 568 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -5078,38 +5087,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 318: +case 319: YY_RULE_SETUP -#line 579 "./util/configlexer.lex" +#line 580 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 581 "./util/configlexer.lex" +#line 582 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 319: -YY_RULE_SETUP -#line 585 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK case 320: -/* rule 320 can match eol */ YY_RULE_SETUP #line 586 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 321: +/* rule 321 can match eol */ YY_RULE_SETUP #line 587 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK case 322: YY_RULE_SETUP #line 588 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 323: +YY_RULE_SETUP +#line 589 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 0); @@ -5117,27 +5126,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 593 "./util/configlexer.lex" +#line 594 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 323: -YY_RULE_SETUP -#line 597 "./util/configlexer.lex" -{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } - YY_BREAK case 324: -/* rule 324 can match eol */ YY_RULE_SETUP #line 598 "./util/configlexer.lex" +{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } + YY_BREAK +case 325: +/* rule 325 can match eol */ +YY_RULE_SETUP +#line 599 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 325: +case 326: YY_RULE_SETUP -#line 600 "./util/configlexer.lex" +#line 601 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -5147,7 +5156,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 606 "./util/configlexer.lex" +#line 607 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -5162,39 +5171,39 @@ case YY_STATE_EOF(val): } YY_BREAK /* include-toplevel: directive */ -case 326: +case 327: YY_RULE_SETUP -#line 620 "./util/configlexer.lex" +#line 621 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include_toplevel); } YY_BREAK case YY_STATE_EOF(include_toplevel): -#line 623 "./util/configlexer.lex" +#line 624 "./util/configlexer.lex" { yyerror("EOF inside include_toplevel directive"); BEGIN(inc_prev); } YY_BREAK -case 327: -YY_RULE_SETUP -#line 627 "./util/configlexer.lex" -{ LEXOUT(("ITSP ")); /* ignore */ } - YY_BREAK case 328: -/* rule 328 can match eol */ YY_RULE_SETUP #line 628 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++; } +{ LEXOUT(("ITSP ")); /* ignore */ } YY_BREAK case 329: +/* rule 329 can match eol */ YY_RULE_SETUP #line 629 "./util/configlexer.lex" -{ LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } +{ LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK case 330: YY_RULE_SETUP #line 630 "./util/configlexer.lex" +{ LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } + YY_BREAK +case 331: +YY_RULE_SETUP +#line 631 "./util/configlexer.lex" { LEXOUT(("ITunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 1); @@ -5203,29 +5212,29 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_toplevel_quoted): -#line 636 "./util/configlexer.lex" +#line 637 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 331: -YY_RULE_SETUP -#line 640 "./util/configlexer.lex" -{ LEXOUT(("ITSTR(%s) ", yytext)); yymore(); } - YY_BREAK case 332: -/* rule 332 can match eol */ YY_RULE_SETUP #line 641 "./util/configlexer.lex" +{ LEXOUT(("ITSTR(%s) ", yytext)); yymore(); } + YY_BREAK +case 333: +/* rule 333 can match eol */ +YY_RULE_SETUP +#line 642 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 333: +case 334: YY_RULE_SETUP -#line 645 "./util/configlexer.lex" +#line 646 "./util/configlexer.lex" { LEXOUT(("ITQE ")); yytext[yyleng - 1] = '\0'; @@ -5234,33 +5243,33 @@ YY_RULE_SETUP return (VAR_FORCE_TOPLEVEL); } YY_BREAK -case 334: +case 335: YY_RULE_SETUP -#line 653 "./util/configlexer.lex" +#line 654 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 335: +case 336: YY_RULE_SETUP -#line 657 "./util/configlexer.lex" +#line 658 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 336: +case 337: YY_RULE_SETUP -#line 661 "./util/configlexer.lex" +#line 662 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 337: +case 338: YY_RULE_SETUP -#line 665 "./util/configlexer.lex" +#line 666 "./util/configlexer.lex" ECHO; YY_BREAK -#line 5261 "" +#line 5271 "" case YY_END_OF_BUFFER: { @@ -5555,7 +5564,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3292 ) + if ( yy_current_state >= 3296 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5583,11 +5592,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3292 ) + if ( yy_current_state >= 3296 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 3291); + yy_is_jam = (yy_current_state == 3295); return yy_is_jam ? 0 : yy_current_state; } @@ -6226,6 +6235,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 665 "./util/configlexer.lex" +#line 666 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index 55c584a76..c23e6db8f 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -531,6 +531,7 @@ udp-upstream-without-downstream{COLON} { YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNS tcp-connection-limit{COLON} { YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } edns-client-string{COLON} { YDVAR(2, VAR_EDNS_CLIENT_STRING) } edns-client-string-opcode{COLON} { YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } +nsid{COLON} { YDVAR(1, VAR_NSID ) } {NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++; } /* Quoted strings. Strip leading and ending quotes */ diff --git a/util/configparser.c b/util/configparser.c index 4e5bf5a41..76ef9b877 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.4.1. */ +/* A Bison parser, made by GNU Bison 3.7. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -34,6 +34,10 @@ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ +/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, + especially those whose name start with YY_ or yy_. They are + private implementation details that can be changed or removed. */ + /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. @@ -41,14 +45,11 @@ define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ -/* Undocumented macros, especially those whose name start with YY_, - are private implementation details. Do not rely on them. */ - /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.4.1" +#define YYBISON_VERSION "3.7" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -95,8 +96,17 @@ extern struct config_parser_state* cfg_parser; #endif -#line 99 "util/configparser.c" +#line 100 "util/configparser.c" +# ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +# endif # ifndef YY_NULLPTR # if defined __cplusplus # if 201103L <= __cplusplus @@ -109,694 +119,731 @@ extern struct config_parser_state* cfg_parser; # endif # endif -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 -#endif - -/* Use api.header.include to #include this header - instead of duplicating it here. */ -#ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED -# define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED -/* Debug traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif -#if YYDEBUG -extern int yydebug; -#endif - -/* Token type. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - enum yytokentype - { - SPACE = 258, - LETTER = 259, - NEWLINE = 260, - COMMENT = 261, - COLON = 262, - ANY = 263, - ZONESTR = 264, - STRING_ARG = 265, - VAR_FORCE_TOPLEVEL = 266, - VAR_SERVER = 267, - VAR_VERBOSITY = 268, - VAR_NUM_THREADS = 269, - VAR_PORT = 270, - VAR_OUTGOING_RANGE = 271, - VAR_INTERFACE = 272, - VAR_PREFER_IP4 = 273, - VAR_DO_IP4 = 274, - VAR_DO_IP6 = 275, - VAR_PREFER_IP6 = 276, - VAR_DO_UDP = 277, - VAR_DO_TCP = 278, - VAR_TCP_MSS = 279, - VAR_OUTGOING_TCP_MSS = 280, - VAR_TCP_IDLE_TIMEOUT = 281, - VAR_EDNS_TCP_KEEPALIVE = 282, - VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 283, - VAR_CHROOT = 284, - VAR_USERNAME = 285, - VAR_DIRECTORY = 286, - VAR_LOGFILE = 287, - VAR_PIDFILE = 288, - VAR_MSG_CACHE_SIZE = 289, - VAR_MSG_CACHE_SLABS = 290, - VAR_NUM_QUERIES_PER_THREAD = 291, - VAR_RRSET_CACHE_SIZE = 292, - VAR_RRSET_CACHE_SLABS = 293, - VAR_OUTGOING_NUM_TCP = 294, - VAR_INFRA_HOST_TTL = 295, - VAR_INFRA_LAME_TTL = 296, - VAR_INFRA_CACHE_SLABS = 297, - VAR_INFRA_CACHE_NUMHOSTS = 298, - VAR_INFRA_CACHE_LAME_SIZE = 299, - VAR_NAME = 300, - VAR_STUB_ZONE = 301, - VAR_STUB_HOST = 302, - VAR_STUB_ADDR = 303, - VAR_TARGET_FETCH_POLICY = 304, - VAR_HARDEN_SHORT_BUFSIZE = 305, - VAR_HARDEN_LARGE_QUERIES = 306, - VAR_FORWARD_ZONE = 307, - VAR_FORWARD_HOST = 308, - VAR_FORWARD_ADDR = 309, - VAR_DO_NOT_QUERY_ADDRESS = 310, - VAR_HIDE_IDENTITY = 311, - VAR_HIDE_VERSION = 312, - VAR_IDENTITY = 313, - VAR_VERSION = 314, - VAR_HARDEN_GLUE = 315, - VAR_MODULE_CONF = 316, - VAR_TRUST_ANCHOR_FILE = 317, - VAR_TRUST_ANCHOR = 318, - VAR_VAL_OVERRIDE_DATE = 319, - VAR_BOGUS_TTL = 320, - VAR_VAL_CLEAN_ADDITIONAL = 321, - VAR_VAL_PERMISSIVE_MODE = 322, - VAR_INCOMING_NUM_TCP = 323, - VAR_MSG_BUFFER_SIZE = 324, - VAR_KEY_CACHE_SIZE = 325, - VAR_KEY_CACHE_SLABS = 326, - VAR_TRUSTED_KEYS_FILE = 327, - VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 328, - VAR_USE_SYSLOG = 329, - VAR_OUTGOING_INTERFACE = 330, - VAR_ROOT_HINTS = 331, - VAR_DO_NOT_QUERY_LOCALHOST = 332, - VAR_CACHE_MAX_TTL = 333, - VAR_HARDEN_DNSSEC_STRIPPED = 334, - VAR_ACCESS_CONTROL = 335, - VAR_LOCAL_ZONE = 336, - VAR_LOCAL_DATA = 337, - VAR_INTERFACE_AUTOMATIC = 338, - VAR_STATISTICS_INTERVAL = 339, - VAR_DO_DAEMONIZE = 340, - VAR_USE_CAPS_FOR_ID = 341, - VAR_STATISTICS_CUMULATIVE = 342, - VAR_OUTGOING_PORT_PERMIT = 343, - VAR_OUTGOING_PORT_AVOID = 344, - VAR_DLV_ANCHOR_FILE = 345, - VAR_DLV_ANCHOR = 346, - VAR_NEG_CACHE_SIZE = 347, - VAR_HARDEN_REFERRAL_PATH = 348, - VAR_PRIVATE_ADDRESS = 349, - VAR_PRIVATE_DOMAIN = 350, - VAR_REMOTE_CONTROL = 351, - VAR_CONTROL_ENABLE = 352, - VAR_CONTROL_INTERFACE = 353, - VAR_CONTROL_PORT = 354, - VAR_SERVER_KEY_FILE = 355, - VAR_SERVER_CERT_FILE = 356, - VAR_CONTROL_KEY_FILE = 357, - VAR_CONTROL_CERT_FILE = 358, - VAR_CONTROL_USE_CERT = 359, - VAR_EXTENDED_STATISTICS = 360, - VAR_LOCAL_DATA_PTR = 361, - VAR_JOSTLE_TIMEOUT = 362, - VAR_STUB_PRIME = 363, - VAR_UNWANTED_REPLY_THRESHOLD = 364, - VAR_LOG_TIME_ASCII = 365, - VAR_DOMAIN_INSECURE = 366, - VAR_PYTHON = 367, - VAR_PYTHON_SCRIPT = 368, - VAR_VAL_SIG_SKEW_MIN = 369, - VAR_VAL_SIG_SKEW_MAX = 370, - VAR_CACHE_MIN_TTL = 371, - VAR_VAL_LOG_LEVEL = 372, - VAR_AUTO_TRUST_ANCHOR_FILE = 373, - VAR_KEEP_MISSING = 374, - VAR_ADD_HOLDDOWN = 375, - VAR_DEL_HOLDDOWN = 376, - VAR_SO_RCVBUF = 377, - VAR_EDNS_BUFFER_SIZE = 378, - VAR_PREFETCH = 379, - VAR_PREFETCH_KEY = 380, - VAR_SO_SNDBUF = 381, - VAR_SO_REUSEPORT = 382, - VAR_HARDEN_BELOW_NXDOMAIN = 383, - VAR_IGNORE_CD_FLAG = 384, - VAR_LOG_QUERIES = 385, - VAR_LOG_REPLIES = 386, - VAR_LOG_LOCAL_ACTIONS = 387, - VAR_TCP_UPSTREAM = 388, - VAR_SSL_UPSTREAM = 389, - VAR_SSL_SERVICE_KEY = 390, - VAR_SSL_SERVICE_PEM = 391, - VAR_SSL_PORT = 392, - VAR_FORWARD_FIRST = 393, - VAR_STUB_SSL_UPSTREAM = 394, - VAR_FORWARD_SSL_UPSTREAM = 395, - VAR_TLS_CERT_BUNDLE = 396, - VAR_HTTPS_PORT = 397, - VAR_HTTP_ENDPOINT = 398, - VAR_HTTP_MAX_STREAMS = 399, - VAR_HTTP_QUERY_BUFFER_SIZE = 400, - VAR_HTTP_RESPONSE_BUFFER_SIZE = 401, - VAR_HTTP_NODELAY = 402, - VAR_HTTP_NOTLS_DOWNSTREAM = 403, - VAR_STUB_FIRST = 404, - VAR_MINIMAL_RESPONSES = 405, - VAR_RRSET_ROUNDROBIN = 406, - VAR_MAX_UDP_SIZE = 407, - VAR_DELAY_CLOSE = 408, - VAR_UDP_CONNECT = 409, - VAR_UNBLOCK_LAN_ZONES = 410, - VAR_INSECURE_LAN_ZONES = 411, - VAR_INFRA_CACHE_MIN_RTT = 412, - VAR_INFRA_KEEP_PROBING = 413, - VAR_DNS64_PREFIX = 414, - VAR_DNS64_SYNTHALL = 415, - VAR_DNS64_IGNORE_AAAA = 416, - VAR_DNSTAP = 417, - VAR_DNSTAP_ENABLE = 418, - VAR_DNSTAP_SOCKET_PATH = 419, - VAR_DNSTAP_IP = 420, - VAR_DNSTAP_TLS = 421, - VAR_DNSTAP_TLS_SERVER_NAME = 422, - VAR_DNSTAP_TLS_CERT_BUNDLE = 423, - VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 424, - VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 425, - VAR_DNSTAP_SEND_IDENTITY = 426, - VAR_DNSTAP_SEND_VERSION = 427, - VAR_DNSTAP_BIDIRECTIONAL = 428, - VAR_DNSTAP_IDENTITY = 429, - VAR_DNSTAP_VERSION = 430, - VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 431, - VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 432, - VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 433, - VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 434, - VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 435, - VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 436, - VAR_RESPONSE_IP_TAG = 437, - VAR_RESPONSE_IP = 438, - VAR_RESPONSE_IP_DATA = 439, - VAR_HARDEN_ALGO_DOWNGRADE = 440, - VAR_IP_TRANSPARENT = 441, - VAR_IP_DSCP = 442, - VAR_DISABLE_DNSSEC_LAME_CHECK = 443, - VAR_IP_RATELIMIT = 444, - VAR_IP_RATELIMIT_SLABS = 445, - VAR_IP_RATELIMIT_SIZE = 446, - VAR_RATELIMIT = 447, - VAR_RATELIMIT_SLABS = 448, - VAR_RATELIMIT_SIZE = 449, - VAR_RATELIMIT_FOR_DOMAIN = 450, - VAR_RATELIMIT_BELOW_DOMAIN = 451, - VAR_IP_RATELIMIT_FACTOR = 452, - VAR_RATELIMIT_FACTOR = 453, - VAR_SEND_CLIENT_SUBNET = 454, - VAR_CLIENT_SUBNET_ZONE = 455, - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 456, - VAR_CLIENT_SUBNET_OPCODE = 457, - VAR_MAX_CLIENT_SUBNET_IPV4 = 458, - VAR_MAX_CLIENT_SUBNET_IPV6 = 459, - VAR_MIN_CLIENT_SUBNET_IPV4 = 460, - VAR_MIN_CLIENT_SUBNET_IPV6 = 461, - VAR_MAX_ECS_TREE_SIZE_IPV4 = 462, - VAR_MAX_ECS_TREE_SIZE_IPV6 = 463, - VAR_CAPS_WHITELIST = 464, - VAR_CACHE_MAX_NEGATIVE_TTL = 465, - VAR_PERMIT_SMALL_HOLDDOWN = 466, - VAR_QNAME_MINIMISATION = 467, - VAR_QNAME_MINIMISATION_STRICT = 468, - VAR_IP_FREEBIND = 469, - VAR_DEFINE_TAG = 470, - VAR_LOCAL_ZONE_TAG = 471, - VAR_ACCESS_CONTROL_TAG = 472, - VAR_LOCAL_ZONE_OVERRIDE = 473, - VAR_ACCESS_CONTROL_TAG_ACTION = 474, - VAR_ACCESS_CONTROL_TAG_DATA = 475, - VAR_VIEW = 476, - VAR_ACCESS_CONTROL_VIEW = 477, - VAR_VIEW_FIRST = 478, - VAR_SERVE_EXPIRED = 479, - VAR_SERVE_EXPIRED_TTL = 480, - VAR_SERVE_EXPIRED_TTL_RESET = 481, - VAR_SERVE_EXPIRED_REPLY_TTL = 482, - VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 483, - VAR_FAKE_DSA = 484, - VAR_FAKE_SHA1 = 485, - VAR_LOG_IDENTITY = 486, - VAR_HIDE_TRUSTANCHOR = 487, - VAR_TRUST_ANCHOR_SIGNALING = 488, - VAR_AGGRESSIVE_NSEC = 489, - VAR_USE_SYSTEMD = 490, - VAR_SHM_ENABLE = 491, - VAR_SHM_KEY = 492, - VAR_ROOT_KEY_SENTINEL = 493, - VAR_DNSCRYPT = 494, - VAR_DNSCRYPT_ENABLE = 495, - VAR_DNSCRYPT_PORT = 496, - VAR_DNSCRYPT_PROVIDER = 497, - VAR_DNSCRYPT_SECRET_KEY = 498, - VAR_DNSCRYPT_PROVIDER_CERT = 499, - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 500, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 501, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 502, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 503, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 504, - VAR_IPSECMOD_ENABLED = 505, - VAR_IPSECMOD_HOOK = 506, - VAR_IPSECMOD_IGNORE_BOGUS = 507, - VAR_IPSECMOD_MAX_TTL = 508, - VAR_IPSECMOD_WHITELIST = 509, - VAR_IPSECMOD_STRICT = 510, - VAR_CACHEDB = 511, - VAR_CACHEDB_BACKEND = 512, - VAR_CACHEDB_SECRETSEED = 513, - VAR_CACHEDB_REDISHOST = 514, - VAR_CACHEDB_REDISPORT = 515, - VAR_CACHEDB_REDISTIMEOUT = 516, - VAR_CACHEDB_REDISEXPIRERECORDS = 517, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 518, - VAR_FOR_UPSTREAM = 519, - VAR_AUTH_ZONE = 520, - VAR_ZONEFILE = 521, - VAR_MASTER = 522, - VAR_URL = 523, - VAR_FOR_DOWNSTREAM = 524, - VAR_FALLBACK_ENABLED = 525, - VAR_TLS_ADDITIONAL_PORT = 526, - VAR_LOW_RTT = 527, - VAR_LOW_RTT_PERMIL = 528, - VAR_FAST_SERVER_PERMIL = 529, - VAR_FAST_SERVER_NUM = 530, - VAR_ALLOW_NOTIFY = 531, - VAR_TLS_WIN_CERT = 532, - VAR_TCP_CONNECTION_LIMIT = 533, - VAR_FORWARD_NO_CACHE = 534, - VAR_STUB_NO_CACHE = 535, - VAR_LOG_SERVFAIL = 536, - VAR_DENY_ANY = 537, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 538, - VAR_LOG_TAG_QUERYREPLY = 539, - VAR_STREAM_WAIT_SIZE = 540, - VAR_TLS_CIPHERS = 541, - VAR_TLS_CIPHERSUITES = 542, - VAR_TLS_USE_SNI = 543, - VAR_IPSET = 544, - VAR_IPSET_NAME_V4 = 545, - VAR_IPSET_NAME_V6 = 546, - VAR_TLS_SESSION_TICKET_KEYS = 547, - VAR_RPZ = 548, - VAR_TAGS = 549, - VAR_RPZ_ACTION_OVERRIDE = 550, - VAR_RPZ_CNAME_OVERRIDE = 551, - VAR_RPZ_LOG = 552, - VAR_RPZ_LOG_NAME = 553, - VAR_DYNLIB = 554, - VAR_DYNLIB_FILE = 555, - VAR_EDNS_CLIENT_STRING = 556, - VAR_EDNS_CLIENT_STRING_OPCODE = 557 - }; -#endif -/* Tokens. */ -#define SPACE 258 -#define LETTER 259 -#define NEWLINE 260 -#define COMMENT 261 -#define COLON 262 -#define ANY 263 -#define ZONESTR 264 -#define STRING_ARG 265 -#define VAR_FORCE_TOPLEVEL 266 -#define VAR_SERVER 267 -#define VAR_VERBOSITY 268 -#define VAR_NUM_THREADS 269 -#define VAR_PORT 270 -#define VAR_OUTGOING_RANGE 271 -#define VAR_INTERFACE 272 -#define VAR_PREFER_IP4 273 -#define VAR_DO_IP4 274 -#define VAR_DO_IP6 275 -#define VAR_PREFER_IP6 276 -#define VAR_DO_UDP 277 -#define VAR_DO_TCP 278 -#define VAR_TCP_MSS 279 -#define VAR_OUTGOING_TCP_MSS 280 -#define VAR_TCP_IDLE_TIMEOUT 281 -#define VAR_EDNS_TCP_KEEPALIVE 282 -#define VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 283 -#define VAR_CHROOT 284 -#define VAR_USERNAME 285 -#define VAR_DIRECTORY 286 -#define VAR_LOGFILE 287 -#define VAR_PIDFILE 288 -#define VAR_MSG_CACHE_SIZE 289 -#define VAR_MSG_CACHE_SLABS 290 -#define VAR_NUM_QUERIES_PER_THREAD 291 -#define VAR_RRSET_CACHE_SIZE 292 -#define VAR_RRSET_CACHE_SLABS 293 -#define VAR_OUTGOING_NUM_TCP 294 -#define VAR_INFRA_HOST_TTL 295 -#define VAR_INFRA_LAME_TTL 296 -#define VAR_INFRA_CACHE_SLABS 297 -#define VAR_INFRA_CACHE_NUMHOSTS 298 -#define VAR_INFRA_CACHE_LAME_SIZE 299 -#define VAR_NAME 300 -#define VAR_STUB_ZONE 301 -#define VAR_STUB_HOST 302 -#define VAR_STUB_ADDR 303 -#define VAR_TARGET_FETCH_POLICY 304 -#define VAR_HARDEN_SHORT_BUFSIZE 305 -#define VAR_HARDEN_LARGE_QUERIES 306 -#define VAR_FORWARD_ZONE 307 -#define VAR_FORWARD_HOST 308 -#define VAR_FORWARD_ADDR 309 -#define VAR_DO_NOT_QUERY_ADDRESS 310 -#define VAR_HIDE_IDENTITY 311 -#define VAR_HIDE_VERSION 312 -#define VAR_IDENTITY 313 -#define VAR_VERSION 314 -#define VAR_HARDEN_GLUE 315 -#define VAR_MODULE_CONF 316 -#define VAR_TRUST_ANCHOR_FILE 317 -#define VAR_TRUST_ANCHOR 318 -#define VAR_VAL_OVERRIDE_DATE 319 -#define VAR_BOGUS_TTL 320 -#define VAR_VAL_CLEAN_ADDITIONAL 321 -#define VAR_VAL_PERMISSIVE_MODE 322 -#define VAR_INCOMING_NUM_TCP 323 -#define VAR_MSG_BUFFER_SIZE 324 -#define VAR_KEY_CACHE_SIZE 325 -#define VAR_KEY_CACHE_SLABS 326 -#define VAR_TRUSTED_KEYS_FILE 327 -#define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 328 -#define VAR_USE_SYSLOG 329 -#define VAR_OUTGOING_INTERFACE 330 -#define VAR_ROOT_HINTS 331 -#define VAR_DO_NOT_QUERY_LOCALHOST 332 -#define VAR_CACHE_MAX_TTL 333 -#define VAR_HARDEN_DNSSEC_STRIPPED 334 -#define VAR_ACCESS_CONTROL 335 -#define VAR_LOCAL_ZONE 336 -#define VAR_LOCAL_DATA 337 -#define VAR_INTERFACE_AUTOMATIC 338 -#define VAR_STATISTICS_INTERVAL 339 -#define VAR_DO_DAEMONIZE 340 -#define VAR_USE_CAPS_FOR_ID 341 -#define VAR_STATISTICS_CUMULATIVE 342 -#define VAR_OUTGOING_PORT_PERMIT 343 -#define VAR_OUTGOING_PORT_AVOID 344 -#define VAR_DLV_ANCHOR_FILE 345 -#define VAR_DLV_ANCHOR 346 -#define VAR_NEG_CACHE_SIZE 347 -#define VAR_HARDEN_REFERRAL_PATH 348 -#define VAR_PRIVATE_ADDRESS 349 -#define VAR_PRIVATE_DOMAIN 350 -#define VAR_REMOTE_CONTROL 351 -#define VAR_CONTROL_ENABLE 352 -#define VAR_CONTROL_INTERFACE 353 -#define VAR_CONTROL_PORT 354 -#define VAR_SERVER_KEY_FILE 355 -#define VAR_SERVER_CERT_FILE 356 -#define VAR_CONTROL_KEY_FILE 357 -#define VAR_CONTROL_CERT_FILE 358 -#define VAR_CONTROL_USE_CERT 359 -#define VAR_EXTENDED_STATISTICS 360 -#define VAR_LOCAL_DATA_PTR 361 -#define VAR_JOSTLE_TIMEOUT 362 -#define VAR_STUB_PRIME 363 -#define VAR_UNWANTED_REPLY_THRESHOLD 364 -#define VAR_LOG_TIME_ASCII 365 -#define VAR_DOMAIN_INSECURE 366 -#define VAR_PYTHON 367 -#define VAR_PYTHON_SCRIPT 368 -#define VAR_VAL_SIG_SKEW_MIN 369 -#define VAR_VAL_SIG_SKEW_MAX 370 -#define VAR_CACHE_MIN_TTL 371 -#define VAR_VAL_LOG_LEVEL 372 -#define VAR_AUTO_TRUST_ANCHOR_FILE 373 -#define VAR_KEEP_MISSING 374 -#define VAR_ADD_HOLDDOWN 375 -#define VAR_DEL_HOLDDOWN 376 -#define VAR_SO_RCVBUF 377 -#define VAR_EDNS_BUFFER_SIZE 378 -#define VAR_PREFETCH 379 -#define VAR_PREFETCH_KEY 380 -#define VAR_SO_SNDBUF 381 -#define VAR_SO_REUSEPORT 382 -#define VAR_HARDEN_BELOW_NXDOMAIN 383 -#define VAR_IGNORE_CD_FLAG 384 -#define VAR_LOG_QUERIES 385 -#define VAR_LOG_REPLIES 386 -#define VAR_LOG_LOCAL_ACTIONS 387 -#define VAR_TCP_UPSTREAM 388 -#define VAR_SSL_UPSTREAM 389 -#define VAR_SSL_SERVICE_KEY 390 -#define VAR_SSL_SERVICE_PEM 391 -#define VAR_SSL_PORT 392 -#define VAR_FORWARD_FIRST 393 -#define VAR_STUB_SSL_UPSTREAM 394 -#define VAR_FORWARD_SSL_UPSTREAM 395 -#define VAR_TLS_CERT_BUNDLE 396 -#define VAR_HTTPS_PORT 397 -#define VAR_HTTP_ENDPOINT 398 -#define VAR_HTTP_MAX_STREAMS 399 -#define VAR_HTTP_QUERY_BUFFER_SIZE 400 -#define VAR_HTTP_RESPONSE_BUFFER_SIZE 401 -#define VAR_HTTP_NODELAY 402 -#define VAR_HTTP_NOTLS_DOWNSTREAM 403 -#define VAR_STUB_FIRST 404 -#define VAR_MINIMAL_RESPONSES 405 -#define VAR_RRSET_ROUNDROBIN 406 -#define VAR_MAX_UDP_SIZE 407 -#define VAR_DELAY_CLOSE 408 -#define VAR_UDP_CONNECT 409 -#define VAR_UNBLOCK_LAN_ZONES 410 -#define VAR_INSECURE_LAN_ZONES 411 -#define VAR_INFRA_CACHE_MIN_RTT 412 -#define VAR_INFRA_KEEP_PROBING 413 -#define VAR_DNS64_PREFIX 414 -#define VAR_DNS64_SYNTHALL 415 -#define VAR_DNS64_IGNORE_AAAA 416 -#define VAR_DNSTAP 417 -#define VAR_DNSTAP_ENABLE 418 -#define VAR_DNSTAP_SOCKET_PATH 419 -#define VAR_DNSTAP_IP 420 -#define VAR_DNSTAP_TLS 421 -#define VAR_DNSTAP_TLS_SERVER_NAME 422 -#define VAR_DNSTAP_TLS_CERT_BUNDLE 423 -#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 424 -#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 425 -#define VAR_DNSTAP_SEND_IDENTITY 426 -#define VAR_DNSTAP_SEND_VERSION 427 -#define VAR_DNSTAP_BIDIRECTIONAL 428 -#define VAR_DNSTAP_IDENTITY 429 -#define VAR_DNSTAP_VERSION 430 -#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 431 -#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 432 -#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 433 -#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 434 -#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 435 -#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 436 -#define VAR_RESPONSE_IP_TAG 437 -#define VAR_RESPONSE_IP 438 -#define VAR_RESPONSE_IP_DATA 439 -#define VAR_HARDEN_ALGO_DOWNGRADE 440 -#define VAR_IP_TRANSPARENT 441 -#define VAR_IP_DSCP 442 -#define VAR_DISABLE_DNSSEC_LAME_CHECK 443 -#define VAR_IP_RATELIMIT 444 -#define VAR_IP_RATELIMIT_SLABS 445 -#define VAR_IP_RATELIMIT_SIZE 446 -#define VAR_RATELIMIT 447 -#define VAR_RATELIMIT_SLABS 448 -#define VAR_RATELIMIT_SIZE 449 -#define VAR_RATELIMIT_FOR_DOMAIN 450 -#define VAR_RATELIMIT_BELOW_DOMAIN 451 -#define VAR_IP_RATELIMIT_FACTOR 452 -#define VAR_RATELIMIT_FACTOR 453 -#define VAR_SEND_CLIENT_SUBNET 454 -#define VAR_CLIENT_SUBNET_ZONE 455 -#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 456 -#define VAR_CLIENT_SUBNET_OPCODE 457 -#define VAR_MAX_CLIENT_SUBNET_IPV4 458 -#define VAR_MAX_CLIENT_SUBNET_IPV6 459 -#define VAR_MIN_CLIENT_SUBNET_IPV4 460 -#define VAR_MIN_CLIENT_SUBNET_IPV6 461 -#define VAR_MAX_ECS_TREE_SIZE_IPV4 462 -#define VAR_MAX_ECS_TREE_SIZE_IPV6 463 -#define VAR_CAPS_WHITELIST 464 -#define VAR_CACHE_MAX_NEGATIVE_TTL 465 -#define VAR_PERMIT_SMALL_HOLDDOWN 466 -#define VAR_QNAME_MINIMISATION 467 -#define VAR_QNAME_MINIMISATION_STRICT 468 -#define VAR_IP_FREEBIND 469 -#define VAR_DEFINE_TAG 470 -#define VAR_LOCAL_ZONE_TAG 471 -#define VAR_ACCESS_CONTROL_TAG 472 -#define VAR_LOCAL_ZONE_OVERRIDE 473 -#define VAR_ACCESS_CONTROL_TAG_ACTION 474 -#define VAR_ACCESS_CONTROL_TAG_DATA 475 -#define VAR_VIEW 476 -#define VAR_ACCESS_CONTROL_VIEW 477 -#define VAR_VIEW_FIRST 478 -#define VAR_SERVE_EXPIRED 479 -#define VAR_SERVE_EXPIRED_TTL 480 -#define VAR_SERVE_EXPIRED_TTL_RESET 481 -#define VAR_SERVE_EXPIRED_REPLY_TTL 482 -#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 483 -#define VAR_FAKE_DSA 484 -#define VAR_FAKE_SHA1 485 -#define VAR_LOG_IDENTITY 486 -#define VAR_HIDE_TRUSTANCHOR 487 -#define VAR_TRUST_ANCHOR_SIGNALING 488 -#define VAR_AGGRESSIVE_NSEC 489 -#define VAR_USE_SYSTEMD 490 -#define VAR_SHM_ENABLE 491 -#define VAR_SHM_KEY 492 -#define VAR_ROOT_KEY_SENTINEL 493 -#define VAR_DNSCRYPT 494 -#define VAR_DNSCRYPT_ENABLE 495 -#define VAR_DNSCRYPT_PORT 496 -#define VAR_DNSCRYPT_PROVIDER 497 -#define VAR_DNSCRYPT_SECRET_KEY 498 -#define VAR_DNSCRYPT_PROVIDER_CERT 499 -#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 500 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 501 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 502 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 503 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 504 -#define VAR_IPSECMOD_ENABLED 505 -#define VAR_IPSECMOD_HOOK 506 -#define VAR_IPSECMOD_IGNORE_BOGUS 507 -#define VAR_IPSECMOD_MAX_TTL 508 -#define VAR_IPSECMOD_WHITELIST 509 -#define VAR_IPSECMOD_STRICT 510 -#define VAR_CACHEDB 511 -#define VAR_CACHEDB_BACKEND 512 -#define VAR_CACHEDB_SECRETSEED 513 -#define VAR_CACHEDB_REDISHOST 514 -#define VAR_CACHEDB_REDISPORT 515 -#define VAR_CACHEDB_REDISTIMEOUT 516 -#define VAR_CACHEDB_REDISEXPIRERECORDS 517 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 518 -#define VAR_FOR_UPSTREAM 519 -#define VAR_AUTH_ZONE 520 -#define VAR_ZONEFILE 521 -#define VAR_MASTER 522 -#define VAR_URL 523 -#define VAR_FOR_DOWNSTREAM 524 -#define VAR_FALLBACK_ENABLED 525 -#define VAR_TLS_ADDITIONAL_PORT 526 -#define VAR_LOW_RTT 527 -#define VAR_LOW_RTT_PERMIL 528 -#define VAR_FAST_SERVER_PERMIL 529 -#define VAR_FAST_SERVER_NUM 530 -#define VAR_ALLOW_NOTIFY 531 -#define VAR_TLS_WIN_CERT 532 -#define VAR_TCP_CONNECTION_LIMIT 533 -#define VAR_FORWARD_NO_CACHE 534 -#define VAR_STUB_NO_CACHE 535 -#define VAR_LOG_SERVFAIL 536 -#define VAR_DENY_ANY 537 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 538 -#define VAR_LOG_TAG_QUERYREPLY 539 -#define VAR_STREAM_WAIT_SIZE 540 -#define VAR_TLS_CIPHERS 541 -#define VAR_TLS_CIPHERSUITES 542 -#define VAR_TLS_USE_SNI 543 -#define VAR_IPSET 544 -#define VAR_IPSET_NAME_V4 545 -#define VAR_IPSET_NAME_V6 546 -#define VAR_TLS_SESSION_TICKET_KEYS 547 -#define VAR_RPZ 548 -#define VAR_TAGS 549 -#define VAR_RPZ_ACTION_OVERRIDE 550 -#define VAR_RPZ_CNAME_OVERRIDE 551 -#define VAR_RPZ_LOG 552 -#define VAR_RPZ_LOG_NAME 553 -#define VAR_DYNLIB 554 -#define VAR_DYNLIB_FILE 555 -#define VAR_EDNS_CLIENT_STRING 556 -#define VAR_EDNS_CLIENT_STRING_OPCODE 557 - -/* Value type. */ -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -union YYSTYPE +#include "configparser.h" +/* Symbol kind. */ +enum yysymbol_kind_t { -#line 66 "./util/configparser.y" - - char* str; - -#line 750 "util/configparser.c" - + YYSYMBOL_YYEMPTY = -2, + YYSYMBOL_YYEOF = 0, /* "end of file" */ + YYSYMBOL_YYerror = 1, /* error */ + YYSYMBOL_YYUNDEF = 2, /* "invalid token" */ + YYSYMBOL_SPACE = 3, /* SPACE */ + YYSYMBOL_LETTER = 4, /* LETTER */ + YYSYMBOL_NEWLINE = 5, /* NEWLINE */ + YYSYMBOL_COMMENT = 6, /* COMMENT */ + YYSYMBOL_COLON = 7, /* COLON */ + YYSYMBOL_ANY = 8, /* ANY */ + YYSYMBOL_ZONESTR = 9, /* ZONESTR */ + YYSYMBOL_STRING_ARG = 10, /* STRING_ARG */ + YYSYMBOL_VAR_FORCE_TOPLEVEL = 11, /* VAR_FORCE_TOPLEVEL */ + YYSYMBOL_VAR_SERVER = 12, /* VAR_SERVER */ + YYSYMBOL_VAR_VERBOSITY = 13, /* VAR_VERBOSITY */ + YYSYMBOL_VAR_NUM_THREADS = 14, /* VAR_NUM_THREADS */ + YYSYMBOL_VAR_PORT = 15, /* VAR_PORT */ + YYSYMBOL_VAR_OUTGOING_RANGE = 16, /* VAR_OUTGOING_RANGE */ + YYSYMBOL_VAR_INTERFACE = 17, /* VAR_INTERFACE */ + YYSYMBOL_VAR_PREFER_IP4 = 18, /* VAR_PREFER_IP4 */ + YYSYMBOL_VAR_DO_IP4 = 19, /* VAR_DO_IP4 */ + YYSYMBOL_VAR_DO_IP6 = 20, /* VAR_DO_IP6 */ + YYSYMBOL_VAR_PREFER_IP6 = 21, /* VAR_PREFER_IP6 */ + YYSYMBOL_VAR_DO_UDP = 22, /* VAR_DO_UDP */ + YYSYMBOL_VAR_DO_TCP = 23, /* VAR_DO_TCP */ + YYSYMBOL_VAR_TCP_MSS = 24, /* VAR_TCP_MSS */ + YYSYMBOL_VAR_OUTGOING_TCP_MSS = 25, /* VAR_OUTGOING_TCP_MSS */ + YYSYMBOL_VAR_TCP_IDLE_TIMEOUT = 26, /* VAR_TCP_IDLE_TIMEOUT */ + YYSYMBOL_VAR_EDNS_TCP_KEEPALIVE = 27, /* VAR_EDNS_TCP_KEEPALIVE */ + YYSYMBOL_VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 28, /* VAR_EDNS_TCP_KEEPALIVE_TIMEOUT */ + YYSYMBOL_VAR_CHROOT = 29, /* VAR_CHROOT */ + YYSYMBOL_VAR_USERNAME = 30, /* VAR_USERNAME */ + YYSYMBOL_VAR_DIRECTORY = 31, /* VAR_DIRECTORY */ + YYSYMBOL_VAR_LOGFILE = 32, /* VAR_LOGFILE */ + YYSYMBOL_VAR_PIDFILE = 33, /* VAR_PIDFILE */ + YYSYMBOL_VAR_MSG_CACHE_SIZE = 34, /* VAR_MSG_CACHE_SIZE */ + YYSYMBOL_VAR_MSG_CACHE_SLABS = 35, /* VAR_MSG_CACHE_SLABS */ + YYSYMBOL_VAR_NUM_QUERIES_PER_THREAD = 36, /* VAR_NUM_QUERIES_PER_THREAD */ + YYSYMBOL_VAR_RRSET_CACHE_SIZE = 37, /* VAR_RRSET_CACHE_SIZE */ + YYSYMBOL_VAR_RRSET_CACHE_SLABS = 38, /* VAR_RRSET_CACHE_SLABS */ + YYSYMBOL_VAR_OUTGOING_NUM_TCP = 39, /* VAR_OUTGOING_NUM_TCP */ + YYSYMBOL_VAR_INFRA_HOST_TTL = 40, /* VAR_INFRA_HOST_TTL */ + YYSYMBOL_VAR_INFRA_LAME_TTL = 41, /* VAR_INFRA_LAME_TTL */ + YYSYMBOL_VAR_INFRA_CACHE_SLABS = 42, /* VAR_INFRA_CACHE_SLABS */ + YYSYMBOL_VAR_INFRA_CACHE_NUMHOSTS = 43, /* VAR_INFRA_CACHE_NUMHOSTS */ + YYSYMBOL_VAR_INFRA_CACHE_LAME_SIZE = 44, /* VAR_INFRA_CACHE_LAME_SIZE */ + YYSYMBOL_VAR_NAME = 45, /* VAR_NAME */ + YYSYMBOL_VAR_STUB_ZONE = 46, /* VAR_STUB_ZONE */ + YYSYMBOL_VAR_STUB_HOST = 47, /* VAR_STUB_HOST */ + YYSYMBOL_VAR_STUB_ADDR = 48, /* VAR_STUB_ADDR */ + YYSYMBOL_VAR_TARGET_FETCH_POLICY = 49, /* VAR_TARGET_FETCH_POLICY */ + YYSYMBOL_VAR_HARDEN_SHORT_BUFSIZE = 50, /* VAR_HARDEN_SHORT_BUFSIZE */ + YYSYMBOL_VAR_HARDEN_LARGE_QUERIES = 51, /* VAR_HARDEN_LARGE_QUERIES */ + YYSYMBOL_VAR_FORWARD_ZONE = 52, /* VAR_FORWARD_ZONE */ + YYSYMBOL_VAR_FORWARD_HOST = 53, /* VAR_FORWARD_HOST */ + YYSYMBOL_VAR_FORWARD_ADDR = 54, /* VAR_FORWARD_ADDR */ + YYSYMBOL_VAR_DO_NOT_QUERY_ADDRESS = 55, /* VAR_DO_NOT_QUERY_ADDRESS */ + YYSYMBOL_VAR_HIDE_IDENTITY = 56, /* VAR_HIDE_IDENTITY */ + YYSYMBOL_VAR_HIDE_VERSION = 57, /* VAR_HIDE_VERSION */ + YYSYMBOL_VAR_IDENTITY = 58, /* VAR_IDENTITY */ + YYSYMBOL_VAR_VERSION = 59, /* VAR_VERSION */ + YYSYMBOL_VAR_HARDEN_GLUE = 60, /* VAR_HARDEN_GLUE */ + YYSYMBOL_VAR_MODULE_CONF = 61, /* VAR_MODULE_CONF */ + YYSYMBOL_VAR_TRUST_ANCHOR_FILE = 62, /* VAR_TRUST_ANCHOR_FILE */ + YYSYMBOL_VAR_TRUST_ANCHOR = 63, /* VAR_TRUST_ANCHOR */ + YYSYMBOL_VAR_VAL_OVERRIDE_DATE = 64, /* VAR_VAL_OVERRIDE_DATE */ + YYSYMBOL_VAR_BOGUS_TTL = 65, /* VAR_BOGUS_TTL */ + YYSYMBOL_VAR_VAL_CLEAN_ADDITIONAL = 66, /* VAR_VAL_CLEAN_ADDITIONAL */ + YYSYMBOL_VAR_VAL_PERMISSIVE_MODE = 67, /* VAR_VAL_PERMISSIVE_MODE */ + YYSYMBOL_VAR_INCOMING_NUM_TCP = 68, /* VAR_INCOMING_NUM_TCP */ + YYSYMBOL_VAR_MSG_BUFFER_SIZE = 69, /* VAR_MSG_BUFFER_SIZE */ + YYSYMBOL_VAR_KEY_CACHE_SIZE = 70, /* VAR_KEY_CACHE_SIZE */ + YYSYMBOL_VAR_KEY_CACHE_SLABS = 71, /* VAR_KEY_CACHE_SLABS */ + YYSYMBOL_VAR_TRUSTED_KEYS_FILE = 72, /* VAR_TRUSTED_KEYS_FILE */ + YYSYMBOL_VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 73, /* VAR_VAL_NSEC3_KEYSIZE_ITERATIONS */ + YYSYMBOL_VAR_USE_SYSLOG = 74, /* VAR_USE_SYSLOG */ + YYSYMBOL_VAR_OUTGOING_INTERFACE = 75, /* VAR_OUTGOING_INTERFACE */ + YYSYMBOL_VAR_ROOT_HINTS = 76, /* VAR_ROOT_HINTS */ + YYSYMBOL_VAR_DO_NOT_QUERY_LOCALHOST = 77, /* VAR_DO_NOT_QUERY_LOCALHOST */ + YYSYMBOL_VAR_CACHE_MAX_TTL = 78, /* VAR_CACHE_MAX_TTL */ + YYSYMBOL_VAR_HARDEN_DNSSEC_STRIPPED = 79, /* VAR_HARDEN_DNSSEC_STRIPPED */ + YYSYMBOL_VAR_ACCESS_CONTROL = 80, /* VAR_ACCESS_CONTROL */ + YYSYMBOL_VAR_LOCAL_ZONE = 81, /* VAR_LOCAL_ZONE */ + YYSYMBOL_VAR_LOCAL_DATA = 82, /* VAR_LOCAL_DATA */ + YYSYMBOL_VAR_INTERFACE_AUTOMATIC = 83, /* VAR_INTERFACE_AUTOMATIC */ + YYSYMBOL_VAR_STATISTICS_INTERVAL = 84, /* VAR_STATISTICS_INTERVAL */ + YYSYMBOL_VAR_DO_DAEMONIZE = 85, /* VAR_DO_DAEMONIZE */ + YYSYMBOL_VAR_USE_CAPS_FOR_ID = 86, /* VAR_USE_CAPS_FOR_ID */ + YYSYMBOL_VAR_STATISTICS_CUMULATIVE = 87, /* VAR_STATISTICS_CUMULATIVE */ + YYSYMBOL_VAR_OUTGOING_PORT_PERMIT = 88, /* VAR_OUTGOING_PORT_PERMIT */ + YYSYMBOL_VAR_OUTGOING_PORT_AVOID = 89, /* VAR_OUTGOING_PORT_AVOID */ + YYSYMBOL_VAR_DLV_ANCHOR_FILE = 90, /* VAR_DLV_ANCHOR_FILE */ + YYSYMBOL_VAR_DLV_ANCHOR = 91, /* VAR_DLV_ANCHOR */ + YYSYMBOL_VAR_NEG_CACHE_SIZE = 92, /* VAR_NEG_CACHE_SIZE */ + YYSYMBOL_VAR_HARDEN_REFERRAL_PATH = 93, /* VAR_HARDEN_REFERRAL_PATH */ + YYSYMBOL_VAR_PRIVATE_ADDRESS = 94, /* VAR_PRIVATE_ADDRESS */ + YYSYMBOL_VAR_PRIVATE_DOMAIN = 95, /* VAR_PRIVATE_DOMAIN */ + YYSYMBOL_VAR_REMOTE_CONTROL = 96, /* VAR_REMOTE_CONTROL */ + YYSYMBOL_VAR_CONTROL_ENABLE = 97, /* VAR_CONTROL_ENABLE */ + YYSYMBOL_VAR_CONTROL_INTERFACE = 98, /* VAR_CONTROL_INTERFACE */ + YYSYMBOL_VAR_CONTROL_PORT = 99, /* VAR_CONTROL_PORT */ + YYSYMBOL_VAR_SERVER_KEY_FILE = 100, /* VAR_SERVER_KEY_FILE */ + YYSYMBOL_VAR_SERVER_CERT_FILE = 101, /* VAR_SERVER_CERT_FILE */ + YYSYMBOL_VAR_CONTROL_KEY_FILE = 102, /* VAR_CONTROL_KEY_FILE */ + YYSYMBOL_VAR_CONTROL_CERT_FILE = 103, /* VAR_CONTROL_CERT_FILE */ + YYSYMBOL_VAR_CONTROL_USE_CERT = 104, /* VAR_CONTROL_USE_CERT */ + YYSYMBOL_VAR_EXTENDED_STATISTICS = 105, /* VAR_EXTENDED_STATISTICS */ + YYSYMBOL_VAR_LOCAL_DATA_PTR = 106, /* VAR_LOCAL_DATA_PTR */ + YYSYMBOL_VAR_JOSTLE_TIMEOUT = 107, /* VAR_JOSTLE_TIMEOUT */ + YYSYMBOL_VAR_STUB_PRIME = 108, /* VAR_STUB_PRIME */ + YYSYMBOL_VAR_UNWANTED_REPLY_THRESHOLD = 109, /* VAR_UNWANTED_REPLY_THRESHOLD */ + YYSYMBOL_VAR_LOG_TIME_ASCII = 110, /* VAR_LOG_TIME_ASCII */ + YYSYMBOL_VAR_DOMAIN_INSECURE = 111, /* VAR_DOMAIN_INSECURE */ + YYSYMBOL_VAR_PYTHON = 112, /* VAR_PYTHON */ + YYSYMBOL_VAR_PYTHON_SCRIPT = 113, /* VAR_PYTHON_SCRIPT */ + YYSYMBOL_VAR_VAL_SIG_SKEW_MIN = 114, /* VAR_VAL_SIG_SKEW_MIN */ + YYSYMBOL_VAR_VAL_SIG_SKEW_MAX = 115, /* VAR_VAL_SIG_SKEW_MAX */ + YYSYMBOL_VAR_CACHE_MIN_TTL = 116, /* VAR_CACHE_MIN_TTL */ + YYSYMBOL_VAR_VAL_LOG_LEVEL = 117, /* VAR_VAL_LOG_LEVEL */ + YYSYMBOL_VAR_AUTO_TRUST_ANCHOR_FILE = 118, /* VAR_AUTO_TRUST_ANCHOR_FILE */ + YYSYMBOL_VAR_KEEP_MISSING = 119, /* VAR_KEEP_MISSING */ + YYSYMBOL_VAR_ADD_HOLDDOWN = 120, /* VAR_ADD_HOLDDOWN */ + YYSYMBOL_VAR_DEL_HOLDDOWN = 121, /* VAR_DEL_HOLDDOWN */ + YYSYMBOL_VAR_SO_RCVBUF = 122, /* VAR_SO_RCVBUF */ + YYSYMBOL_VAR_EDNS_BUFFER_SIZE = 123, /* VAR_EDNS_BUFFER_SIZE */ + YYSYMBOL_VAR_PREFETCH = 124, /* VAR_PREFETCH */ + YYSYMBOL_VAR_PREFETCH_KEY = 125, /* VAR_PREFETCH_KEY */ + YYSYMBOL_VAR_SO_SNDBUF = 126, /* VAR_SO_SNDBUF */ + YYSYMBOL_VAR_SO_REUSEPORT = 127, /* VAR_SO_REUSEPORT */ + YYSYMBOL_VAR_HARDEN_BELOW_NXDOMAIN = 128, /* VAR_HARDEN_BELOW_NXDOMAIN */ + YYSYMBOL_VAR_IGNORE_CD_FLAG = 129, /* VAR_IGNORE_CD_FLAG */ + YYSYMBOL_VAR_LOG_QUERIES = 130, /* VAR_LOG_QUERIES */ + YYSYMBOL_VAR_LOG_REPLIES = 131, /* VAR_LOG_REPLIES */ + YYSYMBOL_VAR_LOG_LOCAL_ACTIONS = 132, /* VAR_LOG_LOCAL_ACTIONS */ + YYSYMBOL_VAR_TCP_UPSTREAM = 133, /* VAR_TCP_UPSTREAM */ + YYSYMBOL_VAR_SSL_UPSTREAM = 134, /* VAR_SSL_UPSTREAM */ + YYSYMBOL_VAR_SSL_SERVICE_KEY = 135, /* VAR_SSL_SERVICE_KEY */ + YYSYMBOL_VAR_SSL_SERVICE_PEM = 136, /* VAR_SSL_SERVICE_PEM */ + YYSYMBOL_VAR_SSL_PORT = 137, /* VAR_SSL_PORT */ + YYSYMBOL_VAR_FORWARD_FIRST = 138, /* VAR_FORWARD_FIRST */ + YYSYMBOL_VAR_STUB_SSL_UPSTREAM = 139, /* VAR_STUB_SSL_UPSTREAM */ + YYSYMBOL_VAR_FORWARD_SSL_UPSTREAM = 140, /* VAR_FORWARD_SSL_UPSTREAM */ + YYSYMBOL_VAR_TLS_CERT_BUNDLE = 141, /* VAR_TLS_CERT_BUNDLE */ + YYSYMBOL_VAR_HTTPS_PORT = 142, /* VAR_HTTPS_PORT */ + YYSYMBOL_VAR_HTTP_ENDPOINT = 143, /* VAR_HTTP_ENDPOINT */ + YYSYMBOL_VAR_HTTP_MAX_STREAMS = 144, /* VAR_HTTP_MAX_STREAMS */ + YYSYMBOL_VAR_HTTP_QUERY_BUFFER_SIZE = 145, /* VAR_HTTP_QUERY_BUFFER_SIZE */ + YYSYMBOL_VAR_HTTP_RESPONSE_BUFFER_SIZE = 146, /* VAR_HTTP_RESPONSE_BUFFER_SIZE */ + YYSYMBOL_VAR_HTTP_NODELAY = 147, /* VAR_HTTP_NODELAY */ + YYSYMBOL_VAR_HTTP_NOTLS_DOWNSTREAM = 148, /* VAR_HTTP_NOTLS_DOWNSTREAM */ + YYSYMBOL_VAR_STUB_FIRST = 149, /* VAR_STUB_FIRST */ + YYSYMBOL_VAR_MINIMAL_RESPONSES = 150, /* VAR_MINIMAL_RESPONSES */ + YYSYMBOL_VAR_RRSET_ROUNDROBIN = 151, /* VAR_RRSET_ROUNDROBIN */ + YYSYMBOL_VAR_MAX_UDP_SIZE = 152, /* VAR_MAX_UDP_SIZE */ + YYSYMBOL_VAR_DELAY_CLOSE = 153, /* VAR_DELAY_CLOSE */ + YYSYMBOL_VAR_UDP_CONNECT = 154, /* VAR_UDP_CONNECT */ + YYSYMBOL_VAR_UNBLOCK_LAN_ZONES = 155, /* VAR_UNBLOCK_LAN_ZONES */ + YYSYMBOL_VAR_INSECURE_LAN_ZONES = 156, /* VAR_INSECURE_LAN_ZONES */ + YYSYMBOL_VAR_INFRA_CACHE_MIN_RTT = 157, /* VAR_INFRA_CACHE_MIN_RTT */ + YYSYMBOL_VAR_INFRA_KEEP_PROBING = 158, /* VAR_INFRA_KEEP_PROBING */ + YYSYMBOL_VAR_DNS64_PREFIX = 159, /* VAR_DNS64_PREFIX */ + YYSYMBOL_VAR_DNS64_SYNTHALL = 160, /* VAR_DNS64_SYNTHALL */ + YYSYMBOL_VAR_DNS64_IGNORE_AAAA = 161, /* VAR_DNS64_IGNORE_AAAA */ + YYSYMBOL_VAR_DNSTAP = 162, /* VAR_DNSTAP */ + YYSYMBOL_VAR_DNSTAP_ENABLE = 163, /* VAR_DNSTAP_ENABLE */ + YYSYMBOL_VAR_DNSTAP_SOCKET_PATH = 164, /* VAR_DNSTAP_SOCKET_PATH */ + YYSYMBOL_VAR_DNSTAP_IP = 165, /* VAR_DNSTAP_IP */ + YYSYMBOL_VAR_DNSTAP_TLS = 166, /* VAR_DNSTAP_TLS */ + YYSYMBOL_VAR_DNSTAP_TLS_SERVER_NAME = 167, /* VAR_DNSTAP_TLS_SERVER_NAME */ + YYSYMBOL_VAR_DNSTAP_TLS_CERT_BUNDLE = 168, /* VAR_DNSTAP_TLS_CERT_BUNDLE */ + YYSYMBOL_VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 169, /* VAR_DNSTAP_TLS_CLIENT_KEY_FILE */ + YYSYMBOL_VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 170, /* VAR_DNSTAP_TLS_CLIENT_CERT_FILE */ + YYSYMBOL_VAR_DNSTAP_SEND_IDENTITY = 171, /* VAR_DNSTAP_SEND_IDENTITY */ + YYSYMBOL_VAR_DNSTAP_SEND_VERSION = 172, /* VAR_DNSTAP_SEND_VERSION */ + YYSYMBOL_VAR_DNSTAP_BIDIRECTIONAL = 173, /* VAR_DNSTAP_BIDIRECTIONAL */ + YYSYMBOL_VAR_DNSTAP_IDENTITY = 174, /* VAR_DNSTAP_IDENTITY */ + YYSYMBOL_VAR_DNSTAP_VERSION = 175, /* VAR_DNSTAP_VERSION */ + YYSYMBOL_VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 176, /* VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES */ + YYSYMBOL_VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 177, /* VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES */ + YYSYMBOL_VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 178, /* VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES */ + YYSYMBOL_VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 179, /* VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES */ + YYSYMBOL_VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 180, /* VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES */ + YYSYMBOL_VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 181, /* VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES */ + YYSYMBOL_VAR_RESPONSE_IP_TAG = 182, /* VAR_RESPONSE_IP_TAG */ + YYSYMBOL_VAR_RESPONSE_IP = 183, /* VAR_RESPONSE_IP */ + YYSYMBOL_VAR_RESPONSE_IP_DATA = 184, /* VAR_RESPONSE_IP_DATA */ + YYSYMBOL_VAR_HARDEN_ALGO_DOWNGRADE = 185, /* VAR_HARDEN_ALGO_DOWNGRADE */ + YYSYMBOL_VAR_IP_TRANSPARENT = 186, /* VAR_IP_TRANSPARENT */ + YYSYMBOL_VAR_IP_DSCP = 187, /* VAR_IP_DSCP */ + YYSYMBOL_VAR_DISABLE_DNSSEC_LAME_CHECK = 188, /* VAR_DISABLE_DNSSEC_LAME_CHECK */ + YYSYMBOL_VAR_IP_RATELIMIT = 189, /* VAR_IP_RATELIMIT */ + YYSYMBOL_VAR_IP_RATELIMIT_SLABS = 190, /* VAR_IP_RATELIMIT_SLABS */ + YYSYMBOL_VAR_IP_RATELIMIT_SIZE = 191, /* VAR_IP_RATELIMIT_SIZE */ + YYSYMBOL_VAR_RATELIMIT = 192, /* VAR_RATELIMIT */ + YYSYMBOL_VAR_RATELIMIT_SLABS = 193, /* VAR_RATELIMIT_SLABS */ + YYSYMBOL_VAR_RATELIMIT_SIZE = 194, /* VAR_RATELIMIT_SIZE */ + YYSYMBOL_VAR_RATELIMIT_FOR_DOMAIN = 195, /* VAR_RATELIMIT_FOR_DOMAIN */ + YYSYMBOL_VAR_RATELIMIT_BELOW_DOMAIN = 196, /* VAR_RATELIMIT_BELOW_DOMAIN */ + YYSYMBOL_VAR_IP_RATELIMIT_FACTOR = 197, /* VAR_IP_RATELIMIT_FACTOR */ + YYSYMBOL_VAR_RATELIMIT_FACTOR = 198, /* VAR_RATELIMIT_FACTOR */ + YYSYMBOL_VAR_SEND_CLIENT_SUBNET = 199, /* VAR_SEND_CLIENT_SUBNET */ + YYSYMBOL_VAR_CLIENT_SUBNET_ZONE = 200, /* VAR_CLIENT_SUBNET_ZONE */ + YYSYMBOL_VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 201, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */ + YYSYMBOL_VAR_CLIENT_SUBNET_OPCODE = 202, /* VAR_CLIENT_SUBNET_OPCODE */ + YYSYMBOL_VAR_MAX_CLIENT_SUBNET_IPV4 = 203, /* VAR_MAX_CLIENT_SUBNET_IPV4 */ + YYSYMBOL_VAR_MAX_CLIENT_SUBNET_IPV6 = 204, /* VAR_MAX_CLIENT_SUBNET_IPV6 */ + YYSYMBOL_VAR_MIN_CLIENT_SUBNET_IPV4 = 205, /* VAR_MIN_CLIENT_SUBNET_IPV4 */ + YYSYMBOL_VAR_MIN_CLIENT_SUBNET_IPV6 = 206, /* VAR_MIN_CLIENT_SUBNET_IPV6 */ + YYSYMBOL_VAR_MAX_ECS_TREE_SIZE_IPV4 = 207, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */ + YYSYMBOL_VAR_MAX_ECS_TREE_SIZE_IPV6 = 208, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */ + YYSYMBOL_VAR_CAPS_WHITELIST = 209, /* VAR_CAPS_WHITELIST */ + YYSYMBOL_VAR_CACHE_MAX_NEGATIVE_TTL = 210, /* VAR_CACHE_MAX_NEGATIVE_TTL */ + YYSYMBOL_VAR_PERMIT_SMALL_HOLDDOWN = 211, /* VAR_PERMIT_SMALL_HOLDDOWN */ + YYSYMBOL_VAR_QNAME_MINIMISATION = 212, /* VAR_QNAME_MINIMISATION */ + YYSYMBOL_VAR_QNAME_MINIMISATION_STRICT = 213, /* VAR_QNAME_MINIMISATION_STRICT */ + YYSYMBOL_VAR_IP_FREEBIND = 214, /* VAR_IP_FREEBIND */ + YYSYMBOL_VAR_DEFINE_TAG = 215, /* VAR_DEFINE_TAG */ + YYSYMBOL_VAR_LOCAL_ZONE_TAG = 216, /* VAR_LOCAL_ZONE_TAG */ + YYSYMBOL_VAR_ACCESS_CONTROL_TAG = 217, /* VAR_ACCESS_CONTROL_TAG */ + YYSYMBOL_VAR_LOCAL_ZONE_OVERRIDE = 218, /* VAR_LOCAL_ZONE_OVERRIDE */ + YYSYMBOL_VAR_ACCESS_CONTROL_TAG_ACTION = 219, /* VAR_ACCESS_CONTROL_TAG_ACTION */ + YYSYMBOL_VAR_ACCESS_CONTROL_TAG_DATA = 220, /* VAR_ACCESS_CONTROL_TAG_DATA */ + YYSYMBOL_VAR_VIEW = 221, /* VAR_VIEW */ + YYSYMBOL_VAR_ACCESS_CONTROL_VIEW = 222, /* VAR_ACCESS_CONTROL_VIEW */ + YYSYMBOL_VAR_VIEW_FIRST = 223, /* VAR_VIEW_FIRST */ + YYSYMBOL_VAR_SERVE_EXPIRED = 224, /* VAR_SERVE_EXPIRED */ + YYSYMBOL_VAR_SERVE_EXPIRED_TTL = 225, /* VAR_SERVE_EXPIRED_TTL */ + YYSYMBOL_VAR_SERVE_EXPIRED_TTL_RESET = 226, /* VAR_SERVE_EXPIRED_TTL_RESET */ + YYSYMBOL_VAR_SERVE_EXPIRED_REPLY_TTL = 227, /* VAR_SERVE_EXPIRED_REPLY_TTL */ + YYSYMBOL_VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 228, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */ + YYSYMBOL_VAR_FAKE_DSA = 229, /* VAR_FAKE_DSA */ + YYSYMBOL_VAR_FAKE_SHA1 = 230, /* VAR_FAKE_SHA1 */ + YYSYMBOL_VAR_LOG_IDENTITY = 231, /* VAR_LOG_IDENTITY */ + YYSYMBOL_VAR_HIDE_TRUSTANCHOR = 232, /* VAR_HIDE_TRUSTANCHOR */ + YYSYMBOL_VAR_TRUST_ANCHOR_SIGNALING = 233, /* VAR_TRUST_ANCHOR_SIGNALING */ + YYSYMBOL_VAR_AGGRESSIVE_NSEC = 234, /* VAR_AGGRESSIVE_NSEC */ + YYSYMBOL_VAR_USE_SYSTEMD = 235, /* VAR_USE_SYSTEMD */ + YYSYMBOL_VAR_SHM_ENABLE = 236, /* VAR_SHM_ENABLE */ + YYSYMBOL_VAR_SHM_KEY = 237, /* VAR_SHM_KEY */ + YYSYMBOL_VAR_ROOT_KEY_SENTINEL = 238, /* VAR_ROOT_KEY_SENTINEL */ + YYSYMBOL_VAR_DNSCRYPT = 239, /* VAR_DNSCRYPT */ + YYSYMBOL_VAR_DNSCRYPT_ENABLE = 240, /* VAR_DNSCRYPT_ENABLE */ + YYSYMBOL_VAR_DNSCRYPT_PORT = 241, /* VAR_DNSCRYPT_PORT */ + YYSYMBOL_VAR_DNSCRYPT_PROVIDER = 242, /* VAR_DNSCRYPT_PROVIDER */ + YYSYMBOL_VAR_DNSCRYPT_SECRET_KEY = 243, /* VAR_DNSCRYPT_SECRET_KEY */ + YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT = 244, /* VAR_DNSCRYPT_PROVIDER_CERT */ + YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 245, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */ + YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 246, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */ + YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 247, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */ + YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SIZE = 248, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */ + YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SLABS = 249, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */ + YYSYMBOL_VAR_IPSECMOD_ENABLED = 250, /* VAR_IPSECMOD_ENABLED */ + YYSYMBOL_VAR_IPSECMOD_HOOK = 251, /* VAR_IPSECMOD_HOOK */ + YYSYMBOL_VAR_IPSECMOD_IGNORE_BOGUS = 252, /* VAR_IPSECMOD_IGNORE_BOGUS */ + YYSYMBOL_VAR_IPSECMOD_MAX_TTL = 253, /* VAR_IPSECMOD_MAX_TTL */ + YYSYMBOL_VAR_IPSECMOD_WHITELIST = 254, /* VAR_IPSECMOD_WHITELIST */ + YYSYMBOL_VAR_IPSECMOD_STRICT = 255, /* VAR_IPSECMOD_STRICT */ + YYSYMBOL_VAR_CACHEDB = 256, /* VAR_CACHEDB */ + YYSYMBOL_VAR_CACHEDB_BACKEND = 257, /* VAR_CACHEDB_BACKEND */ + YYSYMBOL_VAR_CACHEDB_SECRETSEED = 258, /* VAR_CACHEDB_SECRETSEED */ + YYSYMBOL_VAR_CACHEDB_REDISHOST = 259, /* VAR_CACHEDB_REDISHOST */ + YYSYMBOL_VAR_CACHEDB_REDISPORT = 260, /* VAR_CACHEDB_REDISPORT */ + YYSYMBOL_VAR_CACHEDB_REDISTIMEOUT = 261, /* VAR_CACHEDB_REDISTIMEOUT */ + YYSYMBOL_VAR_CACHEDB_REDISEXPIRERECORDS = 262, /* VAR_CACHEDB_REDISEXPIRERECORDS */ + YYSYMBOL_VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 263, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */ + YYSYMBOL_VAR_FOR_UPSTREAM = 264, /* VAR_FOR_UPSTREAM */ + YYSYMBOL_VAR_AUTH_ZONE = 265, /* VAR_AUTH_ZONE */ + YYSYMBOL_VAR_ZONEFILE = 266, /* VAR_ZONEFILE */ + YYSYMBOL_VAR_MASTER = 267, /* VAR_MASTER */ + YYSYMBOL_VAR_URL = 268, /* VAR_URL */ + YYSYMBOL_VAR_FOR_DOWNSTREAM = 269, /* VAR_FOR_DOWNSTREAM */ + YYSYMBOL_VAR_FALLBACK_ENABLED = 270, /* VAR_FALLBACK_ENABLED */ + YYSYMBOL_VAR_TLS_ADDITIONAL_PORT = 271, /* VAR_TLS_ADDITIONAL_PORT */ + YYSYMBOL_VAR_LOW_RTT = 272, /* VAR_LOW_RTT */ + YYSYMBOL_VAR_LOW_RTT_PERMIL = 273, /* VAR_LOW_RTT_PERMIL */ + YYSYMBOL_VAR_FAST_SERVER_PERMIL = 274, /* VAR_FAST_SERVER_PERMIL */ + YYSYMBOL_VAR_FAST_SERVER_NUM = 275, /* VAR_FAST_SERVER_NUM */ + YYSYMBOL_VAR_ALLOW_NOTIFY = 276, /* VAR_ALLOW_NOTIFY */ + YYSYMBOL_VAR_TLS_WIN_CERT = 277, /* VAR_TLS_WIN_CERT */ + YYSYMBOL_VAR_TCP_CONNECTION_LIMIT = 278, /* VAR_TCP_CONNECTION_LIMIT */ + YYSYMBOL_VAR_FORWARD_NO_CACHE = 279, /* VAR_FORWARD_NO_CACHE */ + YYSYMBOL_VAR_STUB_NO_CACHE = 280, /* VAR_STUB_NO_CACHE */ + YYSYMBOL_VAR_LOG_SERVFAIL = 281, /* VAR_LOG_SERVFAIL */ + YYSYMBOL_VAR_DENY_ANY = 282, /* VAR_DENY_ANY */ + YYSYMBOL_VAR_UNKNOWN_SERVER_TIME_LIMIT = 283, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */ + YYSYMBOL_VAR_LOG_TAG_QUERYREPLY = 284, /* VAR_LOG_TAG_QUERYREPLY */ + YYSYMBOL_VAR_STREAM_WAIT_SIZE = 285, /* VAR_STREAM_WAIT_SIZE */ + YYSYMBOL_VAR_TLS_CIPHERS = 286, /* VAR_TLS_CIPHERS */ + YYSYMBOL_VAR_TLS_CIPHERSUITES = 287, /* VAR_TLS_CIPHERSUITES */ + YYSYMBOL_VAR_TLS_USE_SNI = 288, /* VAR_TLS_USE_SNI */ + YYSYMBOL_VAR_IPSET = 289, /* VAR_IPSET */ + YYSYMBOL_VAR_IPSET_NAME_V4 = 290, /* VAR_IPSET_NAME_V4 */ + YYSYMBOL_VAR_IPSET_NAME_V6 = 291, /* VAR_IPSET_NAME_V6 */ + YYSYMBOL_VAR_TLS_SESSION_TICKET_KEYS = 292, /* VAR_TLS_SESSION_TICKET_KEYS */ + YYSYMBOL_VAR_RPZ = 293, /* VAR_RPZ */ + YYSYMBOL_VAR_TAGS = 294, /* VAR_TAGS */ + YYSYMBOL_VAR_RPZ_ACTION_OVERRIDE = 295, /* VAR_RPZ_ACTION_OVERRIDE */ + YYSYMBOL_VAR_RPZ_CNAME_OVERRIDE = 296, /* VAR_RPZ_CNAME_OVERRIDE */ + YYSYMBOL_VAR_RPZ_LOG = 297, /* VAR_RPZ_LOG */ + YYSYMBOL_VAR_RPZ_LOG_NAME = 298, /* VAR_RPZ_LOG_NAME */ + YYSYMBOL_VAR_DYNLIB = 299, /* VAR_DYNLIB */ + YYSYMBOL_VAR_DYNLIB_FILE = 300, /* VAR_DYNLIB_FILE */ + YYSYMBOL_VAR_EDNS_CLIENT_STRING = 301, /* VAR_EDNS_CLIENT_STRING */ + YYSYMBOL_VAR_EDNS_CLIENT_STRING_OPCODE = 302, /* VAR_EDNS_CLIENT_STRING_OPCODE */ + YYSYMBOL_VAR_NSID = 303, /* VAR_NSID */ + YYSYMBOL_YYACCEPT = 304, /* $accept */ + YYSYMBOL_toplevelvars = 305, /* toplevelvars */ + YYSYMBOL_toplevelvar = 306, /* toplevelvar */ + YYSYMBOL_force_toplevel = 307, /* force_toplevel */ + YYSYMBOL_serverstart = 308, /* serverstart */ + YYSYMBOL_contents_server = 309, /* contents_server */ + YYSYMBOL_content_server = 310, /* content_server */ + YYSYMBOL_stubstart = 311, /* stubstart */ + YYSYMBOL_contents_stub = 312, /* contents_stub */ + YYSYMBOL_content_stub = 313, /* content_stub */ + YYSYMBOL_forwardstart = 314, /* forwardstart */ + YYSYMBOL_contents_forward = 315, /* contents_forward */ + YYSYMBOL_content_forward = 316, /* content_forward */ + YYSYMBOL_viewstart = 317, /* viewstart */ + YYSYMBOL_contents_view = 318, /* contents_view */ + YYSYMBOL_content_view = 319, /* content_view */ + YYSYMBOL_authstart = 320, /* authstart */ + YYSYMBOL_contents_auth = 321, /* contents_auth */ + YYSYMBOL_content_auth = 322, /* content_auth */ + YYSYMBOL_rpz_tag = 323, /* rpz_tag */ + YYSYMBOL_rpz_action_override = 324, /* rpz_action_override */ + YYSYMBOL_rpz_cname_override = 325, /* rpz_cname_override */ + YYSYMBOL_rpz_log = 326, /* rpz_log */ + YYSYMBOL_rpz_log_name = 327, /* rpz_log_name */ + YYSYMBOL_rpzstart = 328, /* rpzstart */ + YYSYMBOL_contents_rpz = 329, /* contents_rpz */ + YYSYMBOL_content_rpz = 330, /* content_rpz */ + YYSYMBOL_server_num_threads = 331, /* server_num_threads */ + YYSYMBOL_server_verbosity = 332, /* server_verbosity */ + YYSYMBOL_server_statistics_interval = 333, /* server_statistics_interval */ + YYSYMBOL_server_statistics_cumulative = 334, /* server_statistics_cumulative */ + YYSYMBOL_server_extended_statistics = 335, /* server_extended_statistics */ + YYSYMBOL_server_shm_enable = 336, /* server_shm_enable */ + YYSYMBOL_server_shm_key = 337, /* server_shm_key */ + YYSYMBOL_server_port = 338, /* server_port */ + YYSYMBOL_server_send_client_subnet = 339, /* server_send_client_subnet */ + YYSYMBOL_server_client_subnet_zone = 340, /* server_client_subnet_zone */ + YYSYMBOL_server_client_subnet_always_forward = 341, /* server_client_subnet_always_forward */ + YYSYMBOL_server_client_subnet_opcode = 342, /* server_client_subnet_opcode */ + YYSYMBOL_server_max_client_subnet_ipv4 = 343, /* server_max_client_subnet_ipv4 */ + YYSYMBOL_server_max_client_subnet_ipv6 = 344, /* server_max_client_subnet_ipv6 */ + YYSYMBOL_server_min_client_subnet_ipv4 = 345, /* server_min_client_subnet_ipv4 */ + YYSYMBOL_server_min_client_subnet_ipv6 = 346, /* server_min_client_subnet_ipv6 */ + YYSYMBOL_server_max_ecs_tree_size_ipv4 = 347, /* server_max_ecs_tree_size_ipv4 */ + YYSYMBOL_server_max_ecs_tree_size_ipv6 = 348, /* server_max_ecs_tree_size_ipv6 */ + YYSYMBOL_server_interface = 349, /* server_interface */ + YYSYMBOL_server_outgoing_interface = 350, /* server_outgoing_interface */ + YYSYMBOL_server_outgoing_range = 351, /* server_outgoing_range */ + YYSYMBOL_server_outgoing_port_permit = 352, /* server_outgoing_port_permit */ + YYSYMBOL_server_outgoing_port_avoid = 353, /* server_outgoing_port_avoid */ + YYSYMBOL_server_outgoing_num_tcp = 354, /* server_outgoing_num_tcp */ + YYSYMBOL_server_incoming_num_tcp = 355, /* server_incoming_num_tcp */ + YYSYMBOL_server_interface_automatic = 356, /* server_interface_automatic */ + YYSYMBOL_server_do_ip4 = 357, /* server_do_ip4 */ + YYSYMBOL_server_do_ip6 = 358, /* server_do_ip6 */ + YYSYMBOL_server_do_udp = 359, /* server_do_udp */ + YYSYMBOL_server_do_tcp = 360, /* server_do_tcp */ + YYSYMBOL_server_prefer_ip4 = 361, /* server_prefer_ip4 */ + YYSYMBOL_server_prefer_ip6 = 362, /* server_prefer_ip6 */ + YYSYMBOL_server_tcp_mss = 363, /* server_tcp_mss */ + YYSYMBOL_server_outgoing_tcp_mss = 364, /* server_outgoing_tcp_mss */ + YYSYMBOL_server_tcp_idle_timeout = 365, /* server_tcp_idle_timeout */ + YYSYMBOL_server_tcp_keepalive = 366, /* server_tcp_keepalive */ + YYSYMBOL_server_tcp_keepalive_timeout = 367, /* server_tcp_keepalive_timeout */ + YYSYMBOL_server_tcp_upstream = 368, /* server_tcp_upstream */ + YYSYMBOL_server_udp_upstream_without_downstream = 369, /* server_udp_upstream_without_downstream */ + YYSYMBOL_server_ssl_upstream = 370, /* server_ssl_upstream */ + YYSYMBOL_server_ssl_service_key = 371, /* server_ssl_service_key */ + YYSYMBOL_server_ssl_service_pem = 372, /* server_ssl_service_pem */ + YYSYMBOL_server_ssl_port = 373, /* server_ssl_port */ + YYSYMBOL_server_tls_cert_bundle = 374, /* server_tls_cert_bundle */ + YYSYMBOL_server_tls_win_cert = 375, /* server_tls_win_cert */ + YYSYMBOL_server_tls_additional_port = 376, /* server_tls_additional_port */ + YYSYMBOL_server_tls_ciphers = 377, /* server_tls_ciphers */ + YYSYMBOL_server_tls_ciphersuites = 378, /* server_tls_ciphersuites */ + YYSYMBOL_server_tls_session_ticket_keys = 379, /* server_tls_session_ticket_keys */ + YYSYMBOL_server_tls_use_sni = 380, /* server_tls_use_sni */ + YYSYMBOL_server_https_port = 381, /* server_https_port */ + YYSYMBOL_server_http_endpoint = 382, /* server_http_endpoint */ + YYSYMBOL_server_http_max_streams = 383, /* server_http_max_streams */ + YYSYMBOL_server_http_query_buffer_size = 384, /* server_http_query_buffer_size */ + YYSYMBOL_server_http_response_buffer_size = 385, /* server_http_response_buffer_size */ + YYSYMBOL_server_http_nodelay = 386, /* server_http_nodelay */ + YYSYMBOL_server_http_notls_downstream = 387, /* server_http_notls_downstream */ + YYSYMBOL_server_use_systemd = 388, /* server_use_systemd */ + YYSYMBOL_server_do_daemonize = 389, /* server_do_daemonize */ + YYSYMBOL_server_use_syslog = 390, /* server_use_syslog */ + YYSYMBOL_server_log_time_ascii = 391, /* server_log_time_ascii */ + YYSYMBOL_server_log_queries = 392, /* server_log_queries */ + YYSYMBOL_server_log_replies = 393, /* server_log_replies */ + YYSYMBOL_server_log_tag_queryreply = 394, /* server_log_tag_queryreply */ + YYSYMBOL_server_log_servfail = 395, /* server_log_servfail */ + YYSYMBOL_server_log_local_actions = 396, /* server_log_local_actions */ + YYSYMBOL_server_chroot = 397, /* server_chroot */ + YYSYMBOL_server_username = 398, /* server_username */ + YYSYMBOL_server_directory = 399, /* server_directory */ + YYSYMBOL_server_logfile = 400, /* server_logfile */ + YYSYMBOL_server_pidfile = 401, /* server_pidfile */ + YYSYMBOL_server_root_hints = 402, /* server_root_hints */ + YYSYMBOL_server_dlv_anchor_file = 403, /* server_dlv_anchor_file */ + YYSYMBOL_server_dlv_anchor = 404, /* server_dlv_anchor */ + YYSYMBOL_server_auto_trust_anchor_file = 405, /* server_auto_trust_anchor_file */ + YYSYMBOL_server_trust_anchor_file = 406, /* server_trust_anchor_file */ + YYSYMBOL_server_trusted_keys_file = 407, /* server_trusted_keys_file */ + YYSYMBOL_server_trust_anchor = 408, /* server_trust_anchor */ + YYSYMBOL_server_trust_anchor_signaling = 409, /* server_trust_anchor_signaling */ + YYSYMBOL_server_root_key_sentinel = 410, /* server_root_key_sentinel */ + YYSYMBOL_server_domain_insecure = 411, /* server_domain_insecure */ + YYSYMBOL_server_hide_identity = 412, /* server_hide_identity */ + YYSYMBOL_server_hide_version = 413, /* server_hide_version */ + YYSYMBOL_server_hide_trustanchor = 414, /* server_hide_trustanchor */ + YYSYMBOL_server_identity = 415, /* server_identity */ + YYSYMBOL_server_version = 416, /* server_version */ + YYSYMBOL_server_nsid = 417, /* server_nsid */ + YYSYMBOL_server_so_rcvbuf = 418, /* server_so_rcvbuf */ + YYSYMBOL_server_so_sndbuf = 419, /* server_so_sndbuf */ + YYSYMBOL_server_so_reuseport = 420, /* server_so_reuseport */ + YYSYMBOL_server_ip_transparent = 421, /* server_ip_transparent */ + YYSYMBOL_server_ip_freebind = 422, /* server_ip_freebind */ + YYSYMBOL_server_ip_dscp = 423, /* server_ip_dscp */ + YYSYMBOL_server_stream_wait_size = 424, /* server_stream_wait_size */ + YYSYMBOL_server_edns_buffer_size = 425, /* server_edns_buffer_size */ + YYSYMBOL_server_msg_buffer_size = 426, /* server_msg_buffer_size */ + YYSYMBOL_server_msg_cache_size = 427, /* server_msg_cache_size */ + YYSYMBOL_server_msg_cache_slabs = 428, /* server_msg_cache_slabs */ + YYSYMBOL_server_num_queries_per_thread = 429, /* server_num_queries_per_thread */ + YYSYMBOL_server_jostle_timeout = 430, /* server_jostle_timeout */ + YYSYMBOL_server_delay_close = 431, /* server_delay_close */ + YYSYMBOL_server_udp_connect = 432, /* server_udp_connect */ + YYSYMBOL_server_unblock_lan_zones = 433, /* server_unblock_lan_zones */ + YYSYMBOL_server_insecure_lan_zones = 434, /* server_insecure_lan_zones */ + YYSYMBOL_server_rrset_cache_size = 435, /* server_rrset_cache_size */ + YYSYMBOL_server_rrset_cache_slabs = 436, /* server_rrset_cache_slabs */ + YYSYMBOL_server_infra_host_ttl = 437, /* server_infra_host_ttl */ + YYSYMBOL_server_infra_lame_ttl = 438, /* server_infra_lame_ttl */ + YYSYMBOL_server_infra_cache_numhosts = 439, /* server_infra_cache_numhosts */ + YYSYMBOL_server_infra_cache_lame_size = 440, /* server_infra_cache_lame_size */ + YYSYMBOL_server_infra_cache_slabs = 441, /* server_infra_cache_slabs */ + YYSYMBOL_server_infra_cache_min_rtt = 442, /* server_infra_cache_min_rtt */ + YYSYMBOL_server_infra_keep_probing = 443, /* server_infra_keep_probing */ + YYSYMBOL_server_target_fetch_policy = 444, /* server_target_fetch_policy */ + YYSYMBOL_server_harden_short_bufsize = 445, /* server_harden_short_bufsize */ + YYSYMBOL_server_harden_large_queries = 446, /* server_harden_large_queries */ + YYSYMBOL_server_harden_glue = 447, /* server_harden_glue */ + YYSYMBOL_server_harden_dnssec_stripped = 448, /* server_harden_dnssec_stripped */ + YYSYMBOL_server_harden_below_nxdomain = 449, /* server_harden_below_nxdomain */ + YYSYMBOL_server_harden_referral_path = 450, /* server_harden_referral_path */ + YYSYMBOL_server_harden_algo_downgrade = 451, /* server_harden_algo_downgrade */ + YYSYMBOL_server_use_caps_for_id = 452, /* server_use_caps_for_id */ + YYSYMBOL_server_caps_whitelist = 453, /* server_caps_whitelist */ + YYSYMBOL_server_private_address = 454, /* server_private_address */ + YYSYMBOL_server_private_domain = 455, /* server_private_domain */ + YYSYMBOL_server_prefetch = 456, /* server_prefetch */ + YYSYMBOL_server_prefetch_key = 457, /* server_prefetch_key */ + YYSYMBOL_server_deny_any = 458, /* server_deny_any */ + YYSYMBOL_server_unwanted_reply_threshold = 459, /* server_unwanted_reply_threshold */ + YYSYMBOL_server_do_not_query_address = 460, /* server_do_not_query_address */ + YYSYMBOL_server_do_not_query_localhost = 461, /* server_do_not_query_localhost */ + YYSYMBOL_server_access_control = 462, /* server_access_control */ + YYSYMBOL_server_module_conf = 463, /* server_module_conf */ + YYSYMBOL_server_val_override_date = 464, /* server_val_override_date */ + YYSYMBOL_server_val_sig_skew_min = 465, /* server_val_sig_skew_min */ + YYSYMBOL_server_val_sig_skew_max = 466, /* server_val_sig_skew_max */ + YYSYMBOL_server_cache_max_ttl = 467, /* server_cache_max_ttl */ + YYSYMBOL_server_cache_max_negative_ttl = 468, /* server_cache_max_negative_ttl */ + YYSYMBOL_server_cache_min_ttl = 469, /* server_cache_min_ttl */ + YYSYMBOL_server_bogus_ttl = 470, /* server_bogus_ttl */ + YYSYMBOL_server_val_clean_additional = 471, /* server_val_clean_additional */ + YYSYMBOL_server_val_permissive_mode = 472, /* server_val_permissive_mode */ + YYSYMBOL_server_aggressive_nsec = 473, /* server_aggressive_nsec */ + YYSYMBOL_server_ignore_cd_flag = 474, /* server_ignore_cd_flag */ + YYSYMBOL_server_serve_expired = 475, /* server_serve_expired */ + YYSYMBOL_server_serve_expired_ttl = 476, /* server_serve_expired_ttl */ + YYSYMBOL_server_serve_expired_ttl_reset = 477, /* server_serve_expired_ttl_reset */ + YYSYMBOL_server_serve_expired_reply_ttl = 478, /* server_serve_expired_reply_ttl */ + YYSYMBOL_server_serve_expired_client_timeout = 479, /* server_serve_expired_client_timeout */ + YYSYMBOL_server_fake_dsa = 480, /* server_fake_dsa */ + YYSYMBOL_server_fake_sha1 = 481, /* server_fake_sha1 */ + YYSYMBOL_server_val_log_level = 482, /* server_val_log_level */ + YYSYMBOL_server_val_nsec3_keysize_iterations = 483, /* server_val_nsec3_keysize_iterations */ + YYSYMBOL_server_add_holddown = 484, /* server_add_holddown */ + YYSYMBOL_server_del_holddown = 485, /* server_del_holddown */ + YYSYMBOL_server_keep_missing = 486, /* server_keep_missing */ + YYSYMBOL_server_permit_small_holddown = 487, /* server_permit_small_holddown */ + YYSYMBOL_server_key_cache_size = 488, /* server_key_cache_size */ + YYSYMBOL_server_key_cache_slabs = 489, /* server_key_cache_slabs */ + YYSYMBOL_server_neg_cache_size = 490, /* server_neg_cache_size */ + YYSYMBOL_server_local_zone = 491, /* server_local_zone */ + YYSYMBOL_server_local_data = 492, /* server_local_data */ + YYSYMBOL_server_local_data_ptr = 493, /* server_local_data_ptr */ + YYSYMBOL_server_minimal_responses = 494, /* server_minimal_responses */ + YYSYMBOL_server_rrset_roundrobin = 495, /* server_rrset_roundrobin */ + YYSYMBOL_server_unknown_server_time_limit = 496, /* server_unknown_server_time_limit */ + YYSYMBOL_server_max_udp_size = 497, /* server_max_udp_size */ + YYSYMBOL_server_dns64_prefix = 498, /* server_dns64_prefix */ + YYSYMBOL_server_dns64_synthall = 499, /* server_dns64_synthall */ + YYSYMBOL_server_dns64_ignore_aaaa = 500, /* server_dns64_ignore_aaaa */ + YYSYMBOL_server_define_tag = 501, /* server_define_tag */ + YYSYMBOL_server_local_zone_tag = 502, /* server_local_zone_tag */ + YYSYMBOL_server_access_control_tag = 503, /* server_access_control_tag */ + YYSYMBOL_server_access_control_tag_action = 504, /* server_access_control_tag_action */ + YYSYMBOL_server_access_control_tag_data = 505, /* server_access_control_tag_data */ + YYSYMBOL_server_local_zone_override = 506, /* server_local_zone_override */ + YYSYMBOL_server_access_control_view = 507, /* server_access_control_view */ + YYSYMBOL_server_response_ip_tag = 508, /* server_response_ip_tag */ + YYSYMBOL_server_ip_ratelimit = 509, /* server_ip_ratelimit */ + YYSYMBOL_server_ratelimit = 510, /* server_ratelimit */ + YYSYMBOL_server_ip_ratelimit_size = 511, /* server_ip_ratelimit_size */ + YYSYMBOL_server_ratelimit_size = 512, /* server_ratelimit_size */ + YYSYMBOL_server_ip_ratelimit_slabs = 513, /* server_ip_ratelimit_slabs */ + YYSYMBOL_server_ratelimit_slabs = 514, /* server_ratelimit_slabs */ + YYSYMBOL_server_ratelimit_for_domain = 515, /* server_ratelimit_for_domain */ + YYSYMBOL_server_ratelimit_below_domain = 516, /* server_ratelimit_below_domain */ + YYSYMBOL_server_ip_ratelimit_factor = 517, /* server_ip_ratelimit_factor */ + YYSYMBOL_server_ratelimit_factor = 518, /* server_ratelimit_factor */ + YYSYMBOL_server_low_rtt = 519, /* server_low_rtt */ + YYSYMBOL_server_fast_server_num = 520, /* server_fast_server_num */ + YYSYMBOL_server_fast_server_permil = 521, /* server_fast_server_permil */ + YYSYMBOL_server_qname_minimisation = 522, /* server_qname_minimisation */ + YYSYMBOL_server_qname_minimisation_strict = 523, /* server_qname_minimisation_strict */ + YYSYMBOL_server_ipsecmod_enabled = 524, /* server_ipsecmod_enabled */ + YYSYMBOL_server_ipsecmod_ignore_bogus = 525, /* server_ipsecmod_ignore_bogus */ + YYSYMBOL_server_ipsecmod_hook = 526, /* server_ipsecmod_hook */ + YYSYMBOL_server_ipsecmod_max_ttl = 527, /* server_ipsecmod_max_ttl */ + YYSYMBOL_server_ipsecmod_whitelist = 528, /* server_ipsecmod_whitelist */ + YYSYMBOL_server_ipsecmod_strict = 529, /* server_ipsecmod_strict */ + YYSYMBOL_server_edns_client_string = 530, /* server_edns_client_string */ + YYSYMBOL_server_edns_client_string_opcode = 531, /* server_edns_client_string_opcode */ + YYSYMBOL_stub_name = 532, /* stub_name */ + YYSYMBOL_stub_host = 533, /* stub_host */ + YYSYMBOL_stub_addr = 534, /* stub_addr */ + YYSYMBOL_stub_first = 535, /* stub_first */ + YYSYMBOL_stub_no_cache = 536, /* stub_no_cache */ + YYSYMBOL_stub_ssl_upstream = 537, /* stub_ssl_upstream */ + YYSYMBOL_stub_prime = 538, /* stub_prime */ + YYSYMBOL_forward_name = 539, /* forward_name */ + YYSYMBOL_forward_host = 540, /* forward_host */ + YYSYMBOL_forward_addr = 541, /* forward_addr */ + YYSYMBOL_forward_first = 542, /* forward_first */ + YYSYMBOL_forward_no_cache = 543, /* forward_no_cache */ + YYSYMBOL_forward_ssl_upstream = 544, /* forward_ssl_upstream */ + YYSYMBOL_auth_name = 545, /* auth_name */ + YYSYMBOL_auth_zonefile = 546, /* auth_zonefile */ + YYSYMBOL_auth_master = 547, /* auth_master */ + YYSYMBOL_auth_url = 548, /* auth_url */ + YYSYMBOL_auth_allow_notify = 549, /* auth_allow_notify */ + YYSYMBOL_auth_for_downstream = 550, /* auth_for_downstream */ + YYSYMBOL_auth_for_upstream = 551, /* auth_for_upstream */ + YYSYMBOL_auth_fallback_enabled = 552, /* auth_fallback_enabled */ + YYSYMBOL_view_name = 553, /* view_name */ + YYSYMBOL_view_local_zone = 554, /* view_local_zone */ + YYSYMBOL_view_response_ip = 555, /* view_response_ip */ + YYSYMBOL_view_response_ip_data = 556, /* view_response_ip_data */ + YYSYMBOL_view_local_data = 557, /* view_local_data */ + YYSYMBOL_view_local_data_ptr = 558, /* view_local_data_ptr */ + YYSYMBOL_view_first = 559, /* view_first */ + YYSYMBOL_rcstart = 560, /* rcstart */ + YYSYMBOL_contents_rc = 561, /* contents_rc */ + YYSYMBOL_content_rc = 562, /* content_rc */ + YYSYMBOL_rc_control_enable = 563, /* rc_control_enable */ + YYSYMBOL_rc_control_port = 564, /* rc_control_port */ + YYSYMBOL_rc_control_interface = 565, /* rc_control_interface */ + YYSYMBOL_rc_control_use_cert = 566, /* rc_control_use_cert */ + YYSYMBOL_rc_server_key_file = 567, /* rc_server_key_file */ + YYSYMBOL_rc_server_cert_file = 568, /* rc_server_cert_file */ + YYSYMBOL_rc_control_key_file = 569, /* rc_control_key_file */ + YYSYMBOL_rc_control_cert_file = 570, /* rc_control_cert_file */ + YYSYMBOL_dtstart = 571, /* dtstart */ + YYSYMBOL_contents_dt = 572, /* contents_dt */ + YYSYMBOL_content_dt = 573, /* content_dt */ + YYSYMBOL_dt_dnstap_enable = 574, /* dt_dnstap_enable */ + YYSYMBOL_dt_dnstap_bidirectional = 575, /* dt_dnstap_bidirectional */ + YYSYMBOL_dt_dnstap_socket_path = 576, /* dt_dnstap_socket_path */ + YYSYMBOL_dt_dnstap_ip = 577, /* dt_dnstap_ip */ + YYSYMBOL_dt_dnstap_tls = 578, /* dt_dnstap_tls */ + YYSYMBOL_dt_dnstap_tls_server_name = 579, /* dt_dnstap_tls_server_name */ + YYSYMBOL_dt_dnstap_tls_cert_bundle = 580, /* dt_dnstap_tls_cert_bundle */ + YYSYMBOL_dt_dnstap_tls_client_key_file = 581, /* dt_dnstap_tls_client_key_file */ + YYSYMBOL_dt_dnstap_tls_client_cert_file = 582, /* dt_dnstap_tls_client_cert_file */ + YYSYMBOL_dt_dnstap_send_identity = 583, /* dt_dnstap_send_identity */ + YYSYMBOL_dt_dnstap_send_version = 584, /* dt_dnstap_send_version */ + YYSYMBOL_dt_dnstap_identity = 585, /* dt_dnstap_identity */ + YYSYMBOL_dt_dnstap_version = 586, /* dt_dnstap_version */ + YYSYMBOL_dt_dnstap_log_resolver_query_messages = 587, /* dt_dnstap_log_resolver_query_messages */ + YYSYMBOL_dt_dnstap_log_resolver_response_messages = 588, /* dt_dnstap_log_resolver_response_messages */ + YYSYMBOL_dt_dnstap_log_client_query_messages = 589, /* dt_dnstap_log_client_query_messages */ + YYSYMBOL_dt_dnstap_log_client_response_messages = 590, /* dt_dnstap_log_client_response_messages */ + YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 591, /* dt_dnstap_log_forwarder_query_messages */ + YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 592, /* dt_dnstap_log_forwarder_response_messages */ + YYSYMBOL_pythonstart = 593, /* pythonstart */ + YYSYMBOL_contents_py = 594, /* contents_py */ + YYSYMBOL_content_py = 595, /* content_py */ + YYSYMBOL_py_script = 596, /* py_script */ + YYSYMBOL_dynlibstart = 597, /* dynlibstart */ + YYSYMBOL_contents_dl = 598, /* contents_dl */ + YYSYMBOL_content_dl = 599, /* content_dl */ + YYSYMBOL_dl_file = 600, /* dl_file */ + YYSYMBOL_server_disable_dnssec_lame_check = 601, /* server_disable_dnssec_lame_check */ + YYSYMBOL_server_log_identity = 602, /* server_log_identity */ + YYSYMBOL_server_response_ip = 603, /* server_response_ip */ + YYSYMBOL_server_response_ip_data = 604, /* server_response_ip_data */ + YYSYMBOL_dnscstart = 605, /* dnscstart */ + YYSYMBOL_contents_dnsc = 606, /* contents_dnsc */ + YYSYMBOL_content_dnsc = 607, /* content_dnsc */ + YYSYMBOL_dnsc_dnscrypt_enable = 608, /* dnsc_dnscrypt_enable */ + YYSYMBOL_dnsc_dnscrypt_port = 609, /* dnsc_dnscrypt_port */ + YYSYMBOL_dnsc_dnscrypt_provider = 610, /* dnsc_dnscrypt_provider */ + YYSYMBOL_dnsc_dnscrypt_provider_cert = 611, /* dnsc_dnscrypt_provider_cert */ + YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 612, /* dnsc_dnscrypt_provider_cert_rotated */ + YYSYMBOL_dnsc_dnscrypt_secret_key = 613, /* dnsc_dnscrypt_secret_key */ + YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 614, /* dnsc_dnscrypt_shared_secret_cache_size */ + YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 615, /* dnsc_dnscrypt_shared_secret_cache_slabs */ + YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 616, /* dnsc_dnscrypt_nonce_cache_size */ + YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 617, /* dnsc_dnscrypt_nonce_cache_slabs */ + YYSYMBOL_cachedbstart = 618, /* cachedbstart */ + YYSYMBOL_contents_cachedb = 619, /* contents_cachedb */ + YYSYMBOL_content_cachedb = 620, /* content_cachedb */ + YYSYMBOL_cachedb_backend_name = 621, /* cachedb_backend_name */ + YYSYMBOL_cachedb_secret_seed = 622, /* cachedb_secret_seed */ + YYSYMBOL_redis_server_host = 623, /* redis_server_host */ + YYSYMBOL_redis_server_port = 624, /* redis_server_port */ + YYSYMBOL_redis_timeout = 625, /* redis_timeout */ + YYSYMBOL_redis_expire_records = 626, /* redis_expire_records */ + YYSYMBOL_server_tcp_connection_limit = 627, /* server_tcp_connection_limit */ + YYSYMBOL_ipsetstart = 628, /* ipsetstart */ + YYSYMBOL_contents_ipset = 629, /* contents_ipset */ + YYSYMBOL_content_ipset = 630, /* content_ipset */ + YYSYMBOL_ipset_name_v4 = 631, /* ipset_name_v4 */ + YYSYMBOL_ipset_name_v6 = 632 /* ipset_name_v6 */ }; -typedef union YYSTYPE YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 -# define YYSTYPE_IS_DECLARED 1 -#endif +typedef enum yysymbol_kind_t yysymbol_kind_t; -extern YYSTYPE yylval; - -int yyparse (void); - -#endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED */ - #ifdef short # undef short #endif -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 yytype_uint8; -#else -typedef unsigned char yytype_uint8; +/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure + and (if available) are included + so that the code can choose integer types of a good width. */ + +#ifndef __PTRDIFF_MAX__ +# include /* INFRINGES ON USER NAME SPACE */ +# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_STDINT_H +# endif #endif -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 yytype_int8; +/* Narrow types that promote to a signed type and that can represent a + signed or unsigned integer of at least N bits. In tables they can + save space and decrease cache pressure. Promoting to a signed type + helps avoid bugs in integer arithmetic. */ + +#ifdef __INT_LEAST8_MAX__ +typedef __INT_LEAST8_TYPE__ yytype_int8; +#elif defined YY_STDINT_H +typedef int_least8_t yytype_int8; #else typedef signed char yytype_int8; #endif -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; -#else -typedef unsigned short yytype_uint16; -#endif - -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 yytype_int16; +#ifdef __INT_LEAST16_MAX__ +typedef __INT_LEAST16_TYPE__ yytype_int16; +#elif defined YY_STDINT_H +typedef int_least16_t yytype_int16; #else typedef short yytype_int16; #endif +#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST8_TYPE__ yytype_uint8; +#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST8_MAX <= INT_MAX) +typedef uint_least8_t yytype_uint8; +#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX +typedef unsigned char yytype_uint8; +#else +typedef short yytype_uint8; +#endif + +#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST16_TYPE__ yytype_uint16; +#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST16_MAX <= INT_MAX) +typedef uint_least16_t yytype_uint16; +#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX +typedef unsigned short yytype_uint16; +#else +typedef int yytype_uint16; +#endif + +#ifndef YYPTRDIFF_T +# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ +# define YYPTRDIFF_T __PTRDIFF_TYPE__ +# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ +# elif defined PTRDIFF_MAX +# ifndef ptrdiff_t +# include /* INFRINGES ON USER NAME SPACE */ +# endif +# define YYPTRDIFF_T ptrdiff_t +# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX +# else +# define YYPTRDIFF_T long +# define YYPTRDIFF_MAXIMUM LONG_MAX +# endif +#endif + #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t -# elif ! defined YYSIZE_T +# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else @@ -804,7 +851,20 @@ typedef short yytype_int16; # endif #endif -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) +#define YYSIZE_MAXIMUM \ + YY_CAST (YYPTRDIFF_T, \ + (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ + ? YYPTRDIFF_MAXIMUM \ + : YY_CAST (YYSIZE_T, -1))) + +#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) + + +/* Stored state numbers (used for stacks). */ +typedef yytype_int16 yy_state_t; + +/* State numbers in computations. */ +typedef int yy_state_fast_t; #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS @@ -818,22 +878,21 @@ typedef short yytype_int16; # endif #endif -#ifndef YY_ATTRIBUTE -# if (defined __GNUC__ \ - && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ - || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C -# define YY_ATTRIBUTE(Spec) __attribute__(Spec) + +#ifndef YY_ATTRIBUTE_PURE +# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else -# define YY_ATTRIBUTE(Spec) /* empty */ +# define YY_ATTRIBUTE_PURE # endif #endif -#ifndef YY_ATTRIBUTE_PURE -# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) -#endif - #ifndef YY_ATTRIBUTE_UNUSED -# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) +# else +# define YY_ATTRIBUTE_UNUSED +# endif #endif /* Suppress unused-variable warnings by "using" E. */ @@ -845,11 +904,11 @@ typedef short yytype_int16; #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value @@ -862,10 +921,22 @@ typedef short yytype_int16; # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif +#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ +# define YY_IGNORE_USELESS_CAST_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") +# define YY_IGNORE_USELESS_CAST_END \ + _Pragma ("GCC diagnostic pop") +#endif +#ifndef YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_END +#endif + #define YY_ASSERT(E) ((void) (0 && (E))) -#if ! defined yyoverflow || YYERROR_VERBOSE +#if !defined yyoverflow /* The parser invokes alloca or malloc; define the necessary symbols. */ @@ -930,8 +1001,7 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif -#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ - +#endif /* !defined yyoverflow */ #if (! defined yyoverflow \ && (! defined __cplusplus \ @@ -940,17 +1010,17 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss_alloc; + yy_state_t yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) +# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ - ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 @@ -963,11 +1033,11 @@ union yyalloc # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ - YYSIZE_T yynewbytes; \ + YYPTRDIFF_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ + yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / YYSIZEOF (*yyptr); \ } \ while (0) @@ -979,12 +1049,12 @@ union yyalloc # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) + __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ - YYSIZE_T yyi; \ + YYPTRDIFF_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ @@ -996,28 +1066,31 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 641 +#define YYLAST 642 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 303 +#define YYNTOKENS 304 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 328 +#define YYNNTS 329 /* YYNRULES -- Number of rules. */ -#define YYNRULES 632 +#define YYNRULES 634 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 939 +#define YYNSTATES 942 + +/* YYMAXUTOK -- Last valid token kind. */ +#define YYMAXUTOK 558 -#define YYUNDEFTOK 2 -#define YYMAXUTOK 557 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ -#define YYTRANSLATE(YYX) \ - ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) +#define YYTRANSLATE(YYX) \ + (0 <= (YYX) && (YYX) <= YYMAXUTOK \ + ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \ + : YYSYMBOL_YYUNDEF) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM as returned by yylex. */ -static const yytype_uint16 yytranslate[] = +static const yytype_int16 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -1074,12 +1147,12 @@ static const yytype_uint16 yytranslate[] = 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302 + 295, 296, 297, 298, 299, 300, 301, 302, 303 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_uint16 yyrline[] = +static const yytype_int16 yyrline[] = { 0, 185, 185, 185, 186, 186, 187, 187, 188, 188, 188, 189, 189, 190, 190, 191, 191, 192, 194, 200, @@ -1103,61 +1176,68 @@ static const yytype_uint16 yyrline[] = 280, 280, 281, 281, 281, 282, 282, 282, 283, 283, 284, 285, 285, 286, 286, 287, 287, 288, 288, 289, 289, 289, 290, 290, 290, 291, 291, 291, 292, 292, - 293, 293, 294, 294, 295, 295, 296, 298, 310, 311, - 312, 312, 312, 312, 312, 313, 313, 315, 327, 328, - 329, 329, 329, 329, 330, 330, 332, 346, 347, 348, - 348, 348, 348, 349, 349, 349, 351, 368, 369, 370, - 370, 370, 370, 371, 371, 371, 372, 375, 394, 411, - 419, 429, 437, 454, 455, 456, 456, 456, 456, 456, - 457, 457, 457, 458, 458, 460, 469, 478, 489, 498, - 507, 516, 527, 536, 548, 562, 577, 588, 605, 622, - 639, 656, 671, 686, 699, 714, 723, 732, 741, 750, - 759, 768, 777, 786, 795, 804, 813, 822, 831, 840, - 853, 862, 875, 884, 893, 902, 909, 916, 925, 932, - 941, 949, 956, 963, 971, 980, 988, 1004, 1012, 1020, - 1028, 1036, 1044, 1053, 1062, 1076, 1085, 1094, 1103, 1112, - 1121, 1130, 1137, 1144, 1170, 1178, 1185, 1192, 1199, 1206, - 1214, 1222, 1230, 1237, 1248, 1259, 1266, 1275, 1284, 1293, - 1300, 1307, 1315, 1323, 1333, 1343, 1353, 1367, 1375, 1388, - 1399, 1407, 1420, 1429, 1438, 1447, 1456, 1466, 1476, 1484, - 1497, 1506, 1514, 1523, 1531, 1544, 1553, 1563, 1570, 1580, - 1590, 1600, 1610, 1620, 1630, 1640, 1650, 1657, 1664, 1671, - 1680, 1689, 1698, 1707, 1714, 1724, 1744, 1751, 1769, 1782, - 1795, 1804, 1813, 1822, 1831, 1841, 1851, 1862, 1871, 1880, - 1889, 1898, 1907, 1916, 1929, 1942, 1951, 1958, 1967, 1976, - 1985, 1994, 2002, 2015, 2023, 2064, 2071, 2086, 2096, 2106, - 2113, 2120, 2127, 2136, 2144, 2158, 2179, 2200, 2212, 2224, - 2236, 2245, 2266, 2276, 2285, 2293, 2301, 2314, 2327, 2342, - 2357, 2366, 2375, 2381, 2390, 2399, 2409, 2419, 2432, 2445, - 2457, 2471, 2483, 2497, 2506, 2518, 2528, 2535, 2542, 2551, - 2560, 2570, 2580, 2590, 2597, 2604, 2613, 2622, 2632, 2642, - 2649, 2656, 2663, 2671, 2681, 2691, 2701, 2711, 2750, 2760, - 2768, 2776, 2791, 2800, 2805, 2806, 2807, 2807, 2807, 2808, - 2808, 2808, 2809, 2809, 2811, 2821, 2830, 2837, 2844, 2851, - 2858, 2865, 2872, 2877, 2878, 2879, 2879, 2879, 2880, 2880, - 2880, 2881, 2882, 2882, 2883, 2883, 2884, 2884, 2885, 2886, - 2887, 2888, 2889, 2890, 2892, 2901, 2911, 2918, 2925, 2934, - 2941, 2948, 2955, 2962, 2971, 2980, 2987, 2994, 3004, 3014, - 3024, 3034, 3044, 3054, 3059, 3060, 3061, 3063, 3069, 3074, - 3075, 3076, 3078, 3084, 3094, 3101, 3110, 3118, 3123, 3124, - 3126, 3126, 3126, 3127, 3127, 3128, 3129, 3130, 3131, 3132, - 3134, 3144, 3153, 3160, 3169, 3176, 3185, 3193, 3206, 3214, - 3227, 3232, 3233, 3234, 3234, 3235, 3235, 3235, 3236, 3238, - 3250, 3262, 3274, 3289, 3302, 3315, 3326, 3331, 3332, 3333, - 3333, 3335, 3350 + 293, 293, 294, 294, 295, 295, 296, 296, 298, 310, + 311, 312, 312, 312, 312, 312, 313, 313, 315, 327, + 328, 329, 329, 329, 329, 330, 330, 332, 346, 347, + 348, 348, 348, 348, 349, 349, 349, 351, 368, 369, + 370, 370, 370, 370, 371, 371, 371, 372, 375, 394, + 411, 419, 429, 437, 454, 455, 456, 456, 456, 456, + 456, 457, 457, 457, 458, 458, 460, 469, 478, 489, + 498, 507, 516, 527, 536, 548, 562, 577, 588, 605, + 622, 639, 656, 671, 686, 699, 714, 723, 732, 741, + 750, 759, 768, 777, 786, 795, 804, 813, 822, 831, + 840, 853, 862, 875, 884, 893, 902, 909, 916, 925, + 932, 941, 949, 956, 963, 971, 980, 988, 1004, 1012, + 1020, 1028, 1036, 1044, 1053, 1062, 1076, 1085, 1094, 1103, + 1112, 1121, 1130, 1137, 1144, 1170, 1178, 1185, 1192, 1199, + 1206, 1214, 1222, 1230, 1237, 1248, 1259, 1266, 1275, 1284, + 1293, 1300, 1307, 1323, 1331, 1339, 1349, 1359, 1369, 1383, + 1391, 1404, 1415, 1423, 1436, 1445, 1454, 1463, 1472, 1482, + 1492, 1500, 1513, 1522, 1530, 1539, 1547, 1560, 1569, 1579, + 1586, 1596, 1606, 1616, 1626, 1636, 1646, 1656, 1666, 1673, + 1680, 1687, 1696, 1705, 1714, 1723, 1730, 1740, 1760, 1767, + 1785, 1798, 1811, 1820, 1829, 1838, 1847, 1857, 1867, 1878, + 1887, 1896, 1905, 1914, 1923, 1932, 1945, 1958, 1967, 1974, + 1983, 1992, 2001, 2010, 2018, 2031, 2039, 2080, 2087, 2102, + 2112, 2122, 2129, 2136, 2143, 2152, 2160, 2174, 2195, 2216, + 2228, 2240, 2252, 2261, 2282, 2292, 2301, 2309, 2317, 2330, + 2343, 2358, 2373, 2382, 2391, 2397, 2406, 2415, 2425, 2435, + 2448, 2461, 2473, 2487, 2499, 2513, 2522, 2534, 2544, 2551, + 2558, 2567, 2576, 2586, 2596, 2606, 2613, 2620, 2629, 2638, + 2648, 2658, 2665, 2672, 2679, 2687, 2697, 2707, 2717, 2727, + 2766, 2776, 2784, 2792, 2807, 2816, 2821, 2822, 2823, 2823, + 2823, 2824, 2824, 2824, 2825, 2825, 2827, 2837, 2846, 2853, + 2860, 2867, 2874, 2881, 2888, 2893, 2894, 2895, 2895, 2895, + 2896, 2896, 2896, 2897, 2898, 2898, 2899, 2899, 2900, 2900, + 2901, 2902, 2903, 2904, 2905, 2906, 2908, 2917, 2927, 2934, + 2941, 2950, 2957, 2964, 2971, 2978, 2987, 2996, 3003, 3010, + 3020, 3030, 3040, 3050, 3060, 3070, 3075, 3076, 3077, 3079, + 3085, 3090, 3091, 3092, 3094, 3100, 3110, 3117, 3126, 3134, + 3139, 3140, 3142, 3142, 3142, 3143, 3143, 3144, 3145, 3146, + 3147, 3148, 3150, 3160, 3169, 3176, 3185, 3192, 3201, 3209, + 3222, 3230, 3243, 3248, 3249, 3250, 3250, 3251, 3251, 3251, + 3252, 3254, 3266, 3278, 3290, 3305, 3318, 3331, 3342, 3347, + 3348, 3349, 3349, 3351, 3366 }; #endif -#if YYDEBUG || YYERROR_VERBOSE || 0 +/** Accessing symbol of state STATE. */ +#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State]) + +#if YYDEBUG || 0 +/* The user-facing name of the symbol whose (internal) number is + YYSYMBOL. No bounds checking. */ +static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED; + /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { - "$end", "error", "$undefined", "SPACE", "LETTER", "NEWLINE", "COMMENT", - "COLON", "ANY", "ZONESTR", "STRING_ARG", "VAR_FORCE_TOPLEVEL", - "VAR_SERVER", "VAR_VERBOSITY", "VAR_NUM_THREADS", "VAR_PORT", - "VAR_OUTGOING_RANGE", "VAR_INTERFACE", "VAR_PREFER_IP4", "VAR_DO_IP4", - "VAR_DO_IP6", "VAR_PREFER_IP6", "VAR_DO_UDP", "VAR_DO_TCP", + "\"end of file\"", "error", "\"invalid token\"", "SPACE", "LETTER", + "NEWLINE", "COMMENT", "COLON", "ANY", "ZONESTR", "STRING_ARG", + "VAR_FORCE_TOPLEVEL", "VAR_SERVER", "VAR_VERBOSITY", "VAR_NUM_THREADS", + "VAR_PORT", "VAR_OUTGOING_RANGE", "VAR_INTERFACE", "VAR_PREFER_IP4", + "VAR_DO_IP4", "VAR_DO_IP6", "VAR_PREFER_IP6", "VAR_DO_UDP", "VAR_DO_TCP", "VAR_TCP_MSS", "VAR_OUTGOING_TCP_MSS", "VAR_TCP_IDLE_TIMEOUT", "VAR_EDNS_TCP_KEEPALIVE", "VAR_EDNS_TCP_KEEPALIVE_TIMEOUT", "VAR_CHROOT", "VAR_USERNAME", "VAR_DIRECTORY", "VAR_LOGFILE", "VAR_PIDFILE", @@ -1265,7 +1345,7 @@ static const char *const yytname[] = "VAR_RPZ", "VAR_TAGS", "VAR_RPZ_ACTION_OVERRIDE", "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", "VAR_RPZ_LOG_NAME", "VAR_DYNLIB", "VAR_DYNLIB_FILE", "VAR_EDNS_CLIENT_STRING", - "VAR_EDNS_CLIENT_STRING_OPCODE", "$accept", "toplevelvars", + "VAR_EDNS_CLIENT_STRING_OPCODE", "VAR_NSID", "$accept", "toplevelvars", "toplevelvar", "force_toplevel", "serverstart", "contents_server", "content_server", "stubstart", "contents_stub", "content_stub", "forwardstart", "contents_forward", "content_forward", "viewstart", @@ -1307,7 +1387,7 @@ static const char *const yytname[] = "server_trust_anchor", "server_trust_anchor_signaling", "server_root_key_sentinel", "server_domain_insecure", "server_hide_identity", "server_hide_version", "server_hide_trustanchor", - "server_identity", "server_version", "server_so_rcvbuf", + "server_identity", "server_version", "server_nsid", "server_so_rcvbuf", "server_so_sndbuf", "server_so_reuseport", "server_ip_transparent", "server_ip_freebind", "server_ip_dscp", "server_stream_wait_size", "server_edns_buffer_size", "server_msg_buffer_size", @@ -1398,12 +1478,18 @@ static const char *const yytname[] = "server_tcp_connection_limit", "ipsetstart", "contents_ipset", "content_ipset", "ipset_name_v4", "ipset_name_v6", YY_NULLPTR }; + +static const char * +yysymbol_name (yysymbol_kind_t yysymbol) +{ + return yytname[yysymbol]; +} #endif -# ifdef YYPRINT +#ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ -static const yytype_uint16 yytoknum[] = +static const yytype_int16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, @@ -1435,18 +1521,18 @@ static const yytype_uint16 yytoknum[] = 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, - 555, 556, 557 + 555, 556, 557, 558 }; -# endif +#endif -#define YYPACT_NINF -291 +#define YYPACT_NINF (-291) -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-291))) +#define yypact_value_is_default(Yyn) \ + ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF -1 +#define YYTABLE_NINF (-1) -#define yytable_value_is_error(Yytable_value) \ +#define yytable_value_is_error(Yyn) \ 0 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing @@ -1478,6 +1564,7 @@ static const yytype_int16 yypact[] = 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 280, 281, 282, 284, 285, 286, 288, 322, 323, 324, 325, 329, 330, + 331, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, @@ -1497,67 +1584,67 @@ static const yytype_int16 yypact[] = -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, 373, 374, + 375, 376, 377, 378, 379, -291, -291, -291, -291, -291, + -291, -291, -291, 380, 381, 385, 389, 390, 415, -291, + -291, -291, -291, -291, -291, -291, 416, 417, 426, 439, + 440, 441, 442, -291, -291, -291, -291, -291, -291, -291, + -291, 443, 444, 445, 446, 447, 448, 449, 450, -291, + -291, -291, -291, -291, -291, -291, -291, -291, 451, 452, + 453, 454, 455, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, 456, 457, 458, 498, 500, 516, + 517, 518, -291, -291, -291, -291, -291, -291, -291, -291, + -291, 519, 520, 521, 522, 523, 524, 525, 526, 533, + 534, 535, 536, 537, 538, 539, 541, 542, 543, 544, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, - -291, -291, -291, -291, -291, -291, 331, 373, 374, 375, - 376, 377, 378, -291, -291, -291, -291, -291, -291, -291, - -291, 379, 380, 381, 385, 389, 390, -291, -291, -291, - -291, -291, -291, -291, 415, 416, 417, 426, 439, 440, - 441, -291, -291, -291, -291, -291, -291, -291, -291, 442, - 443, 444, 445, 446, 447, 448, 449, -291, -291, -291, - -291, -291, -291, -291, -291, -291, 450, 451, 452, 453, - 454, -291, -291, -291, -291, -291, -291, -291, -291, -291, - -291, -291, 455, 456, 457, 458, 498, 500, 516, 517, - -291, -291, -291, -291, -291, -291, -291, -291, -291, 518, - 519, 520, 521, 522, 523, 524, 525, 526, 533, 534, - 535, 536, 537, 538, 539, 541, 542, 543, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, - -291, -291, -291, -291, -291, -291, -291, -291, 544, -291, - -291, 545, -291, -291, 546, 547, 550, 553, 556, 557, - 566, 567, 568, 570, -291, -291, -291, -291, -291, -291, - -291, -291, -291, -291, -291, 571, 572, 573, 574, 575, - 576, -291, -291, -291, -291, -291, -291, -291, 577, 580, + 545, -291, -291, 546, -291, -291, 547, 550, 553, 556, + 557, 566, 567, 568, 570, 571, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, 572, 573, 574, + 575, 576, 577, -291, -291, -291, -291, -291, -291, -291, + 581, 582, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, 583, 584, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, - -291, -291, -291, 581, 582, -291, -291, -291, -291, -291, + -291, 585, 586, 587, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, 588, 589, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, 590, 591, 592, 593, 594, + 595, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, 596, -291, + -291, -291, -291, -291, -291, -291, -291, -291, 597, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, - -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, - -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, - -291, -291, -291, -291, -291, -291, -291, -291, -291, 583, - 584, 585, -291, -291, -291, -291, -291, -291, -291, -291, - -291, -291, 586, 587, -291, -291, -291, -291, -291, -291, - -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, - -291, -291, -291, 588, 589, 590, 591, 592, 593, -291, - -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, - -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, - -291, -291, -291, -291, -291, -291, 594, -291, -291, -291, - -291, -291, -291, -291, -291, -291, 595, -291, -291, -291, - -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, - -291, -291, 596, -291, -291, 597, 598, -291, -291, -291, + -291, -291, -291, -291, -291, 598, -291, -291, 599, 600, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, - -291, -291, -291, -291, -291, -291, -291, 599, 600, 601, - -291, -291, -291, -291, -291, -291, -291, -291, -291 + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + 601, 602, 603, -291, -291, -291, -291, -291, -291, -291, + -291, -291 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ -static const yytype_uint16 yydefact[] = +static const yytype_int16 yydefact[] = { - 2, 0, 1, 18, 19, 227, 237, 513, 573, 532, - 246, 587, 610, 256, 626, 272, 578, 3, 17, 21, - 229, 239, 248, 258, 274, 515, 534, 575, 580, 589, - 612, 628, 4, 5, 6, 10, 14, 15, 8, 9, + 2, 0, 1, 18, 19, 228, 238, 515, 575, 534, + 247, 589, 612, 257, 628, 273, 580, 3, 17, 21, + 230, 240, 249, 259, 275, 517, 536, 577, 582, 591, + 614, 630, 4, 5, 6, 10, 14, 15, 8, 9, 7, 16, 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1579,75 +1666,76 @@ static const yytype_uint16 yydefact[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 20, 22, 23, 86, 89, 98, 195, 196, 24, 160, - 161, 162, 163, 164, 165, 166, 167, 168, 169, 37, - 77, 25, 90, 91, 48, 70, 85, 26, 27, 30, - 31, 28, 29, 32, 33, 34, 35, 36, 121, 207, - 122, 124, 125, 126, 209, 214, 210, 221, 222, 223, - 224, 127, 128, 129, 130, 131, 132, 133, 191, 87, - 76, 102, 119, 120, 219, 216, 123, 38, 39, 40, - 41, 42, 78, 92, 93, 108, 64, 74, 65, 199, - 200, 103, 58, 59, 198, 60, 61, 112, 116, 137, - 147, 174, 150, 220, 113, 71, 43, 44, 45, 100, - 138, 139, 140, 141, 46, 47, 49, 50, 52, 53, - 51, 145, 151, 54, 55, 56, 62, 81, 117, 95, - 146, 88, 170, 96, 97, 114, 115, 217, 101, 57, - 79, 82, 63, 66, 104, 105, 80, 171, 106, 67, - 68, 69, 208, 118, 184, 185, 186, 187, 188, 189, - 197, 107, 75, 109, 110, 111, 172, 72, 73, 94, - 83, 84, 99, 134, 135, 218, 136, 142, 143, 144, - 175, 176, 178, 180, 181, 179, 182, 192, 148, 149, - 154, 155, 152, 153, 156, 157, 159, 158, 211, 213, - 212, 173, 183, 201, 203, 202, 204, 205, 206, 225, - 226, 177, 190, 193, 194, 215, 0, 0, 0, 0, - 0, 0, 0, 228, 230, 231, 232, 234, 235, 236, - 233, 0, 0, 0, 0, 0, 0, 238, 240, 241, - 242, 243, 244, 245, 0, 0, 0, 0, 0, 0, - 0, 247, 249, 250, 253, 254, 251, 255, 252, 0, - 0, 0, 0, 0, 0, 0, 0, 257, 259, 260, - 261, 262, 266, 263, 264, 265, 0, 0, 0, 0, - 0, 277, 281, 282, 283, 284, 273, 275, 276, 278, - 279, 280, 0, 0, 0, 0, 0, 0, 0, 0, - 514, 516, 518, 517, 523, 519, 520, 521, 522, 0, + 0, 20, 22, 23, 86, 89, 98, 195, 196, 24, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 37, 77, 25, 90, 91, 48, 70, 85, 26, 27, + 30, 31, 28, 29, 32, 33, 34, 35, 36, 121, + 207, 122, 124, 125, 126, 209, 214, 210, 221, 222, + 223, 224, 127, 128, 129, 130, 131, 132, 133, 191, + 87, 76, 102, 119, 120, 219, 216, 123, 38, 39, + 40, 41, 42, 78, 92, 93, 108, 64, 74, 65, + 199, 200, 103, 58, 59, 198, 60, 61, 227, 112, + 116, 137, 147, 174, 150, 220, 113, 71, 43, 44, + 45, 100, 138, 139, 140, 141, 46, 47, 49, 50, + 52, 53, 51, 145, 151, 54, 55, 56, 62, 81, + 117, 95, 146, 88, 170, 96, 97, 114, 115, 217, + 101, 57, 79, 82, 63, 66, 104, 105, 80, 171, + 106, 67, 68, 69, 208, 118, 184, 185, 186, 187, + 188, 189, 197, 107, 75, 109, 110, 111, 172, 72, + 73, 94, 83, 84, 99, 134, 135, 218, 136, 142, + 143, 144, 175, 176, 178, 180, 181, 179, 182, 192, + 148, 149, 154, 155, 152, 153, 156, 157, 159, 158, + 211, 213, 212, 173, 183, 201, 203, 202, 204, 205, + 206, 225, 226, 177, 190, 193, 194, 215, 0, 0, + 0, 0, 0, 0, 0, 229, 231, 232, 233, 235, + 236, 237, 234, 0, 0, 0, 0, 0, 0, 239, + 241, 242, 243, 244, 245, 246, 0, 0, 0, 0, + 0, 0, 0, 248, 250, 251, 254, 255, 252, 256, + 253, 0, 0, 0, 0, 0, 0, 0, 0, 258, + 260, 261, 262, 263, 267, 264, 265, 266, 0, 0, + 0, 0, 0, 278, 282, 283, 284, 285, 274, 276, + 277, 279, 280, 281, 0, 0, 0, 0, 0, 0, + 0, 0, 516, 518, 520, 519, 525, 521, 522, 523, + 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 533, 535, - 537, 536, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 0, 574, - 576, 0, 579, 581, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 588, 590, 591, 592, 594, 595, - 593, 596, 597, 598, 599, 0, 0, 0, 0, 0, - 0, 611, 613, 614, 615, 616, 617, 618, 0, 0, - 627, 629, 630, 286, 285, 292, 305, 303, 315, 311, - 312, 316, 313, 314, 317, 318, 319, 320, 321, 351, - 352, 353, 354, 355, 380, 381, 382, 388, 389, 308, - 390, 391, 394, 392, 393, 397, 398, 399, 413, 366, - 367, 369, 370, 400, 416, 360, 362, 417, 423, 424, - 425, 309, 379, 441, 442, 361, 436, 344, 304, 356, - 414, 420, 401, 0, 0, 445, 310, 287, 343, 405, - 288, 306, 307, 357, 358, 443, 403, 407, 408, 289, - 446, 383, 412, 345, 365, 418, 419, 422, 435, 359, - 439, 437, 438, 371, 378, 409, 410, 372, 373, 402, - 427, 346, 347, 350, 322, 324, 325, 326, 327, 328, - 335, 336, 337, 338, 339, 340, 341, 447, 448, 450, - 384, 385, 386, 387, 395, 396, 451, 452, 453, 0, - 0, 0, 404, 374, 376, 583, 462, 466, 464, 463, - 467, 465, 0, 0, 470, 471, 293, 294, 295, 296, - 297, 298, 299, 300, 301, 302, 406, 421, 440, 475, - 476, 375, 454, 0, 0, 0, 0, 0, 0, 428, - 429, 430, 431, 432, 433, 434, 584, 368, 363, 426, - 342, 290, 291, 364, 477, 479, 478, 480, 481, 482, - 323, 330, 472, 474, 473, 329, 0, 349, 411, 449, - 348, 377, 331, 332, 334, 333, 0, 484, 485, 486, - 487, 491, 490, 488, 489, 492, 493, 494, 495, 497, - 496, 506, 0, 510, 511, 0, 0, 512, 498, 504, - 499, 500, 501, 503, 505, 502, 267, 268, 269, 270, - 271, 524, 526, 525, 528, 529, 530, 531, 527, 554, - 556, 557, 558, 559, 560, 561, 562, 563, 564, 555, - 565, 566, 567, 568, 569, 570, 571, 572, 577, 582, - 600, 601, 602, 605, 603, 604, 606, 607, 608, 609, - 619, 620, 621, 622, 623, 624, 631, 632, 415, 444, - 461, 585, 586, 468, 469, 455, 456, 0, 0, 0, - 460, 625, 483, 507, 508, 509, 459, 457, 458 + 535, 537, 539, 538, 540, 541, 542, 543, 544, 545, + 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, + 0, 576, 578, 0, 581, 583, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 590, 592, 593, 594, + 596, 597, 595, 598, 599, 600, 601, 0, 0, 0, + 0, 0, 0, 613, 615, 616, 617, 618, 619, 620, + 0, 0, 629, 631, 632, 287, 286, 293, 306, 304, + 316, 312, 313, 317, 314, 315, 318, 319, 320, 321, + 322, 352, 353, 354, 355, 356, 382, 383, 384, 390, + 391, 309, 392, 393, 396, 394, 395, 399, 400, 401, + 415, 367, 368, 370, 371, 402, 418, 361, 363, 419, + 425, 426, 427, 310, 381, 443, 444, 362, 438, 345, + 305, 357, 416, 422, 403, 0, 0, 447, 311, 288, + 344, 407, 289, 307, 308, 358, 359, 445, 405, 409, + 410, 290, 448, 385, 414, 346, 366, 420, 421, 424, + 437, 360, 441, 439, 440, 373, 380, 411, 412, 374, + 375, 404, 429, 347, 348, 351, 323, 325, 326, 327, + 328, 329, 336, 337, 338, 339, 340, 341, 342, 449, + 450, 452, 386, 387, 388, 389, 397, 398, 453, 454, + 455, 0, 0, 0, 406, 376, 378, 585, 464, 468, + 466, 465, 469, 467, 0, 0, 472, 473, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 408, 423, + 442, 477, 478, 377, 456, 0, 0, 0, 0, 0, + 0, 430, 431, 432, 433, 434, 435, 436, 586, 369, + 364, 428, 343, 291, 292, 365, 479, 481, 480, 482, + 483, 484, 324, 331, 474, 476, 475, 330, 0, 350, + 413, 451, 349, 379, 332, 333, 335, 334, 0, 486, + 372, 487, 488, 489, 493, 492, 490, 491, 494, 495, + 496, 497, 499, 498, 508, 0, 512, 513, 0, 0, + 514, 500, 506, 501, 502, 503, 505, 507, 504, 268, + 269, 270, 271, 272, 526, 528, 527, 530, 531, 532, + 533, 529, 556, 558, 559, 560, 561, 562, 563, 564, + 565, 566, 557, 567, 568, 569, 570, 571, 572, 573, + 574, 579, 584, 602, 603, 604, 607, 605, 606, 608, + 609, 610, 611, 621, 622, 623, 624, 625, 626, 633, + 634, 417, 446, 463, 587, 588, 470, 471, 457, 458, + 0, 0, 0, 462, 627, 485, 509, 510, 511, 461, + 459, 460 }; /* YYPGOTO[NTERM-NUM]. */ @@ -1677,7 +1765,7 @@ static const yytype_int16 yypgoto[] = -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, - 578, 579, 602, 603, 604, -291, -291, -291, -291, -291, + -291, 578, 579, 580, 604, 605, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, @@ -1685,117 +1773,117 @@ static const yytype_int16 yypgoto[] = -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, - -291, -291, -291, -291, -291, -291, -291, -291 + -291, -291, -291, -291, -291, -291, -291, -291, -291 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 17, 18, 19, 32, 250, 20, 33, 463, - 21, 34, 477, 22, 35, 491, 23, 36, 507, 521, - 522, 523, 524, 525, 24, 37, 526, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, - 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 445, 446, 447, 448, 449, 450, 464, 465, 466, - 467, 468, 469, 470, 478, 479, 480, 481, 482, 483, - 508, 509, 510, 511, 512, 513, 514, 515, 492, 493, - 494, 495, 496, 497, 498, 25, 38, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 26, 39, 568, 569, - 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, - 580, 581, 582, 583, 584, 585, 586, 587, 27, 40, - 589, 590, 28, 41, 592, 593, 451, 452, 453, 454, - 29, 42, 604, 605, 606, 607, 608, 609, 610, 611, - 612, 613, 614, 30, 43, 621, 622, 623, 624, 625, - 626, 627, 455, 31, 44, 630, 631, 632 + -1, 1, 17, 18, 19, 32, 251, 20, 33, 465, + 21, 34, 479, 22, 35, 493, 23, 36, 509, 523, + 524, 525, 526, 527, 24, 37, 528, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 466, 467, + 468, 469, 470, 471, 472, 480, 481, 482, 483, 484, + 485, 510, 511, 512, 513, 514, 515, 516, 517, 494, + 495, 496, 497, 498, 499, 500, 25, 38, 542, 543, + 544, 545, 546, 547, 548, 549, 550, 26, 39, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 27, + 40, 591, 592, 28, 41, 594, 595, 453, 454, 455, + 456, 29, 42, 606, 607, 608, 609, 610, 611, 612, + 613, 614, 615, 616, 30, 43, 623, 624, 625, 626, + 627, 628, 629, 457, 31, 44, 632, 633, 634 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule whose number is the opposite. If YYTABLE_NINF, syntax error. */ -static const yytype_uint16 yytable[] = +static const yytype_int16 yytable[] = { - 2, 499, 484, 456, 588, 457, 458, 471, 628, 629, - 591, 3, 4, 633, 634, 472, 473, 615, 616, 617, - 618, 619, 620, 635, 499, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 636, 637, 638, 485, 486, - 639, 640, 641, 642, 643, 644, 5, 645, 646, 647, - 648, 649, 6, 650, 651, 652, 653, 654, 655, 656, - 657, 658, 659, 487, 660, 661, 459, 549, 550, 551, - 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, - 562, 563, 564, 565, 566, 567, 532, 533, 534, 535, - 536, 537, 538, 539, 662, 663, 7, 460, 664, 665, - 474, 666, 475, 667, 668, 669, 670, 461, 671, 672, - 673, 674, 8, 675, 676, 677, 678, 679, 680, 681, - 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, - 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, - 488, 489, 702, 703, 704, 705, 706, 707, 708, 709, - 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, - 720, 721, 9, 722, 723, 724, 725, 726, 727, 728, - 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, - 490, 739, 740, 741, 742, 743, 744, 745, 746, 747, - 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, - 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, - 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, - 778, 10, 501, 502, 503, 779, 780, 781, 782, 783, - 784, 785, 506, 786, 787, 788, 789, 790, 462, 11, - 791, 476, 792, 500, 793, 501, 502, 503, 504, 505, - 516, 517, 518, 519, 520, 506, 12, 794, 795, 796, - 797, 798, 799, 800, 801, 13, 802, 803, 804, 805, - 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, - 816, 817, 818, 819, 820, 821, 822, 823, 824, 14, - 825, 826, 827, 15, 828, 829, 830, 0, 831, 16, + 2, 501, 486, 458, 590, 459, 460, 473, 630, 631, + 593, 3, 4, 635, 636, 474, 475, 617, 618, 619, + 620, 621, 622, 637, 501, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 638, 639, 640, 487, 488, + 641, 642, 643, 644, 645, 646, 5, 647, 648, 649, + 650, 651, 6, 652, 653, 654, 655, 656, 657, 658, + 659, 660, 661, 489, 662, 663, 461, 551, 552, 553, + 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 534, 535, 536, 537, + 538, 539, 540, 541, 664, 665, 7, 462, 666, 667, + 476, 668, 477, 669, 670, 671, 672, 463, 673, 674, + 675, 676, 8, 677, 678, 679, 680, 681, 682, 683, + 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, + 490, 491, 704, 705, 706, 707, 708, 709, 710, 711, + 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, + 722, 723, 9, 724, 725, 726, 727, 728, 729, 730, + 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 492, 741, 742, 743, 744, 745, 746, 747, 748, 749, + 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, + 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, + 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, + 780, 10, 503, 504, 505, 781, 782, 783, 784, 785, + 786, 787, 508, 788, 789, 790, 791, 792, 464, 11, + 793, 478, 794, 502, 795, 503, 504, 505, 506, 507, + 518, 519, 520, 521, 522, 508, 12, 796, 797, 798, + 799, 800, 801, 802, 803, 13, 804, 805, 806, 807, + 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 14, + 827, 828, 829, 15, 830, 831, 832, 0, 833, 16, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 832, 833, 834, 835, 77, 78, 79, 836, - 837, 838, 80, 81, 82, 83, 84, 85, 86, 87, + 75, 76, 834, 835, 836, 837, 77, 78, 79, 838, + 839, 840, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 839, 840, 841, 842, 843, 844, 845, - 846, 847, 121, 122, 123, 848, 124, 125, 126, 849, - 850, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 118, 119, 120, 841, 842, 843, 844, 845, 846, 847, + 848, 849, 121, 122, 123, 850, 124, 125, 126, 851, + 852, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 851, 852, 853, 151, 152, - 153, 154, 155, 156, 157, 158, 854, 159, 160, 161, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 855, - 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, - 866, 867, 868, 869, 870, 871, 872, 873, 874, 171, + 146, 147, 148, 149, 150, 853, 854, 855, 151, 152, + 153, 154, 155, 156, 157, 158, 856, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 857, + 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, + 868, 869, 870, 871, 872, 873, 874, 875, 876, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 207, 208, 209, 875, 210, - 876, 211, 212, 213, 214, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 877, 878, 879, 880, - 881, 882, 883, 884, 885, 886, 887, 226, 227, 228, - 229, 230, 231, 888, 889, 890, 891, 892, 893, 894, - 232, 895, 896, 897, 898, 899, 900, 901, 233, 234, - 902, 235, 236, 903, 237, 238, 904, 905, 239, 240, - 241, 242, 243, 244, 245, 246, 906, 907, 908, 247, - 909, 910, 911, 912, 913, 914, 915, 916, 248, 249, - 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, - 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, - 937, 938, 0, 0, 0, 527, 528, 0, 0, 0, + 202, 203, 204, 205, 206, 207, 208, 209, 877, 210, + 878, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 226, 227, 228, + 229, 230, 231, 890, 891, 892, 893, 894, 895, 896, + 232, 897, 898, 899, 900, 901, 902, 903, 233, 234, + 904, 235, 236, 905, 237, 238, 906, 907, 239, 240, + 241, 242, 243, 244, 245, 246, 908, 909, 910, 247, + 911, 912, 913, 914, 915, 916, 917, 918, 248, 249, + 250, 919, 920, 921, 922, 923, 924, 925, 926, 927, + 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, + 938, 939, 940, 941, 0, 529, 530, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, - 530, 531 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 532, 533 }; static const yytype_int16 yycheck[] = @@ -1859,23 +1947,23 @@ static const yytype_int16 yycheck[] = 10, 274, 275, 10, 277, 278, 10, 10, 281, 282, 283, 284, 285, 286, 287, 288, 10, 10, 10, 292, 10, 10, 10, 10, 10, 10, 10, 10, 301, 302, + 303, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, -1, -1, -1, 37, 37, -1, -1, -1, + 10, 10, 10, 10, -1, 37, 37, 37, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, - 37, 37 + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 37, 37 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ -static const yytype_uint16 yystos[] = +static const yytype_int16 yystos[] = { - 0, 304, 0, 11, 12, 46, 52, 96, 112, 162, - 221, 239, 256, 265, 289, 293, 299, 305, 306, 307, - 310, 313, 316, 319, 327, 558, 569, 591, 595, 603, - 616, 626, 308, 311, 314, 317, 320, 328, 559, 570, - 592, 596, 604, 617, 627, 13, 14, 15, 16, 17, + 0, 305, 0, 11, 12, 46, 52, 96, 112, 162, + 221, 239, 256, 265, 289, 293, 299, 306, 307, 308, + 311, 314, 317, 320, 328, 560, 571, 593, 597, 605, + 618, 628, 309, 312, 315, 318, 321, 329, 561, 572, + 594, 598, 606, 619, 629, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 49, 50, 51, @@ -1896,7 +1984,7 @@ static const yytype_uint16 yystos[] = 233, 234, 235, 236, 237, 238, 250, 251, 252, 253, 254, 255, 263, 271, 272, 274, 275, 277, 278, 281, 282, 283, 284, 285, 286, 287, 288, 292, 301, 302, - 309, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 303, 310, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, @@ -1916,25 +2004,25 @@ static const yytype_uint16 yystos[] = 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, - 529, 599, 600, 601, 602, 625, 45, 47, 48, 108, - 139, 149, 280, 312, 530, 531, 532, 533, 534, 535, - 536, 45, 53, 54, 138, 140, 279, 315, 537, 538, - 539, 540, 541, 542, 45, 81, 82, 106, 183, 184, - 223, 318, 551, 552, 553, 554, 555, 556, 557, 45, - 264, 266, 267, 268, 269, 270, 276, 321, 543, 544, - 545, 546, 547, 548, 549, 550, 294, 295, 296, 297, - 298, 322, 323, 324, 325, 326, 329, 543, 544, 545, - 546, 547, 97, 98, 99, 100, 101, 102, 103, 104, - 560, 561, 562, 563, 564, 565, 566, 567, 568, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 571, 572, + 529, 530, 531, 601, 602, 603, 604, 627, 45, 47, + 48, 108, 139, 149, 280, 313, 532, 533, 534, 535, + 536, 537, 538, 45, 53, 54, 138, 140, 279, 316, + 539, 540, 541, 542, 543, 544, 45, 81, 82, 106, + 183, 184, 223, 319, 553, 554, 555, 556, 557, 558, + 559, 45, 264, 266, 267, 268, 269, 270, 276, 322, + 545, 546, 547, 548, 549, 550, 551, 552, 294, 295, + 296, 297, 298, 323, 324, 325, 326, 327, 330, 545, + 546, 547, 548, 549, 97, 98, 99, 100, 101, 102, + 103, 104, 562, 563, 564, 565, 566, 567, 568, 569, + 570, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, - 583, 584, 585, 586, 587, 588, 589, 590, 113, 593, - 594, 300, 597, 598, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 605, 606, 607, 608, 609, 610, - 611, 612, 613, 614, 615, 257, 258, 259, 260, 261, - 262, 618, 619, 620, 621, 622, 623, 624, 290, 291, - 628, 629, 630, 10, 10, 10, 10, 10, 10, 10, + 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 113, 595, 596, 300, 599, 600, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 607, 608, 609, 610, + 611, 612, 613, 614, 615, 616, 617, 257, 258, 259, + 260, 261, 262, 620, 621, 622, 623, 624, 625, 626, + 290, 291, 630, 631, 632, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1964,41 +2052,42 @@ static const yytype_uint16 yystos[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10 + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint16 yyr1[] = +static const yytype_int16 yyr1[] = { - 0, 303, 304, 304, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 306, 307, - 308, 308, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 310, 311, 311, - 312, 312, 312, 312, 312, 312, 312, 313, 314, 314, - 315, 315, 315, 315, 315, 315, 316, 317, 317, 318, - 318, 318, 318, 318, 318, 318, 319, 320, 320, 321, - 321, 321, 321, 321, 321, 321, 321, 322, 323, 324, - 325, 326, 327, 328, 328, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 330, 331, 332, 333, 334, + 0, 304, 305, 305, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 307, 308, + 309, 309, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 311, 312, + 312, 313, 313, 313, 313, 313, 313, 313, 314, 315, + 315, 316, 316, 316, 316, 316, 316, 317, 318, 318, + 319, 319, 319, 319, 319, 319, 319, 320, 321, 321, + 322, 322, 322, 322, 322, 322, 322, 322, 323, 324, + 325, 326, 327, 328, 329, 329, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, @@ -2021,23 +2110,23 @@ static const yytype_uint16 yyr1[] = 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, - 555, 556, 557, 558, 559, 559, 560, 560, 560, 560, - 560, 560, 560, 560, 561, 562, 563, 564, 565, 566, - 567, 568, 569, 570, 570, 571, 571, 571, 571, 571, - 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, - 571, 571, 571, 571, 572, 573, 574, 575, 576, 577, + 555, 556, 557, 558, 559, 560, 561, 561, 562, 562, + 562, 562, 562, 562, 562, 562, 563, 564, 565, 566, + 567, 568, 569, 570, 571, 572, 572, 573, 573, 573, + 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, + 573, 573, 573, 573, 573, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, - 588, 589, 590, 591, 592, 592, 593, 594, 595, 596, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 604, - 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, - 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, - 616, 617, 617, 618, 618, 618, 618, 618, 618, 619, - 620, 621, 622, 623, 624, 625, 626, 627, 627, 628, - 628, 629, 630 + 588, 589, 590, 591, 592, 593, 594, 594, 595, 596, + 597, 598, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 606, 607, 607, 607, 607, 607, 607, 607, 607, + 607, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 619, 620, 620, 620, 620, 620, + 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, + 629, 630, 630, 631, 632 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = +static const yytype_int8 yyr2[] = { 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, @@ -2061,13 +2150,13 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 0, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, - 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -2080,36 +2169,36 @@ static const yytype_uint8 yyr2[] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, + 4, 4, 3, 3, 2, 2, 2, 2, 2, 2, + 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, + 3, 3, 2, 2, 2, 1, 2, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 3, 3, 4, 4, 4, - 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, - 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 2, 0, 1, 2, + 1, 2, 0, 1, 2, 2, 2, 3, 3, 1, + 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 1, 2, 0, 1, 2, 1, 2, - 0, 1, 2, 2, 2, 3, 3, 1, 2, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 2, 0, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 3, 1, 2, 0, 1, - 1, 2, 2 + 1, 2, 2, 2, 2, 2, 2, 3, 1, 2, + 0, 1, 1, 2, 2 }; +enum { YYENOMEM = -2 }; + #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab @@ -2135,10 +2224,9 @@ static const yytype_uint8 yyr2[] = } \ while (0) -/* Error token number */ -#define YYTERROR 1 -#define YYERRCODE 256 - +/* Backward compatibility with an undocumented macro. + Use YYerror or YYUNDEF. */ +#define YYERRCODE YYUNDEF /* Enable debugging if requested. */ @@ -2156,18 +2244,18 @@ do { \ } while (0) /* This macro is provided for backward compatibility. */ -#ifndef YY_LOCATION_PRINT -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -#endif +# ifndef YY_LOCATION_PRINT +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ - Type, Value); \ + Kind, Value); \ YYFPRINTF (stderr, "\n"); \ } \ } while (0) @@ -2178,17 +2266,20 @@ do { \ `-----------------------------------*/ static void -yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_value_print (FILE *yyo, + yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep) { FILE *yyoutput = yyo; YYUSE (yyoutput); if (!yyvaluep) return; # ifdef YYPRINT - if (yytype < YYNTOKENS) - YYPRINT (yyo, yytoknum[yytype], *yyvaluep); + if (yykind < YYNTOKENS) + YYPRINT (yyo, yytoknum[yykind], *yyvaluep); # endif - YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + YYUSE (yykind); + YY_IGNORE_MAYBE_UNINITIALIZED_END } @@ -2197,12 +2288,13 @@ yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) `---------------------------*/ static void -yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_print (FILE *yyo, + yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep) { YYFPRINTF (yyo, "%s %s (", - yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); + yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind)); - yy_symbol_value_print (yyo, yytype, yyvaluep); + yy_symbol_value_print (yyo, yykind, yyvaluep); YYFPRINTF (yyo, ")"); } @@ -2212,7 +2304,7 @@ yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) `------------------------------------------------------------------*/ static void -yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) @@ -2235,21 +2327,21 @@ do { \ `------------------------------------------------*/ static void -yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) +yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, + int yyrule) { - unsigned long yylno = yyrline[yyrule]; + int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, - yystos[yyssp[yyi + 1 - yynrhs]], - &yyvsp[(yyi + 1) - (yynrhs)] - ); + YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]), + &yyvsp[(yyi + 1) - (yynrhs)]); YYFPRINTF (stderr, "\n"); } } @@ -2264,8 +2356,8 @@ do { \ multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YYDPRINTF(Args) ((void) 0) +# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ @@ -2288,254 +2380,30 @@ int yydebug; #endif -#if YYERROR_VERBOSE -# ifndef yystrlen -# if defined __GLIBC__ && defined _STRING_H -# define yystrlen strlen -# else -/* Return the length of YYSTR. */ -static YYSIZE_T -yystrlen (const char *yystr) -{ - YYSIZE_T yylen; - for (yylen = 0; yystr[yylen]; yylen++) - continue; - return yylen; -} -# endif -# endif -# ifndef yystpcpy -# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -static char * -yystpcpy (char *yydest, const char *yysrc) -{ - char *yyd = yydest; - const char *yys = yysrc; - while ((*yyd++ = *yys++) != '\0') - continue; - - return yyd - 1; -} -# endif -# endif - -# ifndef yytnamerr -/* Copy to YYRES the contents of YYSTR after stripping away unnecessary - quotes and backslashes, so that it's suitable for yyerror. The - heuristic is that double-quoting is unnecessary unless the string - contains an apostrophe, a comma, or backslash (other than - backslash-backslash). YYSTR is taken from yytname. If YYRES is - null, do not copy; instead, return the length of what the result - would have been. */ -static YYSIZE_T -yytnamerr (char *yyres, const char *yystr) -{ - if (*yystr == '"') - { - YYSIZE_T yyn = 0; - char const *yyp = yystr; - - for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - else - goto append; - - append: - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } - do_not_strip_quotes: ; - } - - if (! yyres) - return yystrlen (yystr); - - return (YYSIZE_T) (yystpcpy (yyres, yystr) - yyres); -} -# endif - -/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message - about the unexpected token YYTOKEN for the state stack whose top is - YYSSP. - - Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is - not large enough to hold the message. In that case, also set - *YYMSG_ALLOC to the required number of bytes. Return 2 if the - required number of bytes is too large to store. */ -static int -yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) -{ - YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); - YYSIZE_T yysize = yysize0; - enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; - /* Internationalized format string. */ - const char *yyformat = YY_NULLPTR; - /* Arguments of yyformat. */ - char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ - int yycount = 0; - - /* There are many possibilities here to consider: - - If this state is a consistent state with a default action, then - the only way this function was invoked is if the default action - is an error action. In that case, don't check for expected - tokens because there are none. - - The only way there can be no lookahead present (in yychar) is if - this state is a consistent state with a default action. Thus, - detecting the absence of a lookahead is sufficient to determine - that there is no unexpected or expected token to report. In that - case, just report a simple "syntax error". - - Don't assume there isn't a lookahead just because this state is a - consistent state with a default action. There might have been a - previous inconsistent state, consistent state with a non-default - action, or user semantic action that manipulated yychar. - - Of course, the expected token list depends on states to have - correct lookahead information, and it depends on the parser not - to perform extra reductions after fetching a lookahead from the - scanner and before detecting a syntax error. Thus, state merging - (from LALR or IELR) and default reductions corrupt the expected - token list. However, the list is correct for canonical LR with - one exception: it will still contain any token that will not be - accepted due to an error action in a later state. - */ - if (yytoken != YYEMPTY) - { - int yyn = yypact[*yyssp]; - yyarg[yycount++] = yytname[yytoken]; - if (!yypact_value_is_default (yyn)) - { - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. In other words, skip the first -YYN actions for - this state because they are default actions. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn + 1; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yyx; - - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR - && !yytable_value_is_error (yytable[yyx + yyn])) - { - if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - yycount = 1; - yysize = yysize0; - break; - } - yyarg[yycount++] = yytname[yyx]; - { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); - if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) - yysize = yysize1; - else - return 2; - } - } - } - } - - switch (yycount) - { -# define YYCASE_(N, S) \ - case N: \ - yyformat = S; \ - break - default: /* Avoid compiler warnings. */ - YYCASE_(0, YY_("syntax error")); - YYCASE_(1, YY_("syntax error, unexpected %s")); - YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); - YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); - YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); - YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); -# undef YYCASE_ - } - - { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) - yysize = yysize1; - else - return 2; - } - - if (*yymsg_alloc < yysize) - { - *yymsg_alloc = 2 * yysize; - if (! (yysize <= *yymsg_alloc - && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) - *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; - return 1; - } - - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - { - char *yyp = *yymsg; - int yyi = 0; - while ((*yyp = *yyformat) != '\0') - if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) - { - yyp += yytnamerr (yyp, yyarg[yyi++]); - yyformat += 2; - } - else - { - yyp++; - yyformat++; - } - } - return 0; -} -#endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ static void -yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +yydestruct (const char *yymsg, + yysymbol_kind_t yykind, YYSTYPE *yyvaluep) { YYUSE (yyvaluep); if (!yymsg) yymsg = "Deleting"; - YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - YYUSE (yytype); + YYUSE (yykind); YY_IGNORE_MAYBE_UNINITIALIZED_END } - - -/* The lookahead symbol. */ +/* Lookahead token kind. */ int yychar; /* The semantic value of the lookahead symbol. */ @@ -2544,6 +2412,8 @@ YYSTYPE yylval; int yynerrs; + + /*----------. | yyparse. | `----------*/ @@ -2551,43 +2421,36 @@ int yynerrs; int yyparse (void) { - int yystate; + yy_state_fast_t yystate = 0; /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; + int yyerrstatus = 0; - /* The stacks and their tools: - 'yyss': related to states. - 'yyvs': related to semantic values. - - Refer to the stacks through separate pointers, to allow yyoverflow + /* Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; + /* Their size. */ + YYPTRDIFF_T yystacksize = YYINITDEPTH; - /* The semantic value stack. */ + /* The state stack: array, bottom, top. */ + yy_state_t yyssa[YYINITDEPTH]; + yy_state_t *yyss = yyssa; + yy_state_t *yyssp = yyss; + + /* The semantic value stack: array, bottom, top. */ YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs; - YYSTYPE *yyvsp; - - YYSIZE_T yystacksize; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp = yyvs; int yyn; + /* The return value of yyparse. */ int yyresult; - /* Lookahead token as an internal (translated) token number. */ - int yytoken = 0; + /* Lookahead symbol kind. */ + yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; -#if YYERROR_VERBOSE - /* Buffer for error messages, and its allocated size. */ - char yymsgbuf[128]; - char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; -#endif + #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) @@ -2595,15 +2458,8 @@ yyparse (void) Keep to zero when no symbol should be popped. */ int yylen = 0; - yyssp = yyss = yyssa; - yyvsp = yyvs = yyvsa; - yystacksize = YYINITDEPTH; - YYDPRINTF ((stderr, "Starting parse\n")); - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; @@ -2618,12 +2474,15 @@ yynewstate: /*--------------------------------------------------------------------. -| yynewstate -- set current state (the top of the stack) to yystate. | +| yysetstate -- set current state (the top of the stack) to yystate. | `--------------------------------------------------------------------*/ yysetstate: YYDPRINTF ((stderr, "Entering state %d\n", yystate)); YY_ASSERT (0 <= yystate && yystate < YYNSTATES); - *yyssp = (yytype_int16) yystate; + YY_IGNORE_USELESS_CAST_BEGIN + *yyssp = YY_CAST (yy_state_t, yystate); + YY_IGNORE_USELESS_CAST_END + YY_STACK_PRINT (yyss, yyssp); if (yyss + yystacksize - 1 <= yyssp) #if !defined yyoverflow && !defined YYSTACK_RELOCATE @@ -2631,23 +2490,23 @@ yysetstate: #else { /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1); + YYPTRDIFF_T yysize = yyssp - yyss + 1; # if defined yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ + yy_state_t *yyss1 = yyss; YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), + &yyss1, yysize * YYSIZEOF (*yyssp), + &yyvs1, yysize * YYSIZEOF (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; @@ -2661,14 +2520,15 @@ yysetstate: yystacksize = YYMAXDEPTH; { - yytype_int16 *yyss1 = yyss; + yy_state_t *yyss1 = yyss; union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + YY_CAST (union yyalloc *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); -# undef YYSTACK_RELOCATE +# undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } @@ -2677,8 +2537,10 @@ yysetstate: yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long) yystacksize)); + YY_IGNORE_USELESS_CAST_BEGIN + YYDPRINTF ((stderr, "Stack size increased to %ld\n", + YY_CAST (long, yystacksize))); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) YYABORT; @@ -2705,18 +2567,29 @@ yybackup: /* Not known => get a lookahead token if don't already have one. */ - /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */ if (yychar == YYEMPTY) { - YYDPRINTF ((stderr, "Reading a token: ")); + YYDPRINTF ((stderr, "Reading a token\n")); yychar = yylex (); } if (yychar <= YYEOF) { - yychar = yytoken = YYEOF; + yychar = YYEOF; + yytoken = YYSYMBOL_YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } + else if (yychar == YYerror) + { + /* The scanner already issued an error message, process directly + to error recovery. But do not keep the error token as + lookahead, it is too special and may lead us to an endless + loop in error recovery. */ + yychar = YYUNDEF; + yytoken = YYSYMBOL_YYerror; + goto yyerrlab1; + } else { yytoken = YYTRANSLATE (yychar); @@ -2744,14 +2617,13 @@ yybackup: /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the shifted token. */ - yychar = YYEMPTY; - yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END + + /* Discard the shifted token. */ + yychar = YYEMPTY; goto yynewstate; @@ -2786,25 +2658,25 @@ yyreduce: YY_REDUCE_PRINT (yyn); switch (yyn) { - case 18: + case 18: /* force_toplevel: VAR_FORCE_TOPLEVEL */ #line 195 "./util/configparser.y" - { + { OUTYY(("\nP(force-toplevel)\n")); } -#line 2795 "util/configparser.c" +#line 2667 "util/configparser.c" break; - case 19: + case 19: /* serverstart: VAR_SERVER */ #line 201 "./util/configparser.y" - { + { OUTYY(("\nP(server:)\n")); } -#line 2803 "util/configparser.c" +#line 2675 "util/configparser.c" break; - case 227: + case 228: /* stubstart: VAR_STUB_ZONE */ #line 299 "./util/configparser.y" - { + { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); @@ -2814,12 +2686,12 @@ yyreduce: } else yyerror("out of memory"); } -#line 2818 "util/configparser.c" +#line 2690 "util/configparser.c" break; - case 237: + case 238: /* forwardstart: VAR_FORWARD_ZONE */ #line 316 "./util/configparser.y" - { + { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); @@ -2829,12 +2701,12 @@ yyreduce: } else yyerror("out of memory"); } -#line 2833 "util/configparser.c" +#line 2705 "util/configparser.c" break; - case 246: + case 247: /* viewstart: VAR_VIEW */ #line 333 "./util/configparser.y" - { + { struct config_view* s; OUTYY(("\nP(view:)\n")); s = (struct config_view*)calloc(1, sizeof(struct config_view)); @@ -2846,12 +2718,12 @@ yyreduce: } else yyerror("out of memory"); } -#line 2850 "util/configparser.c" +#line 2722 "util/configparser.c" break; - case 256: + case 257: /* authstart: VAR_AUTH_ZONE */ #line 352 "./util/configparser.y" - { + { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); @@ -2866,12 +2738,12 @@ yyreduce: } else yyerror("out of memory"); } -#line 2870 "util/configparser.c" +#line 2742 "util/configparser.c" break; - case 267: + case 268: /* rpz_tag: VAR_TAGS STRING_ARG */ #line 376 "./util/configparser.y" - { + { uint8_t* bitlist; size_t len = 0; OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[0].str))); @@ -2887,12 +2759,12 @@ yyreduce: } } -#line 2891 "util/configparser.c" +#line 2763 "util/configparser.c" break; - case 268: + case 269: /* rpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG */ #line 395 "./util/configparser.y" - { + { OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 && strcmp((yyvsp[0].str), "passthru")!=0 && strcmp((yyvsp[0].str), "drop")!=0 && @@ -2906,44 +2778,44 @@ yyreduce: cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } -#line 2910 "util/configparser.c" +#line 2782 "util/configparser.c" break; - case 269: + case 270: /* rpz_cname_override: VAR_RPZ_CNAME_OVERRIDE STRING_ARG */ #line 412 "./util/configparser.y" - { + { OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_cname); cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str); } -#line 2920 "util/configparser.c" +#line 2792 "util/configparser.c" break; - case 270: + case 271: /* rpz_log: VAR_RPZ_LOG STRING_ARG */ #line 420 "./util/configparser.y" - { + { OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2932 "util/configparser.c" +#line 2804 "util/configparser.c" break; - case 271: + case 272: /* rpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG */ #line 430 "./util/configparser.y" - { + { OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_log_name); cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str); } -#line 2942 "util/configparser.c" +#line 2814 "util/configparser.c" break; - case 272: + case 273: /* rpzstart: VAR_RPZ */ #line 438 "./util/configparser.y" - { + { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); @@ -2958,36 +2830,36 @@ yyreduce: } else yyerror("out of memory"); } -#line 2962 "util/configparser.c" +#line 2834 "util/configparser.c" break; - case 285: + case 286: /* server_num_threads: VAR_NUM_THREADS STRING_ARG */ #line 461 "./util/configparser.y" - { + { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2974 "util/configparser.c" +#line 2846 "util/configparser.c" break; - case 286: + case 287: /* server_verbosity: VAR_VERBOSITY STRING_ARG */ #line 470 "./util/configparser.y" - { + { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2986 "util/configparser.c" +#line 2858 "util/configparser.c" break; - case 287: + case 288: /* server_statistics_interval: VAR_STATISTICS_INTERVAL STRING_ARG */ #line 479 "./util/configparser.y" - { + { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) cfg_parser->cfg->stat_interval = 0; @@ -2996,48 +2868,48 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3000 "util/configparser.c" +#line 2872 "util/configparser.c" break; - case 288: + case 289: /* server_statistics_cumulative: VAR_STATISTICS_CUMULATIVE STRING_ARG */ #line 490 "./util/configparser.y" - { + { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3012 "util/configparser.c" +#line 2884 "util/configparser.c" break; - case 289: + case 290: /* server_extended_statistics: VAR_EXTENDED_STATISTICS STRING_ARG */ #line 499 "./util/configparser.y" - { + { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3024 "util/configparser.c" +#line 2896 "util/configparser.c" break; - case 290: + case 291: /* server_shm_enable: VAR_SHM_ENABLE STRING_ARG */ #line 508 "./util/configparser.y" - { + { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3036 "util/configparser.c" +#line 2908 "util/configparser.c" break; - case 291: + case 292: /* server_shm_key: VAR_SHM_KEY STRING_ARG */ #line 517 "./util/configparser.y" - { + { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) cfg_parser->cfg->shm_key = 0; @@ -3046,24 +2918,24 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3050 "util/configparser.c" +#line 2922 "util/configparser.c" break; - case 292: + case 293: /* server_port: VAR_PORT STRING_ARG */ #line 528 "./util/configparser.y" - { + { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("port number expected"); else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3062 "util/configparser.c" +#line 2934 "util/configparser.c" break; - case 293: + case 294: /* server_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG */ #line 537 "./util/configparser.y" - { + { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet, (yyvsp[0].str))) @@ -3073,12 +2945,12 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 3077 "util/configparser.c" +#line 2949 "util/configparser.c" break; - case 294: + case 295: /* server_client_subnet_zone: VAR_CLIENT_SUBNET_ZONE STRING_ARG */ #line 549 "./util/configparser.y" - { + { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet_zone, @@ -3089,12 +2961,12 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 3093 "util/configparser.c" +#line 2965 "util/configparser.c" break; - case 295: + case 296: /* server_client_subnet_always_forward: VAR_CLIENT_SUBNET_ALWAYS_FORWARD STRING_ARG */ #line 563 "./util/configparser.y" - { + { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3107,12 +2979,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3111 "util/configparser.c" +#line 2983 "util/configparser.c" break; - case 296: + case 297: /* server_client_subnet_opcode: VAR_CLIENT_SUBNET_OPCODE STRING_ARG */ #line 578 "./util/configparser.y" - { + { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); OUTYY(("P(Deprecated option, ignoring)\n")); @@ -3121,12 +2993,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3125 "util/configparser.c" +#line 2997 "util/configparser.c" break; - case 297: + case 298: /* server_max_client_subnet_ipv4: VAR_MAX_CLIENT_SUBNET_IPV4 STRING_ARG */ #line 589 "./util/configparser.y" - { + { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3141,12 +3013,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3145 "util/configparser.c" +#line 3017 "util/configparser.c" break; - case 298: + case 299: /* server_max_client_subnet_ipv6: VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG */ #line 606 "./util/configparser.y" - { + { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3161,12 +3033,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3165 "util/configparser.c" +#line 3037 "util/configparser.c" break; - case 299: + case 300: /* server_min_client_subnet_ipv4: VAR_MIN_CLIENT_SUBNET_IPV4 STRING_ARG */ #line 623 "./util/configparser.y" - { + { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3181,12 +3053,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3185 "util/configparser.c" +#line 3057 "util/configparser.c" break; - case 300: + case 301: /* server_min_client_subnet_ipv6: VAR_MIN_CLIENT_SUBNET_IPV6 STRING_ARG */ #line 640 "./util/configparser.y" - { + { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3201,12 +3073,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3205 "util/configparser.c" +#line 3077 "util/configparser.c" break; - case 301: + case 302: /* server_max_ecs_tree_size_ipv4: VAR_MAX_ECS_TREE_SIZE_IPV4 STRING_ARG */ #line 657 "./util/configparser.y" - { + { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3219,12 +3091,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3223 "util/configparser.c" +#line 3095 "util/configparser.c" break; - case 302: + case 303: /* server_max_ecs_tree_size_ipv6: VAR_MAX_ECS_TREE_SIZE_IPV6 STRING_ARG */ #line 672 "./util/configparser.y" - { + { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3237,12 +3109,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3241 "util/configparser.c" +#line 3113 "util/configparser.c" break; - case 303: + case 304: /* server_interface: VAR_INTERFACE STRING_ARG */ #line 687 "./util/configparser.y" - { + { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) cfg_parser->cfg->ifs = calloc(1, sizeof(char*)); @@ -3253,12 +3125,12 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3257 "util/configparser.c" +#line 3129 "util/configparser.c" break; - case 304: + case 305: /* server_outgoing_interface: VAR_OUTGOING_INTERFACE STRING_ARG */ #line 700 "./util/configparser.y" - { + { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*)); @@ -3271,180 +3143,180 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3275 "util/configparser.c" +#line 3147 "util/configparser.c" break; - case 305: + case 306: /* server_outgoing_range: VAR_OUTGOING_RANGE STRING_ARG */ #line 715 "./util/configparser.y" - { + { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3287 "util/configparser.c" +#line 3159 "util/configparser.c" break; - case 306: + case 307: /* server_outgoing_port_permit: VAR_OUTGOING_PORT_PERMIT STRING_ARG */ #line 724 "./util/configparser.y" - { + { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, cfg_parser->cfg->outgoing_avail_ports, 65536)) yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3299 "util/configparser.c" +#line 3171 "util/configparser.c" break; - case 307: + case 308: /* server_outgoing_port_avoid: VAR_OUTGOING_PORT_AVOID STRING_ARG */ #line 733 "./util/configparser.y" - { + { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, cfg_parser->cfg->outgoing_avail_ports, 65536)) yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3311 "util/configparser.c" +#line 3183 "util/configparser.c" break; - case 308: + case 309: /* server_outgoing_num_tcp: VAR_OUTGOING_NUM_TCP STRING_ARG */ #line 742 "./util/configparser.y" - { + { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3323 "util/configparser.c" +#line 3195 "util/configparser.c" break; - case 309: + case 310: /* server_incoming_num_tcp: VAR_INCOMING_NUM_TCP STRING_ARG */ #line 751 "./util/configparser.y" - { + { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3335 "util/configparser.c" +#line 3207 "util/configparser.c" break; - case 310: + case 311: /* server_interface_automatic: VAR_INTERFACE_AUTOMATIC STRING_ARG */ #line 760 "./util/configparser.y" - { + { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3347 "util/configparser.c" +#line 3219 "util/configparser.c" break; - case 311: + case 312: /* server_do_ip4: VAR_DO_IP4 STRING_ARG */ #line 769 "./util/configparser.y" - { + { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3359 "util/configparser.c" +#line 3231 "util/configparser.c" break; - case 312: + case 313: /* server_do_ip6: VAR_DO_IP6 STRING_ARG */ #line 778 "./util/configparser.y" - { + { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3371 "util/configparser.c" +#line 3243 "util/configparser.c" break; - case 313: + case 314: /* server_do_udp: VAR_DO_UDP STRING_ARG */ #line 787 "./util/configparser.y" - { + { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3383 "util/configparser.c" +#line 3255 "util/configparser.c" break; - case 314: + case 315: /* server_do_tcp: VAR_DO_TCP STRING_ARG */ #line 796 "./util/configparser.y" - { + { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3395 "util/configparser.c" +#line 3267 "util/configparser.c" break; - case 315: + case 316: /* server_prefer_ip4: VAR_PREFER_IP4 STRING_ARG */ #line 805 "./util/configparser.y" - { + { OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3407 "util/configparser.c" +#line 3279 "util/configparser.c" break; - case 316: + case 317: /* server_prefer_ip6: VAR_PREFER_IP6 STRING_ARG */ #line 814 "./util/configparser.y" - { + { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3419 "util/configparser.c" +#line 3291 "util/configparser.c" break; - case 317: + case 318: /* server_tcp_mss: VAR_TCP_MSS STRING_ARG */ #line 823 "./util/configparser.y" - { + { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3431 "util/configparser.c" +#line 3303 "util/configparser.c" break; - case 318: + case 319: /* server_outgoing_tcp_mss: VAR_OUTGOING_TCP_MSS STRING_ARG */ #line 832 "./util/configparser.y" - { + { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3443 "util/configparser.c" +#line 3315 "util/configparser.c" break; - case 319: + case 320: /* server_tcp_idle_timeout: VAR_TCP_IDLE_TIMEOUT STRING_ARG */ #line 841 "./util/configparser.y" - { + { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); @@ -3455,24 +3327,24 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3459 "util/configparser.c" +#line 3331 "util/configparser.c" break; - case 320: + case 321: /* server_tcp_keepalive: VAR_EDNS_TCP_KEEPALIVE STRING_ARG */ #line 854 "./util/configparser.y" - { + { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3471 "util/configparser.c" +#line 3343 "util/configparser.c" break; - case 321: + case 322: /* server_tcp_keepalive_timeout: VAR_EDNS_TCP_KEEPALIVE_TIMEOUT STRING_ARG */ #line 863 "./util/configparser.y" - { + { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); @@ -3483,168 +3355,168 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3487 "util/configparser.c" +#line 3359 "util/configparser.c" break; - case 322: + case 323: /* server_tcp_upstream: VAR_TCP_UPSTREAM STRING_ARG */ #line 876 "./util/configparser.y" - { + { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3499 "util/configparser.c" +#line 3371 "util/configparser.c" break; - case 323: + case 324: /* server_udp_upstream_without_downstream: VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM STRING_ARG */ #line 885 "./util/configparser.y" - { + { OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3511 "util/configparser.c" +#line 3383 "util/configparser.c" break; - case 324: + case 325: /* server_ssl_upstream: VAR_SSL_UPSTREAM STRING_ARG */ #line 894 "./util/configparser.y" - { + { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3523 "util/configparser.c" +#line 3395 "util/configparser.c" break; - case 325: + case 326: /* server_ssl_service_key: VAR_SSL_SERVICE_KEY STRING_ARG */ #line 903 "./util/configparser.y" - { + { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } -#line 3533 "util/configparser.c" +#line 3405 "util/configparser.c" break; - case 326: + case 327: /* server_ssl_service_pem: VAR_SSL_SERVICE_PEM STRING_ARG */ #line 910 "./util/configparser.y" - { + { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } -#line 3543 "util/configparser.c" +#line 3415 "util/configparser.c" break; - case 327: + case 328: /* server_ssl_port: VAR_SSL_PORT STRING_ARG */ #line 917 "./util/configparser.y" - { + { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("port number expected"); else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3555 "util/configparser.c" +#line 3427 "util/configparser.c" break; - case 328: + case 329: /* server_tls_cert_bundle: VAR_TLS_CERT_BUNDLE STRING_ARG */ #line 926 "./util/configparser.y" - { + { OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_cert_bundle); cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str); } -#line 3565 "util/configparser.c" +#line 3437 "util/configparser.c" break; - case 329: + case 330: /* server_tls_win_cert: VAR_TLS_WIN_CERT STRING_ARG */ #line 933 "./util/configparser.y" - { + { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3577 "util/configparser.c" +#line 3449 "util/configparser.c" break; - case 330: + case 331: /* server_tls_additional_port: VAR_TLS_ADDITIONAL_PORT STRING_ARG */ #line 942 "./util/configparser.y" - { + { OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3588 "util/configparser.c" +#line 3460 "util/configparser.c" break; - case 331: + case 332: /* server_tls_ciphers: VAR_TLS_CIPHERS STRING_ARG */ #line 950 "./util/configparser.y" - { + { OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphers); cfg_parser->cfg->tls_ciphers = (yyvsp[0].str); } -#line 3598 "util/configparser.c" +#line 3470 "util/configparser.c" break; - case 332: + case 333: /* server_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG */ #line 957 "./util/configparser.y" - { + { OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphersuites); cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str); } -#line 3608 "util/configparser.c" +#line 3480 "util/configparser.c" break; - case 333: + case 334: /* server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG */ #line 964 "./util/configparser.y" - { + { OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3619 "util/configparser.c" +#line 3491 "util/configparser.c" break; - case 334: + case 335: /* server_tls_use_sni: VAR_TLS_USE_SNI STRING_ARG */ #line 972 "./util/configparser.y" - { + { OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3631 "util/configparser.c" +#line 3503 "util/configparser.c" break; - case 335: + case 336: /* server_https_port: VAR_HTTPS_PORT STRING_ARG */ #line 981 "./util/configparser.y" - { + { OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("port number expected"); else cfg_parser->cfg->https_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3643 "util/configparser.c" +#line 3515 "util/configparser.c" break; - case 336: + case 337: /* server_http_endpoint: VAR_HTTP_ENDPOINT STRING_ARG */ #line 989 "./util/configparser.y" - { + { OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->http_endpoint); if((yyvsp[0].str) && (yyvsp[0].str)[0] != '/') { @@ -3659,96 +3531,96 @@ yyreduce: cfg_parser->cfg->http_endpoint = (yyvsp[0].str); } } -#line 3663 "util/configparser.c" +#line 3535 "util/configparser.c" break; - case 337: + case 338: /* server_http_max_streams: VAR_HTTP_MAX_STREAMS STRING_ARG */ #line 1005 "./util/configparser.y" - { + { OUTYY(("P(server_http_max_streams:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->http_max_streams = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3675 "util/configparser.c" +#line 3547 "util/configparser.c" break; - case 338: + case 339: /* server_http_query_buffer_size: VAR_HTTP_QUERY_BUFFER_SIZE STRING_ARG */ #line 1013 "./util/configparser.y" - { + { OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->http_query_buffer_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3687 "util/configparser.c" +#line 3559 "util/configparser.c" break; - case 339: + case 340: /* server_http_response_buffer_size: VAR_HTTP_RESPONSE_BUFFER_SIZE STRING_ARG */ #line 1021 "./util/configparser.y" - { + { OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->http_response_buffer_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3699 "util/configparser.c" +#line 3571 "util/configparser.c" break; - case 340: + case 341: /* server_http_nodelay: VAR_HTTP_NODELAY STRING_ARG */ #line 1029 "./util/configparser.y" - { + { OUTYY(("P(server_http_nodelay:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->http_nodelay = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3711 "util/configparser.c" +#line 3583 "util/configparser.c" break; - case 341: + case 342: /* server_http_notls_downstream: VAR_HTTP_NOTLS_DOWNSTREAM STRING_ARG */ #line 1037 "./util/configparser.y" - { + { OUTYY(("P(server_http_notls_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->http_notls_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3723 "util/configparser.c" +#line 3595 "util/configparser.c" break; - case 342: + case 343: /* server_use_systemd: VAR_USE_SYSTEMD STRING_ARG */ #line 1045 "./util/configparser.y" - { + { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3735 "util/configparser.c" +#line 3607 "util/configparser.c" break; - case 343: + case 344: /* server_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG */ #line 1054 "./util/configparser.y" - { + { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3747 "util/configparser.c" +#line 3619 "util/configparser.c" break; - case 344: + case 345: /* server_use_syslog: VAR_USE_SYSLOG STRING_ARG */ #line 1063 "./util/configparser.y" - { + { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -3760,104 +3632,104 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3764 "util/configparser.c" +#line 3636 "util/configparser.c" break; - case 345: + case 346: /* server_log_time_ascii: VAR_LOG_TIME_ASCII STRING_ARG */ #line 1077 "./util/configparser.y" - { + { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3776 "util/configparser.c" +#line 3648 "util/configparser.c" break; - case 346: + case 347: /* server_log_queries: VAR_LOG_QUERIES STRING_ARG */ #line 1086 "./util/configparser.y" - { + { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3788 "util/configparser.c" +#line 3660 "util/configparser.c" break; - case 347: + case 348: /* server_log_replies: VAR_LOG_REPLIES STRING_ARG */ #line 1095 "./util/configparser.y" - { + { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3800 "util/configparser.c" +#line 3672 "util/configparser.c" break; - case 348: + case 349: /* server_log_tag_queryreply: VAR_LOG_TAG_QUERYREPLY STRING_ARG */ #line 1104 "./util/configparser.y" - { + { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3812 "util/configparser.c" +#line 3684 "util/configparser.c" break; - case 349: + case 350: /* server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG */ #line 1113 "./util/configparser.y" - { + { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3824 "util/configparser.c" +#line 3696 "util/configparser.c" break; - case 350: + case 351: /* server_log_local_actions: VAR_LOG_LOCAL_ACTIONS STRING_ARG */ #line 1122 "./util/configparser.y" - { + { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3836 "util/configparser.c" +#line 3708 "util/configparser.c" break; - case 351: + case 352: /* server_chroot: VAR_CHROOT STRING_ARG */ #line 1131 "./util/configparser.y" - { + { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3846 "util/configparser.c" +#line 3718 "util/configparser.c" break; - case 352: + case 353: /* server_username: VAR_USERNAME STRING_ARG */ #line 1138 "./util/configparser.y" - { + { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3856 "util/configparser.c" +#line 3728 "util/configparser.c" break; - case 353: + case 354: /* server_directory: VAR_DIRECTORY STRING_ARG */ #line 1145 "./util/configparser.y" - { + { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); cfg_parser->cfg->directory = (yyvsp[0].str); @@ -3881,106 +3753,106 @@ yyreduce: } } } -#line 3885 "util/configparser.c" +#line 3757 "util/configparser.c" break; - case 354: + case 355: /* server_logfile: VAR_LOGFILE STRING_ARG */ #line 1171 "./util/configparser.y" - { + { OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } -#line 3896 "util/configparser.c" +#line 3768 "util/configparser.c" break; - case 355: + case 356: /* server_pidfile: VAR_PIDFILE STRING_ARG */ #line 1179 "./util/configparser.y" - { + { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3906 "util/configparser.c" +#line 3778 "util/configparser.c" break; - case 356: + case 357: /* server_root_hints: VAR_ROOT_HINTS STRING_ARG */ #line 1186 "./util/configparser.y" - { + { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3916 "util/configparser.c" +#line 3788 "util/configparser.c" break; - case 357: + case 358: /* server_dlv_anchor_file: VAR_DLV_ANCHOR_FILE STRING_ARG */ #line 1193 "./util/configparser.y" - { + { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); log_warn("option dlv-anchor-file ignored: DLV is decommissioned"); free((yyvsp[0].str)); } -#line 3926 "util/configparser.c" +#line 3798 "util/configparser.c" break; - case 358: + case 359: /* server_dlv_anchor: VAR_DLV_ANCHOR STRING_ARG */ #line 1200 "./util/configparser.y" - { + { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); log_warn("option dlv-anchor ignored: DLV is decommissioned"); free((yyvsp[0].str)); } -#line 3936 "util/configparser.c" +#line 3808 "util/configparser.c" break; - case 359: + case 360: /* server_auto_trust_anchor_file: VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG */ #line 1207 "./util/configparser.y" - { + { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3947 "util/configparser.c" +#line 3819 "util/configparser.c" break; - case 360: + case 361: /* server_trust_anchor_file: VAR_TRUST_ANCHOR_FILE STRING_ARG */ #line 1215 "./util/configparser.y" - { + { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3958 "util/configparser.c" +#line 3830 "util/configparser.c" break; - case 361: + case 362: /* server_trusted_keys_file: VAR_TRUSTED_KEYS_FILE STRING_ARG */ #line 1223 "./util/configparser.y" - { + { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3969 "util/configparser.c" +#line 3841 "util/configparser.c" break; - case 362: + case 363: /* server_trust_anchor: VAR_TRUST_ANCHOR STRING_ARG */ #line 1231 "./util/configparser.y" - { + { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3979 "util/configparser.c" +#line 3851 "util/configparser.c" break; - case 363: + case 364: /* server_trust_anchor_signaling: VAR_TRUST_ANCHOR_SIGNALING STRING_ARG */ #line 1238 "./util/configparser.y" - { + { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -3989,12 +3861,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3993 "util/configparser.c" +#line 3865 "util/configparser.c" break; - case 364: + case 365: /* server_root_key_sentinel: VAR_ROOT_KEY_SENTINEL STRING_ARG */ #line 1249 "./util/configparser.y" - { + { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4003,99 +3875,118 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4007 "util/configparser.c" +#line 3879 "util/configparser.c" break; - case 365: + case 366: /* server_domain_insecure: VAR_DOMAIN_INSECURE STRING_ARG */ #line 1260 "./util/configparser.y" - { + { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4017 "util/configparser.c" +#line 3889 "util/configparser.c" break; - case 366: + case 367: /* server_hide_identity: VAR_HIDE_IDENTITY STRING_ARG */ #line 1267 "./util/configparser.y" - { + { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4029 "util/configparser.c" +#line 3901 "util/configparser.c" break; - case 367: + case 368: /* server_hide_version: VAR_HIDE_VERSION STRING_ARG */ #line 1276 "./util/configparser.y" - { + { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4041 "util/configparser.c" +#line 3913 "util/configparser.c" break; - case 368: + case 369: /* server_hide_trustanchor: VAR_HIDE_TRUSTANCHOR STRING_ARG */ #line 1285 "./util/configparser.y" - { + { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4053 "util/configparser.c" +#line 3925 "util/configparser.c" break; - case 369: + case 370: /* server_identity: VAR_IDENTITY STRING_ARG */ #line 1294 "./util/configparser.y" - { + { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 4063 "util/configparser.c" +#line 3935 "util/configparser.c" break; - case 370: + case 371: /* server_version: VAR_VERSION STRING_ARG */ #line 1301 "./util/configparser.y" - { + { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 4073 "util/configparser.c" +#line 3945 "util/configparser.c" break; - case 371: + case 372: /* server_nsid: VAR_NSID STRING_ARG */ #line 1308 "./util/configparser.y" - { + { + OUTYY(("P(server_nsid:%s)\n", (yyvsp[0].str))); + free(cfg_parser->cfg->nsid_cfg_str); + cfg_parser->cfg->nsid_cfg_str = (yyvsp[0].str); + free(cfg_parser->cfg->nsid); + cfg_parser->cfg->nsid = NULL; + cfg_parser->cfg->nsid_len = 0; + if (*(yyvsp[0].str) == 0) + ; /* pass; empty string is not setting nsid */ + else if (!(cfg_parser->cfg->nsid = cfg_parse_nsid( + (yyvsp[0].str), &cfg_parser->cfg->nsid_len))) + yyerror("the NSID must be either a hex string or an " + "ascii character string prepended with ascii_."); + } +#line 3964 "util/configparser.c" + break; + + case 373: /* server_so_rcvbuf: VAR_SO_RCVBUF STRING_ARG */ +#line 1324 "./util/configparser.y" + { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 4084 "util/configparser.c" +#line 3975 "util/configparser.c" break; - case 372: -#line 1316 "./util/configparser.y" - { + case 374: /* server_so_sndbuf: VAR_SO_SNDBUF STRING_ARG */ +#line 1332 "./util/configparser.y" + { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 4095 "util/configparser.c" +#line 3986 "util/configparser.c" break; - case 373: -#line 1324 "./util/configparser.y" + case 375: /* server_so_reuseport: VAR_SO_REUSEPORT STRING_ARG */ +#line 1340 "./util/configparser.y" { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4104,11 +3995,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4108 "util/configparser.c" +#line 3999 "util/configparser.c" break; - case 374: -#line 1334 "./util/configparser.y" + case 376: /* server_ip_transparent: VAR_IP_TRANSPARENT STRING_ARG */ +#line 1350 "./util/configparser.y" { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4117,11 +4008,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4121 "util/configparser.c" +#line 4012 "util/configparser.c" break; - case 375: -#line 1344 "./util/configparser.y" + case 377: /* server_ip_freebind: VAR_IP_FREEBIND STRING_ARG */ +#line 1360 "./util/configparser.y" { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4130,12 +4021,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4134 "util/configparser.c" +#line 4025 "util/configparser.c" break; - case 376: -#line 1354 "./util/configparser.y" - { + case 378: /* server_ip_dscp: VAR_IP_DSCP STRING_ARG */ +#line 1370 "./util/configparser.y" + { OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); @@ -4147,23 +4038,23 @@ yyreduce: cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4151 "util/configparser.c" +#line 4042 "util/configparser.c" break; - case 377: -#line 1368 "./util/configparser.y" - { + case 379: /* server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG */ +#line 1384 "./util/configparser.y" + { OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4162 "util/configparser.c" +#line 4053 "util/configparser.c" break; - case 378: -#line 1376 "./util/configparser.y" - { + case 380: /* server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG */ +#line 1392 "./util/configparser.y" + { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); @@ -4174,12 +4065,12 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4178 "util/configparser.c" +#line 4069 "util/configparser.c" break; - case 379: -#line 1389 "./util/configparser.y" - { + case 381: /* server_msg_buffer_size: VAR_MSG_BUFFER_SIZE STRING_ARG */ +#line 1405 "./util/configparser.y" + { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); @@ -4188,23 +4079,23 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4192 "util/configparser.c" +#line 4083 "util/configparser.c" break; - case 380: -#line 1400 "./util/configparser.y" - { + case 382: /* server_msg_cache_size: VAR_MSG_CACHE_SIZE STRING_ARG */ +#line 1416 "./util/configparser.y" + { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4203 "util/configparser.c" +#line 4094 "util/configparser.c" break; - case 381: -#line 1408 "./util/configparser.y" - { + case 383: /* server_msg_cache_slabs: VAR_MSG_CACHE_SLABS STRING_ARG */ +#line 1424 "./util/configparser.y" + { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); @@ -4215,60 +4106,60 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4219 "util/configparser.c" +#line 4110 "util/configparser.c" break; - case 382: -#line 1421 "./util/configparser.y" - { + case 384: /* server_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING_ARG */ +#line 1437 "./util/configparser.y" + { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4231 "util/configparser.c" +#line 4122 "util/configparser.c" break; - case 383: -#line 1430 "./util/configparser.y" - { + case 385: /* server_jostle_timeout: VAR_JOSTLE_TIMEOUT STRING_ARG */ +#line 1446 "./util/configparser.y" + { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4243 "util/configparser.c" +#line 4134 "util/configparser.c" break; - case 384: -#line 1439 "./util/configparser.y" - { + case 386: /* server_delay_close: VAR_DELAY_CLOSE STRING_ARG */ +#line 1455 "./util/configparser.y" + { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4255 "util/configparser.c" +#line 4146 "util/configparser.c" break; - case 385: -#line 1448 "./util/configparser.y" - { + case 387: /* server_udp_connect: VAR_UDP_CONNECT STRING_ARG */ +#line 1464 "./util/configparser.y" + { OUTYY(("P(server_udp_connect:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->udp_connect = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4267 "util/configparser.c" +#line 4158 "util/configparser.c" break; - case 386: -#line 1457 "./util/configparser.y" - { + case 388: /* server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG */ +#line 1473 "./util/configparser.y" + { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4276,12 +4167,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4280 "util/configparser.c" +#line 4171 "util/configparser.c" break; - case 387: -#line 1467 "./util/configparser.y" - { + case 389: /* server_insecure_lan_zones: VAR_INSECURE_LAN_ZONES STRING_ARG */ +#line 1483 "./util/configparser.y" + { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4289,23 +4180,23 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4293 "util/configparser.c" +#line 4184 "util/configparser.c" break; - case 388: -#line 1477 "./util/configparser.y" - { + case 390: /* server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG */ +#line 1493 "./util/configparser.y" + { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4304 "util/configparser.c" +#line 4195 "util/configparser.c" break; - case 389: -#line 1485 "./util/configparser.y" - { + case 391: /* server_rrset_cache_slabs: VAR_RRSET_CACHE_SLABS STRING_ARG */ +#line 1501 "./util/configparser.y" + { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); @@ -4316,58 +4207,58 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4320 "util/configparser.c" +#line 4211 "util/configparser.c" break; - case 390: -#line 1498 "./util/configparser.y" - { + case 392: /* server_infra_host_ttl: VAR_INFRA_HOST_TTL STRING_ARG */ +#line 1514 "./util/configparser.y" + { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4332 "util/configparser.c" +#line 4223 "util/configparser.c" break; - case 391: -#line 1507 "./util/configparser.y" - { + case 393: /* server_infra_lame_ttl: VAR_INFRA_LAME_TTL STRING_ARG */ +#line 1523 "./util/configparser.y" + { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " "removed, use infra-host-ttl)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4343 "util/configparser.c" +#line 4234 "util/configparser.c" break; - case 392: -#line 1515 "./util/configparser.y" - { + case 394: /* server_infra_cache_numhosts: VAR_INFRA_CACHE_NUMHOSTS STRING_ARG */ +#line 1531 "./util/configparser.y" + { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4355 "util/configparser.c" +#line 4246 "util/configparser.c" break; - case 393: -#line 1524 "./util/configparser.y" - { + case 395: /* server_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING_ARG */ +#line 1540 "./util/configparser.y" + { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4366 "util/configparser.c" +#line 4257 "util/configparser.c" break; - case 394: -#line 1532 "./util/configparser.y" - { + case 396: /* server_infra_cache_slabs: VAR_INFRA_CACHE_SLABS STRING_ARG */ +#line 1548 "./util/configparser.y" + { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); @@ -4378,24 +4269,24 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4382 "util/configparser.c" +#line 4273 "util/configparser.c" break; - case 395: -#line 1545 "./util/configparser.y" - { + case 397: /* server_infra_cache_min_rtt: VAR_INFRA_CACHE_MIN_RTT STRING_ARG */ +#line 1561 "./util/configparser.y" + { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4394 "util/configparser.c" +#line 4285 "util/configparser.c" break; - case 396: -#line 1554 "./util/configparser.y" - { + case 398: /* server_infra_keep_probing: VAR_INFRA_KEEP_PROBING STRING_ARG */ +#line 1570 "./util/configparser.y" + { OUTYY(("P(server_infra_keep_probing:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4403,22 +4294,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4407 "util/configparser.c" +#line 4298 "util/configparser.c" break; - case 397: -#line 1564 "./util/configparser.y" - { + case 399: /* server_target_fetch_policy: VAR_TARGET_FETCH_POLICY STRING_ARG */ +#line 1580 "./util/configparser.y" + { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); } -#line 4417 "util/configparser.c" +#line 4308 "util/configparser.c" break; - case 398: -#line 1571 "./util/configparser.y" - { + case 400: /* server_harden_short_bufsize: VAR_HARDEN_SHORT_BUFSIZE STRING_ARG */ +#line 1587 "./util/configparser.y" + { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4426,12 +4317,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4430 "util/configparser.c" +#line 4321 "util/configparser.c" break; - case 399: -#line 1581 "./util/configparser.y" - { + case 401: /* server_harden_large_queries: VAR_HARDEN_LARGE_QUERIES STRING_ARG */ +#line 1597 "./util/configparser.y" + { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4439,12 +4330,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4443 "util/configparser.c" +#line 4334 "util/configparser.c" break; - case 400: -#line 1591 "./util/configparser.y" - { + case 402: /* server_harden_glue: VAR_HARDEN_GLUE STRING_ARG */ +#line 1607 "./util/configparser.y" + { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4452,12 +4343,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4456 "util/configparser.c" +#line 4347 "util/configparser.c" break; - case 401: -#line 1601 "./util/configparser.y" - { + case 403: /* server_harden_dnssec_stripped: VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG */ +#line 1617 "./util/configparser.y" + { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4465,12 +4356,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4469 "util/configparser.c" +#line 4360 "util/configparser.c" break; - case 402: -#line 1611 "./util/configparser.y" - { + case 404: /* server_harden_below_nxdomain: VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG */ +#line 1627 "./util/configparser.y" + { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4478,12 +4369,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4482 "util/configparser.c" +#line 4373 "util/configparser.c" break; - case 403: -#line 1621 "./util/configparser.y" - { + case 405: /* server_harden_referral_path: VAR_HARDEN_REFERRAL_PATH STRING_ARG */ +#line 1637 "./util/configparser.y" + { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4491,12 +4382,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4495 "util/configparser.c" +#line 4386 "util/configparser.c" break; - case 404: -#line 1631 "./util/configparser.y" - { + case 406: /* server_harden_algo_downgrade: VAR_HARDEN_ALGO_DOWNGRADE STRING_ARG */ +#line 1647 "./util/configparser.y" + { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4504,12 +4395,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4508 "util/configparser.c" +#line 4399 "util/configparser.c" break; - case 405: -#line 1641 "./util/configparser.y" - { + case 407: /* server_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG */ +#line 1657 "./util/configparser.y" + { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4517,100 +4408,100 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4521 "util/configparser.c" +#line 4412 "util/configparser.c" break; - case 406: -#line 1651 "./util/configparser.y" - { + case 408: /* server_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG */ +#line 1667 "./util/configparser.y" + { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4531 "util/configparser.c" +#line 4422 "util/configparser.c" break; - case 407: -#line 1658 "./util/configparser.y" - { + case 409: /* server_private_address: VAR_PRIVATE_ADDRESS STRING_ARG */ +#line 1674 "./util/configparser.y" + { OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4541 "util/configparser.c" +#line 4432 "util/configparser.c" break; - case 408: -#line 1665 "./util/configparser.y" - { + case 410: /* server_private_domain: VAR_PRIVATE_DOMAIN STRING_ARG */ +#line 1681 "./util/configparser.y" + { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4551 "util/configparser.c" +#line 4442 "util/configparser.c" break; - case 409: -#line 1672 "./util/configparser.y" - { + case 411: /* server_prefetch: VAR_PREFETCH STRING_ARG */ +#line 1688 "./util/configparser.y" + { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4563 "util/configparser.c" +#line 4454 "util/configparser.c" break; - case 410: -#line 1681 "./util/configparser.y" - { + case 412: /* server_prefetch_key: VAR_PREFETCH_KEY STRING_ARG */ +#line 1697 "./util/configparser.y" + { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4575 "util/configparser.c" +#line 4466 "util/configparser.c" break; - case 411: -#line 1690 "./util/configparser.y" - { + case 413: /* server_deny_any: VAR_DENY_ANY STRING_ARG */ +#line 1706 "./util/configparser.y" + { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4587 "util/configparser.c" +#line 4478 "util/configparser.c" break; - case 412: -#line 1699 "./util/configparser.y" - { + case 414: /* server_unwanted_reply_threshold: VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG */ +#line 1715 "./util/configparser.y" + { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4599 "util/configparser.c" +#line 4490 "util/configparser.c" break; - case 413: -#line 1708 "./util/configparser.y" - { + case 415: /* server_do_not_query_address: VAR_DO_NOT_QUERY_ADDRESS STRING_ARG */ +#line 1724 "./util/configparser.y" + { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4609 "util/configparser.c" +#line 4500 "util/configparser.c" break; - case 414: -#line 1715 "./util/configparser.y" - { + case 416: /* server_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG */ +#line 1731 "./util/configparser.y" + { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4618,12 +4509,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4622 "util/configparser.c" +#line 4513 "util/configparser.c" break; - case 415: -#line 1725 "./util/configparser.y" - { + case 417: /* server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG */ +#line 1741 "./util/configparser.y" + { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "deny_non_local")!=0 && @@ -4641,22 +4532,22 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4645 "util/configparser.c" +#line 4536 "util/configparser.c" break; - case 416: -#line 1745 "./util/configparser.y" - { + case 418: /* server_module_conf: VAR_MODULE_CONF STRING_ARG */ +#line 1761 "./util/configparser.y" + { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = (yyvsp[0].str); } -#line 4655 "util/configparser.c" +#line 4546 "util/configparser.c" break; - case 417: -#line 1752 "./util/configparser.y" - { + case 419: /* server_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG */ +#line 1768 "./util/configparser.y" + { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { cfg_parser->cfg->val_date_override = 0; @@ -4672,12 +4563,12 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4676 "util/configparser.c" +#line 4567 "util/configparser.c" break; - case 418: -#line 1770 "./util/configparser.y" - { + case 420: /* server_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING_ARG */ +#line 1786 "./util/configparser.y" + { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { cfg_parser->cfg->val_sig_skew_min = 0; @@ -4688,12 +4579,12 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4692 "util/configparser.c" +#line 4583 "util/configparser.c" break; - case 419: -#line 1783 "./util/configparser.y" - { + case 421: /* server_val_sig_skew_max: VAR_VAL_SIG_SKEW_MAX STRING_ARG */ +#line 1799 "./util/configparser.y" + { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { cfg_parser->cfg->val_sig_skew_max = 0; @@ -4704,60 +4595,60 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4708 "util/configparser.c" +#line 4599 "util/configparser.c" break; - case 420: -#line 1796 "./util/configparser.y" - { + case 422: /* server_cache_max_ttl: VAR_CACHE_MAX_TTL STRING_ARG */ +#line 1812 "./util/configparser.y" + { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4720 "util/configparser.c" +#line 4611 "util/configparser.c" break; - case 421: -#line 1805 "./util/configparser.y" - { + case 423: /* server_cache_max_negative_ttl: VAR_CACHE_MAX_NEGATIVE_TTL STRING_ARG */ +#line 1821 "./util/configparser.y" + { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4732 "util/configparser.c" +#line 4623 "util/configparser.c" break; - case 422: -#line 1814 "./util/configparser.y" - { + case 424: /* server_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG */ +#line 1830 "./util/configparser.y" + { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4744 "util/configparser.c" +#line 4635 "util/configparser.c" break; - case 423: -#line 1823 "./util/configparser.y" - { + case 425: /* server_bogus_ttl: VAR_BOGUS_TTL STRING_ARG */ +#line 1839 "./util/configparser.y" + { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4756 "util/configparser.c" +#line 4647 "util/configparser.c" break; - case 424: -#line 1832 "./util/configparser.y" - { + case 426: /* server_val_clean_additional: VAR_VAL_CLEAN_ADDITIONAL STRING_ARG */ +#line 1848 "./util/configparser.y" + { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4765,12 +4656,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4769 "util/configparser.c" +#line 4660 "util/configparser.c" break; - case 425: -#line 1842 "./util/configparser.y" - { + case 427: /* server_val_permissive_mode: VAR_VAL_PERMISSIVE_MODE STRING_ARG */ +#line 1858 "./util/configparser.y" + { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4778,12 +4669,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4782 "util/configparser.c" +#line 4673 "util/configparser.c" break; - case 426: -#line 1852 "./util/configparser.y" - { + case 428: /* server_aggressive_nsec: VAR_AGGRESSIVE_NSEC STRING_ARG */ +#line 1868 "./util/configparser.y" + { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4792,84 +4683,84 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4796 "util/configparser.c" +#line 4687 "util/configparser.c" break; - case 427: -#line 1863 "./util/configparser.y" - { + case 429: /* server_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG */ +#line 1879 "./util/configparser.y" + { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4808 "util/configparser.c" +#line 4699 "util/configparser.c" break; - case 428: -#line 1872 "./util/configparser.y" - { + case 430: /* server_serve_expired: VAR_SERVE_EXPIRED STRING_ARG */ +#line 1888 "./util/configparser.y" + { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4820 "util/configparser.c" +#line 4711 "util/configparser.c" break; - case 429: -#line 1881 "./util/configparser.y" - { + case 431: /* server_serve_expired_ttl: VAR_SERVE_EXPIRED_TTL STRING_ARG */ +#line 1897 "./util/configparser.y" + { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4832 "util/configparser.c" +#line 4723 "util/configparser.c" break; - case 430: -#line 1890 "./util/configparser.y" - { + case 432: /* server_serve_expired_ttl_reset: VAR_SERVE_EXPIRED_TTL_RESET STRING_ARG */ +#line 1906 "./util/configparser.y" + { OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4844 "util/configparser.c" +#line 4735 "util/configparser.c" break; - case 431: -#line 1899 "./util/configparser.y" - { + case 433: /* server_serve_expired_reply_ttl: VAR_SERVE_EXPIRED_REPLY_TTL STRING_ARG */ +#line 1915 "./util/configparser.y" + { OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4856 "util/configparser.c" +#line 4747 "util/configparser.c" break; - case 432: -#line 1908 "./util/configparser.y" - { + case 434: /* server_serve_expired_client_timeout: VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG */ +#line 1924 "./util/configparser.y" + { OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4868 "util/configparser.c" +#line 4759 "util/configparser.c" break; - case 433: -#line 1917 "./util/configparser.y" - { + case 435: /* server_fake_dsa: VAR_FAKE_DSA STRING_ARG */ +#line 1933 "./util/configparser.y" + { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4880,12 +4771,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4884 "util/configparser.c" +#line 4775 "util/configparser.c" break; - case 434: -#line 1930 "./util/configparser.y" - { + case 436: /* server_fake_sha1: VAR_FAKE_SHA1 STRING_ARG */ +#line 1946 "./util/configparser.y" + { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4896,70 +4787,70 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4900 "util/configparser.c" +#line 4791 "util/configparser.c" break; - case 435: -#line 1943 "./util/configparser.y" - { + case 437: /* server_val_log_level: VAR_VAL_LOG_LEVEL STRING_ARG */ +#line 1959 "./util/configparser.y" + { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4912 "util/configparser.c" +#line 4803 "util/configparser.c" break; - case 436: -#line 1952 "./util/configparser.y" - { + case 438: /* server_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG */ +#line 1968 "./util/configparser.y" + { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); } -#line 4922 "util/configparser.c" +#line 4813 "util/configparser.c" break; - case 437: -#line 1959 "./util/configparser.y" - { + case 439: /* server_add_holddown: VAR_ADD_HOLDDOWN STRING_ARG */ +#line 1975 "./util/configparser.y" + { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4934 "util/configparser.c" +#line 4825 "util/configparser.c" break; - case 438: -#line 1968 "./util/configparser.y" - { + case 440: /* server_del_holddown: VAR_DEL_HOLDDOWN STRING_ARG */ +#line 1984 "./util/configparser.y" + { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4946 "util/configparser.c" +#line 4837 "util/configparser.c" break; - case 439: -#line 1977 "./util/configparser.y" - { + case 441: /* server_keep_missing: VAR_KEEP_MISSING STRING_ARG */ +#line 1993 "./util/configparser.y" + { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4958 "util/configparser.c" +#line 4849 "util/configparser.c" break; - case 440: -#line 1986 "./util/configparser.y" - { + case 442: /* server_permit_small_holddown: VAR_PERMIT_SMALL_HOLDDOWN STRING_ARG */ +#line 2002 "./util/configparser.y" + { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -4967,23 +4858,23 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4971 "util/configparser.c" +#line 4862 "util/configparser.c" break; - case 441: -#line 1995 "./util/configparser.y" - { + case 443: /* server_key_cache_size: VAR_KEY_CACHE_SIZE STRING_ARG */ +#line 2011 "./util/configparser.y" + { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4982 "util/configparser.c" +#line 4873 "util/configparser.c" break; - case 442: -#line 2003 "./util/configparser.y" - { + case 444: /* server_key_cache_slabs: VAR_KEY_CACHE_SLABS STRING_ARG */ +#line 2019 "./util/configparser.y" + { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); @@ -4994,23 +4885,23 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4998 "util/configparser.c" +#line 4889 "util/configparser.c" break; - case 443: -#line 2016 "./util/configparser.y" - { + case 445: /* server_neg_cache_size: VAR_NEG_CACHE_SIZE STRING_ARG */ +#line 2032 "./util/configparser.y" + { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5009 "util/configparser.c" +#line 4900 "util/configparser.c" break; - case 444: -#line 2024 "./util/configparser.y" - { + case 446: /* server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */ +#line 2040 "./util/configparser.y" + { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "redirect")!=0 && @@ -5049,22 +4940,22 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5053 "util/configparser.c" +#line 4944 "util/configparser.c" break; - case 445: -#line 2065 "./util/configparser.y" - { + case 447: /* server_local_data: VAR_LOCAL_DATA STRING_ARG */ +#line 2081 "./util/configparser.y" + { OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) fatal_exit("out of memory adding local-data"); } -#line 5063 "util/configparser.c" +#line 4954 "util/configparser.c" break; - case 446: -#line 2072 "./util/configparser.y" - { + case 448: /* server_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */ +#line 2088 "./util/configparser.y" + { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); ptr = cfg_ptr_reverse((yyvsp[0].str)); @@ -5077,12 +4968,12 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5081 "util/configparser.c" +#line 4972 "util/configparser.c" break; - case 447: -#line 2087 "./util/configparser.y" - { + case 449: /* server_minimal_responses: VAR_MINIMAL_RESPONSES STRING_ARG */ +#line 2103 "./util/configparser.y" + { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -5090,12 +4981,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5094 "util/configparser.c" +#line 4985 "util/configparser.c" break; - case 448: -#line 2097 "./util/configparser.y" - { + case 450: /* server_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG */ +#line 2113 "./util/configparser.y" + { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -5103,65 +4994,65 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5107 "util/configparser.c" +#line 4998 "util/configparser.c" break; - case 449: -#line 2107 "./util/configparser.y" - { + case 451: /* server_unknown_server_time_limit: VAR_UNKNOWN_SERVER_TIME_LIMIT STRING_ARG */ +#line 2123 "./util/configparser.y" + { OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5117 "util/configparser.c" +#line 5008 "util/configparser.c" break; - case 450: -#line 2114 "./util/configparser.y" - { + case 452: /* server_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG */ +#line 2130 "./util/configparser.y" + { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5127 "util/configparser.c" +#line 5018 "util/configparser.c" break; - case 451: -#line 2121 "./util/configparser.y" - { + case 453: /* server_dns64_prefix: VAR_DNS64_PREFIX STRING_ARG */ +#line 2137 "./util/configparser.y" + { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 5137 "util/configparser.c" +#line 5028 "util/configparser.c" break; - case 452: -#line 2128 "./util/configparser.y" - { + case 454: /* server_dns64_synthall: VAR_DNS64_SYNTHALL STRING_ARG */ +#line 2144 "./util/configparser.y" + { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5149 "util/configparser.c" +#line 5040 "util/configparser.c" break; - case 453: -#line 2137 "./util/configparser.y" - { + case 455: /* server_dns64_ignore_aaaa: VAR_DNS64_IGNORE_AAAA STRING_ARG */ +#line 2153 "./util/configparser.y" + { OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, (yyvsp[0].str))) fatal_exit("out of memory adding dns64-ignore-aaaa"); } -#line 5160 "util/configparser.c" +#line 5051 "util/configparser.c" break; - case 454: -#line 2145 "./util/configparser.y" - { + case 456: /* server_define_tag: VAR_DEFINE_TAG STRING_ARG */ +#line 2161 "./util/configparser.y" + { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); while((p=strsep(&s, " \t\n")) != NULL) { @@ -5173,12 +5064,12 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5177 "util/configparser.c" +#line 5068 "util/configparser.c" break; - case 455: -#line 2159 "./util/configparser.y" - { + case 457: /* server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG */ +#line 2175 "./util/configparser.y" + { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), &len); @@ -5197,12 +5088,12 @@ yyreduce: } } } -#line 5201 "util/configparser.c" +#line 5092 "util/configparser.c" break; - case 456: -#line 2180 "./util/configparser.y" - { + case 458: /* server_access_control_tag: VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG */ +#line 2196 "./util/configparser.y" + { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), &len); @@ -5221,12 +5112,12 @@ yyreduce: } } } -#line 5225 "util/configparser.c" +#line 5116 "util/configparser.c" break; - case 457: -#line 2201 "./util/configparser.y" - { + case 459: /* server_access_control_tag_action: VAR_ACCESS_CONTROL_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */ +#line 2217 "./util/configparser.y" + { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) { @@ -5236,12 +5127,12 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5240 "util/configparser.c" +#line 5131 "util/configparser.c" break; - case 458: -#line 2213 "./util/configparser.y" - { + case 460: /* server_access_control_tag_data: VAR_ACCESS_CONTROL_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */ +#line 2229 "./util/configparser.y" + { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) { @@ -5251,12 +5142,12 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5255 "util/configparser.c" +#line 5146 "util/configparser.c" break; - case 459: -#line 2225 "./util/configparser.y" - { + case 461: /* server_local_zone_override: VAR_LOCAL_ZONE_OVERRIDE STRING_ARG STRING_ARG STRING_ARG */ +#line 2241 "./util/configparser.y" + { OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) { @@ -5266,24 +5157,24 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5270 "util/configparser.c" +#line 5161 "util/configparser.c" break; - case 460: -#line 2237 "./util/configparser.y" - { + case 462: /* server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG */ +#line 2253 "./util/configparser.y" + { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, (yyvsp[-1].str), (yyvsp[0].str))) { yyerror("out of memory"); } } -#line 5282 "util/configparser.c" +#line 5173 "util/configparser.c" break; - case 461: -#line 2246 "./util/configparser.y" - { + case 463: /* server_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG */ +#line 2262 "./util/configparser.y" + { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), &len); @@ -5302,58 +5193,58 @@ yyreduce: } } } -#line 5306 "util/configparser.c" +#line 5197 "util/configparser.c" break; - case 462: -#line 2267 "./util/configparser.y" - { + case 464: /* server_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG */ +#line 2283 "./util/configparser.y" + { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5318 "util/configparser.c" +#line 5209 "util/configparser.c" break; - case 463: -#line 2277 "./util/configparser.y" - { + case 465: /* server_ratelimit: VAR_RATELIMIT STRING_ARG */ +#line 2293 "./util/configparser.y" + { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5330 "util/configparser.c" +#line 5221 "util/configparser.c" break; - case 464: -#line 2286 "./util/configparser.y" - { + case 466: /* server_ip_ratelimit_size: VAR_IP_RATELIMIT_SIZE STRING_ARG */ +#line 2302 "./util/configparser.y" + { OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5341 "util/configparser.c" +#line 5232 "util/configparser.c" break; - case 465: -#line 2294 "./util/configparser.y" - { + case 467: /* server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG */ +#line 2310 "./util/configparser.y" + { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5352 "util/configparser.c" +#line 5243 "util/configparser.c" break; - case 466: -#line 2302 "./util/configparser.y" - { + case 468: /* server_ip_ratelimit_slabs: VAR_IP_RATELIMIT_SLABS STRING_ARG */ +#line 2318 "./util/configparser.y" + { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); @@ -5364,12 +5255,12 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5368 "util/configparser.c" +#line 5259 "util/configparser.c" break; - case 467: -#line 2315 "./util/configparser.y" - { + case 469: /* server_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG */ +#line 2331 "./util/configparser.y" + { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); @@ -5380,12 +5271,12 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5384 "util/configparser.c" +#line 5275 "util/configparser.c" break; - case 468: -#line 2328 "./util/configparser.y" - { + case 470: /* server_ratelimit_for_domain: VAR_RATELIMIT_FOR_DOMAIN STRING_ARG STRING_ARG */ +#line 2344 "./util/configparser.y" + { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { yyerror("number expected"); @@ -5398,12 +5289,12 @@ yyreduce: "ratelimit-for-domain"); } } -#line 5402 "util/configparser.c" +#line 5293 "util/configparser.c" break; - case 469: -#line 2343 "./util/configparser.y" - { + case 471: /* server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG */ +#line 2359 "./util/configparser.y" + { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { yyerror("number expected"); @@ -5416,69 +5307,69 @@ yyreduce: "ratelimit-below-domain"); } } -#line 5420 "util/configparser.c" +#line 5311 "util/configparser.c" break; - case 470: -#line 2358 "./util/configparser.y" - { + case 472: /* server_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG */ +#line 2374 "./util/configparser.y" + { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5432 "util/configparser.c" +#line 5323 "util/configparser.c" break; - case 471: -#line 2367 "./util/configparser.y" - { + case 473: /* server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG */ +#line 2383 "./util/configparser.y" + { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5444 "util/configparser.c" +#line 5335 "util/configparser.c" break; - case 472: -#line 2376 "./util/configparser.y" - { + case 474: /* server_low_rtt: VAR_LOW_RTT STRING_ARG */ +#line 2392 "./util/configparser.y" + { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5453 "util/configparser.c" +#line 5344 "util/configparser.c" break; - case 473: -#line 2382 "./util/configparser.y" - { + case 475: /* server_fast_server_num: VAR_FAST_SERVER_NUM STRING_ARG */ +#line 2398 "./util/configparser.y" + { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) yyerror("number expected"); else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5465 "util/configparser.c" +#line 5356 "util/configparser.c" break; - case 474: -#line 2391 "./util/configparser.y" - { + case 476: /* server_fast_server_permil: VAR_FAST_SERVER_PERMIL STRING_ARG */ +#line 2407 "./util/configparser.y" + { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5477 "util/configparser.c" +#line 5368 "util/configparser.c" break; - case 475: -#line 2400 "./util/configparser.y" - { + case 477: /* server_qname_minimisation: VAR_QNAME_MINIMISATION STRING_ARG */ +#line 2416 "./util/configparser.y" + { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -5486,12 +5377,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5490 "util/configparser.c" +#line 5381 "util/configparser.c" break; - case 476: -#line 2410 "./util/configparser.y" - { + case 478: /* server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG */ +#line 2426 "./util/configparser.y" + { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -5499,12 +5390,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5503 "util/configparser.c" +#line 5394 "util/configparser.c" break; - case 477: -#line 2420 "./util/configparser.y" - { + case 479: /* server_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG */ +#line 2436 "./util/configparser.y" + { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5515,12 +5406,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5519 "util/configparser.c" +#line 5410 "util/configparser.c" break; - case 478: -#line 2433 "./util/configparser.y" - { + case 480: /* server_ipsecmod_ignore_bogus: VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG */ +#line 2449 "./util/configparser.y" + { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5531,12 +5422,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5535 "util/configparser.c" +#line 5426 "util/configparser.c" break; - case 479: -#line 2446 "./util/configparser.y" - { + case 481: /* server_ipsecmod_hook: VAR_IPSECMOD_HOOK STRING_ARG */ +#line 2462 "./util/configparser.y" + { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ipsecmod_hook); @@ -5546,12 +5437,12 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5550 "util/configparser.c" +#line 5441 "util/configparser.c" break; - case 480: -#line 2458 "./util/configparser.y" - { + case 482: /* server_ipsecmod_max_ttl: VAR_IPSECMOD_MAX_TTL STRING_ARG */ +#line 2474 "./util/configparser.y" + { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5563,12 +5454,12 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5567 "util/configparser.c" +#line 5458 "util/configparser.c" break; - case 481: -#line 2472 "./util/configparser.y" - { + case 483: /* server_ipsecmod_whitelist: VAR_IPSECMOD_WHITELIST STRING_ARG */ +#line 2488 "./util/configparser.y" + { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->ipsecmod_whitelist, (yyvsp[0].str))) @@ -5578,12 +5469,12 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5582 "util/configparser.c" +#line 5473 "util/configparser.c" break; - case 482: -#line 2484 "./util/configparser.y" - { + case 484: /* server_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG */ +#line 2500 "./util/configparser.y" + { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5595,24 +5486,24 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5599 "util/configparser.c" +#line 5490 "util/configparser.c" break; - case 483: -#line 2498 "./util/configparser.y" - { + case 485: /* server_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG */ +#line 2514 "./util/configparser.y" + { OUTYY(("P(server_edns_client_string:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->edns_client_strings, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding " "edns-client-string"); } -#line 5611 "util/configparser.c" +#line 5502 "util/configparser.c" break; - case 484: -#line 2507 "./util/configparser.y" - { + case 486: /* server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG */ +#line 2523 "./util/configparser.y" + { OUTYY(("P(edns_client_string_opcode:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("option code expected"); @@ -5622,12 +5513,12 @@ yyreduce: free((yyvsp[0].str)); } -#line 5626 "util/configparser.c" +#line 5517 "util/configparser.c" break; - case 485: -#line 2519 "./util/configparser.y" - { + case 487: /* stub_name: VAR_NAME STRING_ARG */ +#line 2535 "./util/configparser.y" + { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) yyerror("stub name override, there must be one name " @@ -5635,56 +5526,56 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5639 "util/configparser.c" +#line 5530 "util/configparser.c" break; - case 486: -#line 2529 "./util/configparser.y" - { + case 488: /* stub_host: VAR_STUB_HOST STRING_ARG */ +#line 2545 "./util/configparser.y" + { OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5649 "util/configparser.c" +#line 5540 "util/configparser.c" break; - case 487: -#line 2536 "./util/configparser.y" - { + case 489: /* stub_addr: VAR_STUB_ADDR STRING_ARG */ +#line 2552 "./util/configparser.y" + { OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5659 "util/configparser.c" +#line 5550 "util/configparser.c" break; - case 488: -#line 2543 "./util/configparser.y" - { + case 490: /* stub_first: VAR_STUB_FIRST STRING_ARG */ +#line 2559 "./util/configparser.y" + { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5671 "util/configparser.c" +#line 5562 "util/configparser.c" break; - case 489: -#line 2552 "./util/configparser.y" - { + case 491: /* stub_no_cache: VAR_STUB_NO_CACHE STRING_ARG */ +#line 2568 "./util/configparser.y" + { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5683 "util/configparser.c" +#line 5574 "util/configparser.c" break; - case 490: -#line 2561 "./util/configparser.y" - { + case 492: /* stub_ssl_upstream: VAR_STUB_SSL_UPSTREAM STRING_ARG */ +#line 2577 "./util/configparser.y" + { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -5692,12 +5583,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5696 "util/configparser.c" +#line 5587 "util/configparser.c" break; - case 491: -#line 2571 "./util/configparser.y" - { + case 493: /* stub_prime: VAR_STUB_PRIME STRING_ARG */ +#line 2587 "./util/configparser.y" + { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -5705,12 +5596,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5709 "util/configparser.c" +#line 5600 "util/configparser.c" break; - case 492: -#line 2581 "./util/configparser.y" - { + case 494: /* forward_name: VAR_NAME STRING_ARG */ +#line 2597 "./util/configparser.y" + { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) yyerror("forward name override, there must be one " @@ -5718,56 +5609,56 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5722 "util/configparser.c" +#line 5613 "util/configparser.c" break; - case 493: -#line 2591 "./util/configparser.y" - { + case 495: /* forward_host: VAR_FORWARD_HOST STRING_ARG */ +#line 2607 "./util/configparser.y" + { OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5732 "util/configparser.c" +#line 5623 "util/configparser.c" break; - case 494: -#line 2598 "./util/configparser.y" - { + case 496: /* forward_addr: VAR_FORWARD_ADDR STRING_ARG */ +#line 2614 "./util/configparser.y" + { OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5742 "util/configparser.c" +#line 5633 "util/configparser.c" break; - case 495: -#line 2605 "./util/configparser.y" - { + case 497: /* forward_first: VAR_FORWARD_FIRST STRING_ARG */ +#line 2621 "./util/configparser.y" + { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5754 "util/configparser.c" +#line 5645 "util/configparser.c" break; - case 496: -#line 2614 "./util/configparser.y" - { + case 498: /* forward_no_cache: VAR_FORWARD_NO_CACHE STRING_ARG */ +#line 2630 "./util/configparser.y" + { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5766 "util/configparser.c" +#line 5657 "util/configparser.c" break; - case 497: -#line 2623 "./util/configparser.y" - { + case 499: /* forward_ssl_upstream: VAR_FORWARD_SSL_UPSTREAM STRING_ARG */ +#line 2639 "./util/configparser.y" + { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -5775,12 +5666,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5779 "util/configparser.c" +#line 5670 "util/configparser.c" break; - case 498: -#line 2633 "./util/configparser.y" - { + case 500: /* auth_name: VAR_NAME STRING_ARG */ +#line 2649 "./util/configparser.y" + { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) yyerror("auth name override, there must be one name " @@ -5788,53 +5679,53 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5792 "util/configparser.c" +#line 5683 "util/configparser.c" break; - case 499: -#line 2643 "./util/configparser.y" - { + case 501: /* auth_zonefile: VAR_ZONEFILE STRING_ARG */ +#line 2659 "./util/configparser.y" + { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 5802 "util/configparser.c" +#line 5693 "util/configparser.c" break; - case 500: -#line 2650 "./util/configparser.y" - { + case 502: /* auth_master: VAR_MASTER STRING_ARG */ +#line 2666 "./util/configparser.y" + { OUTYY(("P(master:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5812 "util/configparser.c" +#line 5703 "util/configparser.c" break; - case 501: -#line 2657 "./util/configparser.y" - { + case 503: /* auth_url: VAR_URL STRING_ARG */ +#line 2673 "./util/configparser.y" + { OUTYY(("P(url:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5822 "util/configparser.c" +#line 5713 "util/configparser.c" break; - case 502: -#line 2664 "./util/configparser.y" - { + case 504: /* auth_allow_notify: VAR_ALLOW_NOTIFY STRING_ARG */ +#line 2680 "./util/configparser.y" + { OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5833 "util/configparser.c" +#line 5724 "util/configparser.c" break; - case 503: -#line 2672 "./util/configparser.y" - { + case 505: /* auth_for_downstream: VAR_FOR_DOWNSTREAM STRING_ARG */ +#line 2688 "./util/configparser.y" + { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -5842,12 +5733,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5846 "util/configparser.c" +#line 5737 "util/configparser.c" break; - case 504: -#line 2682 "./util/configparser.y" - { + case 506: /* auth_for_upstream: VAR_FOR_UPSTREAM STRING_ARG */ +#line 2698 "./util/configparser.y" + { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -5855,12 +5746,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5859 "util/configparser.c" +#line 5750 "util/configparser.c" break; - case 505: -#line 2692 "./util/configparser.y" - { + case 507: /* auth_fallback_enabled: VAR_FALLBACK_ENABLED STRING_ARG */ +#line 2708 "./util/configparser.y" + { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -5868,12 +5759,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5872 "util/configparser.c" +#line 5763 "util/configparser.c" break; - case 506: -#line 2702 "./util/configparser.y" - { + case 508: /* view_name: VAR_NAME STRING_ARG */ +#line 2718 "./util/configparser.y" + { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) yyerror("view name override, there must be one " @@ -5881,12 +5772,12 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5885 "util/configparser.c" +#line 5776 "util/configparser.c" break; - case 507: -#line 2712 "./util/configparser.y" - { + case 509: /* view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */ +#line 2728 "./util/configparser.y" + { OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "redirect")!=0 && @@ -5923,12 +5814,12 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5927 "util/configparser.c" +#line 5818 "util/configparser.c" break; - case 508: -#line 2751 "./util/configparser.y" - { + case 510: /* view_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */ +#line 2767 "./util/configparser.y" + { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); if(!cfg_str2list_insert( @@ -5936,34 +5827,34 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5940 "util/configparser.c" +#line 5831 "util/configparser.c" break; - case 509: -#line 2761 "./util/configparser.y" - { + case 511: /* view_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */ +#line 2777 "./util/configparser.y" + { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 5951 "util/configparser.c" +#line 5842 "util/configparser.c" break; - case 510: -#line 2769 "./util/configparser.y" - { + case 512: /* view_local_data: VAR_LOCAL_DATA STRING_ARG */ +#line 2785 "./util/configparser.y" + { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { fatal_exit("out of memory adding local-data"); } } -#line 5962 "util/configparser.c" +#line 5853 "util/configparser.c" break; - case 511: -#line 2777 "./util/configparser.y" - { + case 513: /* view_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */ +#line 2793 "./util/configparser.y" + { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); ptr = cfg_ptr_reverse((yyvsp[0].str)); @@ -5976,32 +5867,32 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5980 "util/configparser.c" +#line 5871 "util/configparser.c" break; - case 512: -#line 2792 "./util/configparser.y" - { + case 514: /* view_first: VAR_VIEW_FIRST STRING_ARG */ +#line 2808 "./util/configparser.y" + { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5992 "util/configparser.c" +#line 5883 "util/configparser.c" break; - case 513: -#line 2801 "./util/configparser.y" - { + case 515: /* rcstart: VAR_REMOTE_CONTROL */ +#line 2817 "./util/configparser.y" + { OUTYY(("\nP(remote-control:)\n")); } -#line 6000 "util/configparser.c" +#line 5891 "util/configparser.c" break; - case 524: -#line 2812 "./util/configparser.y" - { + case 526: /* rc_control_enable: VAR_CONTROL_ENABLE STRING_ARG */ +#line 2828 "./util/configparser.y" + { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -6009,104 +5900,104 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6013 "util/configparser.c" +#line 5904 "util/configparser.c" break; - case 525: -#line 2822 "./util/configparser.y" - { + case 527: /* rc_control_port: VAR_CONTROL_PORT STRING_ARG */ +#line 2838 "./util/configparser.y" + { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("control port number expected"); else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6025 "util/configparser.c" +#line 5916 "util/configparser.c" break; - case 526: -#line 2831 "./util/configparser.y" - { + case 528: /* rc_control_interface: VAR_CONTROL_INTERFACE STRING_ARG */ +#line 2847 "./util/configparser.y" + { OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6035 "util/configparser.c" +#line 5926 "util/configparser.c" break; - case 527: -#line 2838 "./util/configparser.y" - { + case 529: /* rc_control_use_cert: VAR_CONTROL_USE_CERT STRING_ARG */ +#line 2854 "./util/configparser.y" + { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6045 "util/configparser.c" +#line 5936 "util/configparser.c" break; - case 528: -#line 2845 "./util/configparser.y" - { + case 530: /* rc_server_key_file: VAR_SERVER_KEY_FILE STRING_ARG */ +#line 2861 "./util/configparser.y" + { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = (yyvsp[0].str); } -#line 6055 "util/configparser.c" +#line 5946 "util/configparser.c" break; - case 529: -#line 2852 "./util/configparser.y" - { + case 531: /* rc_server_cert_file: VAR_SERVER_CERT_FILE STRING_ARG */ +#line 2868 "./util/configparser.y" + { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } -#line 6065 "util/configparser.c" +#line 5956 "util/configparser.c" break; - case 530: -#line 2859 "./util/configparser.y" - { + case 532: /* rc_control_key_file: VAR_CONTROL_KEY_FILE STRING_ARG */ +#line 2875 "./util/configparser.y" + { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = (yyvsp[0].str); } -#line 6075 "util/configparser.c" +#line 5966 "util/configparser.c" break; - case 531: -#line 2866 "./util/configparser.y" - { + case 533: /* rc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG */ +#line 2882 "./util/configparser.y" + { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } -#line 6085 "util/configparser.c" +#line 5976 "util/configparser.c" break; - case 532: -#line 2873 "./util/configparser.y" - { + case 534: /* dtstart: VAR_DNSTAP */ +#line 2889 "./util/configparser.y" + { OUTYY(("\nP(dnstap:)\n")); } -#line 6093 "util/configparser.c" +#line 5984 "util/configparser.c" break; - case 554: -#line 2893 "./util/configparser.y" - { + case 556: /* dt_dnstap_enable: VAR_DNSTAP_ENABLE STRING_ARG */ +#line 2909 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6105 "util/configparser.c" +#line 5996 "util/configparser.c" break; - case 555: -#line 2902 "./util/configparser.y" - { + case 557: /* dt_dnstap_bidirectional: VAR_DNSTAP_BIDIRECTIONAL STRING_ARG */ +#line 2918 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_bidirectional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -6114,128 +6005,128 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6118 "util/configparser.c" +#line 6009 "util/configparser.c" break; - case 556: -#line 2912 "./util/configparser.y" - { + case 558: /* dt_dnstap_socket_path: VAR_DNSTAP_SOCKET_PATH STRING_ARG */ +#line 2928 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } -#line 6128 "util/configparser.c" +#line 6019 "util/configparser.c" break; - case 557: -#line 2919 "./util/configparser.y" - { + case 559: /* dt_dnstap_ip: VAR_DNSTAP_IP STRING_ARG */ +#line 2935 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_ip); cfg_parser->cfg->dnstap_ip = (yyvsp[0].str); } -#line 6138 "util/configparser.c" +#line 6029 "util/configparser.c" break; - case 558: -#line 2926 "./util/configparser.y" - { + case 560: /* dt_dnstap_tls: VAR_DNSTAP_TLS STRING_ARG */ +#line 2942 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6150 "util/configparser.c" +#line 6041 "util/configparser.c" break; - case 559: -#line 2935 "./util/configparser.y" - { + case 561: /* dt_dnstap_tls_server_name: VAR_DNSTAP_TLS_SERVER_NAME STRING_ARG */ +#line 2951 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_server_name); cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str); } -#line 6160 "util/configparser.c" +#line 6051 "util/configparser.c" break; - case 560: -#line 2942 "./util/configparser.y" - { + case 562: /* dt_dnstap_tls_cert_bundle: VAR_DNSTAP_TLS_CERT_BUNDLE STRING_ARG */ +#line 2958 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_cert_bundle); cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str); } -#line 6170 "util/configparser.c" +#line 6061 "util/configparser.c" break; - case 561: -#line 2949 "./util/configparser.y" - { + case 563: /* dt_dnstap_tls_client_key_file: VAR_DNSTAP_TLS_CLIENT_KEY_FILE STRING_ARG */ +#line 2965 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_key_file); cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str); } -#line 6180 "util/configparser.c" +#line 6071 "util/configparser.c" break; - case 562: -#line 2956 "./util/configparser.y" - { + case 564: /* dt_dnstap_tls_client_cert_file: VAR_DNSTAP_TLS_CLIENT_CERT_FILE STRING_ARG */ +#line 2972 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_cert_file); cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str); } -#line 6190 "util/configparser.c" +#line 6081 "util/configparser.c" break; - case 563: -#line 2963 "./util/configparser.y" - { + case 565: /* dt_dnstap_send_identity: VAR_DNSTAP_SEND_IDENTITY STRING_ARG */ +#line 2979 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6202 "util/configparser.c" +#line 6093 "util/configparser.c" break; - case 564: -#line 2972 "./util/configparser.y" - { + case 566: /* dt_dnstap_send_version: VAR_DNSTAP_SEND_VERSION STRING_ARG */ +#line 2988 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6214 "util/configparser.c" +#line 6105 "util/configparser.c" break; - case 565: -#line 2981 "./util/configparser.y" - { + case 567: /* dt_dnstap_identity: VAR_DNSTAP_IDENTITY STRING_ARG */ +#line 2997 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } -#line 6224 "util/configparser.c" +#line 6115 "util/configparser.c" break; - case 566: -#line 2988 "./util/configparser.y" - { + case 568: /* dt_dnstap_version: VAR_DNSTAP_VERSION STRING_ARG */ +#line 3004 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } -#line 6234 "util/configparser.c" +#line 6125 "util/configparser.c" break; - case 567: -#line 2995 "./util/configparser.y" - { + case 569: /* dt_dnstap_log_resolver_query_messages: VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES STRING_ARG */ +#line 3011 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -6243,12 +6134,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6247 "util/configparser.c" +#line 6138 "util/configparser.c" break; - case 568: -#line 3005 "./util/configparser.y" - { + case 570: /* dt_dnstap_log_resolver_response_messages: VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES STRING_ARG */ +#line 3021 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -6256,12 +6147,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6260 "util/configparser.c" +#line 6151 "util/configparser.c" break; - case 569: -#line 3015 "./util/configparser.y" - { + case 571: /* dt_dnstap_log_client_query_messages: VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES STRING_ARG */ +#line 3031 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -6269,12 +6160,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6273 "util/configparser.c" +#line 6164 "util/configparser.c" break; - case 570: -#line 3025 "./util/configparser.y" - { + case 572: /* dt_dnstap_log_client_response_messages: VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES STRING_ARG */ +#line 3041 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -6282,12 +6173,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6286 "util/configparser.c" +#line 6177 "util/configparser.c" break; - case 571: -#line 3035 "./util/configparser.y" - { + case 573: /* dt_dnstap_log_forwarder_query_messages: VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES STRING_ARG */ +#line 3051 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -6295,12 +6186,12 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6299 "util/configparser.c" +#line 6190 "util/configparser.c" break; - case 572: -#line 3045 "./util/configparser.y" - { + case 574: /* dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES STRING_ARG */ +#line 3061 "./util/configparser.y" + { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -6308,48 +6199,48 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6312 "util/configparser.c" +#line 6203 "util/configparser.c" break; - case 573: -#line 3055 "./util/configparser.y" - { + case 575: /* pythonstart: VAR_PYTHON */ +#line 3071 "./util/configparser.y" + { OUTYY(("\nP(python:)\n")); } -#line 6320 "util/configparser.c" +#line 6211 "util/configparser.c" break; - case 577: -#line 3064 "./util/configparser.y" - { + case 579: /* py_script: VAR_PYTHON_SCRIPT STRING_ARG */ +#line 3080 "./util/configparser.y" + { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6330 "util/configparser.c" +#line 6221 "util/configparser.c" break; - case 578: -#line 3070 "./util/configparser.y" - { + case 580: /* dynlibstart: VAR_DYNLIB */ +#line 3086 "./util/configparser.y" + { OUTYY(("\nP(dynlib:)\n")); } -#line 6338 "util/configparser.c" +#line 6229 "util/configparser.c" break; - case 582: -#line 3079 "./util/configparser.y" - { + case 584: /* dl_file: VAR_DYNLIB_FILE STRING_ARG */ +#line 3095 "./util/configparser.y" + { OUTYY(("P(dynlib-file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6348 "util/configparser.c" +#line 6239 "util/configparser.c" break; - case 583: -#line 3085 "./util/configparser.y" - { + case 585: /* server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG */ +#line 3101 "./util/configparser.y" + { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); @@ -6357,132 +6248,132 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6361 "util/configparser.c" +#line 6252 "util/configparser.c" break; - case 584: -#line 3095 "./util/configparser.y" - { + case 586: /* server_log_identity: VAR_LOG_IDENTITY STRING_ARG */ +#line 3111 "./util/configparser.y" + { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = (yyvsp[0].str); } -#line 6371 "util/configparser.c" +#line 6262 "util/configparser.c" break; - case 585: -#line 3102 "./util/configparser.y" - { + case 587: /* server_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */ +#line 3118 "./util/configparser.y" + { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_actions, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 6383 "util/configparser.c" +#line 6274 "util/configparser.c" break; - case 586: -#line 3111 "./util/configparser.y" - { + case 588: /* server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */ +#line 3127 "./util/configparser.y" + { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 6394 "util/configparser.c" +#line 6285 "util/configparser.c" break; - case 587: -#line 3119 "./util/configparser.y" - { + case 589: /* dnscstart: VAR_DNSCRYPT */ +#line 3135 "./util/configparser.y" + { OUTYY(("\nP(dnscrypt:)\n")); } -#line 6402 "util/configparser.c" +#line 6293 "util/configparser.c" break; - case 600: -#line 3135 "./util/configparser.y" - { + case 602: /* dnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG */ +#line 3151 "./util/configparser.y" + { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6414 "util/configparser.c" +#line 6305 "util/configparser.c" break; - case 601: -#line 3145 "./util/configparser.y" - { + case 603: /* dnsc_dnscrypt_port: VAR_DNSCRYPT_PORT STRING_ARG */ +#line 3161 "./util/configparser.y" + { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("port number expected"); else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6426 "util/configparser.c" +#line 6317 "util/configparser.c" break; - case 602: -#line 3154 "./util/configparser.y" - { + case 604: /* dnsc_dnscrypt_provider: VAR_DNSCRYPT_PROVIDER STRING_ARG */ +#line 3170 "./util/configparser.y" + { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } -#line 6436 "util/configparser.c" +#line 6327 "util/configparser.c" break; - case 603: -#line 3161 "./util/configparser.y" - { + case 605: /* dnsc_dnscrypt_provider_cert: VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG */ +#line 3177 "./util/configparser.y" + { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) log_warn("dnscrypt-provider-cert %s is a duplicate", (yyvsp[0].str)); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 6448 "util/configparser.c" +#line 6339 "util/configparser.c" break; - case 604: -#line 3170 "./util/configparser.y" - { + case 606: /* dnsc_dnscrypt_provider_cert_rotated: VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG */ +#line 3186 "./util/configparser.y" + { OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); } -#line 6458 "util/configparser.c" +#line 6349 "util/configparser.c" break; - case 605: -#line 3177 "./util/configparser.y" - { + case 607: /* dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG */ +#line 3193 "./util/configparser.y" + { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) log_warn("dnscrypt-secret-key: %s is a duplicate", (yyvsp[0].str)); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 6470 "util/configparser.c" +#line 6361 "util/configparser.c" break; - case 606: -#line 3186 "./util/configparser.y" - { + case 608: /* dnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG */ +#line 3202 "./util/configparser.y" + { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6481 "util/configparser.c" +#line 6372 "util/configparser.c" break; - case 607: -#line 3194 "./util/configparser.y" - { + case 609: /* dnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG */ +#line 3210 "./util/configparser.y" + { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); @@ -6493,23 +6384,23 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6497 "util/configparser.c" +#line 6388 "util/configparser.c" break; - case 608: -#line 3207 "./util/configparser.y" - { + case 610: /* dnsc_dnscrypt_nonce_cache_size: VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG */ +#line 3223 "./util/configparser.y" + { OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6508 "util/configparser.c" +#line 6399 "util/configparser.c" break; - case 609: -#line 3215 "./util/configparser.y" - { + case 611: /* dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG */ +#line 3231 "./util/configparser.y" + { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); @@ -6520,20 +6411,20 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6524 "util/configparser.c" +#line 6415 "util/configparser.c" break; - case 610: -#line 3228 "./util/configparser.y" - { + case 612: /* cachedbstart: VAR_CACHEDB */ +#line 3244 "./util/configparser.y" + { OUTYY(("\nP(cachedb:)\n")); } -#line 6532 "util/configparser.c" +#line 6423 "util/configparser.c" break; - case 619: -#line 3239 "./util/configparser.y" - { + case 621: /* cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG */ +#line 3255 "./util/configparser.y" + { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->cachedb_backend); @@ -6543,12 +6434,12 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6547 "util/configparser.c" +#line 6438 "util/configparser.c" break; - case 620: -#line 3251 "./util/configparser.y" - { + case 622: /* cachedb_secret_seed: VAR_CACHEDB_SECRETSEED STRING_ARG */ +#line 3267 "./util/configparser.y" + { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->cachedb_secret); @@ -6558,12 +6449,12 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6562 "util/configparser.c" +#line 6453 "util/configparser.c" break; - case 621: -#line 3263 "./util/configparser.y" - { + case 623: /* redis_server_host: VAR_CACHEDB_REDISHOST STRING_ARG */ +#line 3279 "./util/configparser.y" + { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->redis_server_host); @@ -6573,12 +6464,12 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6577 "util/configparser.c" +#line 6468 "util/configparser.c" break; - case 622: -#line 3275 "./util/configparser.y" - { + case 624: /* redis_server_port: VAR_CACHEDB_REDISPORT STRING_ARG */ +#line 3291 "./util/configparser.y" + { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; OUTYY(("P(redis_server_port:%s)\n", (yyvsp[0].str))); @@ -6591,12 +6482,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6595 "util/configparser.c" +#line 6486 "util/configparser.c" break; - case 623: -#line 3290 "./util/configparser.y" - { + case 625: /* redis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG */ +#line 3306 "./util/configparser.y" + { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6607,12 +6498,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6611 "util/configparser.c" +#line 6502 "util/configparser.c" break; - case 624: -#line 3303 "./util/configparser.y" - { + case 626: /* redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG */ +#line 3319 "./util/configparser.y" + { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6623,12 +6514,12 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6627 "util/configparser.c" +#line 6518 "util/configparser.c" break; - case 625: -#line 3316 "./util/configparser.y" - { + case 627: /* server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG */ +#line 3332 "./util/configparser.y" + { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) yyerror("positive number expected"); @@ -6637,20 +6528,20 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6641 "util/configparser.c" +#line 6532 "util/configparser.c" break; - case 626: -#line 3327 "./util/configparser.y" - { + case 628: /* ipsetstart: VAR_IPSET */ +#line 3343 "./util/configparser.y" + { OUTYY(("\nP(ipset:)\n")); } -#line 6649 "util/configparser.c" +#line 6540 "util/configparser.c" break; - case 631: -#line 3336 "./util/configparser.y" - { + case 633: /* ipset_name_v4: VAR_IPSET_NAME_V4 STRING_ARG */ +#line 3352 "./util/configparser.y" + { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->ipset_name_v4) @@ -6663,12 +6554,12 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6667 "util/configparser.c" +#line 6558 "util/configparser.c" break; - case 632: -#line 3351 "./util/configparser.y" - { + case 634: /* ipset_name_v6: VAR_IPSET_NAME_V6 STRING_ARG */ +#line 3367 "./util/configparser.y" + { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->ipset_name_v6) @@ -6681,11 +6572,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6685 "util/configparser.c" +#line 6576 "util/configparser.c" break; -#line 6689 "util/configparser.c" +#line 6580 "util/configparser.c" default: break; } @@ -6700,11 +6591,10 @@ yyreduce: case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ - YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; - YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; @@ -6728,50 +6618,14 @@ yyreduce: yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ - yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); - + yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; -#if ! YYERROR_VERBOSE yyerror (YY_("syntax error")); -#else -# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ - yyssp, yytoken) - { - char const *yymsgp = YY_("syntax error"); - int yysyntax_error_status; - yysyntax_error_status = YYSYNTAX_ERROR; - if (yysyntax_error_status == 0) - yymsgp = yymsg; - else if (yysyntax_error_status == 1) - { - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); - if (!yymsg) - { - yymsg = yymsgbuf; - yymsg_alloc = sizeof yymsgbuf; - yysyntax_error_status = 2; - } - else - { - yysyntax_error_status = YYSYNTAX_ERROR; - yymsgp = yymsg; - } - } - yyerror (yymsgp); - if (yysyntax_error_status == 2) - goto yyexhaustedlab; - } -# undef YYSYNTAX_ERROR -#endif } - - if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an @@ -6820,13 +6674,14 @@ yyerrorlab: yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ + /* Pop stack until we find a state that shifts the error token. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default (yyn)) { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + yyn += YYSYMBOL_YYerror; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror) { yyn = yytable[yyn]; if (0 < yyn) @@ -6840,7 +6695,7 @@ yyerrlab1: yydestruct ("Error: popping", - yystos[yystate], yyvsp); + YY_ACCESSING_SYMBOL (yystate), yyvsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); @@ -6852,7 +6707,7 @@ yyerrlab1: /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp); yystate = yyn; goto yynewstate; @@ -6874,20 +6729,20 @@ yyabortlab: goto yyreturn; -#if !defined yyoverflow || YYERROR_VERBOSE +#if !defined yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (YY_("memory exhausted")); yyresult = 2; - /* Fall through. */ + goto yyreturn; #endif -/*-----------------------------------------------------. -| yyreturn -- parsing is finished, return the result. | -`-----------------------------------------------------*/ +/*-------------------------------------------------------. +| yyreturn -- parsing is finished, clean up and return. | +`-------------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { @@ -6904,20 +6759,18 @@ yyreturn: while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); + YY_ACCESSING_SYMBOL (+*yyssp), yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif -#if YYERROR_VERBOSE - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); -#endif + return yyresult; } -#line 3365 "./util/configparser.y" + +#line 3381 "./util/configparser.y" /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 323d587dd..0e82fd03d 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.4.1. */ +/* A Bison parser, made by GNU Bison 3.7. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -31,8 +31,9 @@ This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ -/* Undocumented macros, especially those whose name start with YY_, - are private implementation details. Do not rely on them. */ +/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, + especially those whose name start with YY_ or yy_. They are + private implementation details that can be changed or removed. */ #ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED # define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED @@ -44,314 +45,323 @@ extern int yydebug; #endif -/* Token type. */ +/* Token kinds. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { - SPACE = 258, - LETTER = 259, - NEWLINE = 260, - COMMENT = 261, - COLON = 262, - ANY = 263, - ZONESTR = 264, - STRING_ARG = 265, - VAR_FORCE_TOPLEVEL = 266, - VAR_SERVER = 267, - VAR_VERBOSITY = 268, - VAR_NUM_THREADS = 269, - VAR_PORT = 270, - VAR_OUTGOING_RANGE = 271, - VAR_INTERFACE = 272, - VAR_PREFER_IP4 = 273, - VAR_DO_IP4 = 274, - VAR_DO_IP6 = 275, - VAR_PREFER_IP6 = 276, - VAR_DO_UDP = 277, - VAR_DO_TCP = 278, - VAR_TCP_MSS = 279, - VAR_OUTGOING_TCP_MSS = 280, - VAR_TCP_IDLE_TIMEOUT = 281, - VAR_EDNS_TCP_KEEPALIVE = 282, - VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 283, - VAR_CHROOT = 284, - VAR_USERNAME = 285, - VAR_DIRECTORY = 286, - VAR_LOGFILE = 287, - VAR_PIDFILE = 288, - VAR_MSG_CACHE_SIZE = 289, - VAR_MSG_CACHE_SLABS = 290, - VAR_NUM_QUERIES_PER_THREAD = 291, - VAR_RRSET_CACHE_SIZE = 292, - VAR_RRSET_CACHE_SLABS = 293, - VAR_OUTGOING_NUM_TCP = 294, - VAR_INFRA_HOST_TTL = 295, - VAR_INFRA_LAME_TTL = 296, - VAR_INFRA_CACHE_SLABS = 297, - VAR_INFRA_CACHE_NUMHOSTS = 298, - VAR_INFRA_CACHE_LAME_SIZE = 299, - VAR_NAME = 300, - VAR_STUB_ZONE = 301, - VAR_STUB_HOST = 302, - VAR_STUB_ADDR = 303, - VAR_TARGET_FETCH_POLICY = 304, - VAR_HARDEN_SHORT_BUFSIZE = 305, - VAR_HARDEN_LARGE_QUERIES = 306, - VAR_FORWARD_ZONE = 307, - VAR_FORWARD_HOST = 308, - VAR_FORWARD_ADDR = 309, - VAR_DO_NOT_QUERY_ADDRESS = 310, - VAR_HIDE_IDENTITY = 311, - VAR_HIDE_VERSION = 312, - VAR_IDENTITY = 313, - VAR_VERSION = 314, - VAR_HARDEN_GLUE = 315, - VAR_MODULE_CONF = 316, - VAR_TRUST_ANCHOR_FILE = 317, - VAR_TRUST_ANCHOR = 318, - VAR_VAL_OVERRIDE_DATE = 319, - VAR_BOGUS_TTL = 320, - VAR_VAL_CLEAN_ADDITIONAL = 321, - VAR_VAL_PERMISSIVE_MODE = 322, - VAR_INCOMING_NUM_TCP = 323, - VAR_MSG_BUFFER_SIZE = 324, - VAR_KEY_CACHE_SIZE = 325, - VAR_KEY_CACHE_SLABS = 326, - VAR_TRUSTED_KEYS_FILE = 327, - VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 328, - VAR_USE_SYSLOG = 329, - VAR_OUTGOING_INTERFACE = 330, - VAR_ROOT_HINTS = 331, - VAR_DO_NOT_QUERY_LOCALHOST = 332, - VAR_CACHE_MAX_TTL = 333, - VAR_HARDEN_DNSSEC_STRIPPED = 334, - VAR_ACCESS_CONTROL = 335, - VAR_LOCAL_ZONE = 336, - VAR_LOCAL_DATA = 337, - VAR_INTERFACE_AUTOMATIC = 338, - VAR_STATISTICS_INTERVAL = 339, - VAR_DO_DAEMONIZE = 340, - VAR_USE_CAPS_FOR_ID = 341, - VAR_STATISTICS_CUMULATIVE = 342, - VAR_OUTGOING_PORT_PERMIT = 343, - VAR_OUTGOING_PORT_AVOID = 344, - VAR_DLV_ANCHOR_FILE = 345, - VAR_DLV_ANCHOR = 346, - VAR_NEG_CACHE_SIZE = 347, - VAR_HARDEN_REFERRAL_PATH = 348, - VAR_PRIVATE_ADDRESS = 349, - VAR_PRIVATE_DOMAIN = 350, - VAR_REMOTE_CONTROL = 351, - VAR_CONTROL_ENABLE = 352, - VAR_CONTROL_INTERFACE = 353, - VAR_CONTROL_PORT = 354, - VAR_SERVER_KEY_FILE = 355, - VAR_SERVER_CERT_FILE = 356, - VAR_CONTROL_KEY_FILE = 357, - VAR_CONTROL_CERT_FILE = 358, - VAR_CONTROL_USE_CERT = 359, - VAR_EXTENDED_STATISTICS = 360, - VAR_LOCAL_DATA_PTR = 361, - VAR_JOSTLE_TIMEOUT = 362, - VAR_STUB_PRIME = 363, - VAR_UNWANTED_REPLY_THRESHOLD = 364, - VAR_LOG_TIME_ASCII = 365, - VAR_DOMAIN_INSECURE = 366, - VAR_PYTHON = 367, - VAR_PYTHON_SCRIPT = 368, - VAR_VAL_SIG_SKEW_MIN = 369, - VAR_VAL_SIG_SKEW_MAX = 370, - VAR_CACHE_MIN_TTL = 371, - VAR_VAL_LOG_LEVEL = 372, - VAR_AUTO_TRUST_ANCHOR_FILE = 373, - VAR_KEEP_MISSING = 374, - VAR_ADD_HOLDDOWN = 375, - VAR_DEL_HOLDDOWN = 376, - VAR_SO_RCVBUF = 377, - VAR_EDNS_BUFFER_SIZE = 378, - VAR_PREFETCH = 379, - VAR_PREFETCH_KEY = 380, - VAR_SO_SNDBUF = 381, - VAR_SO_REUSEPORT = 382, - VAR_HARDEN_BELOW_NXDOMAIN = 383, - VAR_IGNORE_CD_FLAG = 384, - VAR_LOG_QUERIES = 385, - VAR_LOG_REPLIES = 386, - VAR_LOG_LOCAL_ACTIONS = 387, - VAR_TCP_UPSTREAM = 388, - VAR_SSL_UPSTREAM = 389, - VAR_SSL_SERVICE_KEY = 390, - VAR_SSL_SERVICE_PEM = 391, - VAR_SSL_PORT = 392, - VAR_FORWARD_FIRST = 393, - VAR_STUB_SSL_UPSTREAM = 394, - VAR_FORWARD_SSL_UPSTREAM = 395, - VAR_TLS_CERT_BUNDLE = 396, - VAR_HTTPS_PORT = 397, - VAR_HTTP_ENDPOINT = 398, - VAR_HTTP_MAX_STREAMS = 399, - VAR_HTTP_QUERY_BUFFER_SIZE = 400, - VAR_HTTP_RESPONSE_BUFFER_SIZE = 401, - VAR_HTTP_NODELAY = 402, - VAR_HTTP_NOTLS_DOWNSTREAM = 403, - VAR_STUB_FIRST = 404, - VAR_MINIMAL_RESPONSES = 405, - VAR_RRSET_ROUNDROBIN = 406, - VAR_MAX_UDP_SIZE = 407, - VAR_DELAY_CLOSE = 408, - VAR_UDP_CONNECT = 409, - VAR_UNBLOCK_LAN_ZONES = 410, - VAR_INSECURE_LAN_ZONES = 411, - VAR_INFRA_CACHE_MIN_RTT = 412, - VAR_INFRA_KEEP_PROBING = 413, - VAR_DNS64_PREFIX = 414, - VAR_DNS64_SYNTHALL = 415, - VAR_DNS64_IGNORE_AAAA = 416, - VAR_DNSTAP = 417, - VAR_DNSTAP_ENABLE = 418, - VAR_DNSTAP_SOCKET_PATH = 419, - VAR_DNSTAP_IP = 420, - VAR_DNSTAP_TLS = 421, - VAR_DNSTAP_TLS_SERVER_NAME = 422, - VAR_DNSTAP_TLS_CERT_BUNDLE = 423, - VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 424, - VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 425, - VAR_DNSTAP_SEND_IDENTITY = 426, - VAR_DNSTAP_SEND_VERSION = 427, - VAR_DNSTAP_BIDIRECTIONAL = 428, - VAR_DNSTAP_IDENTITY = 429, - VAR_DNSTAP_VERSION = 430, - VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 431, - VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 432, - VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 433, - VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 434, - VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 435, - VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 436, - VAR_RESPONSE_IP_TAG = 437, - VAR_RESPONSE_IP = 438, - VAR_RESPONSE_IP_DATA = 439, - VAR_HARDEN_ALGO_DOWNGRADE = 440, - VAR_IP_TRANSPARENT = 441, - VAR_IP_DSCP = 442, - VAR_DISABLE_DNSSEC_LAME_CHECK = 443, - VAR_IP_RATELIMIT = 444, - VAR_IP_RATELIMIT_SLABS = 445, - VAR_IP_RATELIMIT_SIZE = 446, - VAR_RATELIMIT = 447, - VAR_RATELIMIT_SLABS = 448, - VAR_RATELIMIT_SIZE = 449, - VAR_RATELIMIT_FOR_DOMAIN = 450, - VAR_RATELIMIT_BELOW_DOMAIN = 451, - VAR_IP_RATELIMIT_FACTOR = 452, - VAR_RATELIMIT_FACTOR = 453, - VAR_SEND_CLIENT_SUBNET = 454, - VAR_CLIENT_SUBNET_ZONE = 455, - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 456, - VAR_CLIENT_SUBNET_OPCODE = 457, - VAR_MAX_CLIENT_SUBNET_IPV4 = 458, - VAR_MAX_CLIENT_SUBNET_IPV6 = 459, - VAR_MIN_CLIENT_SUBNET_IPV4 = 460, - VAR_MIN_CLIENT_SUBNET_IPV6 = 461, - VAR_MAX_ECS_TREE_SIZE_IPV4 = 462, - VAR_MAX_ECS_TREE_SIZE_IPV6 = 463, - VAR_CAPS_WHITELIST = 464, - VAR_CACHE_MAX_NEGATIVE_TTL = 465, - VAR_PERMIT_SMALL_HOLDDOWN = 466, - VAR_QNAME_MINIMISATION = 467, - VAR_QNAME_MINIMISATION_STRICT = 468, - VAR_IP_FREEBIND = 469, - VAR_DEFINE_TAG = 470, - VAR_LOCAL_ZONE_TAG = 471, - VAR_ACCESS_CONTROL_TAG = 472, - VAR_LOCAL_ZONE_OVERRIDE = 473, - VAR_ACCESS_CONTROL_TAG_ACTION = 474, - VAR_ACCESS_CONTROL_TAG_DATA = 475, - VAR_VIEW = 476, - VAR_ACCESS_CONTROL_VIEW = 477, - VAR_VIEW_FIRST = 478, - VAR_SERVE_EXPIRED = 479, - VAR_SERVE_EXPIRED_TTL = 480, - VAR_SERVE_EXPIRED_TTL_RESET = 481, - VAR_SERVE_EXPIRED_REPLY_TTL = 482, - VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 483, - VAR_FAKE_DSA = 484, - VAR_FAKE_SHA1 = 485, - VAR_LOG_IDENTITY = 486, - VAR_HIDE_TRUSTANCHOR = 487, - VAR_TRUST_ANCHOR_SIGNALING = 488, - VAR_AGGRESSIVE_NSEC = 489, - VAR_USE_SYSTEMD = 490, - VAR_SHM_ENABLE = 491, - VAR_SHM_KEY = 492, - VAR_ROOT_KEY_SENTINEL = 493, - VAR_DNSCRYPT = 494, - VAR_DNSCRYPT_ENABLE = 495, - VAR_DNSCRYPT_PORT = 496, - VAR_DNSCRYPT_PROVIDER = 497, - VAR_DNSCRYPT_SECRET_KEY = 498, - VAR_DNSCRYPT_PROVIDER_CERT = 499, - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 500, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 501, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 502, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 503, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 504, - VAR_IPSECMOD_ENABLED = 505, - VAR_IPSECMOD_HOOK = 506, - VAR_IPSECMOD_IGNORE_BOGUS = 507, - VAR_IPSECMOD_MAX_TTL = 508, - VAR_IPSECMOD_WHITELIST = 509, - VAR_IPSECMOD_STRICT = 510, - VAR_CACHEDB = 511, - VAR_CACHEDB_BACKEND = 512, - VAR_CACHEDB_SECRETSEED = 513, - VAR_CACHEDB_REDISHOST = 514, - VAR_CACHEDB_REDISPORT = 515, - VAR_CACHEDB_REDISTIMEOUT = 516, - VAR_CACHEDB_REDISEXPIRERECORDS = 517, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 518, - VAR_FOR_UPSTREAM = 519, - VAR_AUTH_ZONE = 520, - VAR_ZONEFILE = 521, - VAR_MASTER = 522, - VAR_URL = 523, - VAR_FOR_DOWNSTREAM = 524, - VAR_FALLBACK_ENABLED = 525, - VAR_TLS_ADDITIONAL_PORT = 526, - VAR_LOW_RTT = 527, - VAR_LOW_RTT_PERMIL = 528, - VAR_FAST_SERVER_PERMIL = 529, - VAR_FAST_SERVER_NUM = 530, - VAR_ALLOW_NOTIFY = 531, - VAR_TLS_WIN_CERT = 532, - VAR_TCP_CONNECTION_LIMIT = 533, - VAR_FORWARD_NO_CACHE = 534, - VAR_STUB_NO_CACHE = 535, - VAR_LOG_SERVFAIL = 536, - VAR_DENY_ANY = 537, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 538, - VAR_LOG_TAG_QUERYREPLY = 539, - VAR_STREAM_WAIT_SIZE = 540, - VAR_TLS_CIPHERS = 541, - VAR_TLS_CIPHERSUITES = 542, - VAR_TLS_USE_SNI = 543, - VAR_IPSET = 544, - VAR_IPSET_NAME_V4 = 545, - VAR_IPSET_NAME_V6 = 546, - VAR_TLS_SESSION_TICKET_KEYS = 547, - VAR_RPZ = 548, - VAR_TAGS = 549, - VAR_RPZ_ACTION_OVERRIDE = 550, - VAR_RPZ_CNAME_OVERRIDE = 551, - VAR_RPZ_LOG = 552, - VAR_RPZ_LOG_NAME = 553, - VAR_DYNLIB = 554, - VAR_DYNLIB_FILE = 555, - VAR_EDNS_CLIENT_STRING = 556, - VAR_EDNS_CLIENT_STRING_OPCODE = 557 + YYEMPTY = -2, + YYEOF = 0, /* "end of file" */ + YYerror = 256, /* error */ + YYUNDEF = 257, /* "invalid token" */ + SPACE = 258, /* SPACE */ + LETTER = 259, /* LETTER */ + NEWLINE = 260, /* NEWLINE */ + COMMENT = 261, /* COMMENT */ + COLON = 262, /* COLON */ + ANY = 263, /* ANY */ + ZONESTR = 264, /* ZONESTR */ + STRING_ARG = 265, /* STRING_ARG */ + VAR_FORCE_TOPLEVEL = 266, /* VAR_FORCE_TOPLEVEL */ + VAR_SERVER = 267, /* VAR_SERVER */ + VAR_VERBOSITY = 268, /* VAR_VERBOSITY */ + VAR_NUM_THREADS = 269, /* VAR_NUM_THREADS */ + VAR_PORT = 270, /* VAR_PORT */ + VAR_OUTGOING_RANGE = 271, /* VAR_OUTGOING_RANGE */ + VAR_INTERFACE = 272, /* VAR_INTERFACE */ + VAR_PREFER_IP4 = 273, /* VAR_PREFER_IP4 */ + VAR_DO_IP4 = 274, /* VAR_DO_IP4 */ + VAR_DO_IP6 = 275, /* VAR_DO_IP6 */ + VAR_PREFER_IP6 = 276, /* VAR_PREFER_IP6 */ + VAR_DO_UDP = 277, /* VAR_DO_UDP */ + VAR_DO_TCP = 278, /* VAR_DO_TCP */ + VAR_TCP_MSS = 279, /* VAR_TCP_MSS */ + VAR_OUTGOING_TCP_MSS = 280, /* VAR_OUTGOING_TCP_MSS */ + VAR_TCP_IDLE_TIMEOUT = 281, /* VAR_TCP_IDLE_TIMEOUT */ + VAR_EDNS_TCP_KEEPALIVE = 282, /* VAR_EDNS_TCP_KEEPALIVE */ + VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 283, /* VAR_EDNS_TCP_KEEPALIVE_TIMEOUT */ + VAR_CHROOT = 284, /* VAR_CHROOT */ + VAR_USERNAME = 285, /* VAR_USERNAME */ + VAR_DIRECTORY = 286, /* VAR_DIRECTORY */ + VAR_LOGFILE = 287, /* VAR_LOGFILE */ + VAR_PIDFILE = 288, /* VAR_PIDFILE */ + VAR_MSG_CACHE_SIZE = 289, /* VAR_MSG_CACHE_SIZE */ + VAR_MSG_CACHE_SLABS = 290, /* VAR_MSG_CACHE_SLABS */ + VAR_NUM_QUERIES_PER_THREAD = 291, /* VAR_NUM_QUERIES_PER_THREAD */ + VAR_RRSET_CACHE_SIZE = 292, /* VAR_RRSET_CACHE_SIZE */ + VAR_RRSET_CACHE_SLABS = 293, /* VAR_RRSET_CACHE_SLABS */ + VAR_OUTGOING_NUM_TCP = 294, /* VAR_OUTGOING_NUM_TCP */ + VAR_INFRA_HOST_TTL = 295, /* VAR_INFRA_HOST_TTL */ + VAR_INFRA_LAME_TTL = 296, /* VAR_INFRA_LAME_TTL */ + VAR_INFRA_CACHE_SLABS = 297, /* VAR_INFRA_CACHE_SLABS */ + VAR_INFRA_CACHE_NUMHOSTS = 298, /* VAR_INFRA_CACHE_NUMHOSTS */ + VAR_INFRA_CACHE_LAME_SIZE = 299, /* VAR_INFRA_CACHE_LAME_SIZE */ + VAR_NAME = 300, /* VAR_NAME */ + VAR_STUB_ZONE = 301, /* VAR_STUB_ZONE */ + VAR_STUB_HOST = 302, /* VAR_STUB_HOST */ + VAR_STUB_ADDR = 303, /* VAR_STUB_ADDR */ + VAR_TARGET_FETCH_POLICY = 304, /* VAR_TARGET_FETCH_POLICY */ + VAR_HARDEN_SHORT_BUFSIZE = 305, /* VAR_HARDEN_SHORT_BUFSIZE */ + VAR_HARDEN_LARGE_QUERIES = 306, /* VAR_HARDEN_LARGE_QUERIES */ + VAR_FORWARD_ZONE = 307, /* VAR_FORWARD_ZONE */ + VAR_FORWARD_HOST = 308, /* VAR_FORWARD_HOST */ + VAR_FORWARD_ADDR = 309, /* VAR_FORWARD_ADDR */ + VAR_DO_NOT_QUERY_ADDRESS = 310, /* VAR_DO_NOT_QUERY_ADDRESS */ + VAR_HIDE_IDENTITY = 311, /* VAR_HIDE_IDENTITY */ + VAR_HIDE_VERSION = 312, /* VAR_HIDE_VERSION */ + VAR_IDENTITY = 313, /* VAR_IDENTITY */ + VAR_VERSION = 314, /* VAR_VERSION */ + VAR_HARDEN_GLUE = 315, /* VAR_HARDEN_GLUE */ + VAR_MODULE_CONF = 316, /* VAR_MODULE_CONF */ + VAR_TRUST_ANCHOR_FILE = 317, /* VAR_TRUST_ANCHOR_FILE */ + VAR_TRUST_ANCHOR = 318, /* VAR_TRUST_ANCHOR */ + VAR_VAL_OVERRIDE_DATE = 319, /* VAR_VAL_OVERRIDE_DATE */ + VAR_BOGUS_TTL = 320, /* VAR_BOGUS_TTL */ + VAR_VAL_CLEAN_ADDITIONAL = 321, /* VAR_VAL_CLEAN_ADDITIONAL */ + VAR_VAL_PERMISSIVE_MODE = 322, /* VAR_VAL_PERMISSIVE_MODE */ + VAR_INCOMING_NUM_TCP = 323, /* VAR_INCOMING_NUM_TCP */ + VAR_MSG_BUFFER_SIZE = 324, /* VAR_MSG_BUFFER_SIZE */ + VAR_KEY_CACHE_SIZE = 325, /* VAR_KEY_CACHE_SIZE */ + VAR_KEY_CACHE_SLABS = 326, /* VAR_KEY_CACHE_SLABS */ + VAR_TRUSTED_KEYS_FILE = 327, /* VAR_TRUSTED_KEYS_FILE */ + VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 328, /* VAR_VAL_NSEC3_KEYSIZE_ITERATIONS */ + VAR_USE_SYSLOG = 329, /* VAR_USE_SYSLOG */ + VAR_OUTGOING_INTERFACE = 330, /* VAR_OUTGOING_INTERFACE */ + VAR_ROOT_HINTS = 331, /* VAR_ROOT_HINTS */ + VAR_DO_NOT_QUERY_LOCALHOST = 332, /* VAR_DO_NOT_QUERY_LOCALHOST */ + VAR_CACHE_MAX_TTL = 333, /* VAR_CACHE_MAX_TTL */ + VAR_HARDEN_DNSSEC_STRIPPED = 334, /* VAR_HARDEN_DNSSEC_STRIPPED */ + VAR_ACCESS_CONTROL = 335, /* VAR_ACCESS_CONTROL */ + VAR_LOCAL_ZONE = 336, /* VAR_LOCAL_ZONE */ + VAR_LOCAL_DATA = 337, /* VAR_LOCAL_DATA */ + VAR_INTERFACE_AUTOMATIC = 338, /* VAR_INTERFACE_AUTOMATIC */ + VAR_STATISTICS_INTERVAL = 339, /* VAR_STATISTICS_INTERVAL */ + VAR_DO_DAEMONIZE = 340, /* VAR_DO_DAEMONIZE */ + VAR_USE_CAPS_FOR_ID = 341, /* VAR_USE_CAPS_FOR_ID */ + VAR_STATISTICS_CUMULATIVE = 342, /* VAR_STATISTICS_CUMULATIVE */ + VAR_OUTGOING_PORT_PERMIT = 343, /* VAR_OUTGOING_PORT_PERMIT */ + VAR_OUTGOING_PORT_AVOID = 344, /* VAR_OUTGOING_PORT_AVOID */ + VAR_DLV_ANCHOR_FILE = 345, /* VAR_DLV_ANCHOR_FILE */ + VAR_DLV_ANCHOR = 346, /* VAR_DLV_ANCHOR */ + VAR_NEG_CACHE_SIZE = 347, /* VAR_NEG_CACHE_SIZE */ + VAR_HARDEN_REFERRAL_PATH = 348, /* VAR_HARDEN_REFERRAL_PATH */ + VAR_PRIVATE_ADDRESS = 349, /* VAR_PRIVATE_ADDRESS */ + VAR_PRIVATE_DOMAIN = 350, /* VAR_PRIVATE_DOMAIN */ + VAR_REMOTE_CONTROL = 351, /* VAR_REMOTE_CONTROL */ + VAR_CONTROL_ENABLE = 352, /* VAR_CONTROL_ENABLE */ + VAR_CONTROL_INTERFACE = 353, /* VAR_CONTROL_INTERFACE */ + VAR_CONTROL_PORT = 354, /* VAR_CONTROL_PORT */ + VAR_SERVER_KEY_FILE = 355, /* VAR_SERVER_KEY_FILE */ + VAR_SERVER_CERT_FILE = 356, /* VAR_SERVER_CERT_FILE */ + VAR_CONTROL_KEY_FILE = 357, /* VAR_CONTROL_KEY_FILE */ + VAR_CONTROL_CERT_FILE = 358, /* VAR_CONTROL_CERT_FILE */ + VAR_CONTROL_USE_CERT = 359, /* VAR_CONTROL_USE_CERT */ + VAR_EXTENDED_STATISTICS = 360, /* VAR_EXTENDED_STATISTICS */ + VAR_LOCAL_DATA_PTR = 361, /* VAR_LOCAL_DATA_PTR */ + VAR_JOSTLE_TIMEOUT = 362, /* VAR_JOSTLE_TIMEOUT */ + VAR_STUB_PRIME = 363, /* VAR_STUB_PRIME */ + VAR_UNWANTED_REPLY_THRESHOLD = 364, /* VAR_UNWANTED_REPLY_THRESHOLD */ + VAR_LOG_TIME_ASCII = 365, /* VAR_LOG_TIME_ASCII */ + VAR_DOMAIN_INSECURE = 366, /* VAR_DOMAIN_INSECURE */ + VAR_PYTHON = 367, /* VAR_PYTHON */ + VAR_PYTHON_SCRIPT = 368, /* VAR_PYTHON_SCRIPT */ + VAR_VAL_SIG_SKEW_MIN = 369, /* VAR_VAL_SIG_SKEW_MIN */ + VAR_VAL_SIG_SKEW_MAX = 370, /* VAR_VAL_SIG_SKEW_MAX */ + VAR_CACHE_MIN_TTL = 371, /* VAR_CACHE_MIN_TTL */ + VAR_VAL_LOG_LEVEL = 372, /* VAR_VAL_LOG_LEVEL */ + VAR_AUTO_TRUST_ANCHOR_FILE = 373, /* VAR_AUTO_TRUST_ANCHOR_FILE */ + VAR_KEEP_MISSING = 374, /* VAR_KEEP_MISSING */ + VAR_ADD_HOLDDOWN = 375, /* VAR_ADD_HOLDDOWN */ + VAR_DEL_HOLDDOWN = 376, /* VAR_DEL_HOLDDOWN */ + VAR_SO_RCVBUF = 377, /* VAR_SO_RCVBUF */ + VAR_EDNS_BUFFER_SIZE = 378, /* VAR_EDNS_BUFFER_SIZE */ + VAR_PREFETCH = 379, /* VAR_PREFETCH */ + VAR_PREFETCH_KEY = 380, /* VAR_PREFETCH_KEY */ + VAR_SO_SNDBUF = 381, /* VAR_SO_SNDBUF */ + VAR_SO_REUSEPORT = 382, /* VAR_SO_REUSEPORT */ + VAR_HARDEN_BELOW_NXDOMAIN = 383, /* VAR_HARDEN_BELOW_NXDOMAIN */ + VAR_IGNORE_CD_FLAG = 384, /* VAR_IGNORE_CD_FLAG */ + VAR_LOG_QUERIES = 385, /* VAR_LOG_QUERIES */ + VAR_LOG_REPLIES = 386, /* VAR_LOG_REPLIES */ + VAR_LOG_LOCAL_ACTIONS = 387, /* VAR_LOG_LOCAL_ACTIONS */ + VAR_TCP_UPSTREAM = 388, /* VAR_TCP_UPSTREAM */ + VAR_SSL_UPSTREAM = 389, /* VAR_SSL_UPSTREAM */ + VAR_SSL_SERVICE_KEY = 390, /* VAR_SSL_SERVICE_KEY */ + VAR_SSL_SERVICE_PEM = 391, /* VAR_SSL_SERVICE_PEM */ + VAR_SSL_PORT = 392, /* VAR_SSL_PORT */ + VAR_FORWARD_FIRST = 393, /* VAR_FORWARD_FIRST */ + VAR_STUB_SSL_UPSTREAM = 394, /* VAR_STUB_SSL_UPSTREAM */ + VAR_FORWARD_SSL_UPSTREAM = 395, /* VAR_FORWARD_SSL_UPSTREAM */ + VAR_TLS_CERT_BUNDLE = 396, /* VAR_TLS_CERT_BUNDLE */ + VAR_HTTPS_PORT = 397, /* VAR_HTTPS_PORT */ + VAR_HTTP_ENDPOINT = 398, /* VAR_HTTP_ENDPOINT */ + VAR_HTTP_MAX_STREAMS = 399, /* VAR_HTTP_MAX_STREAMS */ + VAR_HTTP_QUERY_BUFFER_SIZE = 400, /* VAR_HTTP_QUERY_BUFFER_SIZE */ + VAR_HTTP_RESPONSE_BUFFER_SIZE = 401, /* VAR_HTTP_RESPONSE_BUFFER_SIZE */ + VAR_HTTP_NODELAY = 402, /* VAR_HTTP_NODELAY */ + VAR_HTTP_NOTLS_DOWNSTREAM = 403, /* VAR_HTTP_NOTLS_DOWNSTREAM */ + VAR_STUB_FIRST = 404, /* VAR_STUB_FIRST */ + VAR_MINIMAL_RESPONSES = 405, /* VAR_MINIMAL_RESPONSES */ + VAR_RRSET_ROUNDROBIN = 406, /* VAR_RRSET_ROUNDROBIN */ + VAR_MAX_UDP_SIZE = 407, /* VAR_MAX_UDP_SIZE */ + VAR_DELAY_CLOSE = 408, /* VAR_DELAY_CLOSE */ + VAR_UDP_CONNECT = 409, /* VAR_UDP_CONNECT */ + VAR_UNBLOCK_LAN_ZONES = 410, /* VAR_UNBLOCK_LAN_ZONES */ + VAR_INSECURE_LAN_ZONES = 411, /* VAR_INSECURE_LAN_ZONES */ + VAR_INFRA_CACHE_MIN_RTT = 412, /* VAR_INFRA_CACHE_MIN_RTT */ + VAR_INFRA_KEEP_PROBING = 413, /* VAR_INFRA_KEEP_PROBING */ + VAR_DNS64_PREFIX = 414, /* VAR_DNS64_PREFIX */ + VAR_DNS64_SYNTHALL = 415, /* VAR_DNS64_SYNTHALL */ + VAR_DNS64_IGNORE_AAAA = 416, /* VAR_DNS64_IGNORE_AAAA */ + VAR_DNSTAP = 417, /* VAR_DNSTAP */ + VAR_DNSTAP_ENABLE = 418, /* VAR_DNSTAP_ENABLE */ + VAR_DNSTAP_SOCKET_PATH = 419, /* VAR_DNSTAP_SOCKET_PATH */ + VAR_DNSTAP_IP = 420, /* VAR_DNSTAP_IP */ + VAR_DNSTAP_TLS = 421, /* VAR_DNSTAP_TLS */ + VAR_DNSTAP_TLS_SERVER_NAME = 422, /* VAR_DNSTAP_TLS_SERVER_NAME */ + VAR_DNSTAP_TLS_CERT_BUNDLE = 423, /* VAR_DNSTAP_TLS_CERT_BUNDLE */ + VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 424, /* VAR_DNSTAP_TLS_CLIENT_KEY_FILE */ + VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 425, /* VAR_DNSTAP_TLS_CLIENT_CERT_FILE */ + VAR_DNSTAP_SEND_IDENTITY = 426, /* VAR_DNSTAP_SEND_IDENTITY */ + VAR_DNSTAP_SEND_VERSION = 427, /* VAR_DNSTAP_SEND_VERSION */ + VAR_DNSTAP_BIDIRECTIONAL = 428, /* VAR_DNSTAP_BIDIRECTIONAL */ + VAR_DNSTAP_IDENTITY = 429, /* VAR_DNSTAP_IDENTITY */ + VAR_DNSTAP_VERSION = 430, /* VAR_DNSTAP_VERSION */ + VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 431, /* VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES */ + VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 432, /* VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES */ + VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 433, /* VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES */ + VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 434, /* VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES */ + VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 435, /* VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES */ + VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 436, /* VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES */ + VAR_RESPONSE_IP_TAG = 437, /* VAR_RESPONSE_IP_TAG */ + VAR_RESPONSE_IP = 438, /* VAR_RESPONSE_IP */ + VAR_RESPONSE_IP_DATA = 439, /* VAR_RESPONSE_IP_DATA */ + VAR_HARDEN_ALGO_DOWNGRADE = 440, /* VAR_HARDEN_ALGO_DOWNGRADE */ + VAR_IP_TRANSPARENT = 441, /* VAR_IP_TRANSPARENT */ + VAR_IP_DSCP = 442, /* VAR_IP_DSCP */ + VAR_DISABLE_DNSSEC_LAME_CHECK = 443, /* VAR_DISABLE_DNSSEC_LAME_CHECK */ + VAR_IP_RATELIMIT = 444, /* VAR_IP_RATELIMIT */ + VAR_IP_RATELIMIT_SLABS = 445, /* VAR_IP_RATELIMIT_SLABS */ + VAR_IP_RATELIMIT_SIZE = 446, /* VAR_IP_RATELIMIT_SIZE */ + VAR_RATELIMIT = 447, /* VAR_RATELIMIT */ + VAR_RATELIMIT_SLABS = 448, /* VAR_RATELIMIT_SLABS */ + VAR_RATELIMIT_SIZE = 449, /* VAR_RATELIMIT_SIZE */ + VAR_RATELIMIT_FOR_DOMAIN = 450, /* VAR_RATELIMIT_FOR_DOMAIN */ + VAR_RATELIMIT_BELOW_DOMAIN = 451, /* VAR_RATELIMIT_BELOW_DOMAIN */ + VAR_IP_RATELIMIT_FACTOR = 452, /* VAR_IP_RATELIMIT_FACTOR */ + VAR_RATELIMIT_FACTOR = 453, /* VAR_RATELIMIT_FACTOR */ + VAR_SEND_CLIENT_SUBNET = 454, /* VAR_SEND_CLIENT_SUBNET */ + VAR_CLIENT_SUBNET_ZONE = 455, /* VAR_CLIENT_SUBNET_ZONE */ + VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 456, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */ + VAR_CLIENT_SUBNET_OPCODE = 457, /* VAR_CLIENT_SUBNET_OPCODE */ + VAR_MAX_CLIENT_SUBNET_IPV4 = 458, /* VAR_MAX_CLIENT_SUBNET_IPV4 */ + VAR_MAX_CLIENT_SUBNET_IPV6 = 459, /* VAR_MAX_CLIENT_SUBNET_IPV6 */ + VAR_MIN_CLIENT_SUBNET_IPV4 = 460, /* VAR_MIN_CLIENT_SUBNET_IPV4 */ + VAR_MIN_CLIENT_SUBNET_IPV6 = 461, /* VAR_MIN_CLIENT_SUBNET_IPV6 */ + VAR_MAX_ECS_TREE_SIZE_IPV4 = 462, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */ + VAR_MAX_ECS_TREE_SIZE_IPV6 = 463, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */ + VAR_CAPS_WHITELIST = 464, /* VAR_CAPS_WHITELIST */ + VAR_CACHE_MAX_NEGATIVE_TTL = 465, /* VAR_CACHE_MAX_NEGATIVE_TTL */ + VAR_PERMIT_SMALL_HOLDDOWN = 466, /* VAR_PERMIT_SMALL_HOLDDOWN */ + VAR_QNAME_MINIMISATION = 467, /* VAR_QNAME_MINIMISATION */ + VAR_QNAME_MINIMISATION_STRICT = 468, /* VAR_QNAME_MINIMISATION_STRICT */ + VAR_IP_FREEBIND = 469, /* VAR_IP_FREEBIND */ + VAR_DEFINE_TAG = 470, /* VAR_DEFINE_TAG */ + VAR_LOCAL_ZONE_TAG = 471, /* VAR_LOCAL_ZONE_TAG */ + VAR_ACCESS_CONTROL_TAG = 472, /* VAR_ACCESS_CONTROL_TAG */ + VAR_LOCAL_ZONE_OVERRIDE = 473, /* VAR_LOCAL_ZONE_OVERRIDE */ + VAR_ACCESS_CONTROL_TAG_ACTION = 474, /* VAR_ACCESS_CONTROL_TAG_ACTION */ + VAR_ACCESS_CONTROL_TAG_DATA = 475, /* VAR_ACCESS_CONTROL_TAG_DATA */ + VAR_VIEW = 476, /* VAR_VIEW */ + VAR_ACCESS_CONTROL_VIEW = 477, /* VAR_ACCESS_CONTROL_VIEW */ + VAR_VIEW_FIRST = 478, /* VAR_VIEW_FIRST */ + VAR_SERVE_EXPIRED = 479, /* VAR_SERVE_EXPIRED */ + VAR_SERVE_EXPIRED_TTL = 480, /* VAR_SERVE_EXPIRED_TTL */ + VAR_SERVE_EXPIRED_TTL_RESET = 481, /* VAR_SERVE_EXPIRED_TTL_RESET */ + VAR_SERVE_EXPIRED_REPLY_TTL = 482, /* VAR_SERVE_EXPIRED_REPLY_TTL */ + VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 483, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */ + VAR_FAKE_DSA = 484, /* VAR_FAKE_DSA */ + VAR_FAKE_SHA1 = 485, /* VAR_FAKE_SHA1 */ + VAR_LOG_IDENTITY = 486, /* VAR_LOG_IDENTITY */ + VAR_HIDE_TRUSTANCHOR = 487, /* VAR_HIDE_TRUSTANCHOR */ + VAR_TRUST_ANCHOR_SIGNALING = 488, /* VAR_TRUST_ANCHOR_SIGNALING */ + VAR_AGGRESSIVE_NSEC = 489, /* VAR_AGGRESSIVE_NSEC */ + VAR_USE_SYSTEMD = 490, /* VAR_USE_SYSTEMD */ + VAR_SHM_ENABLE = 491, /* VAR_SHM_ENABLE */ + VAR_SHM_KEY = 492, /* VAR_SHM_KEY */ + VAR_ROOT_KEY_SENTINEL = 493, /* VAR_ROOT_KEY_SENTINEL */ + VAR_DNSCRYPT = 494, /* VAR_DNSCRYPT */ + VAR_DNSCRYPT_ENABLE = 495, /* VAR_DNSCRYPT_ENABLE */ + VAR_DNSCRYPT_PORT = 496, /* VAR_DNSCRYPT_PORT */ + VAR_DNSCRYPT_PROVIDER = 497, /* VAR_DNSCRYPT_PROVIDER */ + VAR_DNSCRYPT_SECRET_KEY = 498, /* VAR_DNSCRYPT_SECRET_KEY */ + VAR_DNSCRYPT_PROVIDER_CERT = 499, /* VAR_DNSCRYPT_PROVIDER_CERT */ + VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 500, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */ + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 501, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */ + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 502, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */ + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 503, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */ + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 504, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */ + VAR_IPSECMOD_ENABLED = 505, /* VAR_IPSECMOD_ENABLED */ + VAR_IPSECMOD_HOOK = 506, /* VAR_IPSECMOD_HOOK */ + VAR_IPSECMOD_IGNORE_BOGUS = 507, /* VAR_IPSECMOD_IGNORE_BOGUS */ + VAR_IPSECMOD_MAX_TTL = 508, /* VAR_IPSECMOD_MAX_TTL */ + VAR_IPSECMOD_WHITELIST = 509, /* VAR_IPSECMOD_WHITELIST */ + VAR_IPSECMOD_STRICT = 510, /* VAR_IPSECMOD_STRICT */ + VAR_CACHEDB = 511, /* VAR_CACHEDB */ + VAR_CACHEDB_BACKEND = 512, /* VAR_CACHEDB_BACKEND */ + VAR_CACHEDB_SECRETSEED = 513, /* VAR_CACHEDB_SECRETSEED */ + VAR_CACHEDB_REDISHOST = 514, /* VAR_CACHEDB_REDISHOST */ + VAR_CACHEDB_REDISPORT = 515, /* VAR_CACHEDB_REDISPORT */ + VAR_CACHEDB_REDISTIMEOUT = 516, /* VAR_CACHEDB_REDISTIMEOUT */ + VAR_CACHEDB_REDISEXPIRERECORDS = 517, /* VAR_CACHEDB_REDISEXPIRERECORDS */ + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 518, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */ + VAR_FOR_UPSTREAM = 519, /* VAR_FOR_UPSTREAM */ + VAR_AUTH_ZONE = 520, /* VAR_AUTH_ZONE */ + VAR_ZONEFILE = 521, /* VAR_ZONEFILE */ + VAR_MASTER = 522, /* VAR_MASTER */ + VAR_URL = 523, /* VAR_URL */ + VAR_FOR_DOWNSTREAM = 524, /* VAR_FOR_DOWNSTREAM */ + VAR_FALLBACK_ENABLED = 525, /* VAR_FALLBACK_ENABLED */ + VAR_TLS_ADDITIONAL_PORT = 526, /* VAR_TLS_ADDITIONAL_PORT */ + VAR_LOW_RTT = 527, /* VAR_LOW_RTT */ + VAR_LOW_RTT_PERMIL = 528, /* VAR_LOW_RTT_PERMIL */ + VAR_FAST_SERVER_PERMIL = 529, /* VAR_FAST_SERVER_PERMIL */ + VAR_FAST_SERVER_NUM = 530, /* VAR_FAST_SERVER_NUM */ + VAR_ALLOW_NOTIFY = 531, /* VAR_ALLOW_NOTIFY */ + VAR_TLS_WIN_CERT = 532, /* VAR_TLS_WIN_CERT */ + VAR_TCP_CONNECTION_LIMIT = 533, /* VAR_TCP_CONNECTION_LIMIT */ + VAR_FORWARD_NO_CACHE = 534, /* VAR_FORWARD_NO_CACHE */ + VAR_STUB_NO_CACHE = 535, /* VAR_STUB_NO_CACHE */ + VAR_LOG_SERVFAIL = 536, /* VAR_LOG_SERVFAIL */ + VAR_DENY_ANY = 537, /* VAR_DENY_ANY */ + VAR_UNKNOWN_SERVER_TIME_LIMIT = 538, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */ + VAR_LOG_TAG_QUERYREPLY = 539, /* VAR_LOG_TAG_QUERYREPLY */ + VAR_STREAM_WAIT_SIZE = 540, /* VAR_STREAM_WAIT_SIZE */ + VAR_TLS_CIPHERS = 541, /* VAR_TLS_CIPHERS */ + VAR_TLS_CIPHERSUITES = 542, /* VAR_TLS_CIPHERSUITES */ + VAR_TLS_USE_SNI = 543, /* VAR_TLS_USE_SNI */ + VAR_IPSET = 544, /* VAR_IPSET */ + VAR_IPSET_NAME_V4 = 545, /* VAR_IPSET_NAME_V4 */ + VAR_IPSET_NAME_V6 = 546, /* VAR_IPSET_NAME_V6 */ + VAR_TLS_SESSION_TICKET_KEYS = 547, /* VAR_TLS_SESSION_TICKET_KEYS */ + VAR_RPZ = 548, /* VAR_RPZ */ + VAR_TAGS = 549, /* VAR_TAGS */ + VAR_RPZ_ACTION_OVERRIDE = 550, /* VAR_RPZ_ACTION_OVERRIDE */ + VAR_RPZ_CNAME_OVERRIDE = 551, /* VAR_RPZ_CNAME_OVERRIDE */ + VAR_RPZ_LOG = 552, /* VAR_RPZ_LOG */ + VAR_RPZ_LOG_NAME = 553, /* VAR_RPZ_LOG_NAME */ + VAR_DYNLIB = 554, /* VAR_DYNLIB */ + VAR_DYNLIB_FILE = 555, /* VAR_DYNLIB_FILE */ + VAR_EDNS_CLIENT_STRING = 556, /* VAR_EDNS_CLIENT_STRING */ + VAR_EDNS_CLIENT_STRING_OPCODE = 557, /* VAR_EDNS_CLIENT_STRING_OPCODE */ + VAR_NSID = 558 /* VAR_NSID */ }; + typedef enum yytokentype yytoken_kind_t; #endif -/* Tokens. */ +/* Token kinds. */ +#define YYEOF 0 +#define YYerror 256 +#define YYUNDEF 257 #define SPACE 258 #define LETTER 259 #define NEWLINE 260 @@ -652,6 +662,7 @@ extern int yydebug; #define VAR_DYNLIB_FILE 555 #define VAR_EDNS_CLIENT_STRING 556 #define VAR_EDNS_CLIENT_STRING_OPCODE 557 +#define VAR_NSID 558 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -661,7 +672,7 @@ union YYSTYPE char* str; -#line 665 "util/configparser.h" +#line 676 "util/configparser.h" }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index 4d6b5e3fb..cb9d898b2 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -179,7 +179,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_TLS_SESSION_TICKET_KEYS VAR_RPZ VAR_TAGS VAR_RPZ_ACTION_OVERRIDE %token VAR_RPZ_CNAME_OVERRIDE VAR_RPZ_LOG VAR_RPZ_LOG_NAME %token VAR_DYNLIB VAR_DYNLIB_FILE VAR_EDNS_CLIENT_STRING -%token VAR_EDNS_CLIENT_STRING_OPCODE +%token VAR_EDNS_CLIENT_STRING_OPCODE VAR_NSID %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -293,7 +293,7 @@ content_server: server_num_threads | server_verbosity | server_port | server_stream_wait_size | server_tls_ciphers | server_tls_ciphersuites | server_tls_session_ticket_keys | server_tls_use_sni | server_edns_client_string | - server_edns_client_string_opcode + server_edns_client_string_opcode | server_nsid ; stubstart: VAR_STUB_ZONE { @@ -1304,6 +1304,22 @@ server_version: VAR_VERSION STRING_ARG cfg_parser->cfg->version = $2; } ; +server_nsid: VAR_NSID STRING_ARG + { + OUTYY(("P(server_nsid:%s)\n", $2)); + free(cfg_parser->cfg->nsid_cfg_str); + cfg_parser->cfg->nsid_cfg_str = $2; + free(cfg_parser->cfg->nsid); + cfg_parser->cfg->nsid = NULL; + cfg_parser->cfg->nsid_len = 0; + if (*$2 == 0) + ; /* pass; empty string is not setting nsid */ + else if (!(cfg_parser->cfg->nsid = cfg_parse_nsid( + $2, &cfg_parser->cfg->nsid_len))) + yyerror("the NSID must be either a hex string or an " + "ascii character string prepended with ascii_."); + } + ; server_so_rcvbuf: VAR_SO_RCVBUF STRING_ARG { OUTYY(("P(server_so_rcvbuf:%s)\n", $2)); diff --git a/util/edns.c b/util/edns.c index ddbb46e89..bfb6d65ca 100644 --- a/util/edns.c +++ b/util/edns.c @@ -160,5 +160,10 @@ int apply_edns_options(struct edns_data* edns_out, struct edns_data* edns_in, !edns_keepalive(edns_out, edns_in, c, region)) return 0; + if (cfg->nsid && edns_opt_list_find(edns_in->opt_list, LDNS_EDNS_NSID) + && !edns_opt_list_append(&edns_out->opt_list, + LDNS_EDNS_NSID, cfg->nsid_len, cfg->nsid, region)) + return 0; + return 1; } From cbb4575a18ecbda829b949306de38817d0b3495f Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Wed, 2 Dec 2020 10:58:05 +0100 Subject: [PATCH 064/168] Document existence of option --- doc/Changelog | 4 ++++ doc/FEATURES | 1 + doc/TODO | 1 - doc/unbound.conf.5.in | 5 +++++ 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 30b8d34a1..d5121864e 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +2 December 2020: Willem + - Support for RFC5001: DNS Name Server Identifier (NSID) Option + with the nsid: option in unbound.conf + 1 December 2020: Wouter - Fix #358: Squelch udp connect 'no route to host' errors on low verbosity. diff --git a/doc/FEATURES b/doc/FEATURES index 076988ea9..8d69aba9b 100644 --- a/doc/FEATURES +++ b/doc/FEATURES @@ -39,6 +39,7 @@ RFC 4343: case insensitive handling of domain names. RFC 4509: SHA256 DS hash. RFC 4592: wildcards. RFC 4697: No DNS Resolution Misbehavior. +RFC 5001: DNS Name Server Identifier (NSID) Option RFC 5011: update of trust anchors with timers. RFC 5155: NSEC3, NSEC3PARAM types RFC 5358: reflectors-are-evil: access control list for recursive diff --git a/doc/TODO b/doc/TODO index a2690451a..839656154 100644 --- a/doc/TODO +++ b/doc/TODO @@ -14,7 +14,6 @@ o (option) store primed key data in a overlaid keyhints file (sort of like draft o windows version, auto update feature, a query to check for the version. o command the server with TSIG inband. get-config, clearcache, get stats, get memstats, get ..., reload, clear one zone from cache -o NSID rfc 5001 support. o timers rfc 5011 support. o Treat YXDOMAIN from a DNAME properly, in iterator (not throwaway), validator. o make timeout backoffs randomized (a couple percent random) to spread traffic. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 38bbc44df..0423f6200 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -819,6 +819,11 @@ If enabled version.server and version.bind queries are refused. Set the version to report. If set to "", the default, then the package version is returned. .TP +.B nsid:\fR +Add the specified nsid to the EDNS section of the answer when queried +with an NSID EDNS enabled packet. As a sequence of hex characters or +with ascii_ prefix and then an ascii string. +.TP .B hide\-trustanchor: \fI If enabled trustanchor.unbound queries are refused. .TP From bdfa65c6ab91f9569a8c0f3371249a40a0a33c9b Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 9 Dec 2020 11:00:51 +0100 Subject: [PATCH 065/168] Import the patches from the files in the tarball in issue #365 https://github.com/NLnetLabs/unbound/files/5659923/patches.tar.gz from iruzanov. The merge conflicts are fixed, but no changes are made to the patched code. --- daemon/worker.c | 36 ++++++++++--- dnstap/dnstap.c | 104 ++++++++++++++++++++++++++----------- dnstap/dnstap.h | 12 ++++- services/listen_dnsport.c | 64 +++++++++++++++++------ services/listen_dnsport.h | 21 ++++++++ services/outside_network.c | 70 ++++++++++++++++++++----- util/net_help.c | 36 ++++++++++++- util/net_help.h | 10 ++++ util/netevent.c | 85 +++++++++++++++++++++--------- util/netevent.h | 10 +++- 10 files changed, 353 insertions(+), 95 deletions(-) diff --git a/daemon/worker.c b/daemon/worker.c index 76c4bb5b1..36d4208f1 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1159,9 +1159,21 @@ worker_handle_request(struct comm_point* c, void* arg, int error, } #endif #ifdef USE_DNSTAP - if(worker->dtenv.log_client_query_messages) - dt_msg_send_client_query(&worker->dtenv, &repinfo->addr, c->type, - c->buffer); + /* + * sending src (client)/dst (local service) addresses over DNSTAP from incoming request handler + */ + if(worker->dtenv.log_client_query_messages) { + struct sockaddr_storage* dst_addr; + if(repinfo->addr.ss_family == AF_INET) + dst_addr = mk_local_addr(&((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family); + else + dst_addr = mk_local_addr(&((struct sockaddr_in6*)repinfo->c->socket->addr->ai_addr)->sin6_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family); + log_addr(VERB_ALGO, "request from client", &repinfo->addr, repinfo->addrlen); + log_addr(VERB_ALGO, "to local addr", dst_addr, sizeof(dst_addr)); + dt_msg_send_client_query(&worker->dtenv, &repinfo->addr, dst_addr, c->type, c->buffer); + if(dst_addr) + free(dst_addr); + } #endif acladdr = acl_addr_lookup(worker->daemon->acl, &repinfo->addr, repinfo->addrlen); @@ -1584,9 +1596,21 @@ send_reply_rc: if(is_secure_answer) worker->stats.ans_secure++; } #ifdef USE_DNSTAP - if(worker->dtenv.log_client_response_messages) - dt_msg_send_client_response(&worker->dtenv, &repinfo->addr, - c->type, c->buffer); + /* + * sending src (client)/dst (local service) addresses over DNSTAP from send_reply code label (when we serviced local zone for ex.) + */ + if(worker->dtenv.log_client_response_messages) { + struct sockaddr_storage* dst_addr; + if(repinfo->addr.ss_family == AF_INET) + dst_addr = mk_local_addr(&((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family); + else + dst_addr = mk_local_addr(&((struct sockaddr_in6*)repinfo->c->socket->addr->ai_addr)->sin6_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family); + log_addr(VERB_ALGO, "from local addr", dst_addr, sizeof(dst_addr)); + log_addr(VERB_ALGO, "response to client", &repinfo->addr, repinfo->addrlen); + dt_msg_send_client_response(&worker->dtenv, &repinfo->addr, dst_addr, c->type, c->buffer); + if(dst_addr) + free(dst_addr); + } #endif if(worker->env.cfg->log_replies) { diff --git a/dnstap/dnstap.c b/dnstap/dnstap.c index b8a321670..2ee269be3 100644 --- a/dnstap/dnstap.c +++ b/dnstap/dnstap.c @@ -302,44 +302,75 @@ dt_fill_buffer(sldns_buffer *b, ProtobufCBinaryData *p, protobuf_c_boolean *has) static void dt_msg_fill_net(struct dt_msg *dm, - struct sockaddr_storage *ss, + struct sockaddr_storage *qs, + struct sockaddr_storage *rs, enum comm_point_type cptype, - ProtobufCBinaryData *addr, protobuf_c_boolean *has_addr, - uint32_t *port, protobuf_c_boolean *has_port) + ProtobufCBinaryData *qaddr, protobuf_c_boolean *has_qaddr, + uint32_t *qport, protobuf_c_boolean *has_qport, + ProtobufCBinaryData *raddr, protobuf_c_boolean *has_raddr, + uint32_t *rport, protobuf_c_boolean *has_rport) { - log_assert(ss->ss_family == AF_INET6 || ss->ss_family == AF_INET); - if (ss->ss_family == AF_INET6) { - struct sockaddr_in6 *s = (struct sockaddr_in6 *) ss; + log_assert(qs->ss_family == AF_INET6 || qs->ss_family == AF_INET); + if (qs->ss_family == AF_INET6) { + struct sockaddr_in6 *q = (struct sockaddr_in6 *) qs; /* socket_family */ dm->m.socket_family = DNSTAP__SOCKET_FAMILY__INET6; dm->m.has_socket_family = 1; /* addr: query_address or response_address */ - addr->data = s->sin6_addr.s6_addr; - addr->len = 16; /* IPv6 */ - *has_addr = 1; + qaddr->data = q->sin6_addr.s6_addr; + qaddr->len = 16; /* IPv6 */ + *has_qaddr = 1; /* port: query_port or response_port */ - *port = ntohs(s->sin6_port); - *has_port = 1; - } else if (ss->ss_family == AF_INET) { - struct sockaddr_in *s = (struct sockaddr_in *) ss; + *qport = ntohs(q->sin6_port); + *has_qport = 1; + } else if (qs->ss_family == AF_INET) { + struct sockaddr_in *q = (struct sockaddr_in *) qs; /* socket_family */ dm->m.socket_family = DNSTAP__SOCKET_FAMILY__INET; dm->m.has_socket_family = 1; /* addr: query_address or response_address */ - addr->data = (uint8_t *) &s->sin_addr.s_addr; - addr->len = 4; /* IPv4 */ - *has_addr = 1; + qaddr->data = (uint8_t *) &q->sin_addr.s_addr; + qaddr->len = 4; /* IPv4 */ + *has_qaddr = 1; /* port: query_port or response_port */ - *port = ntohs(s->sin_port); - *has_port = 1; + *qport = ntohs(q->sin_port); + *has_qport = 1; } + /* + * This block is to fill second set of fields in DNSTAP-message defined as request_/response_ names. + * Additional responsive structure is: struct sockaddr_storage *rs + */ + if (rs->ss_family == AF_INET6) { + struct sockaddr_in6 *r = (struct sockaddr_in6 *) rs; + + /* addr: query_address or response_address */ + raddr->data = r->sin6_addr.s6_addr; + raddr->len = 16; /* IPv6 */ + *has_raddr = 1; + + /* port: query_port or response_port */ + *rport = ntohs(r->sin6_port); + *has_rport = 1; + } else if (rs->ss_family == AF_INET) { + struct sockaddr_in *r = (struct sockaddr_in *) rs; + + /* addr: query_address or response_address */ + raddr->data = (uint8_t *) &r->sin_addr.s_addr; + raddr->len = 4; /* IPv4 */ + *has_raddr = 1; + + /* port: query_port or response_port */ + *rport = ntohs(r->sin_port); + *has_rport = 1; + } + log_assert(cptype == comm_udp || cptype == comm_tcp); if (cptype == comm_udp) { /* socket_protocol */ @@ -355,6 +386,7 @@ dt_msg_fill_net(struct dt_msg *dm, void dt_msg_send_client_query(struct dt_env *env, struct sockaddr_storage *qsock, + struct sockaddr_storage *rsock, enum comm_point_type cptype, sldns_buffer *qmsg) { @@ -374,11 +406,14 @@ dt_msg_send_client_query(struct dt_env *env, /* query_message */ dt_fill_buffer(qmsg, &dm.m.query_message, &dm.m.has_query_message); - /* socket_family, socket_protocol, query_address, query_port */ + /* socket_family, socket_protocol, query_address, query_port, response_address, response_port */ log_assert(cptype == comm_udp || cptype == comm_tcp); - dt_msg_fill_net(&dm, qsock, cptype, + dt_msg_fill_net(&dm, qsock, rsock, cptype, &dm.m.query_address, &dm.m.has_query_address, - &dm.m.query_port, &dm.m.has_query_port); + &dm.m.query_port, &dm.m.has_query_port, + &dm.m.response_address, &dm.m.has_response_address, + &dm.m.response_port, &dm.m.has_response_port); + if (dt_pack(&dm.d, &dm.buf, &dm.len_buf)) dt_send(env, dm.buf, dm.len_buf); @@ -387,6 +422,7 @@ dt_msg_send_client_query(struct dt_env *env, void dt_msg_send_client_response(struct dt_env *env, struct sockaddr_storage *qsock, + struct sockaddr_storage *rsock, enum comm_point_type cptype, sldns_buffer *rmsg) { @@ -406,11 +442,13 @@ dt_msg_send_client_response(struct dt_env *env, /* response_message */ dt_fill_buffer(rmsg, &dm.m.response_message, &dm.m.has_response_message); - /* socket_family, socket_protocol, query_address, query_port */ + /* socket_family, socket_protocol, query_address, query_port, response_address, response_port */ log_assert(cptype == comm_udp || cptype == comm_tcp); - dt_msg_fill_net(&dm, qsock, cptype, + dt_msg_fill_net(&dm, qsock, rsock, cptype, &dm.m.query_address, &dm.m.has_query_address, - &dm.m.query_port, &dm.m.has_query_port); + &dm.m.query_port, &dm.m.has_query_port, + &dm.m.response_address, &dm.m.has_response_address, + &dm.m.response_port, &dm.m.has_response_port); if (dt_pack(&dm.d, &dm.buf, &dm.len_buf)) dt_send(env, dm.buf, dm.len_buf); @@ -419,6 +457,7 @@ dt_msg_send_client_response(struct dt_env *env, void dt_msg_send_outside_query(struct dt_env *env, struct sockaddr_storage *rsock, + struct sockaddr_storage *qsock, enum comm_point_type cptype, uint8_t *zone, size_t zone_len, sldns_buffer *qmsg) @@ -454,11 +493,13 @@ dt_msg_send_outside_query(struct dt_env *env, /* query_message */ dt_fill_buffer(qmsg, &dm.m.query_message, &dm.m.has_query_message); - /* socket_family, socket_protocol, response_address, response_port */ + /* socket_family, socket_protocol, response_address, response_port, query_address, query_port */ log_assert(cptype == comm_udp || cptype == comm_tcp); - dt_msg_fill_net(&dm, rsock, cptype, + dt_msg_fill_net(&dm, rsock, qsock, cptype, &dm.m.response_address, &dm.m.has_response_address, - &dm.m.response_port, &dm.m.has_response_port); + &dm.m.response_port, &dm.m.has_response_port, + &dm.m.query_address, &dm.m.has_query_address, + &dm.m.query_port, &dm.m.has_query_port); if (dt_pack(&dm.d, &dm.buf, &dm.len_buf)) dt_send(env, dm.buf, dm.len_buf); @@ -467,6 +508,7 @@ dt_msg_send_outside_query(struct dt_env *env, void dt_msg_send_outside_response(struct dt_env *env, struct sockaddr_storage *rsock, + struct sockaddr_storage *qsock, enum comm_point_type cptype, uint8_t *zone, size_t zone_len, uint8_t *qbuf, size_t qbuf_len, @@ -510,11 +552,13 @@ dt_msg_send_outside_response(struct dt_env *env, /* response_message */ dt_fill_buffer(rmsg, &dm.m.response_message, &dm.m.has_response_message); - /* socket_family, socket_protocol, response_address, response_port */ + /* socket_family, socket_protocol, response_address, response_port, query_address, query_port */ log_assert(cptype == comm_udp || cptype == comm_tcp); - dt_msg_fill_net(&dm, rsock, cptype, + dt_msg_fill_net(&dm, rsock, qsock, cptype, &dm.m.response_address, &dm.m.has_response_address, - &dm.m.response_port, &dm.m.has_response_port); + &dm.m.response_port, &dm.m.has_response_port, + &dm.m.query_address, &dm.m.has_query_address, + &dm.m.query_port, &dm.m.has_query_port); if (dt_pack(&dm.d, &dm.buf, &dm.len_buf)) dt_send(env, dm.buf, dm.len_buf); diff --git a/dnstap/dnstap.h b/dnstap/dnstap.h index 783b8c514..449fae727 100644 --- a/dnstap/dnstap.h +++ b/dnstap/dnstap.h @@ -123,12 +123,14 @@ dt_delete(struct dt_env *env); * Create and send a new dnstap "Message" event of type CLIENT_QUERY. * @param env: dnstap environment object. * @param qsock: address/port of client. + * @param rsock: local (service) address/port. * @param cptype: comm_udp or comm_tcp. * @param qmsg: query message. */ void dt_msg_send_client_query(struct dt_env *env, struct sockaddr_storage *qsock, + struct sockaddr_storage *rsock, enum comm_point_type cptype, struct sldns_buffer *qmsg); @@ -136,12 +138,14 @@ dt_msg_send_client_query(struct dt_env *env, * Create and send a new dnstap "Message" event of type CLIENT_RESPONSE. * @param env: dnstap environment object. * @param qsock: address/port of client. + * @param rsock: local (service) address/port. * @param cptype: comm_udp or comm_tcp. * @param rmsg: response message. */ void dt_msg_send_client_response(struct dt_env *env, struct sockaddr_storage *qsock, + struct sockaddr_storage *rsock, enum comm_point_type cptype, struct sldns_buffer *rmsg); @@ -150,7 +154,8 @@ dt_msg_send_client_response(struct dt_env *env, * FORWARDER_QUERY. The type used is dependent on the value of the RD bit * in the query header. * @param env: dnstap environment object. - * @param rsock: address/port of server the query is being sent to. + * @param rsock: address/port of server (upstream) the query is being sent to. + * @param qsock: address/port of server (local) the query is being sent from. * @param cptype: comm_udp or comm_tcp. * @param zone: query zone. * @param zone_len: length of zone. @@ -159,6 +164,7 @@ dt_msg_send_client_response(struct dt_env *env, void dt_msg_send_outside_query(struct dt_env *env, struct sockaddr_storage *rsock, + struct sockaddr_storage *qsock, enum comm_point_type cptype, uint8_t *zone, size_t zone_len, struct sldns_buffer *qmsg); @@ -168,7 +174,8 @@ dt_msg_send_outside_query(struct dt_env *env, * FORWARDER_RESPONSE. The type used is dependent on the value of the RD bit * in the query header. * @param env: dnstap environment object. - * @param rsock: address/port of server the response was received from. + * @param rsock: address/port of server (upstream) the response was received from. + * @param qsock: address/port of server (local) the response was received to. * @param cptype: comm_udp or comm_tcp. * @param zone: query zone. * @param zone_len: length of zone. @@ -181,6 +188,7 @@ dt_msg_send_outside_query(struct dt_env *env, void dt_msg_send_outside_response(struct dt_env *env, struct sockaddr_storage *rsock, + struct sockaddr_storage *qsock, enum comm_point_type cptype, uint8_t *zone, size_t zone_len, uint8_t *qbuf, size_t qbuf_len, diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 709c9e6ce..02d44fcba 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -133,6 +133,16 @@ verbose_print_addr(struct addrinfo *addr) } } +void +verbose_print_unbound_socket(struct unbound_socket* ub_sock) +{ + if(verbosity >= VERB_ALGO) { + log_info("listing of unbound_socket structure:"); + verbose_print_addr(ub_sock->addr); + log_info("s is: %d, fam is: %s, tcp_read_fd is: %d", ub_sock->s, ub_sock->fam == AF_INET?"AF_INET":"AF_INET6", ub_sock->tcp_read_fd); + } +} + #ifdef HAVE_SYSTEMD static int systemd_get_activated(int family, int socktype, int listen, @@ -916,7 +926,7 @@ static int make_sock(int stype, const char* ifname, const char* port, struct addrinfo *hints, int v6only, int* noip6, size_t rcv, size_t snd, int* reuseport, int transparent, int tcp_mss, int nodelay, int freebind, - int use_systemd, int dscp) + int use_systemd, int dscp, struct unbound_socket** ub_sock) { struct addrinfo *res = NULL; int r, s, inuse, noproto; @@ -958,7 +968,12 @@ make_sock(int stype, const char* ifname, const char* port, *noip6 = 1; } } - freeaddrinfo(res); + + (*ub_sock)->addr = res; + (*ub_sock)->s = s; + (*ub_sock)->fam = hints->ai_family; + (*ub_sock)->tcp_read_fd = -1; + return s; } @@ -967,7 +982,7 @@ static int make_sock_port(int stype, const char* ifname, const char* port, struct addrinfo *hints, int v6only, int* noip6, size_t rcv, size_t snd, int* reuseport, int transparent, int tcp_mss, int nodelay, int freebind, - int use_systemd, int dscp) + int use_systemd, int dscp, struct unbound_socket** ub_sock) { char* s = strchr(ifname, '@'); if(s) { @@ -990,11 +1005,11 @@ make_sock_port(int stype, const char* ifname, const char* port, p[strlen(s+1)]=0; return make_sock(stype, newif, p, hints, v6only, noip6, rcv, snd, reuseport, transparent, tcp_mss, nodelay, freebind, - use_systemd, dscp); + use_systemd, dscp, ub_sock); } return make_sock(stype, ifname, port, hints, v6only, noip6, rcv, snd, reuseport, transparent, tcp_mss, nodelay, freebind, use_systemd, - dscp); + dscp, ub_sock); } /** @@ -1005,7 +1020,7 @@ make_sock_port(int stype, const char* ifname, const char* port, * @return false on failure. list in unchanged then. */ static int -port_insert(struct listen_port** list, int s, enum listen_type ftype) +port_insert(struct listen_port** list, int s, enum listen_type ftype, struct unbound_socket* ub_sock) { struct listen_port* item = (struct listen_port*)malloc( sizeof(struct listen_port)); @@ -1014,6 +1029,7 @@ port_insert(struct listen_port** list, int s, enum listen_type ftype) item->next = *list; item->fd = s; item->ftype = ftype; + item->socket = ub_sock; *list = item; return 1; } @@ -1043,7 +1059,7 @@ set_recvpktinfo(int s, int family) return 0; } # else - log_err("no IPV6_RECVPKTINFO and no IPV6_PKTINFO option, please " + log_err("no IPV6_RECVPKTINFO and IPV6_PKTINFO options, please " "disable interface-automatic or do-ip6 in config"); return 0; # endif /* defined IPV6_RECVPKTINFO */ @@ -1142,6 +1158,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, int s, noip6=0; int is_https = if_is_https(ifname, port, https_port); int nodelay = is_https && http2_nodelay; + struct unbound_socket* ub_sock; #ifdef USE_DNSCRYPT int is_dnscrypt = ((strchr(ifname, '@') && atoi(strchr(ifname, '@')+1) == dnscrypt_port) || @@ -1153,10 +1170,14 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, if(!do_udp && !do_tcp) return 0; + if(do_auto) { + ub_sock = malloc(sizeof(struct unbound_socket)); + if(!ub_sock) + return 0; if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, &noip6, rcv, snd, reuseport, transparent, - tcp_mss, nodelay, freebind, use_systemd, dscp)) == -1) { + tcp_mss, nodelay, freebind, use_systemd, dscp, &ub_sock)) == -1) { if(noip6) { log_warn("IPv6 protocol not available"); return 1; @@ -1169,15 +1190,18 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, return 0; } if(!port_insert(list, s, - is_dnscrypt?listen_type_udpancil_dnscrypt:listen_type_udpancil)) { + is_dnscrypt?listen_type_udpancil_dnscrypt:listen_type_udpancil, ub_sock)) { sock_close(s); return 0; } } else if(do_udp) { + ub_sock = malloc(sizeof(struct unbound_socket)); + if(!ub_sock) + return 0; /* regular udp socket */ if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, &noip6, rcv, snd, reuseport, transparent, - tcp_mss, nodelay, freebind, use_systemd, dscp)) == -1) { + tcp_mss, nodelay, freebind, use_systemd, dscp, &ub_sock)) == -1) { if(noip6) { log_warn("IPv6 protocol not available"); return 1; @@ -1185,12 +1209,15 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, return 0; } if(!port_insert(list, s, - is_dnscrypt?listen_type_udp_dnscrypt:listen_type_udp)) { + is_dnscrypt?listen_type_udp_dnscrypt:listen_type_udp, ub_sock)) { sock_close(s); return 0; } } if(do_tcp) { + ub_sock = malloc(sizeof(struct unbound_socket)); + if(!ub_sock) + return 0; int is_ssl = if_is_ssl(ifname, port, ssl_port, tls_additional_port); enum listen_type port_type; @@ -1204,7 +1231,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, port_type = listen_type_tcp; if((s = make_sock_port(SOCK_STREAM, ifname, port, hints, 1, &noip6, 0, 0, reuseport, transparent, tcp_mss, nodelay, - freebind, use_systemd, dscp)) == -1) { + freebind, use_systemd, dscp, &ub_sock)) == -1) { if(noip6) { /*log_warn("IPv6 protocol not available");*/ return 1; @@ -1213,7 +1240,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, } if(is_ssl) verbose(VERB_ALGO, "setup TCP for SSL service"); - if(!port_insert(list, s, port_type)) { + if(!port_insert(list, s, port_type, ub_sock)) { sock_close(s); return 0; } @@ -1280,14 +1307,14 @@ listen_create(struct comm_base* base, struct listen_port* ports, if(ports->ftype == listen_type_udp || ports->ftype == listen_type_udp_dnscrypt) cp = comm_point_create_udp(base, ports->fd, - front->udp_buff, cb, cb_arg); + front->udp_buff, cb, cb_arg, ports->socket); else if(ports->ftype == listen_type_tcp || ports->ftype == listen_type_tcp_dnscrypt) cp = comm_point_create_tcp(base, ports->fd, tcp_accept_count, tcp_idle_timeout, harden_large_queries, 0, NULL, tcp_conn_limit, bufsize, front->udp_buff, - ports->ftype, cb, cb_arg); + ports->ftype, cb, cb_arg, ports->socket); else if(ports->ftype == listen_type_ssl || ports->ftype == listen_type_http) { cp = comm_point_create_tcp(base, ports->fd, @@ -1295,7 +1322,7 @@ listen_create(struct comm_base* base, struct listen_port* ports, harden_large_queries, http_max_streams, http_endpoint, tcp_conn_limit, bufsize, front->udp_buff, - ports->ftype, cb, cb_arg); + ports->ftype, cb, cb_arg, ports->socket); if(http_notls && ports->ftype == listen_type_http) cp->ssl = NULL; else @@ -1322,7 +1349,7 @@ listen_create(struct comm_base* base, struct listen_port* ports, } else if(ports->ftype == listen_type_udpancil || ports->ftype == listen_type_udpancil_dnscrypt) cp = comm_point_create_udp_ancil(base, ports->fd, - front->udp_buff, cb, cb_arg); + front->udp_buff, cb, cb_arg, ports->socket); if(!cp) { log_err("can't create commpoint"); listen_delete(front); @@ -1656,6 +1683,7 @@ listening_ports_open(struct config_file* cfg, char** ifs, int num_ifs, } } } + return list; } @@ -1667,6 +1695,8 @@ void listening_ports_free(struct listen_port* list) if(list->fd != -1) { sock_close(list->fd); } + free(list->socket->addr); + free(list->socket); free(list); list = nx; } diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h index 9d6ea2c33..96feea667 100644 --- a/services/listen_dnsport.h +++ b/services/listen_dnsport.h @@ -102,6 +102,20 @@ enum listen_type { listen_type_http }; +/* + * socket properties (just like NSD nsd_socket structure definition) + */ +struct unbound_socket { + /** socket-address structure */ + struct addrinfo * addr; + /** socket descriptor returned by socket() syscall */ + int s; + /** address family (AF_INET/IF_INET6) */ + int fam; + /** descriptor returned by accept() syscall for further usage. TODO: actually it might be useless here unlike in NSD where we have no comm_points mechanism with callback pointers for every created communication point */ + int tcp_read_fd; +}; + /** * Single linked list to store shared ports that have been * opened for use by all threads. @@ -113,6 +127,8 @@ struct listen_port { int fd; /** type of file descriptor, udp or tcp */ enum listen_type ftype; + /** fill in unbpound_socket structure for every opened socket at Unbound startup */ + struct unbound_socket* socket; }; /** @@ -424,4 +440,9 @@ int http2_submit_dns_response(void* v); char* set_ip_dscp(int socket, int addrfamily, int ds); +/** for debug and profiling purposes only + * @param unbound_socket: the structure containing created socket info we want to print or log for + */ +void verbose_print_unbound_socket(struct unbound_socket* ub_sock); + #endif /* LISTEN_DNSPORT_H */ diff --git a/services/outside_network.c b/services/outside_network.c index 0886907f7..5d6b6c3c2 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -1440,7 +1440,7 @@ outside_network_create(struct comm_base *base, size_t bufsize, return NULL; } pc->cp = comm_point_create_udp(outnet->base, -1, - outnet->udp_buff, outnet_udp_cb, outnet); + outnet->udp_buff, outnet_udp_cb, outnet, NULL); if(!pc->cp) { log_err("malloc failed"); free(pc); @@ -1921,11 +1921,27 @@ randomize_and_send_udp(struct pending* pend, sldns_buffer* packet, int timeout) comm_timer_set(pend->timer, &tv); #ifdef USE_DNSTAP + /* + * sending src (local service)/dst (upstream) addresses over DNSTAP + * TODO: right now there are no chances to get the src (local service) addr. So we will pass 0.0.0.0 (::) + * to argument for dt_msg_send_outside_query()/dt_msg_send_outside_response() calls. + * For the both UDP and TCP. + */ if(outnet->dtenv && (outnet->dtenv->log_resolver_query_messages || - outnet->dtenv->log_forwarder_query_messages)) - dt_msg_send_outside_query(outnet->dtenv, &pend->addr, comm_udp, - pend->sq->zone, pend->sq->zonelen, packet); + sq->outnet->dtenv->log_forwarder_query_messages)) { + if(addr_is_ip6(&sq->addr, sq->addrlen)) { + log_addr(VERB_ALGO, "from local addr", &sq->outnet->ip6_ifs->addr, sq->outnet->ip6_ifs->addrlen); + log_addr(VERB_ALGO, "request to upstream", &sq->addr, sq->addrlen); + dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr, &sq->outnet->ip6_ifs->addr, + comm_tcp, sq->zone, sq->zonelen, packet); + } else { + log_addr(VERB_ALGO, "from local addr", &sq->outnet->ip4_ifs->addr, sq->outnet->ip4_ifs->addrlen); + log_addr(VERB_ALGO, "request to upstream", &sq->addr, sq->addrlen); + dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr, &sq->outnet->ip4_ifs->addr, + comm_tcp, sq->zone, sq->zonelen, packet); + } + } #endif return 1; } @@ -2707,12 +2723,26 @@ serviced_tcp_callback(struct comm_point* c, void* arg, int error, infra_update_tcp_works(sq->outnet->infra, &sq->addr, sq->addrlen, sq->zone, sq->zonelen); #ifdef USE_DNSTAP + /* + * sending src (local service)/dst (upstream) addresses over DNSTAP + */ if(error==NETEVENT_NOERROR && sq->outnet->dtenv && (sq->outnet->dtenv->log_resolver_response_messages || - sq->outnet->dtenv->log_forwarder_response_messages)) - dt_msg_send_outside_response(sq->outnet->dtenv, &sq->addr, - c->type, sq->zone, sq->zonelen, sq->qbuf, sq->qbuflen, - &sq->last_sent_time, sq->outnet->now_tv, c->buffer); + sq->outnet->dtenv->log_forwarder_response_messages)) { + if(addr_is_ip6(&sq->addr, sq->addrlen)) { + log_addr(VERB_ALGO, "response from upstream", &sq->addr, sq->addrlen); + log_addr(VERB_ALGO, "to local addr", &sq->outnet->ip6_ifs->addr, sq->outnet->ip6_ifs->addrlen); + dt_msg_send_outside_response(sq->outnet->dtenv, &sq->addr, &sq->outnet->ip6_ifs->addr, + c->type, sq->zone, sq->zonelen, sq->qbuf, sq->qbuflen, + &sq->last_sent_time, sq->outnet->now_tv, c->buffer); + } else { + log_addr(VERB_ALGO, "response from upstream", &sq->addr, sq->addrlen); + log_addr(VERB_ALGO, "to local addr", &sq->outnet->ip4_ifs->addr, sq->outnet->ip4_ifs->addrlen); + dt_msg_send_outside_response(sq->outnet->dtenv, &sq->addr, &sq->outnet->ip4_ifs->addr, + c->type, sq->zone, sq->zonelen, sq->qbuf, sq->qbuflen, + &sq->last_sent_time, sq->outnet->now_tv, c->buffer); + } + } #endif if(error==NETEVENT_NOERROR && sq->status == serviced_query_TCP_EDNS && (LDNS_RCODE_WIRE(sldns_buffer_begin(c->buffer)) == @@ -2903,12 +2933,26 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error, return 0; } #ifdef USE_DNSTAP + /* + * sending src (local service)/dst (upstream) addresses over DNSTAP + */ if(error == NETEVENT_NOERROR && outnet->dtenv && (outnet->dtenv->log_resolver_response_messages || - outnet->dtenv->log_forwarder_response_messages)) - dt_msg_send_outside_response(outnet->dtenv, &sq->addr, c->type, - sq->zone, sq->zonelen, sq->qbuf, sq->qbuflen, - &sq->last_sent_time, sq->outnet->now_tv, c->buffer); + outnet->dtenv->log_forwarder_response_messages)) { + if(addr_is_ip6(&sq->addr, sq->addrlen)) { + log_addr(VERB_ALGO, "response from upstream", &sq->addr, sq->addrlen); + log_addr(VERB_ALGO, "to local addr", &sq->outnet->ip6_ifs->addr, sq->outnet->ip6_ifs->addrlen); + dt_msg_send_outside_response(outnet->dtenv, &sq->addr, &sq->outnet->ip6_ifs->addr, c->type, + sq->zone, sq->zonelen, sq->qbuf, sq->qbuflen, + &sq->last_sent_time, sq->outnet->now_tv, c->buffer); + } else { + log_addr(VERB_ALGO, "response from upstream", &sq->addr, sq->addrlen); + log_addr(VERB_ALGO, "to addr", &sq->outnet->ip4_ifs->addr, sq->outnet->ip4_ifs->addrlen); + dt_msg_send_outside_response(outnet->dtenv, &sq->addr, &sq->outnet->ip4_ifs->addr, c->type, + sq->zone, sq->zonelen, sq->qbuf, sq->qbuflen, + &sq->last_sent_time, sq->outnet->now_tv, c->buffer); + } + } #endif if( (sq->status == serviced_query_UDP_EDNS ||sq->status == serviced_query_UDP_EDNS_FRAG) @@ -3180,7 +3224,7 @@ outnet_comm_point_for_udp(struct outside_network* outnet, return NULL; } cp = comm_point_create_udp(outnet->base, fd, outnet->udp_buff, - cb, cb_arg); + cb, cb_arg, NULL); if(!cp) { log_err("malloc failure"); close(fd); diff --git a/util/net_help.c b/util/net_help.c index c5216bc2d..9745adcd3 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -1609,5 +1609,39 @@ sock_close(int socket) { closesocket(socket); } - # endif /* USE_WINSOCK */ + + +struct sockaddr_storage* +mk_local_addr(void* addr, u_short port, u_char family) +{ + struct sockaddr_storage* dst_addr = malloc(sizeof(struct sockaddr_storage)); + if(!dst_addr) { + log_err("malloc failure"); + return NULL; + } + if(family == AF_INET) { + struct in_addr* v4addr = (struct in_addr*)addr; + struct sockaddr_in sin; + memset(&sin, 0, sizeof(sin)); + sin.sin_family = AF_INET; + sin.sin_addr = *v4addr; + sin.sin_port = port; + memcpy(dst_addr, &sin, sizeof(sin)); + } else if(family == AF_INET6) { + struct in6_addr* v6addr = (struct in6_addr*)addr; + struct sockaddr_in6 sin6; + memset(&sin6, 0, sizeof(sin6)); + sin6.sin6_len = sizeof(sin6); + sin6.sin6_family = AF_INET6; + sin6.sin6_addr = *v6addr; + sin6.sin6_port = port; + sin6.sin6_flowinfo = 0; + memcpy(dst_addr, &sin6, sizeof(sin6)); + } else { + log_err("unknown inet address family"); + free(dst_addr); + return NULL; + } + return dst_addr; +} diff --git a/util/net_help.h b/util/net_help.h index 45b607a43..d89319c0a 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -502,4 +502,14 @@ char* sock_strerror(int errn); /** close the socket with close, or wsa closesocket */ void sock_close(int socket); +/** + * Make and fill a stucture of sockaddr_storage* (malloced) type + * Note: currently it needed to form local address used by dnstap functions only + * @param addr: this is in_addr or in6_addr internet address structure + * @param port: TCP/UDP port + * @param family: Internet address family + * @return: pointer to created sockaddr_storage structure or NULL on error + */ +struct sockaddr_storage* mk_local_addr(void* addr, u_short port, u_char family); + #endif /* NET_HELP_H */ diff --git a/util/netevent.c b/util/netevent.c index d3e268a01..e98b76933 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -51,6 +51,16 @@ #include "dnstap/dnstap.h" #include "dnscrypt/dnscrypt.h" #include "services/listen_dnsport.h" +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETDB_H +#include +#endif + #ifdef HAVE_OPENSSL_SSL_H #include #endif @@ -152,7 +162,7 @@ struct internal_signal { static struct comm_point* comm_point_create_tcp_handler( struct comm_base *base, struct comm_point* parent, size_t bufsize, struct sldns_buffer* spoolbuf, comm_point_callback_type* callback, - void* callback_arg); + void* callback_arg, struct unbound_socket* socket); /* -------- End of local definitions -------- */ @@ -398,14 +408,17 @@ static void p_ancil(const char* str, struct comm_reply* r) log_info("%s: unknown srctype %d", str, r->srctype); return; } + if(r->srctype == 6) { - char buf[1024]; - if(inet_ntop(AF_INET6, &r->pktinfo.v6info.ipi6_addr, - buf, (socklen_t)sizeof(buf)) == 0) { - (void)strlcpy(buf, "(inet_ntop error)", sizeof(buf)); - } - buf[sizeof(buf)-1]=0; - log_info("%s: %s %d", str, buf, r->pktinfo.v6info.ipi6_ifindex); +#ifdef IPV6_PKTINFO + char buf[1024]; + if(inet_ntop(AF_INET6, &r->pktinfo.v6info.ipi6_addr, + buf, (socklen_t)sizeof(buf)) == 0) { + (void)strlcpy(buf, "(inet_ntop error)", sizeof(buf)); + } + buf[sizeof(buf)-1]=0; + log_info("%s: %s %d", str, buf, r->pktinfo.v6info.ipi6_ifindex); +#endif } else if(r->srctype == 4) { #ifdef IP_PKTINFO char buf1[1024], buf2[1024]; @@ -3147,7 +3160,7 @@ void comm_point_raw_handle_callback(int ATTR_UNUSED(fd), struct comm_point* comm_point_create_udp(struct comm_base *base, int fd, sldns_buffer* buffer, - comm_point_callback_type* callback, void* callback_arg) + comm_point_callback_type* callback, void* callback_arg, struct unbound_socket* socket) { struct comm_point* c = (struct comm_point*)calloc(1, sizeof(struct comm_point)); @@ -3186,6 +3199,7 @@ comm_point_create_udp(struct comm_base *base, int fd, sldns_buffer* buffer, c->inuse = 0; c->callback = callback; c->cb_arg = callback_arg; + c->socket = socket; evbits = UB_EV_READ | UB_EV_PERSIST; /* ub_event stuff */ c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits, @@ -3206,7 +3220,7 @@ comm_point_create_udp(struct comm_base *base, int fd, sldns_buffer* buffer, struct comm_point* comm_point_create_udp_ancil(struct comm_base *base, int fd, sldns_buffer* buffer, - comm_point_callback_type* callback, void* callback_arg) + comm_point_callback_type* callback, void* callback_arg, struct unbound_socket* socket) { struct comm_point* c = (struct comm_point*)calloc(1, sizeof(struct comm_point)); @@ -3245,6 +3259,7 @@ comm_point_create_udp_ancil(struct comm_base *base, int fd, #endif c->callback = callback; c->cb_arg = callback_arg; + c->socket = socket; evbits = UB_EV_READ | UB_EV_PERSIST; /* ub_event stuff */ c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits, @@ -3266,7 +3281,7 @@ static struct comm_point* comm_point_create_tcp_handler(struct comm_base *base, struct comm_point* parent, size_t bufsize, struct sldns_buffer* spoolbuf, comm_point_callback_type* callback, - void* callback_arg) + void* callback_arg, struct unbound_socket* socket) { struct comm_point* c = (struct comm_point*)calloc(1, sizeof(struct comm_point)); @@ -3322,6 +3337,7 @@ comm_point_create_tcp_handler(struct comm_base *base, c->repinfo.c = c; c->callback = callback; c->cb_arg = callback_arg; + c->socket = socket; if(spoolbuf) { c->tcp_req_info = tcp_req_info_create(spoolbuf); if(!c->tcp_req_info) { @@ -3479,7 +3495,7 @@ comm_point_create_tcp(struct comm_base *base, int fd, int num, uint32_t http_max_streams, char* http_endpoint, struct tcl_list* tcp_conn_limit, size_t bufsize, struct sldns_buffer* spoolbuf, enum listen_type port_type, - comm_point_callback_type* callback, void* callback_arg) + comm_point_callback_type* callback, void* callback_arg, struct unbound_socket* socket) { struct comm_point* c = (struct comm_point*)calloc(1, sizeof(struct comm_point)); @@ -3529,6 +3545,7 @@ comm_point_create_tcp(struct comm_base *base, int fd, int num, #endif c->callback = NULL; c->cb_arg = NULL; + c->socket = socket; evbits = UB_EV_READ | UB_EV_PERSIST; /* ub_event stuff */ c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits, @@ -3549,7 +3566,7 @@ comm_point_create_tcp(struct comm_base *base, int fd, int num, port_type == listen_type_ssl || port_type == listen_type_tcp_dnscrypt) { c->tcp_handlers[i] = comm_point_create_tcp_handler(base, - c, bufsize, spoolbuf, callback, callback_arg); + c, bufsize, spoolbuf, callback, callback_arg, socket); } else if(port_type == listen_type_http) { c->tcp_handlers[i] = comm_point_create_http_handler( base, c, bufsize, harden_large_queries, @@ -3925,20 +3942,40 @@ comm_point_send_reply(struct comm_reply *repinfo) comm_point_send_udp_msg(repinfo->c, buffer, (struct sockaddr*)&repinfo->addr, repinfo->addrlen); #ifdef USE_DNSTAP - if(repinfo->c->dtenv != NULL && - repinfo->c->dtenv->log_client_response_messages) - dt_msg_send_client_response(repinfo->c->dtenv, - &repinfo->addr, repinfo->c->type, repinfo->c->buffer); + /* + * sending src (client)/dst (local service) addresses over DNSTAP from udp callback + */ + if(repinfo->c->dtenv != NULL && repinfo->c->dtenv->log_client_response_messages) { + struct sockaddr_storage* dst_addr; + if(repinfo->addr.ss_family == AF_INET) + dst_addr = mk_local_addr(&((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family); + else + dst_addr = mk_local_addr(&((struct sockaddr_in6*)repinfo->c->socket->addr->ai_addr)->sin6_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family); + log_addr(VERB_ALGO, "from local addr", dst_addr, sizeof(dst_addr)); + log_addr(VERB_ALGO, "response to client", &repinfo->addr, repinfo->addrlen); + dt_msg_send_client_response(repinfo->c->dtenv, &repinfo->addr, dst_addr, repinfo->c->type, repinfo->c->buffer); + if(dst_addr) + free(dst_addr); + } #endif } else { #ifdef USE_DNSTAP - if(repinfo->c->tcp_parent->dtenv != NULL && - repinfo->c->tcp_parent->dtenv->log_client_response_messages) - dt_msg_send_client_response(repinfo->c->tcp_parent->dtenv, - &repinfo->addr, repinfo->c->type, - ( repinfo->c->tcp_req_info - ? repinfo->c->tcp_req_info->spool_buffer - : repinfo->c->buffer )); + /* + * sending src (client)/dst (local service) addresses over DNSTAP from TCP callback + */ + if(repinfo->c->tcp_parent->dtenv != NULL && repinfo->c->tcp_parent->dtenv->log_client_response_messages) { + struct sockaddr_storage* dst_addr; + if(repinfo->addr.ss_family == AF_INET) + dst_addr = mk_local_addr(&((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family); + else + dst_addr = mk_local_addr(&((struct sockaddr_in6*)repinfo->c->socket->addr->ai_addr)->sin6_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family); + log_addr(VERB_ALGO, "from local addr", dst_addr, sizeof(dst_addr)); + log_addr(VERB_ALGO, "response to client", &repinfo->addr, repinfo->addrlen); + dt_msg_send_client_response(repinfo->c->tcp_parent->dtenv, &repinfo->addr, dst_addr, repinfo->c->type, + ( repinfo->c->tcp_req_info? repinfo->c->tcp_req_info->spool_buffer: repinfo->c->buffer )); + if(dst_addr) + free(dst_addr); + } #endif if(repinfo->c->tcp_req_info) { tcp_req_info_send_reply(repinfo->c->tcp_req_info); diff --git a/util/netevent.h b/util/netevent.h index 266a74ff3..f43f0f49f 100644 --- a/util/netevent.h +++ b/util/netevent.h @@ -70,6 +70,7 @@ struct comm_point; struct comm_reply; struct tcl_list; struct ub_event_base; +struct unbound_socket; struct mesh_state; struct mesh_area; @@ -167,6 +168,8 @@ struct comm_point { /** behind the scenes structure, with say libevent info. alloced. */ struct internal_event* ev; + struct unbound_socket* socket; + /** file descriptor for communication point */ int fd; @@ -493,12 +496,13 @@ struct ub_event_base* comm_base_internal(struct comm_base* b); * @param buffer: shared buffer by UDP sockets from this thread. * @param callback: callback function pointer. * @param callback_arg: will be passed to your callback function. + * @param unbound_socket: and opened socket properties will be passed to your callback function. * @return: returns the allocated communication point. NULL on error. * Sets timeout to NULL. Turns off TCP options. */ struct comm_point* comm_point_create_udp(struct comm_base* base, int fd, struct sldns_buffer* buffer, - comm_point_callback_type* callback, void* callback_arg); + comm_point_callback_type* callback, void* callback_arg, struct unbound_socket* socket); /** * Create an UDP with ancillary data comm point. Calls malloc. @@ -509,12 +513,13 @@ struct comm_point* comm_point_create_udp(struct comm_base* base, * @param buffer: shared buffer by UDP sockets from this thread. * @param callback: callback function pointer. * @param callback_arg: will be passed to your callback function. + * @param unbound_socket: and opened socket properties will be passed to your callback function. * @return: returns the allocated communication point. NULL on error. * Sets timeout to NULL. Turns off TCP options. */ struct comm_point* comm_point_create_udp_ancil(struct comm_base* base, int fd, struct sldns_buffer* buffer, - comm_point_callback_type* callback, void* callback_arg); + comm_point_callback_type* callback, void* callback_arg, struct unbound_socket* socket); /** * Create a TCP listener comm point. Calls malloc. @@ -537,6 +542,7 @@ struct comm_point* comm_point_create_udp_ancil(struct comm_base* base, * to select handler type to use. * @param callback: callback function pointer for TCP handlers. * @param callback_arg: will be passed to your callback function. + * @param unbound_socket: and opened socket properties will be passed to your callback function. * @return: returns the TCP listener commpoint. You can find the * TCP handlers in the array inside the listener commpoint. * returns NULL on error. From 31cedb47cbf9033df3670ef5d3e91044a5369046 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 9 Dec 2020 11:13:58 +0100 Subject: [PATCH 066/168] Remove unused whitespace, add missing header change, make it compile --- dnstap/dnstap.c | 2 +- services/listen_dnsport.c | 6 +++--- services/listen_dnsport.h | 2 +- services/outside_network.c | 10 +++++----- util/net_help.c | 2 +- util/netevent.c | 16 ++++++++-------- util/netevent.h | 2 +- 7 files changed, 20 insertions(+), 20 deletions(-) diff --git a/dnstap/dnstap.c b/dnstap/dnstap.c index 2ee269be3..e1abfeeb3 100644 --- a/dnstap/dnstap.c +++ b/dnstap/dnstap.c @@ -345,7 +345,7 @@ dt_msg_fill_net(struct dt_msg *dm, /* * This block is to fill second set of fields in DNSTAP-message defined as request_/response_ names. - * Additional responsive structure is: struct sockaddr_storage *rs + * Additional responsive structure is: struct sockaddr_storage *rs */ if (rs->ss_family == AF_INET6) { struct sockaddr_in6 *r = (struct sockaddr_in6 *) rs; diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 02d44fcba..e8b8fdbd6 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -1215,12 +1215,12 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, } } if(do_tcp) { - ub_sock = malloc(sizeof(struct unbound_socket)); - if(!ub_sock) - return 0; int is_ssl = if_is_ssl(ifname, port, ssl_port, tls_additional_port); enum listen_type port_type; + ub_sock = malloc(sizeof(struct unbound_socket)); + if(!ub_sock) + return 0; if(is_ssl) port_type = listen_type_ssl; else if(is_https) diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h index 96feea667..82f0d9ec6 100644 --- a/services/listen_dnsport.h +++ b/services/listen_dnsport.h @@ -112,7 +112,7 @@ struct unbound_socket { int s; /** address family (AF_INET/IF_INET6) */ int fam; - /** descriptor returned by accept() syscall for further usage. TODO: actually it might be useless here unlike in NSD where we have no comm_points mechanism with callback pointers for every created communication point */ + /** descriptor returned by accept() syscall for further usage. TODO: actually it might be useless here unlike in NSD where we have no comm_points mechanism with callback pointers for every created communication point */ int tcp_read_fd; }; diff --git a/services/outside_network.c b/services/outside_network.c index 5d6b6c3c2..587f33a88 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -1923,7 +1923,7 @@ randomize_and_send_udp(struct pending* pend, sldns_buffer* packet, int timeout) #ifdef USE_DNSTAP /* * sending src (local service)/dst (upstream) addresses over DNSTAP - * TODO: right now there are no chances to get the src (local service) addr. So we will pass 0.0.0.0 (::) + * TODO: right now there are no chances to get the src (local service) addr. So we will pass 0.0.0.0 (::) * to argument for dt_msg_send_outside_query()/dt_msg_send_outside_response() calls. * For the both UDP and TCP. */ @@ -1933,12 +1933,12 @@ randomize_and_send_udp(struct pending* pend, sldns_buffer* packet, int timeout) if(addr_is_ip6(&sq->addr, sq->addrlen)) { log_addr(VERB_ALGO, "from local addr", &sq->outnet->ip6_ifs->addr, sq->outnet->ip6_ifs->addrlen); log_addr(VERB_ALGO, "request to upstream", &sq->addr, sq->addrlen); - dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr, &sq->outnet->ip6_ifs->addr, + dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr, &sq->outnet->ip6_ifs->addr, comm_tcp, sq->zone, sq->zonelen, packet); } else { log_addr(VERB_ALGO, "from local addr", &sq->outnet->ip4_ifs->addr, sq->outnet->ip4_ifs->addrlen); log_addr(VERB_ALGO, "request to upstream", &sq->addr, sq->addrlen); - dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr, &sq->outnet->ip4_ifs->addr, + dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr, &sq->outnet->ip4_ifs->addr, comm_tcp, sq->zone, sq->zonelen, packet); } } @@ -2732,13 +2732,13 @@ serviced_tcp_callback(struct comm_point* c, void* arg, int error, if(addr_is_ip6(&sq->addr, sq->addrlen)) { log_addr(VERB_ALGO, "response from upstream", &sq->addr, sq->addrlen); log_addr(VERB_ALGO, "to local addr", &sq->outnet->ip6_ifs->addr, sq->outnet->ip6_ifs->addrlen); - dt_msg_send_outside_response(sq->outnet->dtenv, &sq->addr, &sq->outnet->ip6_ifs->addr, + dt_msg_send_outside_response(sq->outnet->dtenv, &sq->addr, &sq->outnet->ip6_ifs->addr, c->type, sq->zone, sq->zonelen, sq->qbuf, sq->qbuflen, &sq->last_sent_time, sq->outnet->now_tv, c->buffer); } else { log_addr(VERB_ALGO, "response from upstream", &sq->addr, sq->addrlen); log_addr(VERB_ALGO, "to local addr", &sq->outnet->ip4_ifs->addr, sq->outnet->ip4_ifs->addrlen); - dt_msg_send_outside_response(sq->outnet->dtenv, &sq->addr, &sq->outnet->ip4_ifs->addr, + dt_msg_send_outside_response(sq->outnet->dtenv, &sq->addr, &sq->outnet->ip4_ifs->addr, c->type, sq->zone, sq->zonelen, sq->qbuf, sq->qbuflen, &sq->last_sent_time, sq->outnet->now_tv, c->buffer); } diff --git a/util/net_help.c b/util/net_help.c index 9745adcd3..8732ea3df 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -1632,7 +1632,7 @@ mk_local_addr(void* addr, u_short port, u_char family) struct in6_addr* v6addr = (struct in6_addr*)addr; struct sockaddr_in6 sin6; memset(&sin6, 0, sizeof(sin6)); - sin6.sin6_len = sizeof(sin6); + /* sin6.sin6_len = sizeof(sin6); */ sin6.sin6_family = AF_INET6; sin6.sin6_addr = *v6addr; sin6.sin6_port = port; diff --git a/util/netevent.c b/util/netevent.c index e98b76933..713374827 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -411,13 +411,13 @@ static void p_ancil(const char* str, struct comm_reply* r) if(r->srctype == 6) { #ifdef IPV6_PKTINFO - char buf[1024]; - if(inet_ntop(AF_INET6, &r->pktinfo.v6info.ipi6_addr, - buf, (socklen_t)sizeof(buf)) == 0) { - (void)strlcpy(buf, "(inet_ntop error)", sizeof(buf)); - } - buf[sizeof(buf)-1]=0; - log_info("%s: %s %d", str, buf, r->pktinfo.v6info.ipi6_ifindex); + char buf[1024]; + if(inet_ntop(AF_INET6, &r->pktinfo.v6info.ipi6_addr, + buf, (socklen_t)sizeof(buf)) == 0) { + (void)strlcpy(buf, "(inet_ntop error)", sizeof(buf)); + } + buf[sizeof(buf)-1]=0; + log_info("%s: %s %d", str, buf, r->pktinfo.v6info.ipi6_ifindex); #endif } else if(r->srctype == 4) { #ifdef IP_PKTINFO @@ -3971,7 +3971,7 @@ comm_point_send_reply(struct comm_reply *repinfo) dst_addr = mk_local_addr(&((struct sockaddr_in6*)repinfo->c->socket->addr->ai_addr)->sin6_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family); log_addr(VERB_ALGO, "from local addr", dst_addr, sizeof(dst_addr)); log_addr(VERB_ALGO, "response to client", &repinfo->addr, repinfo->addrlen); - dt_msg_send_client_response(repinfo->c->tcp_parent->dtenv, &repinfo->addr, dst_addr, repinfo->c->type, + dt_msg_send_client_response(repinfo->c->tcp_parent->dtenv, &repinfo->addr, dst_addr, repinfo->c->type, ( repinfo->c->tcp_req_info? repinfo->c->tcp_req_info->spool_buffer: repinfo->c->buffer )); if(dst_addr) free(dst_addr); diff --git a/util/netevent.h b/util/netevent.h index f43f0f49f..c48359ec4 100644 --- a/util/netevent.h +++ b/util/netevent.h @@ -554,7 +554,7 @@ struct comm_point* comm_point_create_tcp(struct comm_base* base, struct tcl_list* tcp_conn_limit, size_t bufsize, struct sldns_buffer* spoolbuf, enum listen_type port_type, - comm_point_callback_type* callback, void* callback_arg); + comm_point_callback_type* callback, void* callback_arg, struct unbound_socket* socket); /** * Create an outgoing TCP commpoint. No file descriptor is opened, left at -1. From 1f1b93cce647992e853fbc124e3e99e004072531 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 9 Dec 2020 11:27:14 +0100 Subject: [PATCH 067/168] Fix test code function declaration. --- testcode/fake_event.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/testcode/fake_event.c b/testcode/fake_event.c index 591557c35..867ee51e3 100644 --- a/testcode/fake_event.c +++ b/testcode/fake_event.c @@ -1627,7 +1627,8 @@ int create_udp_sock(int ATTR_UNUSED(family), int ATTR_UNUSED(socktype), struct comm_point* comm_point_create_udp(struct comm_base *ATTR_UNUSED(base), int ATTR_UNUSED(fd), sldns_buffer* ATTR_UNUSED(buffer), comm_point_callback_type* ATTR_UNUSED(callback), - void* ATTR_UNUSED(callback_arg)) + void* ATTR_UNUSED(callback_arg), + struct unbound_socket* ATTR_UNUSED(socket)) { log_assert(0); return NULL; From 159bf52384e7a7ddade93544248f7b55d0ce53ad Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 9 Dec 2020 11:27:33 +0100 Subject: [PATCH 068/168] Fix that it passes the actual UDP address instead of first and pass NULL to make tcp log compile. --- services/outside_network.c | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/services/outside_network.c b/services/outside_network.c index 587f33a88..2afa7a42c 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -1929,18 +1929,11 @@ randomize_and_send_udp(struct pending* pend, sldns_buffer* packet, int timeout) */ if(outnet->dtenv && (outnet->dtenv->log_resolver_query_messages || - sq->outnet->dtenv->log_forwarder_query_messages)) { - if(addr_is_ip6(&sq->addr, sq->addrlen)) { - log_addr(VERB_ALGO, "from local addr", &sq->outnet->ip6_ifs->addr, sq->outnet->ip6_ifs->addrlen); - log_addr(VERB_ALGO, "request to upstream", &sq->addr, sq->addrlen); - dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr, &sq->outnet->ip6_ifs->addr, - comm_tcp, sq->zone, sq->zonelen, packet); - } else { - log_addr(VERB_ALGO, "from local addr", &sq->outnet->ip4_ifs->addr, sq->outnet->ip4_ifs->addrlen); - log_addr(VERB_ALGO, "request to upstream", &sq->addr, sq->addrlen); - dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr, &sq->outnet->ip4_ifs->addr, - comm_tcp, sq->zone, sq->zonelen, packet); - } + outnet->dtenv->log_forwarder_query_messages)) { + log_addr(VERB_ALGO, "from local addr", &pend->pc->pif->addr, pend->pc->pif->addrlen); + log_addr(VERB_ALGO, "request to upstream", &pend->addr, pend->addrlen); + dt_msg_send_outside_query(outnet->dtenv, &pend->addr, &pend->pc->pif->addr, comm_udp, + pend->sq->zone, pend->sq->zonelen, packet); } #endif return 1; @@ -2218,7 +2211,7 @@ pending_tcp_query(struct serviced_query* sq, sldns_buffer* packet, if(sq->outnet->dtenv && (sq->outnet->dtenv->log_resolver_query_messages || sq->outnet->dtenv->log_forwarder_query_messages)) - dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr, + dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr, NULL, comm_tcp, sq->zone, sq->zonelen, packet); #endif return w; From 72d3b588cac0ffcadecfcbd09eb133066edad4f7 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 9 Dec 2020 11:29:57 +0100 Subject: [PATCH 069/168] For the DoH create_http_handler, also pass the socket. --- util/netevent.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/util/netevent.c b/util/netevent.c index 713374827..962f389b4 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -3377,7 +3377,8 @@ static struct comm_point* comm_point_create_http_handler(struct comm_base *base, struct comm_point* parent, size_t bufsize, int harden_large_queries, uint32_t http_max_streams, char* http_endpoint, - comm_point_callback_type* callback, void* callback_arg) + comm_point_callback_type* callback, void* callback_arg, + struct unbound_socket* socket) { struct comm_point* c = (struct comm_point*)calloc(1, sizeof(struct comm_point)); @@ -3431,6 +3432,7 @@ comm_point_create_http_handler(struct comm_base *base, c->repinfo.c = c; c->callback = callback; c->cb_arg = callback_arg; + c->socket = socket; c->http_min_version = http_version_2; c->http2_stream_max_qbuffer_size = bufsize; @@ -3571,7 +3573,7 @@ comm_point_create_tcp(struct comm_base *base, int fd, int num, c->tcp_handlers[i] = comm_point_create_http_handler( base, c, bufsize, harden_large_queries, http_max_streams, http_endpoint, - callback, callback_arg); + callback, callback_arg, socket); } else { log_err("could not create tcp handler, unknown listen " From 91bec32cdcafbef382054e97b0e1fe14ef10c96c Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 9 Dec 2020 11:34:39 +0100 Subject: [PATCH 070/168] For TCP store picked outgoing interface and pass it. --- services/outside_network.c | 12 ++++++++---- services/outside_network.h | 2 ++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/services/outside_network.c b/services/outside_network.c index 2afa7a42c..5e7bd3124 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -194,15 +194,17 @@ waiting_tcp_delete(struct waiting_tcp* w) * Pick random outgoing-interface of that family, and bind it. * port set to 0 so OS picks a port number for us. * if it is the ANY address, do not bind. + * @param pend: pending tcp structure, for storing the local address choice. * @param w: tcp structure with destination address. * @param s: socket fd. * @return false on error, socket closed. */ static int -pick_outgoing_tcp(struct waiting_tcp* w, int s) +pick_outgoing_tcp(struct pending_tcp* pend, struct waiting_tcp* w, int s) { struct port_if* pi = NULL; int num; + pend->pi = NULL; #ifdef INET6 if(addr_is_ip6(&w->addr, w->addrlen)) num = w->outnet->num_ip6; @@ -222,6 +224,7 @@ pick_outgoing_tcp(struct waiting_tcp* w, int s) #endif pi = &w->outnet->ip4_ifs[ub_random_max(w->outnet->rnd, num)]; log_assert(pi); + pend->pi = pi; if(addr_is_any(&pi->addr, pi->addrlen)) { /* binding to the ANY interface is for listening sockets */ return 1; @@ -560,7 +563,7 @@ outnet_tcp_take_into_use(struct waiting_tcp* w) if(s == -1) return 0; - if(!pick_outgoing_tcp(w, s)) + if(!pick_outgoing_tcp(pend, w, s)) return 0; fd_set_nonblock(s); @@ -2211,8 +2214,9 @@ pending_tcp_query(struct serviced_query* sq, sldns_buffer* packet, if(sq->outnet->dtenv && (sq->outnet->dtenv->log_resolver_query_messages || sq->outnet->dtenv->log_forwarder_query_messages)) - dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr, NULL, - comm_tcp, sq->zone, sq->zonelen, packet); + dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr, + &pend->pi->addr, comm_tcp, sq->zone, sq->zonelen, + packet); #endif return w; } diff --git a/services/outside_network.h b/services/outside_network.h index 2fe97fa6c..d49d33e5d 100644 --- a/services/outside_network.h +++ b/services/outside_network.h @@ -344,6 +344,8 @@ struct pending { struct pending_tcp { /** next in list of free tcp comm points, or NULL. */ struct pending_tcp* next_free; + /** port for of the outgoing interface that is used */ + struct port_if* pi; /** tcp comm point it was sent on (and reply must come back on). */ struct comm_point* c; /** the query being serviced, NULL if the pending_tcp is unused. */ From 275f18cc8ed4a6ea4c8792dfc5c7356e8496e54f Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 9 Dec 2020 11:37:04 +0100 Subject: [PATCH 071/168] Remove useless tcp_read_fd member from struct --- services/listen_dnsport.c | 3 +-- services/listen_dnsport.h | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index e8b8fdbd6..823d56fd3 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -139,7 +139,7 @@ verbose_print_unbound_socket(struct unbound_socket* ub_sock) if(verbosity >= VERB_ALGO) { log_info("listing of unbound_socket structure:"); verbose_print_addr(ub_sock->addr); - log_info("s is: %d, fam is: %s, tcp_read_fd is: %d", ub_sock->s, ub_sock->fam == AF_INET?"AF_INET":"AF_INET6", ub_sock->tcp_read_fd); + log_info("s is: %d, fam is: %s", ub_sock->s, ub_sock->fam == AF_INET?"AF_INET":"AF_INET6"); } } @@ -972,7 +972,6 @@ make_sock(int stype, const char* ifname, const char* port, (*ub_sock)->addr = res; (*ub_sock)->s = s; (*ub_sock)->fam = hints->ai_family; - (*ub_sock)->tcp_read_fd = -1; return s; } diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h index 82f0d9ec6..692391ed2 100644 --- a/services/listen_dnsport.h +++ b/services/listen_dnsport.h @@ -112,8 +112,6 @@ struct unbound_socket { int s; /** address family (AF_INET/IF_INET6) */ int fam; - /** descriptor returned by accept() syscall for further usage. TODO: actually it might be useless here unlike in NSD where we have no comm_points mechanism with callback pointers for every created communication point */ - int tcp_read_fd; }; /** From 7167153db599d9053b6684e9726b4a2e5c25c413 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 9 Dec 2020 11:41:07 +0100 Subject: [PATCH 072/168] configure test for struct sockaddr_in6 sin6_len member --- config.h.in | 3 +++ configure | 44 ++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 34 ++++++++++++++++++++++++++++++++++ util/net_help.c | 4 +++- 4 files changed, 84 insertions(+), 1 deletion(-) diff --git a/config.h.in b/config.h.in index f993b81b0..98b5f067b 100644 --- a/config.h.in +++ b/config.h.in @@ -571,6 +571,9 @@ /* Define to 1 if `ipi_spec_dst' is a member of `struct in_pktinfo'. */ #undef HAVE_STRUCT_IN_PKTINFO_IPI_SPEC_DST +/* Define to 1 if `sin6_len' is a member of `struct sockaddr_in6'. */ +#undef HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN + /* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */ #undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN diff --git a/configure b/configure index 00d36a361..c053ab920 100755 --- a/configure +++ b/configure @@ -20149,6 +20149,50 @@ $as_echo "no" >&6; } fi +fi + +ac_fn_c_check_member "$LINENO" "struct sockaddr_in6" "sin6_len" "ac_cv_member_struct_sockaddr_in6_sin6_len" " +$ac_includes_default +#if HAVE_SYS_PARAM_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +#ifdef HAVE_SYS_UIO_H +#include +#endif + +#ifdef HAVE_NETINET_IN_H +#include +#endif + +#ifdef HAVE_NETINET_TCP_H +#include +#endif + +#ifdef HAVE_ARPA_INET_H +#include +#endif + +#ifdef HAVE_WINSOCK2_H +#include +#endif + +#ifdef HAVE_WS2TCPIP_H +#include +#endif + +" +if test "x$ac_cv_member_struct_sockaddr_in6_sin6_len" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN 1 +_ACEOF + + fi ac_fn_c_check_member "$LINENO" "struct sockaddr_un" "sun_len" "ac_cv_member_struct_sockaddr_un_sun_len" " diff --git a/configure.ac b/configure.ac index d648f55ad..fa5536687 100644 --- a/configure.ac +++ b/configure.ac @@ -1533,6 +1533,40 @@ if test $ac_cv_func_daemon = yes; then ]) fi +AC_CHECK_MEMBERS([struct sockaddr_in6.sin6_len],,,[ +AC_INCLUDES_DEFAULT +#if HAVE_SYS_PARAM_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +#ifdef HAVE_SYS_UIO_H +#include +#endif + +#ifdef HAVE_NETINET_IN_H +#include +#endif + +#ifdef HAVE_NETINET_TCP_H +#include +#endif + +#ifdef HAVE_ARPA_INET_H +#include +#endif + +#ifdef HAVE_WINSOCK2_H +#include +#endif + +#ifdef HAVE_WS2TCPIP_H +#include +#endif +]) AC_CHECK_MEMBERS([struct sockaddr_un.sun_len],,,[ AC_INCLUDES_DEFAULT #ifdef HAVE_SYS_UN_H diff --git a/util/net_help.c b/util/net_help.c index 8732ea3df..9a94556d4 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -1632,7 +1632,9 @@ mk_local_addr(void* addr, u_short port, u_char family) struct in6_addr* v6addr = (struct in6_addr*)addr; struct sockaddr_in6 sin6; memset(&sin6, 0, sizeof(sin6)); - /* sin6.sin6_len = sizeof(sin6); */ +#ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN + sin6.sin6_len = sizeof(sin6); +#endif sin6.sin6_family = AF_INET6; sin6.sin6_addr = *v6addr; sin6.sin6_port = port; From 9272725cddf400ed7dff10c48d2aaf3fc760393b Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 9 Dec 2020 11:43:16 +0100 Subject: [PATCH 073/168] Use calloc and freeaddrinfo --- services/listen_dnsport.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 823d56fd3..3de8c5fe4 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -1171,7 +1171,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, return 0; if(do_auto) { - ub_sock = malloc(sizeof(struct unbound_socket)); + ub_sock = calloc(1, sizeof(struct unbound_socket)); if(!ub_sock) return 0; if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, @@ -1194,7 +1194,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, return 0; } } else if(do_udp) { - ub_sock = malloc(sizeof(struct unbound_socket)); + ub_sock = calloc(1, sizeof(struct unbound_socket)); if(!ub_sock) return 0; /* regular udp socket */ @@ -1217,7 +1217,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, int is_ssl = if_is_ssl(ifname, port, ssl_port, tls_additional_port); enum listen_type port_type; - ub_sock = malloc(sizeof(struct unbound_socket)); + ub_sock = calloc(1, sizeof(struct unbound_socket)); if(!ub_sock) return 0; if(is_ssl) @@ -1694,7 +1694,7 @@ void listening_ports_free(struct listen_port* list) if(list->fd != -1) { sock_close(list->fd); } - free(list->socket->addr); + freeaddrinfo(list->socket->addr); free(list->socket); free(list); list = nx; From 6bf1293bcd7dec82dadeab00aaee559147be73f2 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 9 Dec 2020 11:56:35 +0100 Subject: [PATCH 074/168] No need for mk_local_addr, can pass the sockaddr structure. --- config.h.in | 3 --- configure | 44 -------------------------------------------- configure.ac | 34 ---------------------------------- daemon/worker.c | 22 ++++------------------ util/net_help.c | 37 ------------------------------------- util/net_help.h | 10 ---------- util/netevent.c | 22 ++++------------------ 7 files changed, 8 insertions(+), 164 deletions(-) diff --git a/config.h.in b/config.h.in index 98b5f067b..f993b81b0 100644 --- a/config.h.in +++ b/config.h.in @@ -571,9 +571,6 @@ /* Define to 1 if `ipi_spec_dst' is a member of `struct in_pktinfo'. */ #undef HAVE_STRUCT_IN_PKTINFO_IPI_SPEC_DST -/* Define to 1 if `sin6_len' is a member of `struct sockaddr_in6'. */ -#undef HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN - /* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */ #undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN diff --git a/configure b/configure index c053ab920..00d36a361 100755 --- a/configure +++ b/configure @@ -20149,50 +20149,6 @@ $as_echo "no" >&6; } fi -fi - -ac_fn_c_check_member "$LINENO" "struct sockaddr_in6" "sin6_len" "ac_cv_member_struct_sockaddr_in6_sin6_len" " -$ac_includes_default -#if HAVE_SYS_PARAM_H -#include -#endif - -#ifdef HAVE_SYS_SOCKET_H -#include -#endif - -#ifdef HAVE_SYS_UIO_H -#include -#endif - -#ifdef HAVE_NETINET_IN_H -#include -#endif - -#ifdef HAVE_NETINET_TCP_H -#include -#endif - -#ifdef HAVE_ARPA_INET_H -#include -#endif - -#ifdef HAVE_WINSOCK2_H -#include -#endif - -#ifdef HAVE_WS2TCPIP_H -#include -#endif - -" -if test "x$ac_cv_member_struct_sockaddr_in6_sin6_len" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN 1 -_ACEOF - - fi ac_fn_c_check_member "$LINENO" "struct sockaddr_un" "sun_len" "ac_cv_member_struct_sockaddr_un_sun_len" " diff --git a/configure.ac b/configure.ac index fa5536687..d648f55ad 100644 --- a/configure.ac +++ b/configure.ac @@ -1533,40 +1533,6 @@ if test $ac_cv_func_daemon = yes; then ]) fi -AC_CHECK_MEMBERS([struct sockaddr_in6.sin6_len],,,[ -AC_INCLUDES_DEFAULT -#if HAVE_SYS_PARAM_H -#include -#endif - -#ifdef HAVE_SYS_SOCKET_H -#include -#endif - -#ifdef HAVE_SYS_UIO_H -#include -#endif - -#ifdef HAVE_NETINET_IN_H -#include -#endif - -#ifdef HAVE_NETINET_TCP_H -#include -#endif - -#ifdef HAVE_ARPA_INET_H -#include -#endif - -#ifdef HAVE_WINSOCK2_H -#include -#endif - -#ifdef HAVE_WS2TCPIP_H -#include -#endif -]) AC_CHECK_MEMBERS([struct sockaddr_un.sun_len],,,[ AC_INCLUDES_DEFAULT #ifdef HAVE_SYS_UN_H diff --git a/daemon/worker.c b/daemon/worker.c index 36d4208f1..7134d3914 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1163,16 +1163,9 @@ worker_handle_request(struct comm_point* c, void* arg, int error, * sending src (client)/dst (local service) addresses over DNSTAP from incoming request handler */ if(worker->dtenv.log_client_query_messages) { - struct sockaddr_storage* dst_addr; - if(repinfo->addr.ss_family == AF_INET) - dst_addr = mk_local_addr(&((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family); - else - dst_addr = mk_local_addr(&((struct sockaddr_in6*)repinfo->c->socket->addr->ai_addr)->sin6_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family); log_addr(VERB_ALGO, "request from client", &repinfo->addr, repinfo->addrlen); - log_addr(VERB_ALGO, "to local addr", dst_addr, sizeof(dst_addr)); - dt_msg_send_client_query(&worker->dtenv, &repinfo->addr, dst_addr, c->type, c->buffer); - if(dst_addr) - free(dst_addr); + log_addr(VERB_ALGO, "to local addr", (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->socket->addr->ai_addrlen); + dt_msg_send_client_query(&worker->dtenv, &repinfo->addr, (void*)repinfo->c->socket->addr->ai_addr, c->type, c->buffer); } #endif acladdr = acl_addr_lookup(worker->daemon->acl, &repinfo->addr, @@ -1600,16 +1593,9 @@ send_reply_rc: * sending src (client)/dst (local service) addresses over DNSTAP from send_reply code label (when we serviced local zone for ex.) */ if(worker->dtenv.log_client_response_messages) { - struct sockaddr_storage* dst_addr; - if(repinfo->addr.ss_family == AF_INET) - dst_addr = mk_local_addr(&((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family); - else - dst_addr = mk_local_addr(&((struct sockaddr_in6*)repinfo->c->socket->addr->ai_addr)->sin6_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family); - log_addr(VERB_ALGO, "from local addr", dst_addr, sizeof(dst_addr)); + log_addr(VERB_ALGO, "from local addr", (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->socket->addr->ai_addrlen); log_addr(VERB_ALGO, "response to client", &repinfo->addr, repinfo->addrlen); - dt_msg_send_client_response(&worker->dtenv, &repinfo->addr, dst_addr, c->type, c->buffer); - if(dst_addr) - free(dst_addr); + dt_msg_send_client_response(&worker->dtenv, &repinfo->addr, (void*)repinfo->c->socket->addr->ai_addr, c->type, c->buffer); } #endif if(worker->env.cfg->log_replies) diff --git a/util/net_help.c b/util/net_help.c index 9a94556d4..557fc127d 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -1610,40 +1610,3 @@ sock_close(int socket) closesocket(socket); } # endif /* USE_WINSOCK */ - - -struct sockaddr_storage* -mk_local_addr(void* addr, u_short port, u_char family) -{ - struct sockaddr_storage* dst_addr = malloc(sizeof(struct sockaddr_storage)); - if(!dst_addr) { - log_err("malloc failure"); - return NULL; - } - if(family == AF_INET) { - struct in_addr* v4addr = (struct in_addr*)addr; - struct sockaddr_in sin; - memset(&sin, 0, sizeof(sin)); - sin.sin_family = AF_INET; - sin.sin_addr = *v4addr; - sin.sin_port = port; - memcpy(dst_addr, &sin, sizeof(sin)); - } else if(family == AF_INET6) { - struct in6_addr* v6addr = (struct in6_addr*)addr; - struct sockaddr_in6 sin6; - memset(&sin6, 0, sizeof(sin6)); -#ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN - sin6.sin6_len = sizeof(sin6); -#endif - sin6.sin6_family = AF_INET6; - sin6.sin6_addr = *v6addr; - sin6.sin6_port = port; - sin6.sin6_flowinfo = 0; - memcpy(dst_addr, &sin6, sizeof(sin6)); - } else { - log_err("unknown inet address family"); - free(dst_addr); - return NULL; - } - return dst_addr; -} diff --git a/util/net_help.h b/util/net_help.h index d89319c0a..45b607a43 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -502,14 +502,4 @@ char* sock_strerror(int errn); /** close the socket with close, or wsa closesocket */ void sock_close(int socket); -/** - * Make and fill a stucture of sockaddr_storage* (malloced) type - * Note: currently it needed to form local address used by dnstap functions only - * @param addr: this is in_addr or in6_addr internet address structure - * @param port: TCP/UDP port - * @param family: Internet address family - * @return: pointer to created sockaddr_storage structure or NULL on error - */ -struct sockaddr_storage* mk_local_addr(void* addr, u_short port, u_char family); - #endif /* NET_HELP_H */ diff --git a/util/netevent.c b/util/netevent.c index 962f389b4..37e6ac4f2 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -3948,16 +3948,9 @@ comm_point_send_reply(struct comm_reply *repinfo) * sending src (client)/dst (local service) addresses over DNSTAP from udp callback */ if(repinfo->c->dtenv != NULL && repinfo->c->dtenv->log_client_response_messages) { - struct sockaddr_storage* dst_addr; - if(repinfo->addr.ss_family == AF_INET) - dst_addr = mk_local_addr(&((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family); - else - dst_addr = mk_local_addr(&((struct sockaddr_in6*)repinfo->c->socket->addr->ai_addr)->sin6_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family); - log_addr(VERB_ALGO, "from local addr", dst_addr, sizeof(dst_addr)); + log_addr(VERB_ALGO, "from local addr", (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->socket->addr->ai_addrlen); log_addr(VERB_ALGO, "response to client", &repinfo->addr, repinfo->addrlen); - dt_msg_send_client_response(repinfo->c->dtenv, &repinfo->addr, dst_addr, repinfo->c->type, repinfo->c->buffer); - if(dst_addr) - free(dst_addr); + dt_msg_send_client_response(repinfo->c->dtenv, &repinfo->addr, (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->type, repinfo->c->buffer); } #endif } else { @@ -3966,17 +3959,10 @@ comm_point_send_reply(struct comm_reply *repinfo) * sending src (client)/dst (local service) addresses over DNSTAP from TCP callback */ if(repinfo->c->tcp_parent->dtenv != NULL && repinfo->c->tcp_parent->dtenv->log_client_response_messages) { - struct sockaddr_storage* dst_addr; - if(repinfo->addr.ss_family == AF_INET) - dst_addr = mk_local_addr(&((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family); - else - dst_addr = mk_local_addr(&((struct sockaddr_in6*)repinfo->c->socket->addr->ai_addr)->sin6_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family); - log_addr(VERB_ALGO, "from local addr", dst_addr, sizeof(dst_addr)); + log_addr(VERB_ALGO, "from local addr", (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->socket->addr->ai_addrlen); log_addr(VERB_ALGO, "response to client", &repinfo->addr, repinfo->addrlen); - dt_msg_send_client_response(repinfo->c->tcp_parent->dtenv, &repinfo->addr, dst_addr, repinfo->c->type, + dt_msg_send_client_response(repinfo->c->tcp_parent->dtenv, &repinfo->addr, (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->type, ( repinfo->c->tcp_req_info? repinfo->c->tcp_req_info->spool_buffer: repinfo->c->buffer )); - if(dst_addr) - free(dst_addr); } #endif if(repinfo->c->tcp_req_info) { From 6ce577c4d923058b1bf170a0640ed140c0ee6222 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 9 Dec 2020 12:07:16 +0100 Subject: [PATCH 075/168] Use stored TCP address for callback. --- services/outside_network.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/services/outside_network.c b/services/outside_network.c index 5e7bd3124..027f18ce5 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -2712,6 +2712,11 @@ serviced_tcp_callback(struct comm_point* c, void* arg, int error, { struct serviced_query* sq = (struct serviced_query*)arg; struct comm_reply r2; +#ifdef USE_DNSTAP + struct waiting_tcp* w = (struct waiting_tcp*)sq->pending; + struct pending_tcp* pend_tcp = (struct pending_tcp*)w->next_waiting; + struct port_if* pi = pend_tcp->pi; +#endif sq->pending = NULL; /* removed after this callback */ if(error != NETEVENT_NOERROR) log_addr(VERB_QUERY, "tcp error for address", @@ -2726,19 +2731,12 @@ serviced_tcp_callback(struct comm_point* c, void* arg, int error, if(error==NETEVENT_NOERROR && sq->outnet->dtenv && (sq->outnet->dtenv->log_resolver_response_messages || sq->outnet->dtenv->log_forwarder_response_messages)) { - if(addr_is_ip6(&sq->addr, sq->addrlen)) { - log_addr(VERB_ALGO, "response from upstream", &sq->addr, sq->addrlen); - log_addr(VERB_ALGO, "to local addr", &sq->outnet->ip6_ifs->addr, sq->outnet->ip6_ifs->addrlen); - dt_msg_send_outside_response(sq->outnet->dtenv, &sq->addr, &sq->outnet->ip6_ifs->addr, - c->type, sq->zone, sq->zonelen, sq->qbuf, sq->qbuflen, - &sq->last_sent_time, sq->outnet->now_tv, c->buffer); - } else { - log_addr(VERB_ALGO, "response from upstream", &sq->addr, sq->addrlen); - log_addr(VERB_ALGO, "to local addr", &sq->outnet->ip4_ifs->addr, sq->outnet->ip4_ifs->addrlen); - dt_msg_send_outside_response(sq->outnet->dtenv, &sq->addr, &sq->outnet->ip4_ifs->addr, - c->type, sq->zone, sq->zonelen, sq->qbuf, sq->qbuflen, - &sq->last_sent_time, sq->outnet->now_tv, c->buffer); - } + log_addr(VERB_ALGO, "response from upstream", &sq->addr, sq->addrlen); + log_addr(VERB_ALGO, "to local addr", &pi->addr, pi->addrlen); + dt_msg_send_outside_response(sq->outnet->dtenv, &sq->addr, + &pi->addr, c->type, sq->zone, sq->zonelen, sq->qbuf, + sq->qbuflen, &sq->last_sent_time, sq->outnet->now_tv, + c->buffer); } #endif if(error==NETEVENT_NOERROR && sq->status == serviced_query_TCP_EDNS && From 2baa748bc7df53155d734bf017514387b8aec7c8 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 9 Dec 2020 12:13:50 +0100 Subject: [PATCH 076/168] Use port_if pointer instead of wrong UDP local addr --- services/outside_network.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/services/outside_network.c b/services/outside_network.c index 027f18ce5..1854e5dac 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -2891,6 +2891,10 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error, struct serviced_query* sq = (struct serviced_query*)arg; struct outside_network* outnet = sq->outnet; struct timeval now = *sq->outnet->now_tv; +#ifdef USE_DNSTAP + struct pending* p = (struct pending*)sq->pending; + struct port_if* pi = p->pc->pif; +#endif sq->pending = NULL; /* removed after callback */ if(error == NETEVENT_TIMEOUT) { @@ -2934,19 +2938,11 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error, if(error == NETEVENT_NOERROR && outnet->dtenv && (outnet->dtenv->log_resolver_response_messages || outnet->dtenv->log_forwarder_response_messages)) { - if(addr_is_ip6(&sq->addr, sq->addrlen)) { - log_addr(VERB_ALGO, "response from upstream", &sq->addr, sq->addrlen); - log_addr(VERB_ALGO, "to local addr", &sq->outnet->ip6_ifs->addr, sq->outnet->ip6_ifs->addrlen); - dt_msg_send_outside_response(outnet->dtenv, &sq->addr, &sq->outnet->ip6_ifs->addr, c->type, - sq->zone, sq->zonelen, sq->qbuf, sq->qbuflen, - &sq->last_sent_time, sq->outnet->now_tv, c->buffer); - } else { - log_addr(VERB_ALGO, "response from upstream", &sq->addr, sq->addrlen); - log_addr(VERB_ALGO, "to addr", &sq->outnet->ip4_ifs->addr, sq->outnet->ip4_ifs->addrlen); - dt_msg_send_outside_response(outnet->dtenv, &sq->addr, &sq->outnet->ip4_ifs->addr, c->type, - sq->zone, sq->zonelen, sq->qbuf, sq->qbuflen, - &sq->last_sent_time, sq->outnet->now_tv, c->buffer); - } + log_addr(VERB_ALGO, "response from upstream", &sq->addr, sq->addrlen); + log_addr(VERB_ALGO, "to local addr", &pi->addr, pi->addrlen); + dt_msg_send_outside_response(outnet->dtenv, &sq->addr, &pi->addr, c->type, + sq->zone, sq->zonelen, sq->qbuf, sq->qbuflen, + &sq->last_sent_time, sq->outnet->now_tv, c->buffer); } #endif if( (sq->status == serviced_query_UDP_EDNS From af96ff157eaa3bc3526d9b288259cde930d25c0d Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 9 Dec 2020 13:52:49 +0100 Subject: [PATCH 077/168] Fix leak of socket mem on failure and fix if tcp has to wait we do not know the interface at the time. Later when it knows the interface we do not have 'sq' with the zone name. --- dnstap/dnstap.c | 4 ++-- services/listen_dnsport.c | 7 +++++++ services/outside_network.c | 4 ++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/dnstap/dnstap.c b/dnstap/dnstap.c index e1abfeeb3..6577a019a 100644 --- a/dnstap/dnstap.c +++ b/dnstap/dnstap.c @@ -347,7 +347,7 @@ dt_msg_fill_net(struct dt_msg *dm, * This block is to fill second set of fields in DNSTAP-message defined as request_/response_ names. * Additional responsive structure is: struct sockaddr_storage *rs */ - if (rs->ss_family == AF_INET6) { + if (rs && rs->ss_family == AF_INET6) { struct sockaddr_in6 *r = (struct sockaddr_in6 *) rs; /* addr: query_address or response_address */ @@ -358,7 +358,7 @@ dt_msg_fill_net(struct dt_msg *dm, /* port: query_port or response_port */ *rport = ntohs(r->sin6_port); *has_rport = 1; - } else if (rs->ss_family == AF_INET) { + } else if (rs && rs->ss_family == AF_INET) { struct sockaddr_in *r = (struct sockaddr_in *) rs; /* addr: query_address or response_address */ diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 3de8c5fe4..9e3ad8b79 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -1177,6 +1177,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, &noip6, rcv, snd, reuseport, transparent, tcp_mss, nodelay, freebind, use_systemd, dscp, &ub_sock)) == -1) { + free(ub_sock); if(noip6) { log_warn("IPv6 protocol not available"); return 1; @@ -1186,11 +1187,13 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, /* getting source addr packet info is highly non-portable */ if(!set_recvpktinfo(s, hints->ai_family)) { sock_close(s); + free(ub_sock); return 0; } if(!port_insert(list, s, is_dnscrypt?listen_type_udpancil_dnscrypt:listen_type_udpancil, ub_sock)) { sock_close(s); + free(ub_sock); return 0; } } else if(do_udp) { @@ -1201,6 +1204,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, &noip6, rcv, snd, reuseport, transparent, tcp_mss, nodelay, freebind, use_systemd, dscp, &ub_sock)) == -1) { + free(ub_sock); if(noip6) { log_warn("IPv6 protocol not available"); return 1; @@ -1210,6 +1214,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, if(!port_insert(list, s, is_dnscrypt?listen_type_udp_dnscrypt:listen_type_udp, ub_sock)) { sock_close(s); + free(ub_sock); return 0; } } @@ -1231,6 +1236,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, if((s = make_sock_port(SOCK_STREAM, ifname, port, hints, 1, &noip6, 0, 0, reuseport, transparent, tcp_mss, nodelay, freebind, use_systemd, dscp, &ub_sock)) == -1) { + free(ub_sock); if(noip6) { /*log_warn("IPv6 protocol not available");*/ return 1; @@ -1241,6 +1247,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, verbose(VERB_ALGO, "setup TCP for SSL service"); if(!port_insert(list, s, port_type, ub_sock)) { sock_close(s); + free(ub_sock); return 0; } } diff --git a/services/outside_network.c b/services/outside_network.c index 1854e5dac..815a805ce 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -2215,8 +2215,8 @@ pending_tcp_query(struct serviced_query* sq, sldns_buffer* packet, (sq->outnet->dtenv->log_resolver_query_messages || sq->outnet->dtenv->log_forwarder_query_messages)) dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr, - &pend->pi->addr, comm_tcp, sq->zone, sq->zonelen, - packet); + (pend?&pend->pi->addr:NULL), comm_tcp, sq->zone, + sq->zonelen, packet); #endif return w; } From 9ea58b5bc0c8df03e7bcf0dfb4e14ff1371ee7f2 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 9 Dec 2020 14:02:00 +0100 Subject: [PATCH 078/168] Fix for tcp outgoing to have local address logged --- services/outside_network.c | 42 ++++++++++++++++++++++++++++++-------- services/outside_network.h | 4 ++++ 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/services/outside_network.c b/services/outside_network.c index 815a805ce..abc43e3c2 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -717,6 +717,9 @@ use_free_buffer(struct outside_network* outnet) struct waiting_tcp* w; while(outnet->tcp_free && outnet->tcp_wait_first && !outnet->want_to_quit) { +#ifdef USE_DNSTAP + struct pending_tcp* pend_tcp = NULL; +#endif struct reuse_tcp* reuse = NULL; w = outnet->tcp_wait_first; outnet->tcp_wait_first = w->next_waiting; @@ -728,6 +731,9 @@ use_free_buffer(struct outside_network* outnet) if(reuse) { log_reuse_tcp(VERB_CLIENT, "use free buffer for waiting tcp: " "found reuse", reuse); +#ifdef USE_DNSTAP + pend_tcp = reuse->pending; +#endif reuse_tcp_lru_touch(outnet, reuse); comm_timer_disable(w->timer); w->next_waiting = (void*)reuse->pending; @@ -755,7 +761,21 @@ use_free_buffer(struct outside_network* outnet) NULL); waiting_tcp_delete(w); } +#ifdef USE_DNSTAP + pend_tcp = pend; +#endif } +#ifdef USE_DNSTAP + if(outnet->dtenv && pend_tcp && w->sq && + (outnet->dtenv->log_resolver_query_messages || + outnet->dtenv->log_forwarder_query_messages)) { + sldns_buffer tmp; + sldns_buffer_init_frm_data(&tmp, w->pkt, w->pkt_len); + dt_msg_send_outside_query(outnet->dtenv, &w->sq->addr, + &pend_tcp->pi->addr, comm_tcp, w->sq->zone, + w->sq->zonelen, &tmp); + } +#endif } } @@ -2169,6 +2189,9 @@ pending_tcp_query(struct serviced_query* sq, sldns_buffer* packet, w->write_wait_next = NULL; w->write_wait_queued = 0; w->error_count = 0; +#ifdef USE_DNSTAP + w->sq = NULL; +#endif if(pend) { /* we have a buffer available right now */ if(reuse) { @@ -2203,21 +2226,24 @@ pending_tcp_query(struct serviced_query* sq, sldns_buffer* packet, return NULL; } } +#ifdef USE_DNSTAP + if(sq->outnet->dtenv && + (sq->outnet->dtenv->log_resolver_query_messages || + sq->outnet->dtenv->log_forwarder_query_messages)) + dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr, + &pend->pi->addr, comm_tcp, sq->zone, + sq->zonelen, packet); +#endif } else { /* queue up */ /* waiting for a buffer on the outside network buffer wait * list */ verbose(VERB_CLIENT, "pending_tcp_query: queue to wait"); +#ifdef USE_DNSTAP + w->sq = sq; +#endif outnet_add_tcp_waiting(sq->outnet, w); } -#ifdef USE_DNSTAP - if(sq->outnet->dtenv && - (sq->outnet->dtenv->log_resolver_query_messages || - sq->outnet->dtenv->log_forwarder_query_messages)) - dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr, - (pend?&pend->pi->addr:NULL), comm_tcp, sq->zone, - sq->zonelen, packet); -#endif return w; } diff --git a/services/outside_network.h b/services/outside_network.h index d49d33e5d..5b6481e67 100644 --- a/services/outside_network.h +++ b/services/outside_network.h @@ -410,6 +410,10 @@ struct waiting_tcp { char* tls_auth_name; /** the packet was involved in an error, to stop looping errors */ int error_count; +#ifdef USE_DNSTAP + /** serviced query pointer for dnstap to get logging info, if nonNULL*/ + struct serviced_query* sq; +#endif }; /** From e25f80799ad019d0625edac990ac4612aceac478 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 9 Dec 2020 14:13:46 +0100 Subject: [PATCH 079/168] Fix use after free. --- services/outside_network.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/services/outside_network.c b/services/outside_network.c index abc43e3c2..4315eaf1b 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -760,13 +760,16 @@ use_free_buffer(struct outside_network* outnet) waiting_tcp_callback(w, NULL, NETEVENT_CLOSED, NULL); waiting_tcp_delete(w); +#ifdef USE_DNSTAP + w = NULL; +#endif } #ifdef USE_DNSTAP pend_tcp = pend; #endif } #ifdef USE_DNSTAP - if(outnet->dtenv && pend_tcp && w->sq && + if(outnet->dtenv && pend_tcp && w && w->sq && (outnet->dtenv->log_resolver_query_messages || outnet->dtenv->log_forwarder_query_messages)) { sldns_buffer tmp; From 51e431ada14237ca9c404883c9e8b41c2f91796e Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 9 Dec 2020 14:17:02 +0100 Subject: [PATCH 080/168] doxygen comments fixup --- services/listen_dnsport.c | 1 + services/listen_dnsport.h | 2 +- util/netevent.h | 6 +++--- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 9e3ad8b79..1943f5110 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -1016,6 +1016,7 @@ make_sock_port(int stype, const char* ifname, const char* port, * @param list: list head. changed. * @param s: fd. * @param ftype: if fd is UDP. + * @param ub_sock: socket with address. * @return false on failure. list in unchanged then. */ static int diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h index 692391ed2..5d5f156c1 100644 --- a/services/listen_dnsport.h +++ b/services/listen_dnsport.h @@ -439,7 +439,7 @@ int http2_submit_dns_response(void* v); char* set_ip_dscp(int socket, int addrfamily, int ds); /** for debug and profiling purposes only - * @param unbound_socket: the structure containing created socket info we want to print or log for + * @param ub_sock: the structure containing created socket info we want to print or log for */ void verbose_print_unbound_socket(struct unbound_socket* ub_sock); diff --git a/util/netevent.h b/util/netevent.h index c48359ec4..62e47d228 100644 --- a/util/netevent.h +++ b/util/netevent.h @@ -496,7 +496,7 @@ struct ub_event_base* comm_base_internal(struct comm_base* b); * @param buffer: shared buffer by UDP sockets from this thread. * @param callback: callback function pointer. * @param callback_arg: will be passed to your callback function. - * @param unbound_socket: and opened socket properties will be passed to your callback function. + * @param socket: and opened socket properties will be passed to your callback function. * @return: returns the allocated communication point. NULL on error. * Sets timeout to NULL. Turns off TCP options. */ @@ -513,7 +513,7 @@ struct comm_point* comm_point_create_udp(struct comm_base* base, * @param buffer: shared buffer by UDP sockets from this thread. * @param callback: callback function pointer. * @param callback_arg: will be passed to your callback function. - * @param unbound_socket: and opened socket properties will be passed to your callback function. + * @param socket: and opened socket properties will be passed to your callback function. * @return: returns the allocated communication point. NULL on error. * Sets timeout to NULL. Turns off TCP options. */ @@ -542,7 +542,7 @@ struct comm_point* comm_point_create_udp_ancil(struct comm_base* base, * to select handler type to use. * @param callback: callback function pointer for TCP handlers. * @param callback_arg: will be passed to your callback function. - * @param unbound_socket: and opened socket properties will be passed to your callback function. + * @param socket: and opened socket properties will be passed to your callback function. * @return: returns the TCP listener commpoint. You can find the * TCP handlers in the array inside the listener commpoint. * returns NULL on error. From 1f7d1a00ff8c2610239819198deda8f0f6697acb Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 10 Dec 2020 08:19:07 +0100 Subject: [PATCH 081/168] Fix for #368: dnstap does not log the DNS message ID for FORWARDER_QUERY --- services/outside_network.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/services/outside_network.c b/services/outside_network.c index 4315eaf1b..04a64d59f 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -2232,10 +2232,14 @@ pending_tcp_query(struct serviced_query* sq, sldns_buffer* packet, #ifdef USE_DNSTAP if(sq->outnet->dtenv && (sq->outnet->dtenv->log_resolver_query_messages || - sq->outnet->dtenv->log_forwarder_query_messages)) + sq->outnet->dtenv->log_forwarder_query_messages)) { + /* use w->pkt, because it has the ID value */ + sldns_buffer tmp; + sldns_buffer_init_frm_data(&tmp, w->pkt, w->pkt_len); dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr, &pend->pi->addr, comm_tcp, sq->zone, - sq->zonelen, packet); + sq->zonelen, &tmp); + } #endif } else { /* queue up */ From 4613d2bf047857442c63d8f9177cda91b82e84e0 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 14 Jan 2021 16:50:17 +0100 Subject: [PATCH 082/168] - Fix for #93: dynlibmodule import library is named libunbound.dll.a. --- configure | 2 +- configure.ac | 2 +- doc/Changelog | 3 +++ dynlibmod/examples/helloworld.c | 6 ++++-- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/configure b/configure index 87959deae..7957f0dd6 100755 --- a/configure +++ b/configure @@ -17237,7 +17237,7 @@ $as_echo "#define WITH_DYNLIBMODULE 1" >>confdefs.h if test $on_mingw = "no"; then DYNLIBMOD_EXTRALIBS="-ldl -export-dynamic" else - DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.a" + DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.dll.a" fi fi diff --git a/configure.ac b/configure.ac index 02b9eb47b..3e872bca9 100644 --- a/configure.ac +++ b/configure.ac @@ -644,7 +644,7 @@ if test x_$withval != x_no; then if test $on_mingw = "no"; then DYNLIBMOD_EXTRALIBS="-ldl -export-dynamic" else - DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.a" + DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.dll.a" fi AC_SUBST(DYNLIBMOD_EXTRALIBS) fi diff --git a/doc/Changelog b/doc/Changelog index c3223b05a..335ecf89b 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +14 January 2021: Wouter + - Fix for #93: dynlibmodule import library is named libunbound.dll.a. + 13 January 2021: Wouter - Merge #399 from xiangbao227: The lock of lruhash table should unlocked after markdel entry. diff --git a/dynlibmod/examples/helloworld.c b/dynlibmod/examples/helloworld.c index 7da32d9bb..be2116843 100644 --- a/dynlibmod/examples/helloworld.c +++ b/dynlibmod/examples/helloworld.c @@ -7,8 +7,10 @@ * And to build for windows, first make unbound with the --with-dynlibmod * switch, then use this command: * x86_64-w64-mingw32-gcc -m64 -I../.. -shared -Wall -Werror -fpic - * -o helloworld.dll helloworld.c -L../.. -l:libunbound.a - * to cross-compile a 64-bit Windows DLL. + * -o helloworld.dll helloworld.c -L../.. -l:libunbound.dll.a + * to cross-compile a 64-bit Windows DLL. The libunbound.dll.a is produced + * by the compile step that makes unbound.exe and allows the dynlib dll to + * access definitions in unbound.exe. */ #include "../../config.h" From 285a7fdd2151672ba3d60914848c2113d4ed9d15 Mon Sep 17 00:00:00 2001 From: Florian Obser Date: Thu, 14 Jan 2021 19:15:30 +0100 Subject: [PATCH 083/168] Implement IPv4-Embedded addresses according to RFC6052. The original algorithm assumed that any prefix length would be valid and did not skip over bits 64 to 71 and set them to zero. This means that only dns64 prefixes with length 32 and 96 generated embedded addresses according to RFC6052, cf. Figure 1 in 2.2. --- dns64/dns64.c | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/dns64/dns64.c b/dns64/dns64.c index 5c70119a5..e7552bb7d 100644 --- a/dns64/dns64.c +++ b/dns64/dns64.c @@ -198,14 +198,17 @@ uitoa(unsigned n, char* s) static uint32_t extract_ipv4(const uint8_t ipv6[], size_t ipv6_len, const int offset) { - uint32_t ipv4; + uint32_t ipv4 = 0; + int i, pos; log_assert(ipv6_len == 16); (void)ipv6_len; - ipv4 = (uint32_t)ipv6[offset/8+0] << (24 + (offset%8)) - | (uint32_t)ipv6[offset/8+1] << (16 + (offset%8)) - | (uint32_t)ipv6[offset/8+2] << ( 8 + (offset%8)) - | (uint32_t)ipv6[offset/8+3] << ( 0 + (offset%8)); - if (offset/8+4 < 16) - ipv4 |= (uint32_t)ipv6[offset/8+4] >> (8 - offset%8); + log_assert(offset == 32 || offset == 40 || offset == 48 || offset == 56 || + offset == 64 || offset == 96); + for(i = 0, pos = offset / 8; i < 4; i++, pos++) { + if (pos == 8) + pos++; + ipv4 = ipv4 << 8; + ipv4 |= ipv6[pos]; + } return ipv4; } @@ -297,17 +300,16 @@ synthesize_aaaa(const uint8_t prefix_addr[], size_t prefix_addr_len, size_t aaaa_len) { log_assert(prefix_addr_len == 16 && a_len == 4 && aaaa_len == 16); + log_assert(prefix_net == 32 || prefix_net == 40 || prefix_net == 48 || + prefix_net == 56 || prefix_net == 64 || prefix_net == 96); + int i, pos; (void)prefix_addr_len; (void)a_len; (void)aaaa_len; memcpy(aaaa, prefix_addr, 16); - aaaa[prefix_net/8+0] |= a[0] >> (0+prefix_net%8); - aaaa[prefix_net/8+1] |= a[0] << (8-prefix_net%8); - aaaa[prefix_net/8+1] |= a[1] >> (0+prefix_net%8); - aaaa[prefix_net/8+2] |= a[1] << (8-prefix_net%8); - aaaa[prefix_net/8+2] |= a[2] >> (0+prefix_net%8); - aaaa[prefix_net/8+3] |= a[2] << (8-prefix_net%8); - aaaa[prefix_net/8+3] |= a[3] >> (0+prefix_net%8); - if (prefix_net/8+4 < 16) /* <-- my beautiful symmetry is destroyed! */ - aaaa[prefix_net/8+4] |= a[3] << (8-prefix_net%8); + for(i = 0, pos = prefix_net / 8; i < a_len; i++, pos++) { + if(pos == 8) + aaaa[pos++] = 0; + aaaa[pos] = a[i]; + } } @@ -374,8 +376,10 @@ dns64_apply_cfg(struct dns64_env* dns64_env, struct config_file* cfg) log_err("dns64_prefix is not IPv6: %s", cfg->dns64_prefix); return 0; } - if (dns64_env->prefix_net < 0 || dns64_env->prefix_net > 96) { - log_err("dns64-prefix length it not between 0 and 96: %s", + if (dns64_env->prefix_net != 32 && dns64_env->prefix_net != 40 && + dns64_env->prefix_net != 48 && dns64_env->prefix_net != 56 && + dns64_env->prefix_net != 64 && dns64_env->prefix_net != 96 ) { + log_err("dns64-prefix length it not 32, 40, 48, 56, 64 or 96: %s", cfg->dns64_prefix); return 0; } From e55f38fa83f5d43f202ca489cc72078adeeb694f Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 15 Jan 2021 08:15:54 +0100 Subject: [PATCH 084/168] Changelog entry for #402. - Merge #402 from fobser: Implement IPv4-Embedded addresses according to RFC6052. --- doc/Changelog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 335ecf89b..2edaa330d 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +15 January 2021: Wouter + - Merge #402 from fobser: Implement IPv4-Embedded addresses according + to RFC6052. + 14 January 2021: Wouter - Fix for #93: dynlibmodule import library is named libunbound.dll.a. From c125fe67bc42ec732ad53a3d2f095d656c9a03f4 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 18 Jan 2021 08:29:52 +0100 Subject: [PATCH 085/168] - Fix #404: DNS query with small edns bufsize fail. --- doc/Changelog | 3 +++ doc/example.conf.in | 2 +- doc/unbound.conf.5.in | 5 ++--- util/config_file.c | 3 ++- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 2edaa330d..27e8621c3 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +18 January 2021: Wouter + - Fix #404: DNS query with small edns bufsize fail. + 15 January 2021: Wouter - Merge #402 from fobser: Implement IPv4-Embedded addresses according to RFC6052. diff --git a/doc/example.conf.in b/doc/example.conf.in index b51bcfca5..c1c3eb9b3 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -388,7 +388,7 @@ server: # target-fetch-policy: "3 2 1 0 0" # Harden against very small EDNS buffer sizes. - # harden-short-bufsize: no + # harden-short-bufsize: yes # Harden against unseemly large queries. # harden-large-queries: no diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index e7964d969..2fa8e7a95 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -839,9 +839,8 @@ closer to that of BIND 9, while setting "\-1 \-1 \-1 \-1 \-1" gives behaviour rumoured to be closer to that of BIND 8. .TP .B harden\-short\-bufsize: \fI -Very small EDNS buffer sizes from queries are ignored. Default is off, since -it is legal protocol wise to send these, and unbound tries to give very -small answers to these queries, where possible. +Very small EDNS buffer sizes from queries are ignored. Default is on, as +described in the standard. .TP .B harden\-large\-queries: \fI Very large queries are ignored. Default is off, since it is legal protocol diff --git a/util/config_file.c b/util/config_file.c index 4c827b74e..a845dde23 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -220,7 +220,7 @@ config_create(void) cfg->views = NULL; cfg->acls = NULL; cfg->tcp_connection_limits = NULL; - cfg->harden_short_bufsize = 0; + cfg->harden_short_bufsize = 1; cfg->harden_large_queries = 0; cfg->harden_glue = 1; cfg->harden_dnssec_stripped = 1; @@ -388,6 +388,7 @@ struct config_file* config_create_forlib(void) cfg->val_log_level = 2; /* to fill why_bogus with */ cfg->val_log_squelch = 1; cfg->minimal_responses = 0; + cfg->harden_short_bufsize = 1; return cfg; } From f273716b8045e2b4f91306966582adafabb4f3f0 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 18 Jan 2021 10:23:01 +0100 Subject: [PATCH 086/168] - Fix declaration before statement and signed comparison warning in dns64. --- dns64/dns64.c | 3 ++- doc/Changelog | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/dns64/dns64.c b/dns64/dns64.c index e7552bb7d..0a40fd49e 100644 --- a/dns64/dns64.c +++ b/dns64/dns64.c @@ -299,10 +299,11 @@ synthesize_aaaa(const uint8_t prefix_addr[], size_t prefix_addr_len, int prefix_net, const uint8_t a[], size_t a_len, uint8_t aaaa[], size_t aaaa_len) { + size_t i; + int pos; log_assert(prefix_addr_len == 16 && a_len == 4 && aaaa_len == 16); log_assert(prefix_net == 32 || prefix_net == 40 || prefix_net == 48 || prefix_net == 56 || prefix_net == 64 || prefix_net == 96); - int i, pos; (void)prefix_addr_len; (void)a_len; (void)aaaa_len; memcpy(aaaa, prefix_addr, 16); for(i = 0, pos = prefix_net / 8; i < a_len; i++, pos++) { diff --git a/doc/Changelog b/doc/Changelog index 27e8621c3..f50f294af 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,7 @@ 18 January 2021: Wouter - Fix #404: DNS query with small edns bufsize fail. + - Fix declaration before statement and signed comparison warning in + dns64. 15 January 2021: Wouter - Merge #402 from fobser: Implement IPv4-Embedded addresses according From 9056613a79c08a26ae70463e748aa0988a85c8a9 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Tue, 19 Jan 2021 12:15:18 +0100 Subject: [PATCH 087/168] - Fix TTL of SOA record for negative answers (localzone data and authzone) to be the minimum of the SOA TTL and the SOA.MINIMUM. --- services/authzone.c | 11 ++- services/localzone.c | 57 ++++++++++-- services/localzone.h | 4 + testdata/auth_zonefile_down.rpl | 157 +++++++++++++++++++++++++++++++- testdata/localdata.rpl | 18 ++-- 5 files changed, 227 insertions(+), 20 deletions(-) diff --git a/services/authzone.c b/services/authzone.c index 3ad38865e..3d7f49388 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -2331,7 +2331,8 @@ static int az_add_negative_soa(struct auth_zone* z, struct regional* region, struct dns_msg* msg) { - uint32_t minimum; + time_t minimum; + size_t i; struct packed_rrset_data* d; struct auth_rrset* soa; struct auth_data* apex = az_find_name(z, z->name, z->namelen); @@ -2348,9 +2349,11 @@ az_add_negative_soa(struct auth_zone* z, struct regional* region, /* last 4 bytes are minimum ttl in network format */ if(d->count == 0) return 0; if(d->rr_len[0] < 2+4) return 0; - minimum = sldns_read_uint32(d->rr_data[0]+(d->rr_len[0]-4)); - d->ttl = (time_t)minimum; - d->rr_ttl[0] = (time_t)minimum; + minimum = (time_t)sldns_read_uint32(d->rr_data[0]+(d->rr_len[0]-4)); + minimum = d->ttlttl:minimum; + d->ttl = minimum; + for(i=0; i < d->count + d->rrsig_count; i++) + d->rr_ttl[i] = minimum; msg->rep->ttl = get_rrset_ttl(msg->rep->rrsets[0]); msg->rep->prefetch_ttl = PREFETCH_TTL_CALC(msg->rep->ttl); msg->rep->serve_expired_ttl = msg->rep->ttl + SERVE_EXPIRED_TTL; diff --git a/services/localzone.c b/services/localzone.c index ed0d2c565..00067705e 100644 --- a/services/localzone.c +++ b/services/localzone.c @@ -463,6 +463,48 @@ lz_find_create_node(struct local_zone* z, uint8_t* nm, size_t nmlen, return 1; } +/* Mark the SOA record for the zone. This only marks the SOA rrset; the data + * for the RR is entered later on local_zone_enter_rr() as with the other + * records. An artifical soa_negative record with a modified TTL (minimum of + * the TTL and the SOA.MINIMUM) is also created and marked for usage with + * negative answers and to avoid allocations during those answers. */ +static int +lz_mark_soa_for_zone(struct local_zone* z, struct ub_packed_rrset_key* soa_rrset, + uint8_t* rdata, size_t rdata_len, time_t ttl, const char* rrstr) +{ + struct packed_rrset_data* pd = (struct packed_rrset_data*) + regional_alloc_zero(z->region, sizeof(*pd)); + struct ub_packed_rrset_key* rrset_negative = (struct ub_packed_rrset_key*) + regional_alloc_zero(z->region, sizeof(*rrset_negative)); + time_t minimum; + if(!rrset_negative||!pd) { + log_err("out of memory"); + return 0; + } + /* Mark the original SOA record and then continue with the negative one. */ + z->soa = soa_rrset; + rrset_negative->entry.key = rrset_negative; + pd->trust = rrset_trust_prim_noglue; + pd->security = sec_status_insecure; + rrset_negative->entry.data = pd; + rrset_negative->rk.dname = soa_rrset->rk.dname; + rrset_negative->rk.dname_len = soa_rrset->rk.dname_len; + rrset_negative->rk.type = soa_rrset->rk.type; + rrset_negative->rk.rrset_class = soa_rrset->rk.rrset_class; + if(!rrset_insert_rr(z->region, pd, rdata, rdata_len, ttl, rrstr)) + return 0; + /* last 4 bytes are minimum ttl in network format */ + if(pd->count == 0 || pd->rr_len[0] < 2+4) { + return 0; + } + minimum = (time_t)sldns_read_uint32(pd->rr_data[0]+(pd->rr_len[0]-4)); + pd->ttl = ttlrr_ttl[0] = pd->ttl; + + z->soa_negative = rrset_negative; + return 1; +} + int local_zone_enter_rr(struct local_zone* z, uint8_t* nm, size_t nmlen, int nmlabs, uint16_t rrtype, uint16_t rrclass, time_t ttl, @@ -502,8 +544,10 @@ local_zone_enter_rr(struct local_zone* z, uint8_t* nm, size_t nmlen, if(query_dname_compare(node->name, z->name) == 0) { if(rrtype == LDNS_RR_TYPE_NSEC) rrset->rrset->rk.flags = PACKED_RRSET_NSEC_AT_APEX; - if(rrtype == LDNS_RR_TYPE_SOA) - z->soa = rrset->rrset; + if(rrtype == LDNS_RR_TYPE_SOA && + !lz_mark_soa_for_zone(z, rrset->rrset, rdata, rdata_len, ttl, + rrstr)) + return 0; } } pd = (struct packed_rrset_data*)rrset->rrset->entry.data; @@ -1548,9 +1592,9 @@ local_zones_zone_answer(struct local_zone* z, struct module_env* env, lz_type == local_zone_inform_redirect || lz_type == local_zone_always_nodata)? LDNS_RCODE_NOERROR:LDNS_RCODE_NXDOMAIN; - if(z->soa) + if(z->soa && z->soa_negative) return local_encode(qinfo, env, edns, repinfo, buf, temp, - z->soa, 0, rcode); + z->soa_negative, 0, rcode); local_error_encode(qinfo, env, edns, repinfo, buf, temp, rcode, (rcode|BIT_AA)); return 1; @@ -1605,9 +1649,9 @@ local_zones_zone_answer(struct local_zone* z, struct module_env* env, * does not, then we should make this noerror/nodata */ if(ld && ld->rrsets) { int rcode = LDNS_RCODE_NOERROR; - if(z->soa) + if(z->soa && z->soa_negative) return local_encode(qinfo, env, edns, repinfo, buf, temp, - z->soa, 0, rcode); + z->soa_negative, 0, rcode); local_error_encode(qinfo, env, edns, repinfo, buf, temp, rcode, (rcode|BIT_AA)); return 1; @@ -2045,6 +2089,7 @@ void local_zones_del_data(struct local_zones* zones, /* did we delete the soa record ? */ if(query_dname_compare(d->name, z->name) == 0) z->soa = NULL; + z->soa_negative = NULL; /* cleanup the empty nonterminals for this name */ del_empty_term(z, d, name, len, labs); diff --git a/services/localzone.h b/services/localzone.h index 492629936..3da5c8754 100644 --- a/services/localzone.h +++ b/services/localzone.h @@ -158,6 +158,10 @@ struct local_zone { rbtree_type data; /** if data contains zone apex SOA data, this is a ptr to it. */ struct ub_packed_rrset_key* soa; + /** if data contains zone apex SOA data, this is a prt to an + * artificial negative SOA rrset (TTL is the minimum of the TTL and the + * SOA.MINIMUM). */ + struct ub_packed_rrset_key* soa_negative; }; /** diff --git a/testdata/auth_zonefile_down.rpl b/testdata/auth_zonefile_down.rpl index 09e7fd061..2b17c8433 100644 --- a/testdata/auth_zonefile_down.rpl +++ b/testdata/auth_zonefile_down.rpl @@ -1,6 +1,12 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + ; Options for singed zone. The zone is partially copied from val_negcache_nxdomain.rpl + trust-anchor: "testzone.nlnetlabs.nl. IN DS 2926 8 2 6f8512d1e82eecbd684fc4a76f39f8c5b411af385494873bdead663ddb78a88b" + val-override-date: "20180213111425" + qname-minimisation: "no" + trust-anchor-signaling: no + aggressive-nsec: yes auth-zone: name: "example.com." @@ -41,6 +47,50 @@ ns1 3600 IN A 1.2.3.4 ns2 3600 IN AAAA ::2 TEMPFILE_END +auth-zone: + name: "soa.high.com." + for-downstream: yes + for-upstream: no + zonefile: +TEMPFILE_NAME soa.high.com +TEMPFILE_CONTENTS soa.high.com +$ORIGIN high.com. +soa 500 IN SOA dns.example.de. hostmaster.dns.example.de. ( + 1379078166 28800 7200 604800 200 ) + 3600 IN NS ns1.example.com. + 3600 IN NS ns2.example.com. +TEMPFILE_END + +auth-zone: + name: "soa.low.com." + for-downstream: yes + for-upstream: no + zonefile: +TEMPFILE_NAME soa.low.com +TEMPFILE_CONTENTS soa.low.com +$ORIGIN low.com. +soa 200 IN SOA dns.example.de. hostmaster.dns.example.de. ( + 1379078166 28800 7200 604800 500 ) + 3600 IN NS ns1.example.com. + 3600 IN NS ns2.example.com. +TEMPFILE_END + +auth-zone: + name: "testzone.nlnetlabs.nl." + for-downstream: yes + for-upstream: no + zonefile: +TEMPFILE_NAME testzone.nlnetlabs.nl +TEMPFILE_CONTENTS testzone.nlnetlabs.nl +$ORIGIN testzone.nlnetlabs.nl. +testzone.nlnetlabs.nl. 3600 IN NSEC alligator.testzone.nlnetlabs.nl. NS SOA RRSIG NSEC DNSKEY +testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. gTKn6U1nal9oA79IRxLa/7zexl6A0yJZzeEGBbZ5rh5feyAr2X4LTR9bPCgcHeMVggf4FP+kD1L/sxzj/YLwB1ZKGKlwnzsHtPFTlmvDClaqQ76DRZq5Vejr2ZfnclBUb2vtxaXywTRW8oueaaq9flcShEQ/cQ+KRU8sc344qd0= +alligator.testzone.nlnetlabs.nl. 3600 IN NSEC cheetah.testzone.nlnetlabs.nl. TXT RRSIG NSEC +alligator.testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. QAgQ0AsMoYG02+VPfoOctSPlTHdQOkQt5fFkSkzIbVhUzNOqa+dB/Qkc81AwFeJosA+PvYjt6utcVkIWmK2Djy9eXC49gILtVF79vUe4G7ZrybO5NXjqNa5ANoUGM+yew4wkjeNOMVAsvs+1kvFY7S8RAa/0AIYlZHQ8vNBPNaI= +testzone.nlnetlabs.nl. 4600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1 14400 3600 604800 3600 +testzone.nlnetlabs.nl. 4600 IN RRSIG SOA 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. GhmXNFQktZIgaBpGKwj9Q2mfq5+jcbRPK+PPgtRVicUPZga/d/iGEL8PV/8DzGwkaZbM14pamSUMgdJibW4zNhLz/ukjPilbjoj6giH1jtbdZLAQ6iK9pZ/4jKUEq4txviTczZNnDeolgPEEl4xo4NclQmi7zj1XBlQRbjvG0/0= +TEMPFILE_END + stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. @@ -50,7 +100,7 @@ SCENARIO_BEGIN Test authority zone with zonefile for downstream responses ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 - ADDRESS 193.0.14.129 + ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id @@ -182,4 +232,109 @@ SECTION ANSWER www.example.com. IN A 1.2.3.4 ENTRY_END +; check SOA TTL to be the minimum of the SOA.minimum and the SOA TTL +STEP 30 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +nonexistent.soa.high.com. IN A +ENTRY_END +STEP 31 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ttl +REPLY QR RD RA AA NXDOMAIN +SECTION QUESTION +nonexistent.soa.high.com IN A +SECTION AUTHORITY +soa.high.com. 200 IN SOA dns.example.de. hostmaster.dns.example.de. 1379078166 28800 7200 604800 200 +ENTRY_END +; check that the original SOA is also returned +STEP 32 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +soa.high.com. IN SOA +ENTRY_END +STEP 33 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ttl +REPLY QR RD RA AA NOERROR +SECTION QUESTION +soa.high.com. IN SOA +SECTION ANSWER +soa.high.com. 500 IN SOA dns.example.de. hostmaster.dns.example.de. 1379078166 28800 7200 604800 200 +ENTRY_END + +; check SOA TTL to be the minimum of the SOA.minimum and the SOA TTL +STEP 40 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +nonexistent.soa.low.com. IN A +ENTRY_END +STEP 41 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ttl +REPLY QR RD RA AA NXDOMAIN +SECTION QUESTION +nonexistent.soa.low.com. IN A +SECTION AUTHORITY +soa.low.com. 200 IN SOA dns.example.de. hostmaster.dns.example.de. 1379078166 28800 7200 604800 500 +ENTRY_END +; check that the original SOA is also returned +STEP 42 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +soa.low.com. IN SOA +ENTRY_END +STEP 43 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ttl +REPLY QR RD RA AA NOERROR +SECTION QUESTION +soa.low.com. IN SOA +SECTION ANSWER +soa.low.com. 200 IN SOA dns.example.de. hostmaster.dns.example.de. 1379078166 28800 7200 604800 500 +ENTRY_END + +; check SOA TTL to be minimum of the SOA.minimum and the SOA TTL for DNSSEC +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD DO +SECTION QUESTION +ant.testzone.nlnetlabs.nl. IN A +ENTRY_END +STEP 51 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ttl +REPLY QR RD DO RA AA NXDOMAIN +SECTION QUESTION +ant.testzone.nlnetlabs.nl. IN A +SECTION AUTHORITY +testzone.nlnetlabs.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1 14400 3600 604800 3600 +testzone.nlnetlabs.nl. 3600 IN RRSIG SOA 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. GhmXNFQktZIgaBpGKwj9Q2mfq5+jcbRPK+PPgtRVicUPZga/d/iGEL8PV/8DzGwkaZbM14pamSUMgdJibW4zNhLz/ukjPilbjoj6giH1jtbdZLAQ6iK9pZ/4jKUEq4txviTczZNnDeolgPEEl4xo4NclQmi7zj1XBlQRbjvG0/0= +alligator.testzone.nlnetlabs.nl. 3600 IN NSEC cheetah.testzone.nlnetlabs.nl. TXT RRSIG NSEC +alligator.testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. QAgQ0AsMoYG02+VPfoOctSPlTHdQOkQt5fFkSkzIbVhUzNOqa+dB/Qkc81AwFeJosA+PvYjt6utcVkIWmK2Djy9eXC49gILtVF79vUe4G7ZrybO5NXjqNa5ANoUGM+yew4wkjeNOMVAsvs+1kvFY7S8RAa/0AIYlZHQ8vNBPNaI= +testzone.nlnetlabs.nl. 3600 IN NSEC alligator.testzone.nlnetlabs.nl. NS SOA RRSIG NSEC DNSKEY +testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. gTKn6U1nal9oA79IRxLa/7zexl6A0yJZzeEGBbZ5rh5feyAr2X4LTR9bPCgcHeMVggf4FP+kD1L/sxzj/YLwB1ZKGKlwnzsHtPFTlmvDClaqQ76DRZq5Vejr2ZfnclBUb2vtxaXywTRW8oueaaq9flcShEQ/cQ+KRU8sc344qd0= +ENTRY_END +; check that the original SOA is also returned +STEP 52 QUERY +ENTRY_BEGIN +REPLY RD DO +SECTION QUESTION +testzone.nlnetlabs.nl. IN SOA +ENTRY_END +STEP 53 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ttl +REPLY QR RD DO RA AA NOERROR +SECTION QUESTION +testzone.nlnetlabs.nl. IN SOA +SECTION ANSWER +testzone.nlnetlabs.nl. 4600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1 14400 3600 604800 3600 +testzone.nlnetlabs.nl. 4600 IN RRSIG SOA 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. GhmXNFQktZIgaBpGKwj9Q2mfq5+jcbRPK+PPgtRVicUPZga/d/iGEL8PV/8DzGwkaZbM14pamSUMgdJibW4zNhLz/ukjPilbjoj6giH1jtbdZLAQ6iK9pZ/4jKUEq4txviTczZNnDeolgPEEl4xo4NclQmi7zj1XBlQRbjvG0/0= +ENTRY_END + SCENARIO_END diff --git a/testdata/localdata.rpl b/testdata/localdata.rpl index eb25ef573..047fbeeba 100644 --- a/testdata/localdata.rpl +++ b/testdata/localdata.rpl @@ -88,12 +88,12 @@ local. IN A ENTRY_END STEP 6 CHECK_ANSWER ENTRY_BEGIN -MATCH all +MATCH all ttl REPLY QR RA AA SECTION QUESTION local. IN A SECTION AUTHORITY -local. 3600 IN SOA nobody nobody 1 2 3 4 5 +local. 5 IN SOA nobody nobody 1 2 3 4 5 ENTRY_END ; positive SOA @@ -104,7 +104,7 @@ local. IN SOA ENTRY_END STEP 8 CHECK_ANSWER ENTRY_BEGIN -MATCH all +MATCH all ttl REPLY QR RA AA SECTION QUESTION local. IN SOA @@ -136,12 +136,12 @@ serv.local. IN MX ENTRY_END STEP 12 CHECK_ANSWER ENTRY_BEGIN -MATCH all +MATCH all ttl REPLY QR RA AA SECTION QUESTION serv.local. IN MX SECTION AUTHORITY -local. 3600 IN SOA nobody nobody 1 2 3 4 5 +local. 5 IN SOA nobody nobody 1 2 3 4 5 ENTRY_END ; no such type, empty nonterminal @@ -152,12 +152,12 @@ bla.local. IN MX ENTRY_END STEP 14 CHECK_ANSWER ENTRY_BEGIN -MATCH all +MATCH all ttl REPLY QR RA AA SECTION QUESTION bla.local. IN MX SECTION AUTHORITY -local. 3600 IN SOA nobody nobody 1 2 3 4 5 +local. 5 IN SOA nobody nobody 1 2 3 4 5 ENTRY_END ; nxdomain with SOA @@ -168,12 +168,12 @@ doing.local. IN MX ENTRY_END STEP 16 CHECK_ANSWER ENTRY_BEGIN -MATCH all +MATCH all ttl REPLY QR RA AA NXDOMAIN SECTION QUESTION doing.local. IN MX SECTION AUTHORITY -local. 3600 IN SOA nobody nobody 1 2 3 4 5 +local. 5 IN SOA nobody nobody 1 2 3 4 5 ENTRY_END ; nxdomain without SOA From 7ba51fce244f242ceeba3ecd0d77b37ce48c0ae3 Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Tue, 19 Jan 2021 16:18:36 +0100 Subject: [PATCH 088/168] example.conf.in entry for nsid --- doc/example.conf.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/example.conf.in b/doc/example.conf.in index c1c3eb9b3..08d1620cf 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -377,6 +377,9 @@ server: # the version to report. Leave "" or default to return package version. # version: "" + # NSID identity (hex string, or "ascii_somestring"). default disabled. + # nsid: "aabbccdd" + # the target fetch policy. # series of integers describing the policy per dependency depth. # The number of values in the list determines the maximum dependency From 68d92b7bbbf1ffc5ff1300ec7f4f5361294155ab Mon Sep 17 00:00:00 2001 From: Florian Obser Date: Tue, 19 Jan 2021 17:12:14 +0100 Subject: [PATCH 089/168] Prevent a few more yacc clashes. --- util/configyyrename.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/util/configyyrename.h b/util/configyyrename.h index f529be577..8c7ff5b5c 100644 --- a/util/configyyrename.h +++ b/util/configyyrename.h @@ -84,5 +84,11 @@ #define yyget_leng ub_c_get_leng #define yylineno ub_c_lineno #define yyget_text ub_c_get_text +#define yyss ub_c_ss +#define yysslim ub_c_sslim +#define yyssp ub_c_ssp +#define yystacksize ub_c_stacksize +#define yyvs ub_c_vs +#define yyvsp ub_c_vsp #endif /* UTIL_CONFIGYYRENAME_H */ From 68d51317fe6b8869b52c3f6c5dcc68bf5e9a70bf Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Tue, 19 Jan 2021 17:18:26 +0100 Subject: [PATCH 090/168] rpl tests for nsid --- testdata/nsid_ascii.rpl | 54 +++++++++++++++++++++++++++++++++++++++ testdata/nsid_hex.rpl | 54 +++++++++++++++++++++++++++++++++++++++ testdata/nsid_not_set.rpl | 47 ++++++++++++++++++++++++++++++++++ 3 files changed, 155 insertions(+) create mode 100644 testdata/nsid_ascii.rpl create mode 100644 testdata/nsid_hex.rpl create mode 100644 testdata/nsid_not_set.rpl diff --git a/testdata/nsid_ascii.rpl b/testdata/nsid_ascii.rpl new file mode 100644 index 000000000..f357db5ae --- /dev/null +++ b/testdata/nsid_ascii.rpl @@ -0,0 +1,54 @@ +; config options +server: + nsid: "ascii_hopsa kidee" + +stub-zone: + name: "example." + stub-addr: 192.0.2.1 +CONFIG_END + +SCENARIO_BEGIN Test EDNS string tag option + +RANGE_BEGIN 0 1000 + ADDRESS 192.0.2.1 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example. IN A +SECTION ANSWER +example. IN A 198.51.100.1 +SECTION ADDITIONAL +ENTRY_END +RANGE_END + +STEP 10 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +example. IN A +SECTION ADDITIONAL + HEX_EDNSDATA_BEGIN + 00 03 ; Opcode NSID (3) + 00 00 ; Length 0 + HEX_EDNSDATA_END +ENTRY_END + +STEP 30 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +example. IN A +SECTION ANSWER +example. IN A 198.51.100.1 +SECTION ADDITIONAL + HEX_EDNSDATA_BEGIN + 00 03 ; Opcode NSID (3) + 00 0b ; Length 11 + 68 6F 70 73 61 20 ; "hopsa " + 6B 69 64 65 65 ; "kidee" + HEX_EDNSDATA_END +ENTRY_END +SCENARIO_END diff --git a/testdata/nsid_hex.rpl b/testdata/nsid_hex.rpl new file mode 100644 index 000000000..0d5e8f40d --- /dev/null +++ b/testdata/nsid_hex.rpl @@ -0,0 +1,54 @@ +; config options +server: + nsid: "0123456789abcdef" + +stub-zone: + name: "example." + stub-addr: 192.0.2.1 +CONFIG_END + +SCENARIO_BEGIN Test EDNS string tag option + +RANGE_BEGIN 0 1000 + ADDRESS 192.0.2.1 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example. IN A +SECTION ANSWER +example. IN A 198.51.100.1 +SECTION ADDITIONAL +ENTRY_END +RANGE_END + +STEP 10 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +example. IN A +SECTION ADDITIONAL + HEX_EDNSDATA_BEGIN + 00 03 ; Opcode NSID (3) + 00 00 ; Length 0 + HEX_EDNSDATA_END +ENTRY_END + +STEP 30 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +example. IN A +SECTION ANSWER +example. IN A 198.51.100.1 +SECTION ADDITIONAL + HEX_EDNSDATA_BEGIN + 00 03 ; Opcode NSID (3) + 00 08 ; Length 8 + 01 23 45 67 ; + 89 ab cd ef ; + HEX_EDNSDATA_END +ENTRY_END +SCENARIO_END diff --git a/testdata/nsid_not_set.rpl b/testdata/nsid_not_set.rpl new file mode 100644 index 000000000..06abe5985 --- /dev/null +++ b/testdata/nsid_not_set.rpl @@ -0,0 +1,47 @@ +; config options +stub-zone: + name: "example." + stub-addr: 192.0.2.1 +CONFIG_END + +SCENARIO_BEGIN Test EDNS string tag option + +RANGE_BEGIN 0 1000 + ADDRESS 192.0.2.1 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example. IN A +SECTION ANSWER +example. IN A 198.51.100.1 +SECTION ADDITIONAL +ENTRY_END +RANGE_END + +STEP 10 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +example. IN A +SECTION ADDITIONAL + HEX_EDNSDATA_BEGIN + 00 03 ; Opcode NSID (3) + 00 00 ; Length 0 + HEX_EDNSDATA_END +ENTRY_END + +STEP 30 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +example. IN A +SECTION ANSWER +example. IN A 198.51.100.1 +SECTION ADDITIONAL + HEX_EDNSDATA_BEGIN + HEX_EDNSDATA_END +ENTRY_END +SCENARIO_END From 38e12229b8e6cd5c6b45c61851574492af5a2fa6 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Tue, 19 Jan 2021 20:09:34 +0100 Subject: [PATCH 091/168] - Feedback for PR #407. --- services/localzone.c | 8 ++++---- testdata/auth_zonefile_down.rpl | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/services/localzone.c b/services/localzone.c index 00067705e..4369e23c1 100644 --- a/services/localzone.c +++ b/services/localzone.c @@ -494,12 +494,12 @@ lz_mark_soa_for_zone(struct local_zone* z, struct ub_packed_rrset_key* soa_rrset if(!rrset_insert_rr(z->region, pd, rdata, rdata_len, ttl, rrstr)) return 0; /* last 4 bytes are minimum ttl in network format */ - if(pd->count == 0 || pd->rr_len[0] < 2+4) { + if(pd->count == 0 || pd->rr_len[0] < 2+4) return 0; - } minimum = (time_t)sldns_read_uint32(pd->rr_data[0]+(pd->rr_len[0]-4)); - pd->ttl = ttlrr_ttl[0] = pd->ttl; + minimum = ttlttl = minimum; + pd->rr_ttl[0] = minimum; z->soa_negative = rrset_negative; return 1; diff --git a/testdata/auth_zonefile_down.rpl b/testdata/auth_zonefile_down.rpl index 2b17c8433..9c5ecbb1c 100644 --- a/testdata/auth_zonefile_down.rpl +++ b/testdata/auth_zonefile_down.rpl @@ -1,7 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" - ; Options for singed zone. The zone is partially copied from val_negcache_nxdomain.rpl + ; Options for signed zone. The zone is partially copied from val_negcache_nxdomain.rpl trust-anchor: "testzone.nlnetlabs.nl. IN DS 2926 8 2 6f8512d1e82eecbd684fc4a76f39f8c5b411af385494873bdead663ddb78a88b" val-override-date: "20180213111425" qname-minimisation: "no" From 021550026146fa05adbc440dc172ea585ac24746 Mon Sep 17 00:00:00 2001 From: yunwei <37897161+dyunwei@users.noreply.github.com> Date: Wed, 20 Jan 2021 14:12:51 +0800 Subject: [PATCH 092/168] Update netevent.c #386 I found the root cause of this issue. r_buffer is r->query_reply.c->buffer, used to fill the reply in the mesh_send_reply function, then call comm_point_send_reply, and then call http2_submit_dns_response to send the DOH response. However, the buffer is not cleared after use. If the query length is greater than the last response length, the next dns query in the same H2 session will encounter an error. This is bug!!! Clear the buffer after use. --- util/netevent.c | 1 + 1 file changed, 1 insertion(+) diff --git a/util/netevent.c b/util/netevent.c index a2c0e6073..893c1ddbf 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -3994,6 +3994,7 @@ comm_point_send_reply(struct comm_reply *repinfo) } repinfo->c->h2_stream = NULL; repinfo->c->tcp_is_reading = 0; + sldns_buffer_clear(repinfo->c->buffer); comm_point_stop_listening(repinfo->c); comm_point_start_listening(repinfo->c, -1, adjusted_tcp_timeout(repinfo->c)); From dc23502abb07eba7e0819ee24f0e2bf51a2516f5 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Fri, 22 Jan 2021 12:33:56 +0100 Subject: [PATCH 093/168] - Updated Changelog for PR #407. --- doc/Changelog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index f50f294af..2b093005b 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +22 January 2021: George + - Fix TTL of SOA record for negative answers (localzone and + authzone data) to be the minimum of the SOA TTL and the SOA.MINIMUM. + 18 January 2021: Wouter - Fix #404: DNS query with small edns bufsize fail. - Fix declaration before statement and signed comparison warning in From 3a6f1ecafae3e34444089f2d81f4de49d9e94f3c Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 22 Jan 2021 13:11:41 +0100 Subject: [PATCH 094/168] Fixup if brackets. --- services/localzone.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/localzone.c b/services/localzone.c index 4369e23c1..fd2ff2bb6 100644 --- a/services/localzone.c +++ b/services/localzone.c @@ -2087,9 +2087,10 @@ void local_zones_del_data(struct local_zones* zones, /* no memory recycling for zone deletions ... */ d->rrsets = NULL; /* did we delete the soa record ? */ - if(query_dname_compare(d->name, z->name) == 0) + if(query_dname_compare(d->name, z->name) == 0) { z->soa = NULL; z->soa_negative = NULL; + } /* cleanup the empty nonterminals for this name */ del_empty_term(z, d, name, len, labs); From 20ff80c5bb9e92901a53c666894e82842e97e514 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 22 Jan 2021 14:36:53 +0100 Subject: [PATCH 095/168] zonemd, fix to detect duplicate zonemd scheme and algo RRs. --- services/authzone.c | 48 +++++++++++++++++++++++++++++++++- testcode/unitzonemd.c | 7 +++++ testdata/zonemd.example16.zone | 11 ++++++++ 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 testdata/zonemd.example16.zone diff --git a/services/authzone.c b/services/authzone.c index b5b50c92c..4c31452a6 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -1823,6 +1823,43 @@ static int zonemd_fetch_parameters(struct auth_rrset* zonemd_rrset, size_t i, return 1; } +/** + * See if the ZONEMD scheme, hash occurs more than once. + * @param zonemd_rrset: the zonemd rrset to check with the RRs in it. + * @param index: index of the original, this is allowed to have that + * scheme and hashalgo, but other RRs should not have it. + * @param scheme: the scheme to check for. + * @param hashalgo: the hash algorithm to check for. + * @return true if it occurs more than once. + */ +static int zonemd_is_duplicate_scheme_hash(struct auth_rrset* zonemd_rrset, + size_t index, int scheme, int hashalgo) +{ + size_t j; + for(j=0; jdata->count; j++) { + uint32_t serial2 = 0; + int scheme2 = 0, hashalgo2 = 0; + uint8_t* hash2 = NULL; + size_t hashlen2 = 0; + if(index == j) { + /* this is the original */ + continue; + } + if(!zonemd_fetch_parameters(zonemd_rrset, j, &serial2, + &scheme2, &hashalgo2, &hash2, &hashlen2)) { + /* malformed, skip it */ + continue; + } + if(scheme == scheme2 && hashalgo == hashalgo2) { + /* duplicate scheme, hash */ + verbose(VERB_ALGO, "zonemd duplicate for scheme %d " + "and hash %d", scheme, hashalgo); + return 1; + } + } + return 0; +} + /** * Check ZONEMDs if present for the auth zone. Depending on config * it can warn or fail on that. Checks the hash of the ZONEMD. @@ -1875,6 +1912,15 @@ static int auth_zone_zonemd_check_hash(struct auth_zone* z, *reason = "ZONEMD rdata malformed"; continue; } + /* check for duplicates */ + if(zonemd_is_duplicate_scheme_hash(zonemd_rrset, i, scheme, + hashalgo)) { + /* duplicate hash of the same scheme,hash + * is not allowed. */ + *reason = "ZONEMD RRSet contains more than one RR " + "with the same scheme and hash algorithm"; + continue; + } regional_free_all(region); if(serial != soa_serial) { *reason = "ZONEMD serial is wrong"; @@ -7381,7 +7427,7 @@ static void add_rrlist_rrsigs_into_data(struct packed_rrset_data* data, data->rr_len[*done] = rrlist[i]->data->rr_len[rrlist[i]->data->count + j]; data->rr_ttl[*done] = rrlist[i]->data->rr_ttl[rrlist[i]->data->count + j]; /* reference the rdata in the rrset, no need to - * copy it, it is no longer need at the end of + * copy it, it is no longer needed at the end of * the routine */ data->rr_data[*done] = rrlist[i]->data->rr_data[rrlist[i]->data->count + j]; (*done)++; diff --git a/testcode/unitzonemd.c b/testcode/unitzonemd.c index 82ab9076d..07f97c316 100644 --- a/testcode/unitzonemd.c +++ b/testcode/unitzonemd.c @@ -467,6 +467,13 @@ static void zonemd_verify_tests(void) /* okay date: "20201020135527", */ "20221020135527", "verify DNSKEY RRset with trust anchor failed: signature expired"); + + /* duplicate zonemd with same scheme and algorithm */ + zonemd_verify_test("example.com", + "testdata/zonemd.example16.zone", + NULL, + "20180302005009", + "ZONEMD RRSet contains more than one RR with the same scheme and hash algorithm"); } /** zonemd unit tests */ diff --git a/testdata/zonemd.example16.zone b/testdata/zonemd.example16.zone new file mode 100644 index 000000000..7520744d3 --- /dev/null +++ b/testdata/zonemd.example16.zone @@ -0,0 +1,11 @@ +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +; the ZONEMD that should be in this file, without DNSSEC +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +; duplicate zonemd with same scheme and algorithm (different at end) +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D720000 +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 From dedc1e23401d0220e37073b0a08aa48bfe470910 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 22 Jan 2021 14:40:21 +0100 Subject: [PATCH 096/168] zonemd, unit test for capitalisation of owner and ns names. --- testcode/unitzonemd.c | 7 +++++++ testdata/zonemd.example17.zone | 11 +++++++++++ 2 files changed, 18 insertions(+) create mode 100644 testdata/zonemd.example17.zone diff --git a/testcode/unitzonemd.c b/testcode/unitzonemd.c index 07f97c316..544d032f2 100644 --- a/testcode/unitzonemd.c +++ b/testcode/unitzonemd.c @@ -474,6 +474,13 @@ static void zonemd_verify_tests(void) NULL, "20180302005009", "ZONEMD RRSet contains more than one RR with the same scheme and hash algorithm"); + /* different capitalisation of ns name and owner names, should + * be canonicalized. */ + zonemd_verify_test("example.com", + "testdata/zonemd.example17.zone", + NULL, + "20180302005009", + "ZONEMD verification successful"); } /** zonemd unit tests */ diff --git a/testdata/zonemd.example17.zone b/testdata/zonemd.example17.zone new file mode 100644 index 000000000..4315f9054 --- /dev/null +++ b/testdata/zonemd.example17.zone @@ -0,0 +1,11 @@ +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +; capitalisation is different here. +exaMPLe.cOM. IN NS Ns.exaMPLe.cOm. +; the ZONEMD that should be in this file, without DNSSEC +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +; capitalisation is different here. +wWW.exAMPLe.cOM. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 From 2a3548e1efbdfcc6d5e04d8633c13b1b5ea63e0a Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Fri, 22 Jan 2021 15:10:57 +0100 Subject: [PATCH 097/168] Move NSID Changelog entry to day of merge --- doc/Changelog | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index d7b4c21ee..5cb33ef2e 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,6 +2,10 @@ - Fix TTL of SOA record for negative answers (localzone and authzone data) to be the minimum of the SOA TTL and the SOA.MINIMUM. +19 January 2021: Willem + - Support for RFC5001: DNS Name Server Identifier (NSID) Option + with the nsid: option in unbound.conf + 18 January 2021: Wouter - Fix #404: DNS query with small edns bufsize fail. - Fix declaration before statement and signed comparison warning in @@ -79,10 +83,6 @@ - Fix for #283: fix stream reuse and tcp fast open. - Fix update, with write event check with streamreuse and fastopen. -2 December 2020: Willem - - Support for RFC5001: DNS Name Server Identifier (NSID) Option - with the nsid: option in unbound.conf - 1 December 2020: Wouter - Fix #358: Squelch udp connect 'no route to host' errors on low verbosity. From fc49d145b51faefe45db538a9a57c8e1524babc6 Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Fri, 22 Jan 2021 15:14:10 +0100 Subject: [PATCH 098/168] Changelog entry for padding option --- doc/Changelog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 5cb33ef2e..f77355945 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +22 January 2022: Willem + - Padding of queries and responses with DNS over TLS as specified in + RFC7830 and RFC8467. + 22 January 2021: George - Fix TTL of SOA record for negative answers (localzone and authzone data) to be the minimum of the SOA TTL and the SOA.MINIMUM. From d253db04fddb915bdd98de1683bb9c5bfd8f862b Mon Sep 17 00:00:00 2001 From: Roland van Rijswijk-Deij Date: Fri, 22 Jan 2021 18:56:09 +0000 Subject: [PATCH 099/168] Addressed review comment from @wcawijngaards --- util/data/packed_rrset.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/util/data/packed_rrset.c b/util/data/packed_rrset.c index 6147233ab..e1a0833a2 100644 --- a/util/data/packed_rrset.c +++ b/util/data/packed_rrset.c @@ -276,6 +276,7 @@ int packed_rr_to_string(struct ub_packed_rrset_key* rrset, size_t i, entry.data; uint8_t rr[65535]; size_t rlen = rrset->rk.dname_len + 2 + 2 + 4 + d->rr_len[i]; + time_t adjust = 0; log_assert(dest_len > 0 && dest); if(rlen > dest_len) { dest[0] = 0; @@ -286,8 +287,10 @@ int packed_rr_to_string(struct ub_packed_rrset_key* rrset, size_t i, memmove(rr+rrset->rk.dname_len, &rrset->rk.type, 2); else sldns_write_uint16(rr+rrset->rk.dname_len, LDNS_RR_TYPE_RRSIG); memmove(rr+rrset->rk.dname_len+2, &rrset->rk.rrset_class, 2); + adjust = SERVE_ORIGINAL_TTL ? d->ttl_add : now; + if (d->rr_ttl[i] < adjust) adjust = d->rr_ttl[i]; /* Prevent negative TTL overflow */ sldns_write_uint32(rr+rrset->rk.dname_len+4, - (uint32_t)(d->rr_ttl[i]-(SERVE_ORIGINAL_TTL ? d->ttl_add : now))); + (uint32_t)(d->rr_ttl[i]-adjust)); memmove(rr+rrset->rk.dname_len+8, d->rr_data[i], d->rr_len[i]); if(sldns_wire2str_rr_buf(rr, rlen, dest, dest_len) == -1) { log_info("rrbuf failure %d %s", (int)d->rr_len[i], dest); @@ -333,6 +336,7 @@ packed_rrset_copy_region(struct ub_packed_rrset_key* key, struct packed_rrset_data* data = (struct packed_rrset_data*) key->entry.data; size_t dsize, i; + time_t adjust = 0; if(!ck) return NULL; ck->id = key->id; @@ -351,14 +355,15 @@ packed_rrset_copy_region(struct ub_packed_rrset_key* key, ck->entry.data = d; packed_rrset_ptr_fixup(d); /* make TTLs relative - once per rrset */ + adjust = SERVE_ORIGINAL_TTL ? data->ttl_add : now; for(i=0; icount + d->rrsig_count; i++) { - if(d->rr_ttl[i] < now) + if(d->rr_ttl[i] < adjust) d->rr_ttl[i] = SERVE_EXPIRED?SERVE_EXPIRED_REPLY_TTL:0; - else d->rr_ttl[i] -= SERVE_ORIGINAL_TTL ? data->ttl_add : now; + else d->rr_ttl[i] -= adjust; } - if(d->ttl < now) + if(d->ttl < adjust) d->ttl = SERVE_EXPIRED?SERVE_EXPIRED_REPLY_TTL:0; - else d->ttl -= SERVE_ORIGINAL_TTL ? data->ttl_add : now; + else d->ttl -= adjust; d->ttl_add = 0; /* TTLs have been made relative */ return ck; } From 54b84381f43937f26e3826f2c4024ae83645599b Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Sun, 24 Jan 2021 18:12:08 +0100 Subject: [PATCH 100/168] tdir test for padding option --- testdata/padding.tdir/padding.conf | 18 ++++ testdata/padding.tdir/padding.conf2 | 36 +++++++ testdata/padding.tdir/padding.dsc | 16 ++++ testdata/padding.tdir/padding.msgsizes | 4 + testdata/padding.tdir/padding.post | 23 +++++ testdata/padding.tdir/padding.pre | 65 +++++++++++++ testdata/padding.tdir/padding.test | 109 ++++++++++++++++++++++ testdata/padding.tdir/padding.testns | 33 +++++++ testdata/padding.tdir/unbound_control.key | 39 ++++++++ testdata/padding.tdir/unbound_control.pem | 22 +++++ testdata/padding.tdir/unbound_server.key | 39 ++++++++ testdata/padding.tdir/unbound_server.pem | 22 +++++ 12 files changed, 426 insertions(+) create mode 100644 testdata/padding.tdir/padding.conf create mode 100644 testdata/padding.tdir/padding.conf2 create mode 100644 testdata/padding.tdir/padding.dsc create mode 100644 testdata/padding.tdir/padding.msgsizes create mode 100644 testdata/padding.tdir/padding.post create mode 100644 testdata/padding.tdir/padding.pre create mode 100644 testdata/padding.tdir/padding.test create mode 100644 testdata/padding.tdir/padding.testns create mode 100644 testdata/padding.tdir/unbound_control.key create mode 100644 testdata/padding.tdir/unbound_control.pem create mode 100644 testdata/padding.tdir/unbound_server.key create mode 100644 testdata/padding.tdir/unbound_server.pem diff --git a/testdata/padding.tdir/padding.conf b/testdata/padding.tdir/padding.conf new file mode 100644 index 000000000..8ae6428cc --- /dev/null +++ b/testdata/padding.tdir/padding.conf @@ -0,0 +1,18 @@ +server: + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: . + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + + tls-cert-bundle: "unbound_server.pem" + tls-upstream: yes + +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@#unbound" + + diff --git a/testdata/padding.tdir/padding.conf2 b/testdata/padding.tdir/padding.conf2 new file mode 100644 index 000000000..193209233 --- /dev/null +++ b/testdata/padding.tdir/padding.conf2 @@ -0,0 +1,36 @@ +# this is the upstream server that has pipelining and responds to queries. +server: + verbosity: 1 + # num-threads: 1 + interface: 127.0.0.1@@PORT@ + port: @PORT@ + use-syslog: no + directory: . + pidfile: "unbound2.pid" + chroot: "" + username: "" + do-not-query-localhost: no + tls-port: @PORT@ + tls-service-key: "unbound_server.key" + tls-service-pem: "unbound_server.pem" + tcp-idle-timeout: 10000 + log-queries: yes + log-replies: yes + log-identity: "upstream" + +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" +dnstap: + dnstap-enable: yes + dnstap-socket-path: "dnstap.socket" + dnstap-send-identity: yes + dnstap-send-version: yes + #dnstap-identity + #dnstap-version + dnstap-log-resolver-query-messages: no + dnstap-log-resolver-response-messages: no + dnstap-log-client-query-messages: yes + dnstap-log-client-response-messages: yes + dnstap-log-forwarder-query-messages: no + dnstap-log-forwarder-response-messages: no diff --git a/testdata/padding.tdir/padding.dsc b/testdata/padding.tdir/padding.dsc new file mode 100644 index 000000000..37aceb353 --- /dev/null +++ b/testdata/padding.tdir/padding.dsc @@ -0,0 +1,16 @@ +BaseName: padding +Version: 1.0 +Description: Test EDNS0 padding option (RFC7830 and RFC8467). +CreationDate: Sun Jan 24 16:41:42 CET 2021 +Maintainer: Willem Toorop +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: padding.pre +Post: padding.post +Test: padding.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/padding.tdir/padding.msgsizes b/testdata/padding.tdir/padding.msgsizes new file mode 100644 index 000000000..c43d05a96 --- /dev/null +++ b/testdata/padding.tdir/padding.msgsizes @@ -0,0 +1,4 @@ +;; MSG SIZE rcvd: 128 +;; MSG SIZE rcvd: 468 +;; MSG SIZE rcvd: 128 +;; MSG SIZE rcvd: 936 diff --git a/testdata/padding.tdir/padding.post b/testdata/padding.tdir/padding.post new file mode 100644 index 000000000..826798a8f --- /dev/null +++ b/testdata/padding.tdir/padding.post @@ -0,0 +1,23 @@ +# #-- padding.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +PRE="../.." +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +kill_pid $DNSTAP_SOCKET_PID +kill_pid $FWD_PID +kill_pid `cat unbound2.pid` +if test -f unbound2.log; then + echo ">>> upstream log" + cat unbound2.log +fi +#kill_pid $UNBOUND_PID +kill_pid `cat unbound.pid` +if test -f unbound.log; then + echo ">>> unbound log" + cat unbound.log +fi diff --git a/testdata/padding.tdir/padding.pre b/testdata/padding.tdir/padding.pre new file mode 100644 index 000000000..6022cf4e4 --- /dev/null +++ b/testdata/padding.tdir/padding.pre @@ -0,0 +1,65 @@ +# #-- padding.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +get_random_port 3 +UNBOUND_PORT=$RND_PORT +UPSTREAM_PORT=$(($RND_PORT + 1)) +FWD_PORT=$(($RND_PORT + 2)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "UPSTREAM_PORT=$UPSTREAM_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start ldns-testnd +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT padding.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# start the dnstap log server +# the -vvvv flag prints protocol and connection information from the +# unbound-dnstap-socket server. +# the -l flag prints the DNS info in the DNSTAP packet in multiline output. +# stderr is the '-vvvv' server logs and errors. +# stdout is the one-line packet logs (or with -l, multiline). +$PRE/unbound-dnstap-socket -u dnstap.socket -l -vvvv 2>tap.errlog >tap.log & +if test $? -ne 0; then + echo "could not start unbound-dnstap-socket server" + exit 1 +fi +DNSTAP_SOCKET_PID=$! +echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test +# wait for the server to go up and make the dnstap.socket file +wait_server_up "tap.errlog" "creating unix socket" +if test ! -S dnstap.socket; then + echo "the dnstap.socket file does not exist!" +fi + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$UPSTREAM_PORT'/' < padding.conf > ub.conf +# start unbound in the background +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +#$PRE/unbound -d -c ub.conf 2>&1 | tee unbound.log & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +# make upstream config file +sed -e 's/@PORT\@/'$UPSTREAM_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < padding.conf2 > ub2.conf +# start upstream unbound in the background +$PRE/unbound -d -c ub2.conf >unbound2.log 2>&1 & +#$PRE/unbound -d -c ub2.conf 2>&1 | tee unbound2.log & +UPSTREAM_PID=$! +echo "UPSTREAM_PID=$UPSTREAM_PID" >> .tpkg.var.test + +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log +wait_unbound_up unbound2.log + +cat .tpkg.var.test + diff --git a/testdata/padding.tdir/padding.test b/testdata/padding.tdir/padding.test new file mode 100644 index 000000000..53874b585 --- /dev/null +++ b/testdata/padding.tdir/padding.test @@ -0,0 +1,109 @@ +echo There we go... + +# #-- padding.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +echo "> query www.example.com." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound2.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> wait for log to happen on timer" +sleep 3 +echo "> check tap.log for dnstap info" +# see if it logged the information in tap.log +# wait for a moment for filesystem to catch up. +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi +if grep "www.example.com" tap.log; then echo "yes it is in tap.log"; +else + echo "information not in tap.log" + echo "failed" + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> query txt.example.com." +dig @127.0.0.1 -p $UNBOUND_PORT txt.example.com. TXT | tee outfile +echo "> check answer" +if grep "Lorem ipsum" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound2.log + cat unbound.log + echo "Not OK" + exit 1 +fi +echo "> wait for log to happen on timer" +sleep 3 +echo "> check tap.log for dnstap info" +# see if it logged the information in tap.log +# wait for a moment for filesystem to catch up. +if grep "txt.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "txt.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "txt.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "txt.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "txt.example.com" tap.log >/dev/null; then :; else sleep 1; fi +if grep "txt.example.com" tap.log >/dev/null; then :; else sleep 10; fi +if grep "txt.example.com" tap.log; then echo "yes it is in tap.log"; +else + echo "information not in tap.log" + echo "failed" + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> wait for message to be fully written to log" +sleep 1 +grep '^;; MSG SIZE rcvd: ' tap.log > message.sizes +if diff message.sizes padding.msgsizes +then + echo "OK" + exit 0 +else + echo "unexpected message sizes" + echo "failed" + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi diff --git a/testdata/padding.tdir/padding.testns b/testdata/padding.tdir/padding.testns new file mode 100644 index 000000000..714c35912 --- /dev/null +++ b/testdata/padding.tdir/padding.testns @@ -0,0 +1,33 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +txt IN TXT +SECTION ANSWER +txt IN TXT "Lorem ipsum dolor sit amet, consectetur adipiscing " +txt IN TXT "elit, sed do eiusmod tempor incididunt ut labore et " +txt IN TXT "dolore magna aliqua. Ut enim ad minim veniam, quis " +txt IN TXT "nostrud exercitation ullamco laboris nisi ut aliquip " +txt IN TXT "ex ea commodo consequat. Duis aute irure dolor in " +txt IN TXT "reprehenderit in voluptate velit esse cillum dolore " +txt IN TXT "eu fugiat nulla pariatur. Excepteur sint occaecat " +txt IN TXT "cupidatat non proident, sunt in culpa qui officia " +txt IN TXT "deserunt mollit anim id est laborum." +ENTRY_END + + diff --git a/testdata/padding.tdir/unbound_control.key b/testdata/padding.tdir/unbound_control.key new file mode 100644 index 000000000..753a4ef61 --- /dev/null +++ b/testdata/padding.tdir/unbound_control.key @@ -0,0 +1,39 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA +1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ +F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR +ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm +vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb +IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL +cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr +lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov +15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf +LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+ +Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57 +YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9 +whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c +lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax +tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ +U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9 +Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc +Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3 +ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+ +1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN +b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz +ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C +TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF +tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y +aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0 +A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU +LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U +R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy +7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj +7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw +jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1 +BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar +kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR +qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3 +VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9 +MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa +C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g= +-----END RSA PRIVATE KEY----- diff --git a/testdata/padding.tdir/unbound_control.pem b/testdata/padding.tdir/unbound_control.pem new file mode 100644 index 000000000..a1edf7017 --- /dev/null +++ b/testdata/padding.tdir/unbound_control.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw +WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA +A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv +OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj +1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl +NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht +A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ +Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB +TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ +nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My ++i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj +4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 +hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU +9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn +ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ +pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD +72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ +muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP +uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte +-----END CERTIFICATE----- diff --git a/testdata/padding.tdir/unbound_server.key b/testdata/padding.tdir/unbound_server.key new file mode 100644 index 000000000..370a7bbb2 --- /dev/null +++ b/testdata/padding.tdir/unbound_server.key @@ -0,0 +1,39 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI +0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq +GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z +uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K +WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 +FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP +q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL +A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP +7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf +XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 +iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 +2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo +MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj +WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz +O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI +IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN +qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU +dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs +bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr +YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km +7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr +gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z +5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG +ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN +oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ +s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW +zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx +ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 +oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 +BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS +mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 +kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 +7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 +RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O +jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp +O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre +MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== +-----END RSA PRIVATE KEY----- diff --git a/testdata/padding.tdir/unbound_server.pem b/testdata/padding.tdir/unbound_server.pem new file mode 100644 index 000000000..986807310 --- /dev/null +++ b/testdata/padding.tdir/unbound_server.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 +a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 +4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot +aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 +TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ +uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 ++nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz +XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx +dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW +84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 +JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca +fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg +XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF +qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 +sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD +yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe +CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== +-----END CERTIFICATE----- From efc8022ca4d5de01017915c87d375c82362e450a Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Sun, 24 Jan 2021 18:29:00 +0100 Subject: [PATCH 101/168] padding.tdir text in single TXT RR So the sentences are not re-ordered and the text makes sense! --- testdata/padding.tdir/padding.testns | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/testdata/padding.tdir/padding.testns b/testdata/padding.tdir/padding.testns index 714c35912..599323646 100644 --- a/testdata/padding.tdir/padding.testns +++ b/testdata/padding.tdir/padding.testns @@ -19,15 +19,7 @@ ADJUST copy_id SECTION QUESTION txt IN TXT SECTION ANSWER -txt IN TXT "Lorem ipsum dolor sit amet, consectetur adipiscing " -txt IN TXT "elit, sed do eiusmod tempor incididunt ut labore et " -txt IN TXT "dolore magna aliqua. Ut enim ad minim veniam, quis " -txt IN TXT "nostrud exercitation ullamco laboris nisi ut aliquip " -txt IN TXT "ex ea commodo consequat. Duis aute irure dolor in " -txt IN TXT "reprehenderit in voluptate velit esse cillum dolore " -txt IN TXT "eu fugiat nulla pariatur. Excepteur sint occaecat " -txt IN TXT "cupidatat non proident, sunt in culpa qui officia " -txt IN TXT "deserunt mollit anim id est laborum." +txt IN TXT "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat." "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." ENTRY_END From 4694323b1cfe38bc4cc53e65d1d0899ed11e1a2b Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Sun, 24 Jan 2021 20:17:44 +0100 Subject: [PATCH 102/168] Test some different padding sizes --- testdata/padding.tdir/padding.conf | 9 ++++ testdata/padding.tdir/padding.conf2 | 11 ++++ testdata/padding.tdir/padding.msgsizes | 16 ++++++ testdata/padding.tdir/padding.pre | 10 ++-- testdata/padding.tdir/padding.test | 75 +++++++++++++++++++++++--- testdata/padding.tdir/padding.testns | 9 ++++ 6 files changed, 120 insertions(+), 10 deletions(-) diff --git a/testdata/padding.tdir/padding.conf b/testdata/padding.tdir/padding.conf index 8ae6428cc..c310d355d 100644 --- a/testdata/padding.tdir/padding.conf +++ b/testdata/padding.tdir/padding.conf @@ -11,6 +11,15 @@ server: tls-cert-bundle: "unbound_server.pem" tls-upstream: yes +remote-control: + control-enable: yes + control-interface: 127.0.0.1 + control-port: @CONTROL_PORT@ + server-key-file: "unbound_server.key" + server-cert-file: "unbound_server.pem" + control-key-file: "unbound_control.key" + control-cert-file: "unbound_control.pem" + forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@#unbound" diff --git a/testdata/padding.tdir/padding.conf2 b/testdata/padding.tdir/padding.conf2 index 193209233..98be8fec7 100644 --- a/testdata/padding.tdir/padding.conf2 +++ b/testdata/padding.tdir/padding.conf2 @@ -18,9 +18,20 @@ server: log-replies: yes log-identity: "upstream" +remote-control: + control-enable: yes + control-interface: 127.0.0.1 + # control-interface: ::1 + control-port: @CONTROL_PORT2@ + server-key-file: "unbound_server.key" + server-cert-file: "unbound_server.pem" + control-key-file: "unbound_control.key" + control-cert-file: "unbound_control.pem" + forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" + dnstap: dnstap-enable: yes dnstap-socket-path: "dnstap.socket" diff --git a/testdata/padding.tdir/padding.msgsizes b/testdata/padding.tdir/padding.msgsizes index c43d05a96..f0d4a496d 100644 --- a/testdata/padding.tdir/padding.msgsizes +++ b/testdata/padding.tdir/padding.msgsizes @@ -2,3 +2,19 @@ ;; MSG SIZE rcvd: 468 ;; MSG SIZE rcvd: 128 ;; MSG SIZE rcvd: 936 +;; MSG SIZE rcvd: 128 +;; MSG SIZE rcvd: 60 +;; MSG SIZE rcvd: 128 +;; MSG SIZE rcvd: 502 +;; MSG SIZE rcvd: 44 +;; MSG SIZE rcvd: 60 +;; MSG SIZE rcvd: 44 +;; MSG SIZE rcvd: 502 +;; MSG SIZE rcvd: 48 +;; MSG SIZE rcvd: 64 +;; MSG SIZE rcvd: 48 +;; MSG SIZE rcvd: 512 +;; MSG SIZE rcvd: 48 +;; MSG SIZE rcvd: 512 +;; MSG SIZE rcvd: 48 +;; MSG SIZE rcvd: 512 diff --git a/testdata/padding.tdir/padding.pre b/testdata/padding.tdir/padding.pre index 6022cf4e4..4a13d0229 100644 --- a/testdata/padding.tdir/padding.pre +++ b/testdata/padding.tdir/padding.pre @@ -8,13 +8,17 @@ PRE="../.." . ../common.sh if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi -get_random_port 3 +get_random_port 5 UNBOUND_PORT=$RND_PORT UPSTREAM_PORT=$(($RND_PORT + 1)) FWD_PORT=$(($RND_PORT + 2)) +CONTROL_PORT=$(($RND_PORT + 3)) +CONTROL_PORT2=$(($RND_PORT + 4)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "UPSTREAM_PORT=$UPSTREAM_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test +echo "CONTROL_PORT2=$CONTROL_PORT2" >> .tpkg.var.test # start ldns-testnd get_ldns_testns @@ -42,7 +46,7 @@ if test ! -S dnstap.socket; then fi # make config file -sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$UPSTREAM_PORT'/' < padding.conf > ub.conf +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$UPSTREAM_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' < padding.conf > ub.conf # start unbound in the background $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & #$PRE/unbound -d -c ub.conf 2>&1 | tee unbound.log & @@ -50,7 +54,7 @@ UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test # make upstream config file -sed -e 's/@PORT\@/'$UPSTREAM_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < padding.conf2 > ub2.conf +sed -e 's/@PORT\@/'$UPSTREAM_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT2\@/'$CONTROL_PORT2'/' < padding.conf2 > ub2.conf # start upstream unbound in the background $PRE/unbound -d -c ub2.conf >unbound2.log 2>&1 & #$PRE/unbound -d -c ub2.conf 2>&1 | tee unbound2.log & diff --git a/testdata/padding.tdir/padding.test b/testdata/padding.tdir/padding.test index 53874b585..5111d8139 100644 --- a/testdata/padding.tdir/padding.test +++ b/testdata/padding.tdir/padding.test @@ -10,7 +10,7 @@ PRE="../.." . ../common.sh if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi -echo "> query www.example.com." +echo "> query www.example.com. A" dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then @@ -50,7 +50,7 @@ else exit 1 fi -echo "> query txt.example.com." +echo "> query txt.example.com. TXT" dig @127.0.0.1 -p $UNBOUND_PORT txt.example.com. TXT | tee outfile echo "> check answer" if grep "Lorem ipsum" outfile; then @@ -65,8 +65,6 @@ else echo "Not OK" exit 1 fi -echo "> wait for log to happen on timer" -sleep 3 echo "> check tap.log for dnstap info" # see if it logged the information in tap.log # wait for a moment for filesystem to catch up. @@ -89,12 +87,75 @@ else exit 1 fi -echo "> wait for message to be fully written to log" -sleep 1 +echo "> flush cache entries." +$PRE/unbound-control -c ub.conf flush_type www.example.com A +$PRE/unbound-control -c ub.conf flush_type txt.example.com TXT +echo "> disable padding of responses." +$PRE/unbound-control -c ub2.conf set_option pad-responses: no +echo "> query www.example.com. A" +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. A | tee outfile +echo "> query txt.example.com. TXT" +dig @127.0.0.1 -p $UNBOUND_PORT txt.example.com. TXT | tee outfile +echo "> flush cache entries." +$PRE/unbound-control -c ub.conf flush_type www.example.com A +$PRE/unbound-control -c ub.conf flush_type txt.example.com TXT +echo "> enable padding of responses." +$PRE/unbound-control -c ub2.conf set_option pad-responses: yes +echo "> set pad responses block size to 64" +$PRE/unbound-control -c ub2.conf set_option pad-responses-block-size: 64 +echo "> disable padding of queries." +$PRE/unbound-control -c ub.conf set_option pad-queries: no +echo "> query www.example.com. A" +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. A | tee outfile +echo "> query txt.example.com. TXT" +dig @127.0.0.1 -p $UNBOUND_PORT txt.example.com. TXT | tee outfile +echo "> flush cache entries." +$PRE/unbound-control -c ub.conf flush_type www.example.com A +$PRE/unbound-control -c ub.conf flush_type txt.example.com TXT +echo "> enable padding of queries." +$PRE/unbound-control -c ub.conf set_option pad-queries: yes +echo "> set pad queries block size to 48" +$PRE/unbound-control -c ub.conf set_option pad-queries-block-size: 48 +echo "> query www.example.com. A" +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. A | tee outfile +echo "> query txt.example.com. TXT" +dig @127.0.0.1 -p $UNBOUND_PORT txt.example.com. TXT | tee outfile +echo "> flush cache entries." +$PRE/unbound-control -c ub.conf flush_type www.example.com A +$PRE/unbound-control -c ub.conf flush_type txt.example.com TXT +echo "> set pad responses block size to 512" +$PRE/unbound-control -c ub2.conf set_option pad-responses-block-size: 512 +echo "> query www.example.com. A" +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. A | tee outfile +echo "> query fin.example.com. TXT" +dig @127.0.0.1 -p $UNBOUND_PORT fin.example.com. TXT | tee outfile +echo "> check tap.log for dnstap info" +# see if it logged the information in tap.log +# wait for a moment for filesystem to catch up. +if grep "fini" tap.log >/dev/null; then :; else sleep 1; fi +if grep "fini" tap.log >/dev/null; then :; else sleep 1; fi +if grep "fini" tap.log >/dev/null; then :; else sleep 1; fi +if grep "fini" tap.log >/dev/null; then :; else sleep 1; fi +if grep "fini" tap.log >/dev/null; then :; else sleep 1; fi +if grep "fini" tap.log >/dev/null; then :; else sleep 10; fi +if grep "fini" tap.log; then echo "yes it is in tap.log"; +else + echo "information not in tap.log" + echo "failed" + echo "> cat logfiles" + cat tap.log + cat tap.errlog + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + grep '^;; MSG SIZE rcvd: ' tap.log > message.sizes + if diff message.sizes padding.msgsizes then - echo "OK" + echo "OK - Message sizes matched expected sizes" exit 0 else echo "unexpected message sizes" diff --git a/testdata/padding.tdir/padding.testns b/testdata/padding.tdir/padding.testns index 599323646..bd3718ff6 100644 --- a/testdata/padding.tdir/padding.testns +++ b/testdata/padding.tdir/padding.testns @@ -22,4 +22,13 @@ SECTION ANSWER txt IN TXT "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat." "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." ENTRY_END +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +fin IN TXT +SECTION ANSWER +fin IN TXT "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat." "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." "fini" +ENTRY_END From ca2139bf3d4e10aa7fb8b810c08ca861194f72f6 Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Mon, 25 Jan 2021 15:13:54 +0100 Subject: [PATCH 103/168] Some review nits from George --- services/outside_network.c | 2 +- util/config_file.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/services/outside_network.c b/services/outside_network.c index 7527a6321..11559ffac 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -3039,7 +3039,7 @@ outnet_serviced_query(struct outside_network* outnet, addrlen, zone, zonelen, (int)qinfo->qtype, qstate->edns_opts_back_out, ( ssl_upstream && env->cfg->pad_queries - ? env->cfg->pad_queries_block_size : 0)); + ? env->cfg->pad_queries_block_size : 0 )); if(!sq) { free(cb); return NULL; diff --git a/util/config_file.h b/util/config_file.h index 480b800c0..8f9dfa75a 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -601,12 +601,12 @@ struct config_file { /** number of slabs for dnscrypt nonces cache */ size_t dnscrypt_nonce_cache_slabs; - /** EDNS padding according to FC7830 and RFC8467 */ + /** EDNS padding according to RFC7830 and RFC8467 */ /** true to enable padding of responses (default: on) */ int pad_responses; /** block size with which to pad encrypted responses (default: 468) */ size_t pad_responses_block_size; - /** true to enable padding of queries (default: off) */ + /** true to enable padding of queries (default: on) */ int pad_queries; /** block size with which to pad encrypted queries (default: 128) */ size_t pad_queries_block_size; From b7acaaa9b836bec4dc934d9c73f6655989699ba4 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Mon, 25 Jan 2021 19:26:19 +0100 Subject: [PATCH 104/168] - Update example.con.in and add a testcase for PR #275. --- doc/example.conf.in | 7 ++ testdata/serve_original_ttl.rpl | 136 ++++++++++++++++++++++++++++++++ 2 files changed, 143 insertions(+) create mode 100644 testdata/serve_original_ttl.rpl diff --git a/doc/example.conf.in b/doc/example.conf.in index b9b1c0525..9db622a47 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -598,6 +598,13 @@ server: # A recommended value is 1800. # serve-expired-client-timeout: 0 + # Return the original TTL as received from the upstream name server rather + # than the decrementing TTL as stored in the cache. Enabling this feature + # does not impact cache expiry, it only changes the TTL unbound embeds in + # responses to queries. Note that enabling this feature implicitly disables + # enforcement of the configured minimum and maximum TTL. + # serve-original-ttl: no + # Have the validator log failed validations for your diagnosis. # 0: off. 1: A line per failed user query. 2: With reason and bad IP. # val-log-level: 0 diff --git a/testdata/serve_original_ttl.rpl b/testdata/serve_original_ttl.rpl new file mode 100644 index 000000000..630fb39a4 --- /dev/null +++ b/testdata/serve_original_ttl.rpl @@ -0,0 +1,136 @@ +; config options +server: + access-control: 127.0.0.1 allow_snoop + module-config: "validator iterator" + qname-minimisation: "no" + minimal-responses: no + serve-original-ttl: yes + cache-max-ttl: 1000 + cache-min-ttl: 20 + serve-expired: yes + serve-expired-reply-ttl: 123 + +stub-zone: + name: "example.com" + stub-addr: 1.2.3.4 +CONFIG_END + +SCENARIO_BEGIN Test serve-original-ttl +; Scenario overview: +; - query for example.com. IN A +; - check that we get an answer for example.com. IN A with the correct TTL +; - query again after a couple seconds and check that we get the original TTL +; (next steps are combination with serve-expired) +; - query again after the TTL expired +; - check that we get the expired cached answer with the original TTL + +; ns.example.com. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.4 + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + example.com. IN NS + SECTION ANSWER + example.com. IN NS ns.example.com. + SECTION ADDITIONAL + ns.example.com. IN A 1.2.3.4 + ENTRY_END + + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + example.com. IN A + SECTION ANSWER + example.com. 10 IN A 5.6.7.8 + SECTION AUTHORITY + example.com. IN NS ns.example.com. + SECTION ADDITIONAL + ns.example.com. IN A 1.2.3.4 + ENTRY_END +RANGE_END + +; Query with RD flag +STEP 1 QUERY +ENTRY_BEGIN + REPLY RD + SECTION QUESTION + example.com. IN A +ENTRY_END + +; Check that we got the correct answer (should be cached) +STEP 10 CHECK_ANSWER +ENTRY_BEGIN + MATCH all ttl + REPLY QR RD RA NOERROR + SECTION QUESTION + example.com. IN A + SECTION ANSWER + example.com. 10 IN A 5.6.7.8 + SECTION AUTHORITY + example.com. IN NS ns.example.com. + SECTION ADDITIONAL + ns.example.com. IN A 1.2.3.4 +ENTRY_END + +; Wait a couple of seconds (< 10) +STEP 11 TIME_PASSES ELAPSE 5 + +; Query again +STEP 20 QUERY +ENTRY_BEGIN + REPLY + SECTION QUESTION + example.com. IN A +ENTRY_END + +; Check that we got the cached answer with the original TTL +; (Passively checks that minimum and maximum TTLs are ignored) +STEP 30 CHECK_ANSWER +ENTRY_BEGIN + MATCH all ttl + REPLY QR RA NOERROR + SECTION QUESTION + example.com. IN A + SECTION ANSWER + example.com. 10 A 5.6.7.8 + SECTION AUTHORITY + example.com. 3600 NS ns.example.com. + SECTION ADDITIONAL + ns.example.com. 3600 A 1.2.3.4 +ENTRY_END + +; Wait for the TTL to expire +STEP 31 TIME_PASSES ELAPSE 3601 + +; Query again +STEP 40 QUERY +ENTRY_BEGIN + REPLY + SECTION QUESTION + example.com. IN A +ENTRY_END + +; Check that we got a stale answer with the original TTL +STEP 50 CHECK_ANSWER +ENTRY_BEGIN + MATCH all ttl + REPLY QR RA NOERROR + SECTION QUESTION + example.com. IN A + SECTION ANSWER + example.com. 10 A 5.6.7.8 + SECTION AUTHORITY + example.com. NS ns.example.com. + SECTION ADDITIONAL + ns.example.com. A 1.2.3.4 +ENTRY_END + +; Give time for the pending query to get answered +STEP 51 TRAFFIC + +SCENARIO_END From 83d9f9d26801296fd1f5ee6200f5b15c1092da30 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Tue, 26 Jan 2021 12:55:55 +0100 Subject: [PATCH 105/168] Changelog entry for: - Merge PR #408 from fobser: Prevent a few more yacc clashes. --- doc/Changelog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index f77355945..2bad8d96b 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +26 January 2022: George + - Merge PR #408 from fobser: Prevent a few more yacc clashes. + 22 January 2022: Willem - Padding of queries and responses with DNS over TLS as specified in RFC7830 and RFC8467. From 2925fa46b06e1fef72c523d65635875754280bab Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Tue, 26 Jan 2021 13:01:33 +0100 Subject: [PATCH 106/168] Changelog entry for: - Merge PR #275 by Roland van Rijswijk-Deij, Add feature to return the original instead of a decrementing TTL ('serve-original-ttl'). --- doc/Changelog | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 2bad8d96b..1c8af380d 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,7 @@ 26 January 2022: George - Merge PR #408 from fobser: Prevent a few more yacc clashes. + - Merge PR #275 from Roland van Rijswijk-Deij: Add feature to return the + original instead of a decrementing TTL ('serve-original-ttl') 22 January 2022: Willem - Padding of queries and responses with DNS over TLS as specified in From 3b9c7e28263da07e69e38e1739a5d4c77eea6d67 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Tue, 26 Jan 2021 13:19:05 +0100 Subject: [PATCH 107/168] Changelog entry for: - Merge PR #355 from noloader: Make ICANN Update CA and DS Trust Anchor static data. --- doc/Changelog | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 1c8af380d..fed967d55 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,6 +2,8 @@ - Merge PR #408 from fobser: Prevent a few more yacc clashes. - Merge PR #275 from Roland van Rijswijk-Deij: Add feature to return the original instead of a decrementing TTL ('serve-original-ttl') + - Merge PR #355 from noloader: Make ICANN Update CA and DS Trust Anchor + static data. 22 January 2022: Willem - Padding of queries and responses with DNS over TLS as specified in From 3124eb052df3144f3b996e8367ed76bc23e927ac Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Tue, 26 Jan 2021 15:31:50 +0100 Subject: [PATCH 108/168] - Ignore cache blacklisting when trying to reply with expired data from cache. (#394) --- doc/Changelog | 2 ++ services/mesh.c | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index fed967d55..af53d7836 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -4,6 +4,8 @@ original instead of a decrementing TTL ('serve-original-ttl') - Merge PR #355 from noloader: Make ICANN Update CA and DS Trust Anchor static data. + - Ignore cache blacklisting when trying to reply with expired data from + cache (#394). 22 January 2022: Willem - Padding of queries and responses with DNS over TLS as specified in diff --git a/services/mesh.c b/services/mesh.c index 69f4d75e3..91d23debf 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -1929,7 +1929,9 @@ mesh_serve_expired_callback(void* arg) verbose(VERB_ALGO, "Serve expired: Trying to reply with expired data"); comm_timer_delete(qstate->serve_expired_data->timer); qstate->serve_expired_data->timer = NULL; - if(qstate->blacklist || qstate->no_cache_lookup || qstate->is_drop) { + /* If is_drop or no_cache_lookup (modules that handle their own cache e.g., + * subnetmod) ignore stale data from the main cache. */ + if(qstate->no_cache_lookup || qstate->is_drop) { verbose(VERB_ALGO, "Serve expired: Not allowed to look into cache for stale"); return; From 8ad4c9f92ae3acafac386925d12c1ee084e5a777 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 26 Jan 2021 17:29:22 +0100 Subject: [PATCH 109/168] - Fix compile of unbound-dnstap-socket without dnstap installed. --- Makefile.in | 3 ++- configure | 2 ++ configure.ac | 2 +- doc/Changelog | 3 +++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Makefile.in b/Makefile.in index 99943a650..6809881b6 100644 --- a/Makefile.in +++ b/Makefile.in @@ -248,6 +248,7 @@ DNSTAP_SOCKET_SRC=dnstap/unbound-dnstap-socket.c DNSTAP_SOCKET_OBJ=unbound-dnstap-socket.lo DNSTAP_SOCKET_OBJ_LINK=$(DNSTAP_SOCKET_OBJ) $(COMMON_OBJ) \ $(COMPAT_OBJ) $(SLDNS_OBJ) +DNSTAP_SOCKET_TESTBIN=@DNSTAP_SOCKET_TESTBIN@ LIBUNBOUND_SRC=libunbound/context.c libunbound/libunbound.c \ libunbound/libworker.c LIBUNBOUND_OBJ=context.lo libunbound.lo libworker.lo ub_event_pluggable.lo @@ -323,7 +324,7 @@ rsrc_unbound_checkconf.o: $(srcdir)/winrc/rsrc_unbound_checkconf.rc config.h TEST_BIN=asynclook$(EXEEXT) delayer$(EXEEXT) \ lock-verify$(EXEEXT) memstats$(EXEEXT) perf$(EXEEXT) \ petal$(EXEEXT) pktview$(EXEEXT) streamtcp$(EXEEXT) \ - unbound-dnstap-socket$(EXEEXT) dohclient$(EXEEXT) \ + $(DNSTAP_SOCKET_TESTBIN) dohclient$(EXEEXT) \ testbound$(EXEEXT) unittest$(EXEEXT) tests: all $(TEST_BIN) diff --git a/configure b/configure index 7957f0dd6..9d10e6ee7 100755 --- a/configure +++ b/configure @@ -649,6 +649,7 @@ ENABLE_DNSCRYPT ENABLE_DNSCRYPT_XCHACHA20 DNSTAP_OBJ DNSTAP_SRC +DNSTAP_SOCKET_TESTBIN DNSTAP_SOCKET_PATH opt_dnstap_socket_path ENABLE_DNSTAP @@ -21191,6 +21192,7 @@ _ACEOF DNSTAP_SOCKET_PATH="$hdr_dnstap_socket_path" + DNSTAP_SOCKET_TESTBIN='unbound-dnstap-socket$(EXEEXT)' DNSTAP_SRC="dnstap/dnstap.c dnstap/dnstap.pb-c.c dnstap/dnstap_fstrm.c dnstap/dtstream.c" diff --git a/configure.ac b/configure.ac index 3e872bca9..ee9ff1696 100644 --- a/configure.ac +++ b/configure.ac @@ -1743,7 +1743,7 @@ dt_DNSTAP([$UNBOUND_RUN_DIR/dnstap.sock], AC_DEFINE_UNQUOTED(DNSTAP_SOCKET_PATH, ["$hdr_dnstap_socket_path"], [default dnstap socket path]) AC_SUBST(DNSTAP_SOCKET_PATH,["$hdr_dnstap_socket_path"]) - + AC_SUBST(DNSTAP_SOCKET_TESTBIN,['unbound-dnstap-socket$(EXEEXT)']) AC_SUBST([DNSTAP_SRC], ["dnstap/dnstap.c dnstap/dnstap.pb-c.c dnstap/dnstap_fstrm.c dnstap/dtstream.c"]) AC_SUBST([DNSTAP_OBJ], ["dnstap.lo dnstap.pb-c.lo dnstap_fstrm.lo dtstream.lo"]) ], diff --git a/doc/Changelog b/doc/Changelog index af53d7836..0ccec087a 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -7,6 +7,9 @@ - Ignore cache blacklisting when trying to reply with expired data from cache (#394). +26 January 2022: Wouter + - Fix compile of unbound-dnstap-socket without dnstap installed. + 22 January 2022: Willem - Padding of queries and responses with DNS over TLS as specified in RFC7830 and RFC8467. From 9d700e1f850fca1c687789e57f9c43236474a133 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 28 Jan 2021 09:04:00 +0100 Subject: [PATCH 110/168] - Annotate that we ignore the return value of if_indextoname. --- doc/Changelog | 3 +++ services/listen_dnsport.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 0ccec087a..268d51ff2 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +28 January 2022: Wouter + - Annotate that we ignore the return value of if_indextoname. + 26 January 2022: George - Merge PR #408 from fobser: Prevent a few more yacc clashes. - Merge PR #275 from Roland van Rijswijk-Deij: Add feature to return the diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 629d4de72..b790660f2 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -1456,7 +1456,7 @@ resolve_ifa_name(struct ifaddrs *ifas, const char *search_ifa, char ***ip_addres log_err("inet_ntop failed"); return 0; } - if_indextoname(in6->sin6_scope_id, + (void)if_indextoname(in6->sin6_scope_id, (char *)if_index_name); if (strlen(if_index_name) != 0) { snprintf(addr_buf, sizeof(addr_buf), From 9e6f8567ded09f432842afd96b9fb0a160e037c0 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 28 Jan 2021 09:07:16 +0100 Subject: [PATCH 111/168] - Fix to use correct type for label count in rpz routine. --- doc/Changelog | 1 + services/rpz.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 268d51ff2..f6d32249b 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,6 @@ 28 January 2022: Wouter - Annotate that we ignore the return value of if_indextoname. + - Fix to use correct type for label count in rpz routine. 26 January 2022: George - Merge PR #408 from fobser: Prevent a few more yacc clashes. diff --git a/services/rpz.c b/services/rpz.c index d7dd17f7e..2b6b0ac3f 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -668,7 +668,8 @@ rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass, int only_exact, int wr, int zones_keep_lock) { uint8_t* ce; - size_t ce_len, ce_labs; + size_t ce_len; + int ce_labs; uint8_t wc[LDNS_MAX_DOMAINLEN+1]; int exact; struct local_zone* z = NULL; From cb55b5906a5748462eb720d2bd5278ecfbef8503 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 28 Jan 2021 09:11:46 +0100 Subject: [PATCH 112/168] - Fix empty clause warning in config_file nsid parse. --- doc/Changelog | 1 + util/config_file.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index f6d32249b..8e6794136 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 28 January 2022: Wouter - Annotate that we ignore the return value of if_indextoname. - Fix to use correct type for label count in rpz routine. + - Fix empty clause warning in config_file nsid parse. 26 January 2022: George - Merge PR #408 from fobser: Prevent a few more yacc clashes. diff --git a/util/config_file.c b/util/config_file.c index 28816f747..4d87dee9b 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -2064,8 +2064,9 @@ uint8_t* cfg_parse_nsid(const char* str, uint16_t* nsid_len) if ((nsid = (uint8_t *)strdup(str + 6))) *nsid_len = strlen(str + 6); - } else if (strlen(str) % 2) + } else if (strlen(str) % 2) { ; /* hex string has even number of characters */ + } else if (*str && (nsid = calloc(1, strlen(str) / 2))) { const char *ch; From 3a19ceaae67fc0d33dd79a3057834f1f54d2999c Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 28 Jan 2021 09:14:19 +0100 Subject: [PATCH 113/168] - Fix to use correct type for label count in ipdnametoaddr rpz routine. --- doc/Changelog | 1 + util/net_help.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 8e6794136..83e617c9a 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,6 +2,7 @@ - Annotate that we ignore the return value of if_indextoname. - Fix to use correct type for label count in rpz routine. - Fix empty clause warning in config_file nsid parse. + - Fix to use correct type for label count in ipdnametoaddr rpz routine. 26 January 2022: George - Merge PR #408 from fobser: Prevent a few more yacc clashes. diff --git a/util/net_help.c b/util/net_help.c index c5216bc2d..3b5527adf 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -321,7 +321,7 @@ static int ipdnametoaddr(uint8_t* dname, size_t dnamelen, struct sockaddr_storage* addr, socklen_t* addrlen, int* af) { uint8_t* ia; - size_t dnamelabs = dname_count_labels(dname); + int dnamelabs = dname_count_labels(dname); uint8_t lablen; char* e = NULL; int z = 0; From ad8104bb7c3d27a3f70a27e764455112d541e454 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 28 Jan 2021 09:15:45 +0100 Subject: [PATCH 114/168] - Fix empty clause warning in edns pass for padding. --- doc/Changelog | 1 + util/edns.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 83e617c9a..66b46d230 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -3,6 +3,7 @@ - Fix to use correct type for label count in rpz routine. - Fix empty clause warning in config_file nsid parse. - Fix to use correct type for label count in ipdnametoaddr rpz routine. + - Fix empty clause warning in edns pass for padding. 26 January 2022: George - Merge PR #408 from fobser: Prevent a few more yacc clashes. diff --git a/util/edns.c b/util/edns.c index 5d2121636..84308449c 100644 --- a/util/edns.c +++ b/util/edns.c @@ -166,8 +166,9 @@ int apply_edns_options(struct edns_data* edns_out, struct edns_data* edns_in, return 0; if(!cfg->pad_responses || c->type != comm_tcp || !c->ssl - || !edns_opt_list_find(edns_in->opt_list, LDNS_EDNS_PADDING)) + || !edns_opt_list_find(edns_in->opt_list, LDNS_EDNS_PADDING)) { ; /* pass */ + } else if(!edns_opt_list_append(&edns_out->opt_list, LDNS_EDNS_PADDING , 0, NULL, region)) From 0ea86f6ccb68f885b2ed0d553e4627bc97b6f329 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 28 Jan 2021 11:19:34 +0100 Subject: [PATCH 115/168] - Fix fwd ancil test post script when not supported. --- doc/Changelog | 1 + testdata/fwd_ancil.tdir/fwd_ancil.post | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 66b46d230..cae27729a 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -4,6 +4,7 @@ - Fix empty clause warning in config_file nsid parse. - Fix to use correct type for label count in ipdnametoaddr rpz routine. - Fix empty clause warning in edns pass for padding. + - Fix fwd ancil test post script when not supported. 26 January 2022: George - Merge PR #408 from fobser: Prevent a few more yacc clashes. diff --git a/testdata/fwd_ancil.tdir/fwd_ancil.post b/testdata/fwd_ancil.tdir/fwd_ancil.post index a74ba856e..6578151af 100644 --- a/testdata/fwd_ancil.tdir/fwd_ancil.post +++ b/testdata/fwd_ancil.tdir/fwd_ancil.post @@ -14,5 +14,9 @@ fi kill_pid $FWD_PID if fgrep "service stopped" unbound.log; then exit 0 -fi +fi +if fgrep "disable interface-automatic" unbound.log; then + echo "skip test" + exit 0 +fi kill_pid $UNBOUND_PID From 7262a249f1c55116b14e8e6bae08a6b0224d00cd Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 29 Jan 2021 16:34:46 +0100 Subject: [PATCH 116/168] - Fix for doxygen 1.8.20 compatibility. --- doc/Changelog | 3 +++ doc/unbound.doxygen | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index cae27729a..33668733c 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +29 January 2022: Wouter + - Fix for doxygen 1.8.20 compatibility. + 28 January 2022: Wouter - Annotate that we ignore the return value of if_indextoname. - Fix to use correct type for label count in rpz routine. diff --git a/doc/unbound.doxygen b/doc/unbound.doxygen index 45f49b367..4c32d8943 100644 --- a/doc/unbound.doxygen +++ b/doc/unbound.doxygen @@ -1143,7 +1143,7 @@ COMPACT_LATEX = NO # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. -PAPER_TYPE = a4wide +#PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. @@ -1451,7 +1451,7 @@ EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). -PERL_PATH = /usr/bin/perl +#PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool @@ -1473,7 +1473,7 @@ CLASS_DIAGRAMS = YES # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. -MSCGEN_PATH = +#MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented From a8485d58ca33b9841841e552dc98230e401b5588 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Mon, 1 Feb 2021 16:57:56 +0100 Subject: [PATCH 117/168] - Attempt to fix NULL keys in the reuse_tcp tree; relates to #411. --- doc/Changelog | 3 +++ services/outside_network.c | 25 +++++++++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index af53d7836..4a095a076 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +1 February 2022: George + - Attempt to fix NULL keys in the reuse_tcp tree; relates to #411. + 26 January 2022: George - Merge PR #408 from fobser: Prevent a few more yacc clashes. - Merge PR #275 from Roland van Rijswijk-Deij: Add feature to return the diff --git a/services/outside_network.c b/services/outside_network.c index 11559ffac..6c6b42ccb 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -90,6 +90,10 @@ static int randomize_and_send_udp(struct pending* pend, sldns_buffer* packet, static void waiting_list_remove(struct outside_network* outnet, struct waiting_tcp* w); +/** remove reused element from tree and lru list */ +static void reuse_tcp_remove_tree_list(struct outside_network* outnet, + struct reuse_tcp* reuse); + int pending_cmp(const void* key1, const void* key2) { @@ -424,8 +428,11 @@ static int reuse_tcp_insert(struct outside_network* outnet, struct pending_tcp* pend_tcp) { log_reuse_tcp(VERB_CLIENT, "reuse_tcp_insert", &pend_tcp->reuse); - if(pend_tcp->reuse.item_on_lru_list) + if(pend_tcp->reuse.item_on_lru_list) { + if(!pend_tcp->reuse.node.key) + log_err("internal error: reuse_tcp_insert: on lru list without key"); return 1; + } pend_tcp->reuse.node.key = &pend_tcp->reuse; pend_tcp->reuse.pending = pend_tcp; if(!rbtree_insert(&outnet->tcp_reuse, &pend_tcp->reuse.node)) { @@ -477,7 +484,7 @@ reuse_tcp_find(struct outside_network* outnet, struct sockaddr_storage* addr, if(outnet->tcp_reuse.root == NULL || outnet->tcp_reuse.root == RBTREE_NULL) return NULL; - if(rbtree_find_less_equal(&outnet->tcp_reuse, &key_p.reuse.node, + if(rbtree_find_less_equal(&outnet->tcp_reuse, &key_p.reuse, &result)) { /* exact match */ /* but the key is on stack, and ptr is compared, impossible */ @@ -661,6 +668,14 @@ outnet_tcp_take_into_use(struct waiting_tcp* w) pend->reuse.cp_more_write_again = 0; memcpy(&pend->c->repinfo.addr, &w->addr, w->addrlen); pend->reuse.pending = pend; + + /* Remove from tree in case the is_ssl will be different and causes the + * identity of the reuse_tcp to change; could result in nodes not being + * deleted from the tree (because the new identity does not match the + * previous node) but their ->key would be changed to NULL. */ + if(pend->reuse.node.key) + reuse_tcp_remove_tree_list(w->outnet, &pend->reuse); + if(pend->c->ssl) pend->reuse.is_ssl = 1; else pend->reuse.is_ssl = 0; @@ -677,8 +692,10 @@ outnet_tcp_take_into_use(struct waiting_tcp* w) static void reuse_tcp_lru_touch(struct outside_network* outnet, struct reuse_tcp* reuse) { - if(!reuse->item_on_lru_list) + if(!reuse->item_on_lru_list) { + log_err("internal error: we need to touch the lru_list but item not in list"); return; /* not on the list, no lru to modify */ + } if(!reuse->lru_prev) return; /* already first in the list */ /* remove at current position */ @@ -847,7 +864,7 @@ reuse_tcp_remove_tree_list(struct outside_network* outnet, verbose(VERB_CLIENT, "reuse_tcp_remove_tree_list"); if(reuse->node.key) { /* delete it from reuse tree */ - (void)rbtree_delete(&outnet->tcp_reuse, &reuse->node); + (void)rbtree_delete(&outnet->tcp_reuse, reuse); reuse->node.key = NULL; } /* delete from reuse list */ From 21def26405345915711af8a43c191627dce305ed Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Mon, 1 Feb 2021 17:02:19 +0100 Subject: [PATCH 118/168] - Hide our time traveling abilities. --- doc/Changelog | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 0e8687470..b4778827c 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,10 +1,10 @@ -1 February 2022: George +1 February 2021: George - Attempt to fix NULL keys in the reuse_tcp tree; relates to #411. -29 January 2022: Wouter +29 January 2021: Wouter - Fix for doxygen 1.8.20 compatibility. -28 January 2022: Wouter +28 January 2021: Wouter - Annotate that we ignore the return value of if_indextoname. - Fix to use correct type for label count in rpz routine. - Fix empty clause warning in config_file nsid parse. @@ -12,7 +12,7 @@ - Fix empty clause warning in edns pass for padding. - Fix fwd ancil test post script when not supported. -26 January 2022: George +26 January 2021: George - Merge PR #408 from fobser: Prevent a few more yacc clashes. - Merge PR #275 from Roland van Rijswijk-Deij: Add feature to return the original instead of a decrementing TTL ('serve-original-ttl') @@ -21,10 +21,10 @@ - Ignore cache blacklisting when trying to reply with expired data from cache (#394). -26 January 2022: Wouter +26 January 2021: Wouter - Fix compile of unbound-dnstap-socket without dnstap installed. -22 January 2022: Willem +22 January 2021: Willem - Padding of queries and responses with DNS over TLS as specified in RFC7830 and RFC8467. From a5a9672dc426ff0213cb3a1004cb3ffcf5e9ee84 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 2 Feb 2021 08:48:44 +0100 Subject: [PATCH 119/168] - branch-1.13.1 is created, with release-1.13.1rc1 tag. --- doc/Changelog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index b4778827c..690b0b268 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +2 February 2021: Wouter + - branch-1.13.1 is created, with release-1.13.1rc1 tag. + 1 February 2021: George - Attempt to fix NULL keys in the reuse_tcp tree; relates to #411. From bc013b66ed1716a1a703cc98b4d8406e75a54fe7 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 2 Feb 2021 13:18:18 +0100 Subject: [PATCH 120/168] - Fix dynlibmod link on rhel8 for -ldl inclusion. --- configure | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++- configure.ac | 6 ++++- doc/Changelog | 1 + 3 files changed, 66 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 9d10e6ee7..c896bbc96 100755 --- a/configure +++ b/configure @@ -17236,7 +17236,66 @@ $as_echo "#define WITH_DYNLIBMODULE 1" >>confdefs.h DYNLIBMOD_HEADER='$(srcdir)/dynlibmod/dynlibmod.h' if test $on_mingw = "no"; then - DYNLIBMOD_EXTRALIBS="-ldl -export-dynamic" + # link with -ldl if not already there, for all executables because + # dlopen call is in the dynlib module. For unbound executable, also + # export symbols. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5 +$as_echo_n "checking for library containing dlopen... " >&6; } +if ${ac_cv_search_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +for ac_lib in '' dl; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_dlopen=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_dlopen+:} false; then : + break +fi +done +if ${ac_cv_search_dlopen+:} false; then : + +else + ac_cv_search_dlopen=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5 +$as_echo "$ac_cv_search_dlopen" >&6; } +ac_res=$ac_cv_search_dlopen +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + + DYNLIBMOD_EXTRALIBS="-export-dynamic" else DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.dll.a" fi diff --git a/configure.ac b/configure.ac index ee9ff1696..0b37bfc30 100644 --- a/configure.ac +++ b/configure.ac @@ -642,7 +642,11 @@ if test x_$withval != x_no; then DYNLIBMOD_HEADER='$(srcdir)/dynlibmod/dynlibmod.h' AC_SUBST(DYNLIBMOD_HEADER) if test $on_mingw = "no"; then - DYNLIBMOD_EXTRALIBS="-ldl -export-dynamic" + # link with -ldl if not already there, for all executables because + # dlopen call is in the dynlib module. For unbound executable, also + # export symbols. + AC_SEARCH_LIBS([dlopen], [dl]) + DYNLIBMOD_EXTRALIBS="-export-dynamic" else DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.dll.a" fi diff --git a/doc/Changelog b/doc/Changelog index 690b0b268..fcf84deb5 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,6 @@ 2 February 2021: Wouter - branch-1.13.1 is created, with release-1.13.1rc1 tag. + - Fix dynlibmod link on rhel8 for -ldl inclusion. 1 February 2021: George - Attempt to fix NULL keys in the reuse_tcp tree; relates to #411. From f9a1ac3f0b1a415d8085e113d44797e62c436a52 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 2 Feb 2021 14:30:53 +0100 Subject: [PATCH 121/168] - Fix windows dependency on libssp.dll because of default stack protector in mingw. --- configure.ac | 2 ++ doc/Changelog | 2 ++ makedist.sh | 5 +++++ 3 files changed, 9 insertions(+) diff --git a/configure.ac b/configure.ac index 0b37bfc30..9f3455c0f 100644 --- a/configure.ac +++ b/configure.ac @@ -1442,6 +1442,7 @@ if test x_$enable_static_exe = x_yes; then LIBS="$LIBS -lgdi32" fi LIBS="$LIBS -lz" + staticexe="$staticexe -l:libssp.a" fi fi @@ -1458,6 +1459,7 @@ if test x_$enable_fully_static = x_yes; then LIBS="$LIBS -lgdi32" fi LIBS="$LIBS -lz" + staticexe="$staticexe -l:libssp.a" fi fi diff --git a/doc/Changelog b/doc/Changelog index fcf84deb5..328b84663 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,8 @@ 2 February 2021: Wouter - branch-1.13.1 is created, with release-1.13.1rc1 tag. - Fix dynlibmod link on rhel8 for -ldl inclusion. + - Fix windows dependency on libssp.dll because of default stack + protector in mingw. 1 February 2021: George - Attempt to fix NULL keys in the reuse_tcp tree; relates to #411. diff --git a/makedist.sh b/makedist.sh index c3bfcaad3..25cabe136 100755 --- a/makedist.sh +++ b/makedist.sh @@ -412,6 +412,11 @@ if [ "$DOWIN" = "yes" ]; then cp ../unbound.exe ../unbound-anchor.exe ../unbound-host.exe ../unbound-control.exe ../unbound-checkconf.exe ../unbound-service-install.exe ../unbound-service-remove.exe ../LICENSE ../winrc/unbound-control-setup.cmd ../winrc/unbound-website.url ../winrc/service.conf ../winrc/README.txt ../contrib/create_unbound_ad_servers.cmd ../contrib/warmup.cmd ../contrib/unbound_cache.cmd . mkdir libunbound cp ../../unbound_shared/unbound.h ../../unbound_shared/.libs/libunbound*.dll ../../unbound_shared/.libs/libunbound.dll.a ../../unbound_shared/.libs/libunbound.a ../../unbound_shared/.libs/libunbound*.def ../../sslsharedinstall/lib/libcrypto.dll.a ../../sslsharedinstall/lib/libssl.dll.a ../../sslsharedinstall/bin/libcrypto*.dll ../../sslsharedinstall/bin/libssl*.dll ../../wxpinstall/bin/libexpat*.dll ../../wxpinstall/lib/libexpat.dll.a libunbound/. + if test "$W64" = "no"; then + cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libssp-0.dll libunbound/. + else + cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libssp-0.dll libunbound/. + fi # zipfile zip -r ../$file LICENSE README.txt unbound.exe unbound-anchor.exe unbound-host.exe unbound-control.exe unbound-checkconf.exe unbound-service-install.exe unbound-service-remove.exe unbound-control-setup.cmd example.conf service.conf root.key unbound-website.url create_unbound_ad_servers.cmd warmup.cmd unbound_cache.cmd Changelog libunbound info "Testing $file" From 18840665bcbb28c9de07bc3b20157a0dde13f8fd Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 2 Feb 2021 14:31:05 +0100 Subject: [PATCH 122/168] And autoconf. --- configure | 2 ++ 1 file changed, 2 insertions(+) diff --git a/configure b/configure index c896bbc96..12f6a97d6 100755 --- a/configure +++ b/configure @@ -19825,6 +19825,7 @@ if test x_$enable_static_exe = x_yes; then LIBS="$LIBS -lgdi32" fi LIBS="$LIBS -lz" + staticexe="$staticexe -l:libssp.a" fi fi @@ -19844,6 +19845,7 @@ if test x_$enable_fully_static = x_yes; then LIBS="$LIBS -lgdi32" fi LIBS="$LIBS -lz" + staticexe="$staticexe -l:libssp.a" fi fi From aa8dfe94d31e11c19897444b955af6ac10aec1cd Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 2 Feb 2021 14:52:05 +0100 Subject: [PATCH 123/168] Fixup to add to LIBS. --- configure | 4 ++-- configure.ac | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/configure b/configure index 12f6a97d6..622f51e87 100755 --- a/configure +++ b/configure @@ -19825,7 +19825,7 @@ if test x_$enable_static_exe = x_yes; then LIBS="$LIBS -lgdi32" fi LIBS="$LIBS -lz" - staticexe="$staticexe -l:libssp.a" + LIBS="$LIBS -l:libssp.a" fi fi @@ -19845,7 +19845,7 @@ if test x_$enable_fully_static = x_yes; then LIBS="$LIBS -lgdi32" fi LIBS="$LIBS -lz" - staticexe="$staticexe -l:libssp.a" + LIBS="$LIBS -l:libssp.a" fi fi diff --git a/configure.ac b/configure.ac index 9f3455c0f..2d88048f7 100644 --- a/configure.ac +++ b/configure.ac @@ -1442,7 +1442,7 @@ if test x_$enable_static_exe = x_yes; then LIBS="$LIBS -lgdi32" fi LIBS="$LIBS -lz" - staticexe="$staticexe -l:libssp.a" + LIBS="$LIBS -l:libssp.a" fi fi @@ -1459,7 +1459,7 @@ if test x_$enable_fully_static = x_yes; then LIBS="$LIBS -lgdi32" fi LIBS="$LIBS -lz" - staticexe="$staticexe -l:libssp.a" + LIBS="$LIBS -l:libssp.a" fi fi From 46939294710d24a37f9f838141f26e6b063b01f3 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 2 Feb 2021 17:04:29 +0100 Subject: [PATCH 124/168] - Fix indentation of root anchor for use by windows install script. --- doc/Changelog | 1 + smallapp/unbound-anchor.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 328b84663..eea220c41 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -3,6 +3,7 @@ - Fix dynlibmod link on rhel8 for -ldl inclusion. - Fix windows dependency on libssp.dll because of default stack protector in mingw. + - Fix indentation of root anchor for use by windows install script. 1 February 2021: George - Attempt to fix NULL keys in the reuse_tcp tree; relates to #411. diff --git a/smallapp/unbound-anchor.c b/smallapp/unbound-anchor.c index c4e9b3bfd..3e6fc6e6f 100644 --- a/smallapp/unbound-anchor.c +++ b/smallapp/unbound-anchor.c @@ -183,7 +183,7 @@ static const char DS_TRUST_ANCHOR[] = /* The anchors must start on a new line with ". IN DS and end with \n"[;] * because the makedist script greps on the source here */ /* anchor 20326 is from 2017 */ - ". IN DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D\n"; +". IN DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D\n"; /** verbosity for this application */ static int verb = 0; From c365e3ab9af99e3c06a8f3431f6935a383b56c51 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 4 Feb 2021 09:18:40 +0100 Subject: [PATCH 125/168] - release 1.13.1rc2 tag on branch-1.13.1 with added changes of 2 feb. --- doc/Changelog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index eea220c41..37d496835 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +4 February 2021: Wouter + - release 1.13.1rc2 tag on branch-1.13.1 with added changes of 2 feb. + 2 February 2021: Wouter - branch-1.13.1 is created, with release-1.13.1rc1 tag. - Fix dynlibmod link on rhel8 for -ldl inclusion. From d3b5f287b171cdb692948d57c8d0e07c943a9caf Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 4 Feb 2021 16:18:02 +0100 Subject: [PATCH 126/168] zonemd, fix unit test to allow nonvalidating zone without zonemd with permissive mode for zonemd. --- testdata/auth_zonefile_down.rpl | 1 + 1 file changed, 1 insertion(+) diff --git a/testdata/auth_zonefile_down.rpl b/testdata/auth_zonefile_down.rpl index 9c5ecbb1c..870ba9401 100644 --- a/testdata/auth_zonefile_down.rpl +++ b/testdata/auth_zonefile_down.rpl @@ -7,6 +7,7 @@ server: qname-minimisation: "no" trust-anchor-signaling: no aggressive-nsec: yes + zonemd-permissive-mode: yes auth-zone: name: "example.com." From 450155bfa03a1e82020ff8af5ab08788ce404daa Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 9 Feb 2021 09:16:23 +0100 Subject: [PATCH 127/168] Changelog note for 1.13.1 release and main branch is 1.13.2 in development. --- configure | 25 +++++++++++++------------ configure.ac | 5 +++-- doc/Changelog | 2 ++ 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/configure b/configure index 622f51e87..b067e48fe 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for unbound 1.13.1. +# Generated by GNU Autoconf 2.69 for unbound 1.13.2. # # Report bugs to . # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='unbound' PACKAGE_TARNAME='unbound' -PACKAGE_VERSION='1.13.1' -PACKAGE_STRING='unbound 1.13.1' +PACKAGE_VERSION='1.13.2' +PACKAGE_STRING='unbound 1.13.2' PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues' PACKAGE_URL='' @@ -1460,7 +1460,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures unbound 1.13.1 to adapt to many kinds of systems. +\`configure' configures unbound 1.13.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1525,7 +1525,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of unbound 1.13.1:";; + short | recursive ) echo "Configuration of unbound 1.13.2:";; esac cat <<\_ACEOF @@ -1753,7 +1753,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -unbound configure 1.13.1 +unbound configure 1.13.2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2462,7 +2462,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by unbound $as_me 1.13.1, which was +It was created by unbound $as_me 1.13.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2814,11 +2814,11 @@ UNBOUND_VERSION_MAJOR=1 UNBOUND_VERSION_MINOR=13 -UNBOUND_VERSION_MICRO=1 +UNBOUND_VERSION_MICRO=2 LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=12 +LIBUNBOUND_REVISION=13 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -2898,6 +2898,7 @@ LIBUNBOUND_AGE=1 # 1.12.0 had 9:10:1 # 1.13.0 had 9:11:1 # 1.13.1 had 9:12:1 +# 1.13.2 had 9:13:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -21760,7 +21761,7 @@ _ACEOF -version=1.13.1 +version=1.13.2 date=`date +'%b %e, %Y'` @@ -22279,7 +22280,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by unbound $as_me 1.13.1, which was +This file was extended by unbound $as_me 1.13.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -22345,7 +22346,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -unbound config.status 1.13.1 +unbound config.status 1.13.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 2d88048f7..cba6ca018 100644 --- a/configure.ac +++ b/configure.ac @@ -11,14 +11,14 @@ sinclude(dnscrypt/dnscrypt.m4) # must be numbers. ac_defun because of later processing m4_define([VERSION_MAJOR],[1]) m4_define([VERSION_MINOR],[13]) -m4_define([VERSION_MICRO],[1]) +m4_define([VERSION_MICRO],[2]) AC_INIT([unbound],m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]),[unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues],[unbound]) AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR]) AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR]) AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO]) LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=12 +LIBUNBOUND_REVISION=13 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -98,6 +98,7 @@ LIBUNBOUND_AGE=1 # 1.12.0 had 9:10:1 # 1.13.0 had 9:11:1 # 1.13.1 had 9:12:1 +# 1.13.2 had 9:13:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary diff --git a/doc/Changelog b/doc/Changelog index 37d496835..510d0e4a9 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,7 @@ 4 February 2021: Wouter - release 1.13.1rc2 tag on branch-1.13.1 with added changes of 2 feb. + This became 1.13.1 release tag on 9 feb. The main branch is set + to version 1.13.2. 2 February 2021: Wouter - branch-1.13.1 is created, with release-1.13.1rc1 tag. From e0d426ebb10653a78bf5c4053198f6ac19bfcd3e Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 9 Feb 2021 10:38:55 +0100 Subject: [PATCH 128/168] - Fix for Python 3.9, no longer use deprecated functions of PyEval_CallObject (now PyObject_Call), PyEval_InitThreads (now none), PyParser_SimpleParseFile (now Py_CompileString). --- doc/Changelog | 5 +++++ libunbound/python/libunbound.i | 6 +++++ pythonmod/pythonmod.c | 41 ++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 510d0e4a9..aa45145df 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,8 @@ +9 February 2021: Wouter + - Fix for Python 3.9, no longer use deprecated functions of + PyEval_CallObject (now PyObject_Call), PyEval_InitThreads (now + none), PyParser_SimpleParseFile (now Py_CompileString). + 4 February 2021: Wouter - release 1.13.1rc2 tag on branch-1.13.1 with added changes of 2 feb. This became 1.13.1 release tag on 9 feb. The main branch is set diff --git a/libunbound/python/libunbound.i b/libunbound/python/libunbound.i index a23c45b9c..ab244a6fb 100644 --- a/libunbound/python/libunbound.i +++ b/libunbound/python/libunbound.i @@ -916,7 +916,13 @@ int _ub_resolve_async(struct ub_ctx* ctx, char* name, int rrtype, int rrclass, v struct cb_data* id; id = (struct cb_data*) iddata; arglist = Py_BuildValue("(OiO)",id->data,status, SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ub_result, 0 | 0 )); // Build argument list +#if PY_MAJOR_VERSION <= 2 || (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION < 9) + /* for python before 3.9 */ fresult = PyEval_CallObject(id->func,arglist); // Call Python +#else + /* for python 3.9 and newer */ + fresult = PyObject_Call(id->func,arglist,NULL); +#endif Py_DECREF(id->func); Py_DECREF(id->data); free(id); diff --git a/pythonmod/pythonmod.c b/pythonmod/pythonmod.c index 9006429ef..040ff7051 100644 --- a/pythonmod/pythonmod.c +++ b/pythonmod/pythonmod.c @@ -299,7 +299,10 @@ int pythonmod_init(struct module_env* env, int id) PyImport_AppendInittab(SWIG_name, (void*)SWIG_init); #endif Py_Initialize(); +#if PY_MAJOR_VERSION <= 2 || (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION <= 6) + /* initthreads only for python 3.6 and older */ PyEval_InitThreads(); +#endif SWIG_init(); mainthr = PyEval_SaveThread(); } @@ -354,6 +357,8 @@ int pythonmod_init(struct module_env* env, int id) /* TODO: deallocation of pe->... if an error occurs */ if (PyRun_SimpleFile(script_py, pe->fname) < 0) { +#if PY_MAJOR_VERSION <= 2 || (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION < 9) + /* for python before 3.9 */ log_err("pythonmod: can't parse Python script %s", pe->fname); /* print the error to logs too, run it again */ fseek(script_py, 0, SEEK_SET); @@ -369,9 +374,45 @@ int pythonmod_init(struct module_env* env, int id) /* ignore the NULL return of _node, it is NULL due to the parse failure * that we are expecting */ (void)PyParser_SimpleParseFile(script_py, pe->fname, Py_file_input); +#else + /* for python 3.9 and newer */ + char* fstr = NULL; + size_t flen = 0; + log_err("pythonmod: can't parse Python script %s", pe->fname); + /* print the error to logs too, run it again */ + fseek(script_py, 0, SEEK_END); + flen = (size_t)ftell(script_py); + fstr = malloc(flen+1); + if(!fstr) { + log_err("malloc failure to print parse error"); + PyGILState_Release(gil); + fclose(script_py); + return 0; + } + fseek(script_py, 0, SEEK_SET); + if(fread(fstr, flen, 1, script_py) < 1) { + log_err("file read failed to print parse error: %s: %s", + pe->fname, strerror(errno)); + PyGILState_Release(gil); + fclose(script_py); + free(fstr); + return 0; + } + fstr[flen] = 0; + /* we compile the string, but do not run it, to stop side-effects */ + /* ignore the NULL return of _node, it is NULL due to the parse failure + * that we are expecting */ + (void)Py_CompileString(fstr, pe->fname, Py_file_input); +#endif log_py_err(); PyGILState_Release(gil); fclose(script_py); +#if PY_MAJOR_VERSION <= 2 || (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION < 9) + /* no cleanup needed for python before 3.9 */ +#else + /* cleanup for python 3.9 and newer */ + free(fstr); +#endif return 0; } #if PY_MAJOR_VERSION < 3 From ee0a65250ad2f8603cd36da6ea6879444f1844a6 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 10 Feb 2021 11:26:21 +0100 Subject: [PATCH 129/168] Changelog note for PR #420 - Merge PR #420 from dyunwei: DOH not responsing with "http2_query_read_done failure" logged. --- doc/Changelog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index aa45145df..5c7ac0c7d 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +10 February 2021: Wouter + - Merge PR #420 from dyunwei: DOH not responsing with + "http2_query_read_done failure" logged. + 9 February 2021: Wouter - Fix for Python 3.9, no longer use deprecated functions of PyEval_CallObject (now PyObject_Call), PyEval_InitThreads (now From 3d2692d6bc6d0c31183aabea7861c72e6ef5c06a Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 10 Feb 2021 15:30:23 +0100 Subject: [PATCH 130/168] zonemd, review comments, add comments to unit test, scope verbose output. --- services/authzone.c | 9 ++++++--- testcode/unitzonemd.c | 10 +++++++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/services/authzone.c b/services/authzone.c index 6ddf524f8..0495958d3 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -1879,7 +1879,6 @@ static int auth_zone_zonemd_check_hash(struct auth_zone* z, size_t i; struct regional* region = NULL; struct sldns_buffer* buf = NULL; - char zstr[255+1]; uint32_t soa_serial = 0; region = env->scratch; regional_free_all(region); @@ -1930,6 +1929,7 @@ static int auth_zone_zonemd_check_hash(struct auth_zone* z, hash, hashlen, region, buf, reason)) { /* success */ if(verbosity >= VERB_ALGO) { + char zstr[255+1]; dname_str(z->name, zstr); verbose(VERB_ALGO, "auth-zone %s ZONEMD hash is correct", zstr); } @@ -1940,8 +1940,11 @@ static int auth_zone_zonemd_check_hash(struct auth_zone* z, /* fail, we may have reason */ if(!*reason) *reason = "no ZONEMD records found"; - dname_str(z->name, zstr); - verbose(VERB_ALGO, "auth-zone %s ZONEMD failed: %s", zstr, *reason); + if(verbosity >= VERB_ALGO) { + char zstr[255+1]; + dname_str(z->name, zstr); + verbose(VERB_ALGO, "auth-zone %s ZONEMD failed: %s", zstr, *reason); + } return 0; } diff --git a/testcode/unitzonemd.c b/testcode/unitzonemd.c index 544d032f2..a8949a8c4 100644 --- a/testcode/unitzonemd.c +++ b/testcode/unitzonemd.c @@ -332,17 +332,19 @@ static void zonemd_verify_test(char* zname, char* zfile, char* tastr, static void zonemd_verify_tests(void) { unit_show_func("services/authzone.c", "auth_zone_verify_zonemd"); + /* give trustanchor for unsigned zone, should fail */ zonemd_verify_test("example.org", "testdata/zonemd.example1.zone", "example.org. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", "20180302005009", "verify DNSKEY RRset with trust anchor failed: have trust anchor, but zone has no DNSKEY"); + /* unsigned zone without ZONEMD in it */ zonemd_verify_test("example.org", "testdata/zonemd.example1.zone", NULL, "20180302005009", "no ZONEMD present"); - /* no trust anchor, so it succeeds */ + /* no trust anchor, so it succeeds for zone with a correct ZONEMD */ zonemd_verify_test("example.com", "testdata/zonemd.example2.zone", NULL, @@ -356,18 +358,24 @@ static void zonemd_verify_tests(void) "ZONEMD verification successful"); /* load a DNSSEC signed zone, but no trust anchor */ + /* this zonefile has an incorrect ZONEMD digest, with correct + * DNSSEC signature. */ zonemd_verify_test("example.com", "testdata/zonemd.example3.zone", NULL, "20180302005009", "incorrect digest"); /* load a DNSSEC zone with NSEC3, but no trust anchor */ + /* this zonefile has an incorrect ZONEMD digest, with correct + * DNSSEC signature. */ zonemd_verify_test("example.com", "testdata/zonemd.example4.zone", NULL, "20180302005009", "incorrect digest"); /* valid zonemd, in dnssec signed zone, no trust anchor*/ + /* this zonefile has a correct ZONEMD digest and + * correct DNSSEC signature */ zonemd_verify_test("example.com", "testdata/zonemd.example5.zone", NULL, From 12171e3124a75de104e72b50cbd69fb86dc39ea5 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 10 Feb 2021 16:34:24 +0100 Subject: [PATCH 131/168] zonemd, review comments, compare list size correctly. --- services/authzone.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/authzone.c b/services/authzone.c index 0495958d3..79fc89929 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -7299,7 +7299,7 @@ static size_t authdata_rrsets_to_list(struct auth_rrset** array, struct auth_rrset* rrset = first; size_t num = 0; while(rrset) { - if(num+1 >= arraysize) + if(num >= arraysize) return num; array[num] = rrset; num++; From 9a972aa5b235928ad9186b673fd9632487db4077 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 10 Feb 2021 16:38:39 +0100 Subject: [PATCH 132/168] zonemd, review comments, compare list size for rrsigtype add. --- services/authzone.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/authzone.c b/services/authzone.c index 79fc89929..71d9d2913 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -7332,7 +7332,7 @@ static void addrrsigtype_if_needed(struct auth_rrset** array, { if(az_domain_rrset(node, LDNS_RR_TYPE_RRSIG)) return; /* already one there */ - if((*rrnum)+1 >= arraysize) + if((*rrnum) >= arraysize) return; /* array too small? */ array[*rrnum] = NULL; /* nothing there, but need entry in list */ (*rrnum)++; From d3b6e1679ce136eb0c8161806c414c9a0d1d3192 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 11 Feb 2021 16:05:28 +0100 Subject: [PATCH 133/168] zonemd, review comments, indentation. --- services/authzone.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/authzone.c b/services/authzone.c index 71d9d2913..431df3931 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -7576,7 +7576,7 @@ static int zonemd_simple_collate(struct auth_zone* z, int hashalgo, } int auth_zone_generate_zonemd_hash(struct auth_zone* z, int scheme, - int hashalgo, uint8_t* hash, size_t hashlen, size_t* resultlen, + int hashalgo, uint8_t* hash, size_t hashlen, size_t* resultlen, struct regional* region, struct sldns_buffer* buf, char** reason) { struct secalgo_hash* h = zonemd_digest_init(hashalgo, reason); From e0f17c2443dc2870187ee1bb42ddfb538b26c982 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 11 Feb 2021 17:27:59 +0100 Subject: [PATCH 134/168] zonemd, review comments, stop callback for a deleted zone. --- services/authzone.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/authzone.c b/services/authzone.c index 431df3931..a537bf9f0 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -8070,7 +8070,7 @@ void auth_zonemd_dnskey_lookup_callback(void* arg, int rcode, sldns_buffer* buf, /* release the env variable so another worker can pick up the * ZONEMD verification task if it wants to */ z->zonemd_callback_env = NULL; - if(!env || env->outnet->want_to_quit) { + if(!env || env->outnet->want_to_quit || z->zone_deleted) { lock_rw_unlock(&z->lock); return; /* stop on quit */ } From 6965cef5e87edda785d4fd5b567efe0bcc655d8f Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 11 Feb 2021 17:33:10 +0100 Subject: [PATCH 135/168] zonemd, review comments, check qname for zonemd dnskey lookup. --- services/authzone.c | 1 + 1 file changed, 1 insertion(+) diff --git a/services/authzone.c b/services/authzone.c index a537bf9f0..196c4653c 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -8090,6 +8090,7 @@ void auth_zonemd_dnskey_lookup_callback(void* arg, int rcode, sldns_buffer* buf, memset(&rq, 0, sizeof(rq)); rep = parse_reply_in_temp_region(buf, temp, &rq); if(rep && rq.qtype == wanted_qtype && + query_dname_compare(z->name, rq.qname) == 0 && FLAGS_GET_RCODE(rep->flags) == LDNS_RCODE_NOERROR) { /* parsed successfully */ struct ub_packed_rrset_key* answer = From 849050855968a0199f4a65c0ec6345f34f00fc1b Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 12 Feb 2021 08:33:03 +0100 Subject: [PATCH 136/168] zonemd, review comments, stop null dnskey, skip dnssec for insecure islands. --- services/authzone.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/services/authzone.c b/services/authzone.c index 196c4653c..60a05d4bb 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -7923,14 +7923,15 @@ auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env, } } - /* if no ZONEMD, and no DNSSEC, done. */ + /* if no DNSSEC, done. */ /* if no ZONEMD, and DNSSEC, use DNSKEY to verify NSEC or NSEC3 for * zone apex. Check ZONEMD bit is turned off or else fail */ /* if ZONEMD, and DNSSEC, check DNSSEC signature on SOA and ZONEMD, * or else fail */ - if(!zonemd_rrset && is_insecure) { - /* success, zonemd is absent */ - } else if(!zonemd_rrset) { + if(!dnskey && !is_insecure) { + auth_zone_zonemd_fail(z, env, "DNSKEY missing", NULL, result); + return; + } else if(!zonemd_rrset && dnskey && !is_insecure) { /* fetch, DNSSEC verify, and check NSEC/NSEC3 */ if(!zonemd_check_dnssec_absence(z, env, mods, dnskey, apex, &reason, &why_bogus)) { @@ -7938,7 +7939,7 @@ auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env, return; } zonemd_absence_dnssecok = 1; - } else if(zonemd_rrset && dnskey) { + } else if(zonemd_rrset && dnskey && !is_insecure) { /* check DNSSEC verify of SOA and ZONEMD */ if(!zonemd_check_dnssec_soazonemd(z, env, mods, dnskey, apex, zonemd_rrset, &reason, &why_bogus)) { From b7ffa6618c90037bbd5b8ef1f58e13cda454b0b1 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 12 Feb 2021 09:16:22 +0100 Subject: [PATCH 137/168] zonemd, review comments, fix no anchor lookup if none. --- services/authzone.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services/authzone.c b/services/authzone.c index 60a05d4bb..9818ab344 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -8214,7 +8214,9 @@ void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env, /* else, find chain of trust by fetching DNSKEYs lookup for zone */ /* result if that, if insecure, means no DNSSEC for the ZONEMD, * otherwise we have the zone DNSKEY for the DNSSEC verification. */ - anchor = anchors_lookup(env->anchors, z->name, z->namelen, z->dclass); + if(env->anchors) + anchor = anchors_lookup(env->anchors, z->name, z->namelen, + z->dclass); if(anchor && query_dname_compare(z->name, anchor->name) == 0) { if(only_online) { lock_basic_unlock(&anchor->lock); From 48e0d3356a6908dec29f1aa2990bfa48b76b1f94 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 12 Feb 2021 10:48:38 +0100 Subject: [PATCH 138/168] zonemd, review comments, spelling fix. --- services/authzone.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/authzone.h b/services/authzone.h index b162b4ef5..4810017a3 100644 --- a/services/authzone.h +++ b/services/authzone.h @@ -139,7 +139,7 @@ struct auth_zone { /** store the env (worker thread specific) for the zonemd callbacks * from the mesh with the results of the lookup, if nonNULL, some * worker has already picked up the zonemd verification task and - * this worked does not have to do it as well. */ + * this worker does not have to do it as well. */ struct module_env* zonemd_callback_env; /** zone has been deleted */ int zone_deleted; From 74e06cc4b3fbe3dcea08eb93fcfca8f4359a9fb5 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 15 Feb 2021 14:40:48 +0100 Subject: [PATCH 139/168] - Fix #422: IPv6 fallback issues when IPv6 is not properly enabled/configured. --- daemon/worker.c | 3 +++ doc/Changelog | 4 ++++ iterator/iter_utils.c | 15 +++++++++++++++ iterator/iter_utils.h | 14 ++++++++++++++ 4 files changed, 36 insertions(+) diff --git a/daemon/worker.c b/daemon/worker.c index 57d58a90d..c56d7b469 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -70,6 +70,7 @@ #include "util/edns.h" #include "iterator/iter_fwd.h" #include "iterator/iter_hints.h" +#include "iterator/iter_utils.h" #include "validator/autotrust.h" #include "validator/val_anchor.h" #include "respip/respip.h" @@ -1821,6 +1822,8 @@ worker_init(struct worker* worker, struct config_file *cfg, worker_delete(worker); return 0; } + iterator_set_ip46_support(&worker->daemon->mods, worker->daemon->env, + worker->back); /* start listening to commands */ if(!tube_setup_bg_listen(worker->cmd, worker->base, &worker_handle_control_cmd, worker)) { diff --git a/doc/Changelog b/doc/Changelog index 5c7ac0c7d..b5dbba8a9 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +15 February 2021: Wouter + - Fix #422: IPv6 fallback issues when IPv6 is not properly + enabled/configured. + 10 February 2021: Wouter - Merge PR #420 from dyunwei: DOH not responsing with "http2_query_read_done failure" logged. diff --git a/iterator/iter_utils.c b/iterator/iter_utils.c index 7bc67da69..4edb1cfe6 100644 --- a/iterator/iter_utils.c +++ b/iterator/iter_utils.c @@ -50,6 +50,7 @@ #include "services/cache/infra.h" #include "services/cache/dns.h" #include "services/cache/rrset.h" +#include "services/outside_network.h" #include "util/net_help.h" #include "util/module.h" #include "util/log.h" @@ -1435,3 +1436,17 @@ iter_stub_fwd_no_cache(struct module_qstate *qstate, struct query_info *qinf) } return 0; } + +void iterator_set_ip46_support(struct module_stack* mods, + struct module_env* env, struct outside_network* outnet) +{ + int m = modstack_find(mods, "iterator"); + struct iter_env* ie = NULL; + if(m == -1) + return; + ie = (struct iter_env*)env->modinfo[m]; + if(outnet->num_ip4 == 0) + ie->supports_ipv4 = 0; + if(outnet->num_ip6 == 0) + ie->supports_ipv6 = 0; +} diff --git a/iterator/iter_utils.h b/iterator/iter_utils.h index f771930bb..a56be95ae 100644 --- a/iterator/iter_utils.h +++ b/iterator/iter_utils.h @@ -59,6 +59,8 @@ struct reply_info; struct module_qstate; struct sock_list; struct ub_packed_rrset_key; +struct module_stack; +struct outside_network; /** * Process config options and set iterator module state. @@ -385,4 +387,16 @@ int iter_dp_cangodown(struct query_info* qinfo, struct delegpt* dp); int iter_stub_fwd_no_cache(struct module_qstate *qstate, struct query_info *qinf); +/** + * Set support for IP4 and IP6 depending on outgoing interfaces + * in the outside network. If none, no support, so no use to lookup + * the AAAA and then attempt to use it if there is no outgoing-interface + * for it. + * @param mods: modstack to find iterator module in. + * @param env: module env, find iterator module (if one) in there. + * @param outnet: outside network structure. + */ +void iterator_set_ip46_support(struct module_stack* mods, + struct module_env* env, struct outside_network* outnet); + #endif /* ITERATOR_ITER_UTILS_H */ From 5943c6f2e3165eb8ac3ed90a0639884885379fb0 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 15 Feb 2021 14:57:29 +0100 Subject: [PATCH 140/168] - Fix to make tests work with support indicators set for iterator. --- doc/Changelog | 1 + iterator/iter_utils.c | 2 ++ 2 files changed, 3 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index b5dbba8a9..9ad100145 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 15 February 2021: Wouter - Fix #422: IPv6 fallback issues when IPv6 is not properly enabled/configured. + - Fix to make tests work with support indicators set for iterator. 10 February 2021: Wouter - Merge PR #420 from dyunwei: DOH not responsing with diff --git a/iterator/iter_utils.c b/iterator/iter_utils.c index 4edb1cfe6..94fa18f63 100644 --- a/iterator/iter_utils.c +++ b/iterator/iter_utils.c @@ -1445,6 +1445,8 @@ void iterator_set_ip46_support(struct module_stack* mods, if(m == -1) return; ie = (struct iter_env*)env->modinfo[m]; + if(outnet->pending == NULL) + return; /* we are in testbound, no rbtree for UDP */ if(outnet->num_ip4 == 0) ie->supports_ipv4 = 0; if(outnet->num_ip6 == 0) From 92d01d82658ffc3992e4468472d3c8c080f8b16c Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 16 Feb 2021 11:11:06 +0100 Subject: [PATCH 141/168] Fix #426: Replace _Py_fopen() with fopen() in pythonmod.c The private _Py_fopen() function has been removed in Python 3.10. Fix build on Python 3.10. --- doc/Changelog | 1 + pythonmod/pythonmod.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 9ad100145..f855e5a9a 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,6 +2,7 @@ - Fix #422: IPv6 fallback issues when IPv6 is not properly enabled/configured. - Fix to make tests work with support indicators set for iterator. + - Fix build on Python 3.10. 10 February 2021: Wouter - Merge PR #420 from dyunwei: DOH not responsing with diff --git a/pythonmod/pythonmod.c b/pythonmod/pythonmod.c index 040ff7051..6e60d02fe 100644 --- a/pythonmod/pythonmod.c +++ b/pythonmod/pythonmod.c @@ -338,7 +338,7 @@ int pythonmod_init(struct module_env* env, int id) PyFileObject = PyFile_FromString((char*)pe->fname, "r"); script_py = PyFile_AsFile(PyFileObject); #else - script_py = _Py_fopen(pe->fname, "r"); + script_py = fopen(pe->fname, "r"); #endif if (script_py == NULL) { From d6e55a586cb877929964e8e8ff88bf752086fd02 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 18 Feb 2021 11:16:19 +0100 Subject: [PATCH 142/168] Changelog note for #317 - Merge PR #317: ZONEMD Zone Verification, with RFC 8976 support. ZONEMD records are checked for zones loaded as auth-zone, with DNSSEC if available. There is an added option zonemd-permissive-mode that makes it log but not fail wrong zones. With zonemd-reject-absence for an auth-zone the presence of a zonemd can be mandated for specific zones. --- doc/Changelog | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index f855e5a9a..8dd41fade 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,11 @@ +18 February 2021: Wouter + - Merge PR #317: ZONEMD Zone Verification, with RFC 8976 support. + ZONEMD records are checked for zones loaded as auth-zone, + with DNSSEC if available. There is an added option + zonemd-permissive-mode that makes it log but not fail wrong zones. + With zonemd-reject-absence for an auth-zone the presence of a + zonemd can be mandated for specific zones. + 15 February 2021: Wouter - Fix #422: IPv6 fallback issues when IPv6 is not properly enabled/configured. From 3b24d845ffb0c132af3fb628b50002d8d84f771e Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 18 Feb 2021 11:39:06 +0100 Subject: [PATCH 143/168] - Fix doxygen and pydoc warnings. --- doc/Changelog | 1 + iterator/iter_utils.h | 2 +- pythonmod/doc/modules/functions.rst | 14 +++++++------- sldns/parse.h | 3 --- sldns/sbuffer.h | 2 -- util/data/dname.h | 4 ++-- 6 files changed, 11 insertions(+), 15 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 8dd41fade..e04e0dbd5 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -5,6 +5,7 @@ zonemd-permissive-mode that makes it log but not fail wrong zones. With zonemd-reject-absence for an auth-zone the presence of a zonemd can be mandated for specific zones. + - Fix doxygen and pydoc warnings. 15 February 2021: Wouter - Fix #422: IPv6 fallback issues when IPv6 is not properly diff --git a/iterator/iter_utils.h b/iterator/iter_utils.h index a56be95ae..7be79cf4a 100644 --- a/iterator/iter_utils.h +++ b/iterator/iter_utils.h @@ -132,7 +132,7 @@ struct dns_msg* dns_copy_msg(struct dns_msg* from, struct regional* regional); * can be prefetch-updates. * @param region: to copy modified (cache is better) rrs back to. * @param flags: with BIT_CD for dns64 AAAA translated queries. - * @return void, because we are not interested in alloc errors, + * return void, because we are not interested in alloc errors, * the iterator and validator can operate on the results in their * scratch space (the qstate.region) and are not dependent on the cache. * It is useful to log the alloc failure (for the server operator), diff --git a/pythonmod/doc/modules/functions.rst b/pythonmod/doc/modules/functions.rst index 333f696b8..951a17f94 100644 --- a/pythonmod/doc/modules/functions.rst +++ b/pythonmod/doc/modules/functions.rst @@ -92,7 +92,7 @@ Inplace callbacks .. function:: inplace_cb_reply(qinfo, qstate, rep, rcode, edns, opt_list_out, region, \*\*kwargs) Function prototype for callback functions used in - `register_inplace_cb_reply`_, `register_inplace_cb_reply_cache`_, + `register_inplace_cb_reply`, `register_inplace_cb_reply_cache`, `register_inplace_cb_reply_local` and `register_inplace_cb_reply_servfail`. :param qinfo: :class:`query_info` @@ -109,7 +109,7 @@ Inplace callbacks .. function:: inplace_cb_query(qinfo, flags, qstate, addr, zone, region) Function prototype for callback functions used in - `register_inplace_cb_query`_. + `register_inplace_cb_query`. :param qinfo: :class:`query_info` :param flags: query flags (integer) @@ -122,7 +122,7 @@ Inplace callbacks Register py_cb as an inplace reply callback function. - :param py_cb: Python function that follows `inplace_cb_reply`_'s prototype. **Must** be callable. + :param py_cb: Python function that follows `inplace_cb_reply`'s prototype. **Must** be callable. :param env: :class:`module_env` :param id: Module ID. :return: True on success, False otherwise @@ -132,7 +132,7 @@ Inplace callbacks Register py_cb as an inplace reply_cache callback function. - :param py_cb: Python function that follows `inplace_cb_reply`_'s prototype. **Must** be callable. + :param py_cb: Python function that follows `inplace_cb_reply`'s prototype. **Must** be callable. :param env: :class:`module_env` :param id: Module ID. :return: True on success, False otherwise @@ -142,7 +142,7 @@ Inplace callbacks Register py_cb as an inplace reply_local callback function. - :param py_cb: Python function that follows `inplace_cb_reply`_'s prototype. **Must** be callable. + :param py_cb: Python function that follows `inplace_cb_reply`'s prototype. **Must** be callable. :param env: :class:`module_env` :param id: Module ID. :return: True on success, False otherwise @@ -152,7 +152,7 @@ Inplace callbacks Register py_cb as an inplace reply_servfail callback function. - :param py_cb: Python function that follows `inplace_cb_reply`_'s prototype. **Must** be callable. + :param py_cb: Python function that follows `inplace_cb_reply`'s prototype. **Must** be callable. :param env: :class:`module_env` :param id: Module ID. :return: True on success, False otherwise @@ -162,7 +162,7 @@ Inplace callbacks Register py_cb as an inplace query callback function. - :param py_cb: Python function that follows `inplace_cb_query`_'s prototype. **Must** be callable. + :param py_cb: Python function that follows `inplace_cb_query`'s prototype. **Must** be callable. :param env: :class:`module_env` :param id: Module ID. :return: True on success, False otherwise diff --git a/sldns/parse.h b/sldns/parse.h index 44236bfd4..fa8f51a92 100644 --- a/sldns/parse.h +++ b/sldns/parse.h @@ -153,7 +153,6 @@ int sldns_bgetc(struct sldns_buffer *buffer); * the position to the first character that is not in *s. * \param[in] *buffer buffer to use * \param[in] *s characters to skip - * \return void */ void sldns_bskipcs(struct sldns_buffer *buffer, const char *s); @@ -162,7 +161,6 @@ void sldns_bskipcs(struct sldns_buffer *buffer, const char *s); * the position to the first character that is not in *s. * \param[in] *fp file to use * \param[in] *s characters to skip - * \return void */ void sldns_fskipcs(FILE *fp, const char *s); @@ -173,7 +171,6 @@ void sldns_fskipcs(FILE *fp, const char *s); * \param[in] *fp file to use * \param[in] *s characters to skip * \param[in] line_nr pointer to an integer containing the current line number (for debugging purposes) - * \return void */ void sldns_fskipcs_l(FILE *fp, const char *s, int *line_nr); diff --git a/sldns/sbuffer.h b/sldns/sbuffer.h index 5dbe988cd..1b7fe370c 100644 --- a/sldns/sbuffer.h +++ b/sldns/sbuffer.h @@ -202,7 +202,6 @@ INLINE void sldns_buffer_clear(sldns_buffer *buffer) * the position is set to 0. * * \param[in] buffer the buffer to flip - * \return void */ INLINE void sldns_buffer_flip(sldns_buffer *buffer) { @@ -732,7 +731,6 @@ int sldns_buffer_printf(sldns_buffer *buffer, const char *format, ...) /** * frees the buffer. * \param[in] *buffer the buffer to be freed - * \return void */ void sldns_buffer_free(sldns_buffer *buffer); diff --git a/util/data/dname.h b/util/data/dname.h index e37c11822..cb0f6735d 100644 --- a/util/data/dname.h +++ b/util/data/dname.h @@ -261,7 +261,7 @@ int dname_is_root(uint8_t* dname); * Snip off first label from a dname, returning the parent zone. * @param dname: from what to strip off. uncompressed wireformat. * @param len: length, adjusted to become less. - * @return stripped off, or "." if input was ".". + * return stripped off, or "." if input was ".". */ void dname_remove_label(uint8_t** dname, size_t* len); @@ -271,7 +271,7 @@ void dname_remove_label(uint8_t** dname, size_t* len); * @param len: length, adjusted to become less. * @param n: number of labels to strip off (from the left). * if 0, nothing happens. - * @return stripped off, or "." if input was ".". + * return stripped off, or "." if input was ".". */ void dname_remove_labels(uint8_t** dname, size_t* len, int n); From bc4bdbabeab1388e41ce64714203b4fd3fab18be Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 19 Feb 2021 14:42:02 +0100 Subject: [PATCH 144/168] - Fix #429: rpz: url: with https: broken (regression in 1.13.1). --- doc/Changelog | 1 + util/netevent.c | 13 +++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index e04e0dbd5..0c81a22a8 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -6,6 +6,7 @@ With zonemd-reject-absence for an auth-zone the presence of a zonemd can be mandated for specific zones. - Fix doxygen and pydoc warnings. + - Fix #429: rpz: url: with https: broken (regression in 1.13.1). 15 February 2021: Wouter - Fix #422: IPv6 fallback issues when IPv6 is not properly diff --git a/util/netevent.c b/util/netevent.c index 893c1ddbf..5a71a82e4 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -2197,6 +2197,8 @@ ssl_http_read_more(struct comm_point* c) log_crypto_err("could not SSL_read"); return 0; } + verbose(VERB_ALGO, "ssl http read more skip to %d + %d", + (int)sldns_buffer_position(c->buffer), (int)r); sldns_buffer_skip(c->buffer, (ssize_t)r); return 1; #else @@ -2233,6 +2235,8 @@ http_read_more(int fd, struct comm_point* c) &c->repinfo.addr, c->repinfo.addrlen); return 0; } + verbose(VERB_ALGO, "http read more skip to %d + %d", + (int)sldns_buffer_position(c->buffer), (int)r); sldns_buffer_skip(c->buffer, r); return 1; } @@ -2393,8 +2397,8 @@ http_nonchunk_segment(struct comm_point* c) * read more data collected into the buffer */ remainbufferlen = sldns_buffer_capacity(c->buffer) - sldns_buffer_limit(c->buffer); - if(remainbufferlen >= c->tcp_byte_count || - remainbufferlen >= 2048) { + if(remainbufferlen+got_now >= c->tcp_byte_count || + remainbufferlen >= (c->ssl?16384:2048)) { size_t total = sldns_buffer_limit(c->buffer); sldns_buffer_clear(c->buffer); sldns_buffer_set_position(c->buffer, total); @@ -2762,6 +2766,11 @@ comm_point_http_handle_read(int fd, struct comm_point* c) return 0; } + if(c->http_stored >= sldns_buffer_position(c->buffer)) { + /* read did not work but we wanted more data, there is + * no bytes to process now. */ + return 1; + } sldns_buffer_flip(c->buffer); /* if we are partway in a segment of data, position us at the point * where we left off previously */ From aa53b933cc959f5732dd30447b90daca326c6658 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 19 Feb 2021 15:00:39 +0100 Subject: [PATCH 145/168] - rpz skip nsec3param records, and nicer log for unsupported actions. --- doc/Changelog | 1 + services/rpz.c | 22 ++++++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 0c81a22a8..ce796372c 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -7,6 +7,7 @@ zonemd can be mandated for specific zones. - Fix doxygen and pydoc warnings. - Fix #429: rpz: url: with https: broken (regression in 1.13.1). + - rpz skip nsec3param records, and nicer log for unsupported actions. 15 February 2021: Wouter - Fix #422: IPv6 fallback issues when IPv6 is not properly diff --git a/services/rpz.c b/services/rpz.c index 2b6b0ac3f..40b8efe48 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -162,6 +162,7 @@ rpz_rr_to_action(uint16_t rr_type, uint8_t* rdatawl, size_t rdatalen) case LDNS_RR_TYPE_RRSIG: case LDNS_RR_TYPE_NSEC: case LDNS_RR_TYPE_NSEC3: + case LDNS_RR_TYPE_NSEC3PARAM: return RPZ_INVALID_ACTION; case LDNS_RR_TYPE_CNAME: break; @@ -479,8 +480,19 @@ rpz_insert_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, int newzone = 0; if(a == RPZ_TCP_ONLY_ACTION || a == RPZ_INVALID_ACTION) { - verbose(VERB_ALGO, "RPZ: skipping unsupported action: %s", - rpz_action_to_string(a)); + char str[255+1]; + if(rrtype == LDNS_RR_TYPE_SOA || rrtype == LDNS_RR_TYPE_NS || + rrtype == LDNS_RR_TYPE_DNAME || + rrtype == LDNS_RR_TYPE_DNSKEY || + rrtype == LDNS_RR_TYPE_RRSIG || + rrtype == LDNS_RR_TYPE_NSEC || + rrtype == LDNS_RR_TYPE_NSEC3PARAM || + rrtype == LDNS_RR_TYPE_NSEC3 || + rrtype == LDNS_RR_TYPE_DS) + return; /* no need to log these types as unsupported */ + dname_str(dname, str); + verbose(VERB_ALGO, "RPZ: qname trigger, %s skipping unsupported action: %s", + str, rpz_action_to_string(a)); free(dname); return; } @@ -552,8 +564,10 @@ rpz_insert_response_ip_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, if(a == RPZ_TCP_ONLY_ACTION || a == RPZ_INVALID_ACTION || respa == respip_invalid) { - verbose(VERB_ALGO, "RPZ: skipping unsupported action: %s", - rpz_action_to_string(a)); + char str[255+1]; + dname_str(dname, str); + verbose(VERB_ALGO, "RPZ: respip trigger, %s skipping unsupported action: %s", + str, rpz_action_to_string(a)); return 0; } From 40fbc3fa8a802dc3d9f12ee6db8b8480e92069c3 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 22 Feb 2021 08:24:04 +0100 Subject: [PATCH 146/168] - Fix #431: Squelch permission denied errors for tcp connect --- doc/Changelog | 4 ++++ services/outside_network.c | 1 + util/netevent.c | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index ce796372c..c051a49ae 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +22 February 2021: Wouter + - Fix #431: Squelch permission denied errors for tcp connect + and udp connect from the logs, unless at high verbosity. + 18 February 2021: Wouter - Merge PR #317: ZONEMD Zone Verification, with RFC 8976 support. ZONEMD records are checked for zones loaded as auth-zone, diff --git a/services/outside_network.c b/services/outside_network.c index 6c6b42ccb..3687b5fea 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -1779,6 +1779,7 @@ static int udp_connect_needs_log(int err) # ifdef ENETDOWN case ENETDOWN: # endif + case EPERM: if(verbosity >= VERB_ALGO) return 1; return 0; diff --git a/util/netevent.c b/util/netevent.c index 5a71a82e4..d55458d6d 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -302,7 +302,7 @@ udp_send_errno_needs_log(struct sockaddr* addr, socklen_t addrlen) /* 'Cannot assign requested address' also when disconnected */ || (errno == EADDRNOTAVAIL) # endif - ) && verbosity < VERB_DETAIL) + ) && verbosity < VERB_ALGO) return 0; # ifdef EADDRINUSE /* If SO_REUSEADDR is set, we could try to connect to the same server From 131d38f8f208bfd99b7c517ea9ff9abfe25f1ce5 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 22 Feb 2021 17:32:40 +0100 Subject: [PATCH 147/168] - Fix for zonemd, that nxdomain for the chain of trust is allowed for island zones, it is treates as an insecure zone for verification. --- doc/Changelog | 2 ++ services/authzone.c | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index c051a49ae..4d14f49f5 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,8 @@ 22 February 2021: Wouter - Fix #431: Squelch permission denied errors for tcp connect and udp connect from the logs, unless at high verbosity. + - Fix for zonemd, that nxdomain for the chain of trust is allowed + for island zones, it is treates as an insecure zone for verification. 18 February 2021: Wouter - Merge PR #317: ZONEMD Zone Verification, with RFC 8976 support. diff --git a/services/authzone.c b/services/authzone.c index 9818ab344..87a405c71 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -8117,6 +8117,32 @@ void auth_zonemd_dnskey_lookup_callback(void* arg, int rcode, sldns_buffer* buf, "zonemd lookup of DNSKEY has nodata"); reason = "lookup of DNSKEY has nodata"; } + } else if(rep && rq.qtype == wanted_qtype && + query_dname_compare(z->name, rq.qname) == 0 && + FLAGS_GET_RCODE(rep->flags) == LDNS_RCODE_NXDOMAIN && + sec == sec_status_secure) { + /* secure nxdomain, so the zone is like some RPZ zone + * that does not exist in the wider internet, with + * a secure nxdomain answer outside of it. So we + * treat the zonemd zone without a dnssec chain of + * trust, as insecure. */ + is_insecure = 1; + auth_zone_log(z->name, VERB_ALGO, + "zonemd lookup of DNSKEY was secure NXDOMAIN, treat as insecure"); + } else if(rep && rq.qtype == wanted_qtype && + query_dname_compare(z->name, rq.qname) == 0 && + FLAGS_GET_RCODE(rep->flags) == LDNS_RCODE_NXDOMAIN && + sec == sec_status_insecure) { + is_insecure = 1; + auth_zone_log(z->name, VERB_ALGO, + "zonemd lookup of DNSKEY was insecure NXDOMAIN, treat as insecure"); + } else if(rep && rq.qtype == wanted_qtype && + query_dname_compare(z->name, rq.qname) == 0 && + FLAGS_GET_RCODE(rep->flags) == LDNS_RCODE_NXDOMAIN && + sec == sec_status_indeterminate) { + is_insecure = 1; + auth_zone_log(z->name, VERB_ALGO, + "zonemd lookup of DNSKEY was indeterminate NXDOMAIN, treat as insecure"); } else { auth_zone_log(z->name, VERB_ALGO, "zonemd lookup of DNSKEY has no answer"); From 7ec290255df94ca69ee2551260067b6b41979b22 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 22 Feb 2021 17:34:02 +0100 Subject: [PATCH 148/168] Spelling fix. --- doc/Changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 4d14f49f5..cf61361e3 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,7 +2,7 @@ - Fix #431: Squelch permission denied errors for tcp connect and udp connect from the logs, unless at high verbosity. - Fix for zonemd, that nxdomain for the chain of trust is allowed - for island zones, it is treates as an insecure zone for verification. + for island zones, it is treated as an insecure zone for verification. 18 February 2021: Wouter - Merge PR #317: ZONEMD Zone Verification, with RFC 8976 support. From c802298fca455cc798b5a875ef9df74531c9ded4 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 23 Feb 2021 17:03:23 +0100 Subject: [PATCH 149/168] - Fix for zonemd, that domain-insecure zones work without dnssec. --- doc/Changelog | 3 +++ services/authzone.c | 9 ++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index cf61361e3..c7fecffdd 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +23 February 2021: Wouter + - Fix for zonemd, that domain-insecure zones work without dnssec. + 22 February 2021: Wouter - Fix #431: Squelch permission denied errors for tcp connect and udp connect from the logs, unless at high verbosity. diff --git a/services/authzone.c b/services/authzone.c index 87a405c71..c1f3d6978 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -8243,7 +8243,14 @@ void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env, if(env->anchors) anchor = anchors_lookup(env->anchors, z->name, z->namelen, z->dclass); - if(anchor && query_dname_compare(z->name, anchor->name) == 0) { + if(anchor && anchor->numDS == 0 && anchor->numDNSKEY == 0) { + /* domain-insecure trust anchor for unsigned zones */ + lock_basic_unlock(&anchor->lock); + if(only_online) + return; + dnskey = NULL; + is_insecure = 1; + } else if(anchor && query_dname_compare(z->name, anchor->name) == 0) { if(only_online) { lock_basic_unlock(&anchor->lock); return; From 39a557833da80a95b2fd9754bf9d283b52abe050 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 23 Feb 2021 17:09:40 +0100 Subject: [PATCH 150/168] - Fix for zonemd, do not reject insecure result from trust anchor validation step in dnssec chain of trust. --- doc/Changelog | 2 ++ services/authzone.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index c7fecffdd..2b8475efb 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,7 @@ 23 February 2021: Wouter - Fix for zonemd, that domain-insecure zones work without dnssec. + - Fix for zonemd, do not reject insecure result from trust anchor + validation step in dnssec chain of trust. 22 February 2021: Wouter - Fix #431: Squelch permission denied errors for tcp connect diff --git a/services/authzone.c b/services/authzone.c index c1f3d6978..196fe6693 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -8259,7 +8259,7 @@ void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env, dnskey = zonemd_get_dnskey_from_anchor(z, env, mods, anchor, &is_insecure, &why_bogus, &keystorage); lock_basic_unlock(&anchor->lock); - if(!dnskey && !reason) { + if(!dnskey && !reason && !is_insecure) { reason = "verify DNSKEY RRset with trust anchor failed"; } } else if(anchor) { From d69132b9212f95c72fdfb8d0a652f6f58c069a9f Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Wed, 24 Feb 2021 11:57:48 +0100 Subject: [PATCH 151/168] - Fix #384: (1) A minor request to improve the log (2) A minor bug in one log message. --- doc/Changelog | 4 +++ edns-subnet/subnetmod.c | 34 ++++++++++----------- services/modstack.c | 65 ++++++++++++++++++++--------------------- 3 files changed, 53 insertions(+), 50 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 2b8475efb..15420b3cd 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +24 February 2021: George + - Fix #384: (1) A minor request to improve the log (2) A minor bug in one + log message. + 23 February 2021: Wouter - Fix for zonemd, that domain-insecure zones work without dnssec. - Fix for zonemd, do not reject insecure result from trust anchor diff --git a/edns-subnet/subnetmod.c b/edns-subnet/subnetmod.c index f1b401b90..6c8589aba 100644 --- a/edns-subnet/subnetmod.c +++ b/edns-subnet/subnetmod.c @@ -205,7 +205,7 @@ subnetmod_init(struct module_env *env, int id) subnet_data_delete, NULL); slabhash_setmarkdel(sn_env->subnet_msg_cache, &subnet_markdel); if(!sn_env->subnet_msg_cache) { - log_err("subnet: could not create cache"); + log_err("subnetcache: could not create cache"); free(sn_env); env->modinfo[id] = NULL; return 0; @@ -214,21 +214,21 @@ subnetmod_init(struct module_env *env, int id) sn_env->whitelist = ecs_whitelist_create(); if(!sn_env->whitelist || !ecs_whitelist_apply_cfg(sn_env->whitelist, env->cfg)) { - log_err("subnet: could not create ECS whitelist"); + log_err("subnetcache: could not create ECS whitelist"); slabhash_delete(sn_env->subnet_msg_cache); free(sn_env); env->modinfo[id] = NULL; return 0; } - verbose(VERB_QUERY, "subnet: option registered (%d)", + verbose(VERB_QUERY, "subnetcache: option registered (%d)", env->cfg->client_subnet_opcode); /* Create new mesh state for all queries. */ env->unique_mesh = 1; if(!edns_register_option(env->cfg->client_subnet_opcode, env->cfg->client_subnet_always_forward /* bypass cache */, 0 /* no aggregation */, env)) { - log_err("subnet: could not register opcode"); + log_err("subnetcache: could not register opcode"); ecs_whitelist_delete(sn_env->whitelist); slabhash_delete(sn_env->subnet_msg_cache); free(sn_env); @@ -365,7 +365,7 @@ update_cache(struct module_qstate *qstate, int id) /* Step 2, find the correct tree */ if (!(tree = get_tree(lru_entry->data, edns, sne, qstate->env->cfg))) { lock_rw_unlock(&lru_entry->lock); - log_err("Subnet cache insertion failed"); + log_err("subnetcache: cache insertion failed"); return; } lock_quick_lock(&sne->alloc.lock); @@ -373,7 +373,7 @@ update_cache(struct module_qstate *qstate, int id) lock_quick_unlock(&sne->alloc.lock); if (!rep) { lock_rw_unlock(&lru_entry->lock); - log_err("Subnet cache insertion failed"); + log_err("subnetcache: cache insertion failed"); return; } @@ -487,7 +487,7 @@ eval_response(struct module_qstate *qstate, int id, struct subnet_qstate *sq) /* We have not asked for subnet data */ if (!sq->subnet_sent) { if (s_in->subnet_validdata) - verbose(VERB_QUERY, "subnet: received spurious data"); + verbose(VERB_QUERY, "subnetcache: received spurious data"); if (sq->subnet_downstream) /* Copy back to client */ cp_edns_bad_response(c_out, c_in); return module_finished; @@ -499,7 +499,7 @@ eval_response(struct module_qstate *qstate, int id, struct subnet_qstate *sq) * consequence the answer ended up in the regular cache. It * is still usefull to put it in the edns subnet cache for * when a client explicitly asks for subnet specific answer. */ - verbose(VERB_QUERY, "subnet: Authority indicates no support"); + verbose(VERB_QUERY, "subnetcache: Authority indicates no support"); if(!sq->started_no_cache_store) { lock_rw_wrlock(&sne->biglock); update_cache(qstate, id); @@ -521,7 +521,7 @@ eval_response(struct module_qstate *qstate, int id, struct subnet_qstate *sq) s_out->subnet_source_mask)) { /* we can not accept, restart query without option */ - verbose(VERB_QUERY, "subnet: forged data"); + verbose(VERB_QUERY, "subnetcache: forged data"); s_out->subnet_validdata = 0; (void)edns_opt_list_remove(&qstate->edns_opts_back_out, qstate->env->cfg->client_subnet_opcode); @@ -700,10 +700,10 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event, struct subnet_env *sne = qstate->env->modinfo[id]; struct subnet_qstate *sq = (struct subnet_qstate*)qstate->minfo[id]; - verbose(VERB_QUERY, "subnet[module %d] operate: extstate:%s " + verbose(VERB_QUERY, "subnetcache[module %d] operate: extstate:%s " "event:%s", id, strextstate(qstate->ext_state[id]), strmodulevent(event)); - log_query_info(VERB_QUERY, "subnet operate: query", &qstate->qinfo); + log_query_info(VERB_QUERY, "subnetcache operate: query", &qstate->qinfo); if((event == module_event_new || event == module_event_pass) && sq == NULL) { @@ -738,7 +738,7 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event, /* No clients are interested in result or we could not * parse it, we don't do client subnet */ sq->ecs_server_out.subnet_validdata = 0; - verbose(VERB_ALGO, "subnet: pass to next module"); + verbose(VERB_ALGO, "subnetcache: pass to next module"); qstate->ext_state[id] = module_wait_module; return; } @@ -758,7 +758,7 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event, if (lookup_and_reply(qstate, id, sq)) { sne->num_msg_cache++; lock_rw_unlock(&sne->biglock); - verbose(VERB_QUERY, "subnet: answered from cache"); + verbose(VERB_QUERY, "subnetcache: answered from cache"); qstate->ext_state[id] = module_finished; ecs_opt_list_append(&sq->ecs_client_out, @@ -798,7 +798,7 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event, /* pass request to next module */ verbose(VERB_ALGO, - "subnet: not found in cache. pass to next module"); + "subnetcache: not found in cache. pass to next module"); qstate->ext_state[id] = module_wait_module; return; } @@ -819,7 +819,7 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event, /* We are being revisited */ if(event == module_event_pass || event == module_event_new) { /* Just pass it on, we already did the work */ - verbose(VERB_ALGO, "subnet: pass to next module"); + verbose(VERB_ALGO, "subnetcache: pass to next module"); qstate->ext_state[id] = module_wait_module; return; } @@ -828,7 +828,7 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event, qstate->ext_state[id] = module_finished; return; } - log_err("subnet: bad event %s", strmodulevent(event)); + log_err("subnetcache: bad event %s", strmodulevent(event)); qstate->ext_state[id] = module_error; return; } @@ -861,7 +861,7 @@ subnetmod_get_mem(struct module_env *env, int id) * The module function block */ static struct module_func_block subnetmod_block = { - "subnet", &subnetmod_init, &subnetmod_deinit, &subnetmod_operate, + "subnetcache", &subnetmod_init, &subnetmod_deinit, &subnetmod_operate, &subnetmod_inform_super, &subnetmod_clear, &subnetmod_get_mem }; diff --git a/services/modstack.c b/services/modstack.c index a600549b1..da8e623c1 100644 --- a/services/modstack.c +++ b/services/modstack.c @@ -88,57 +88,56 @@ count_modules(const char* s) return num; } -void +void modstack_init(struct module_stack* stack) { stack->num = 0; stack->mod = NULL; } -int +int modstack_config(struct module_stack* stack, const char* module_conf) { - int i; - verbose(VERB_QUERY, "module config: \"%s\"", module_conf); - stack->num = count_modules(module_conf); - if(stack->num == 0) { - log_err("error: no modules specified"); - return 0; - } - if(stack->num > MAX_MODULE) { - log_err("error: too many modules (%d max %d)", - stack->num, MAX_MODULE); - return 0; - } - stack->mod = (struct module_func_block**)calloc((size_t) - stack->num, sizeof(struct module_func_block*)); - if(!stack->mod) { - log_err("out of memory"); - return 0; - } - for(i=0; inum; i++) { - stack->mod[i] = module_factory(&module_conf); - if(!stack->mod[i]) { + int i; + verbose(VERB_QUERY, "module config: \"%s\"", module_conf); + stack->num = count_modules(module_conf); + if(stack->num == 0) { + log_err("error: no modules specified"); + return 0; + } + if(stack->num > MAX_MODULE) { + log_err("error: too many modules (%d max %d)", + stack->num, MAX_MODULE); + return 0; + } + stack->mod = (struct module_func_block**)calloc((size_t) + stack->num, sizeof(struct module_func_block*)); + if(!stack->mod) { + log_err("out of memory"); + return 0; + } + for(i=0; inum; i++) { + stack->mod[i] = module_factory(&module_conf); + if(!stack->mod[i]) { char md[256]; snprintf(md, sizeof(md), "%s", module_conf); if(strchr(md, ' ')) *(strchr(md, ' ')) = 0; if(strchr(md, '\t')) *(strchr(md, '\t')) = 0; - log_err("Unknown value in module-config, module: '%s'." + log_err("Unknown value in module-config, module: '%s'." " This module is not present (not compiled in)," - " See the list of linked modules with unbound -h", - md); - return 0; - } - } - return 1; + " See the list of linked modules with unbound -V", md); + return 0; + } + } + return 1; } /** The list of module names */ const char** module_list_avail(void) { - /* these are the modules available */ - static const char* names[] = { + /* these are the modules available */ + static const char* names[] = { "dns64", #ifdef WITH_PYTHONMODULE "python", @@ -156,7 +155,7 @@ module_list_avail(void) "subnetcache", #endif #ifdef USE_IPSET - "ipset", + "ipset", #endif "respip", "validator", From 7f25bb4730888b34a96de82c7618db1062426881 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Wed, 24 Feb 2021 13:59:31 +0100 Subject: [PATCH 152/168] - ipsecmod: Better logging for detecting a cycle when attaching the A/AAAA subquery. --- doc/Changelog | 2 ++ ipsecmod/ipsecmod.c | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 15420b3cd..f8b0c9b0f 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,8 @@ 24 February 2021: George - Fix #384: (1) A minor request to improve the log (2) A minor bug in one log message. + - ipsecmod: Better logging for detecting a cycle when attaching the + A/AAAA subquery. 23 February 2021: Wouter - Fix for zonemd, that domain-insecure zones work without dnssec. diff --git a/ipsecmod/ipsecmod.c b/ipsecmod/ipsecmod.c index a1f40a512..e443e882b 100644 --- a/ipsecmod/ipsecmod.c +++ b/ipsecmod/ipsecmod.c @@ -151,6 +151,17 @@ generate_request(struct module_qstate* qstate, int id, uint8_t* name, ask.qclass = qclass; ask.local_alias = NULL; log_query_info(VERB_ALGO, "ipsecmod: generate request", &ask); + + /* Explicitly check for cycle before trying to attach. Will result in + * cleaner error message. The attach_sub code also checks for cycle but the + * message will be out of memory in both cases then. */ + fptr_ok(fptr_whitelist_modenv_detect_cycle(qstate->env->detect_cycle)); + if((*qstate->env->detect_cycle)(qstate, &ask, + (uint16_t)(BIT_RD|flags), 0, 0)) { + verbose(VERB_ALGO, "Could not generate request: cycle detected"); + return 0; + } + fptr_ok(fptr_whitelist_modenv_attach_sub(qstate->env->attach_sub)); if(!(*qstate->env->attach_sub)(qstate, &ask, (uint16_t)(BIT_RD|flags), 0, 0, &newq)){ From d3497f6bd1939f187f083a385aaa80477905e099 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 24 Feb 2021 14:14:33 +0100 Subject: [PATCH 153/168] - On startup of unbound it checks if rlimits on memory size look sufficient for the configured cache size, and logs warning if not. --- daemon/unbound.c | 27 +++++++++++++++++++++++++++ doc/Changelog | 4 ++++ services/listen_dnsport.c | 13 +++++++++++++ services/listen_dnsport.h | 6 ++++++ 4 files changed, 50 insertions(+) diff --git a/daemon/unbound.c b/daemon/unbound.c index bc6d2bc9e..b2bb526c0 100644 --- a/daemon/unbound.c +++ b/daemon/unbound.c @@ -197,6 +197,33 @@ checkrlimits(struct config_file* cfg) size_t total = numthread * perthread + misc; size_t avail; struct rlimit rlim; + size_t memsize_expect = cfg->msg_cache_size + cfg->rrset_cache_size + + (cfg->do_tcp?cfg->stream_wait_size:0) + + (cfg->ip_ratelimit?cfg->ip_ratelimit_size:0) + + (cfg->ratelimit?cfg->ratelimit_size:0) + + (cfg->dnscrypt?cfg->dnscrypt_shared_secret_cache_size + cfg->dnscrypt_nonce_cache_size:0) + + cfg->infra_cache_numhosts * (sizeof(struct infra_key)+sizeof(struct infra_data)); + if(strstr(cfg->module_conf, "validator") && (cfg->trust_anchor_file_list || cfg->trust_anchor_list || cfg->auto_trust_anchor_file_list || cfg->trusted_keys_file_list)) { + memsize_expect += cfg->key_cache_size + cfg->neg_cache_size; + } +#ifdef HAVE_NGHTTP2_NGHTTP2_H + if(cfg_has_https(cfg)) { + memsize_expect += cfg->http_query_buffer_size + cfg->http_response_buffer_size; + } +#endif + + if(getrlimit(RLIMIT_AS, &rlim) == 0) { + if(rlim.rlim_cur != (rlim_t)RLIM_INFINITY && + rlim.rlim_cur < (rlim_t)memsize_expect) { + log_warn("the ulimit(max memory size) is smaller than the expected memory usage (added size of caches). %u < %u bytes", (unsigned)rlim.rlim_cur, (unsigned)memsize_expect); + } + } + if(getrlimit(RLIMIT_DATA, &rlim) == 0) { + if(rlim.rlim_cur != (rlim_t)RLIM_INFINITY && + rlim.rlim_cur < memsize_expect) { + log_warn("the ulimit(data seg size) is smaller than the expected memory usage (added size of caches). %u < %u bytes", (unsigned)rlim.rlim_cur, (unsigned)memsize_expect); + } + } if(total > 1024 && strncmp(ub_event_get_version(), "mini-event", 10) == 0) { diff --git a/doc/Changelog b/doc/Changelog index f8b0c9b0f..52205b593 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -4,6 +4,10 @@ - ipsecmod: Better logging for detecting a cycle when attaching the A/AAAA subquery. +24 February 2021: Wouter + - On startup of unbound it checks if rlimits on memory size look + sufficient for the configured cache size, and logs warning if not. + 23 February 2021: Wouter - Fix for zonemd, that domain-insecure zones work without dnssec. - Fix for zonemd, do not reject insecure result from trust anchor diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index b790660f2..7a90677a4 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -1105,6 +1105,19 @@ if_is_https(const char* ifname, const char* port, int https_port) return 0; } +/** see if config contains https turned on */ +int cfg_has_https(struct config_file* cfg) +{ + int i; + char portbuf[32]; + snprintf(portbuf, sizeof(portbuf), "%d", cfg->port); + for(i = 0; inum_ifs; i++) { + if(if_is_https(cfg->ifs[i], portbuf, cfg->https_port)) + return 1; + } + return 0; +} + /** * Helper for ports_open. Creates one interface (or NULL for default). * @param ifname: The interface ip address. diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h index f438ff458..215242b30 100644 --- a/services/listen_dnsport.h +++ b/services/listen_dnsport.h @@ -147,6 +147,12 @@ void listening_ports_free(struct listen_port* list); int resolve_interface_names(struct config_file* cfg, char*** resif, int* num_resif); +/** + * Return true if the config contains settinsg that enable https. + * @return true if https ports are used for server. + */ +int cfg_has_https(struct config_file* cfg); + /** * Create commpoints with for this thread for the shared ports. * @param base: the comm_base that provides event functionality. From e6ffacc16a22d9826e5115b2f3a8c28c549c0025 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 24 Feb 2021 15:25:12 +0100 Subject: [PATCH 154/168] - Fix function documentation. --- doc/Changelog | 1 + services/listen_dnsport.h | 1 + 2 files changed, 2 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 52205b593..b7af9c463 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -7,6 +7,7 @@ 24 February 2021: Wouter - On startup of unbound it checks if rlimits on memory size look sufficient for the configured cache size, and logs warning if not. + - Fix function documentation. 23 February 2021: Wouter - Fix for zonemd, that domain-insecure zones work without dnssec. diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h index 215242b30..77062f68d 100644 --- a/services/listen_dnsport.h +++ b/services/listen_dnsport.h @@ -149,6 +149,7 @@ int resolve_interface_names(struct config_file* cfg, char*** resif, /** * Return true if the config contains settinsg that enable https. + * @param cfg: config information. * @return true if https ports are used for server. */ int cfg_has_https(struct config_file* cfg); From a9e15f36d8f184999e74e86331a7556fe9c46fe8 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 24 Feb 2021 15:30:12 +0100 Subject: [PATCH 155/168] - Fix unit test for added ulimit checks. --- doc/Changelog | 1 + services/listen_dnsport.c | 25 ------------------------- services/listen_dnsport.h | 7 ------- util/config_file.c | 24 ++++++++++++++++++++++++ util/config_file.h | 10 ++++++++++ 5 files changed, 35 insertions(+), 32 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index b7af9c463..9492bc988 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -8,6 +8,7 @@ - On startup of unbound it checks if rlimits on memory size look sufficient for the configured cache size, and logs warning if not. - Fix function documentation. + - Fix unit test for added ulimit checks. 23 February 2021: Wouter - Fix for zonemd, that domain-insecure zones work without dnssec. diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 7a90677a4..64d22d4d8 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -1093,31 +1093,6 @@ if_is_ssl(const char* ifname, const char* port, int ssl_port, return 0; } -/** see if interface is https, its port number == the https port number */ -static int -if_is_https(const char* ifname, const char* port, int https_port) -{ - char* p = strchr(ifname, '@'); - if(!p && atoi(port) == https_port) - return 1; - if(p && atoi(p+1) == https_port) - return 1; - return 0; -} - -/** see if config contains https turned on */ -int cfg_has_https(struct config_file* cfg) -{ - int i; - char portbuf[32]; - snprintf(portbuf, sizeof(portbuf), "%d", cfg->port); - for(i = 0; inum_ifs; i++) { - if(if_is_https(cfg->ifs[i], portbuf, cfg->https_port)) - return 1; - } - return 0; -} - /** * Helper for ports_open. Creates one interface (or NULL for default). * @param ifname: The interface ip address. diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h index 77062f68d..f438ff458 100644 --- a/services/listen_dnsport.h +++ b/services/listen_dnsport.h @@ -147,13 +147,6 @@ void listening_ports_free(struct listen_port* list); int resolve_interface_names(struct config_file* cfg, char*** resif, int* num_resif); -/** - * Return true if the config contains settinsg that enable https. - * @param cfg: config information. - * @return true if https ports are used for server. - */ -int cfg_has_https(struct config_file* cfg); - /** * Create commpoints with for this thread for the shared ports. * @param base: the comm_base that provides event functionality. diff --git a/util/config_file.c b/util/config_file.c index 9090e595c..171251f67 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -2608,3 +2608,27 @@ int options_remote_is_address(struct config_file* cfg) return (cfg->control_ifs.first->str[0] != '/'); } +/** see if interface is https, its port number == the https port number */ +int +if_is_https(const char* ifname, const char* port, int https_port) +{ + char* p = strchr(ifname, '@'); + if(!p && atoi(port) == https_port) + return 1; + if(p && atoi(p+1) == https_port) + return 1; + return 0; +} + +/** see if config contains https turned on */ +int cfg_has_https(struct config_file* cfg) +{ + int i; + char portbuf[32]; + snprintf(portbuf, sizeof(portbuf), "%d", cfg->port); + for(i = 0; inum_ifs; i++) { + if(if_is_https(cfg->ifs[i], portbuf, cfg->https_port)) + return 1; + } + return 0; +} diff --git a/util/config_file.h b/util/config_file.h index 9d3297f7b..1042bd879 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -1305,5 +1305,15 @@ void w_config_adjust_directory(struct config_file* cfg); /** debug option for unit tests. */ extern int fake_dsa, fake_sha1; +/** see if interface is https, its port number == the https port number */ +int if_is_https(const char* ifname, const char* port, int https_port); + +/** + * Return true if the config contains settinsg that enable https. + * @param cfg: config information. + * @return true if https ports are used for server. + */ +int cfg_has_https(struct config_file* cfg); + #endif /* UTIL_CONFIG_FILE_H */ From 6612974d126c97fa3e4db21aaff177e8480a4f52 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 24 Feb 2021 16:56:57 +0100 Subject: [PATCH 156/168] - spelling fix in header. --- doc/Changelog | 1 + util/config_file.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 9492bc988..55f518f3d 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -9,6 +9,7 @@ sufficient for the configured cache size, and logs warning if not. - Fix function documentation. - Fix unit test for added ulimit checks. + - spelling fix in header. 23 February 2021: Wouter - Fix for zonemd, that domain-insecure zones work without dnssec. diff --git a/util/config_file.h b/util/config_file.h index 1042bd879..f5eda738c 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -1309,7 +1309,7 @@ extern int fake_dsa, fake_sha1; int if_is_https(const char* ifname, const char* port, int https_port); /** - * Return true if the config contains settinsg that enable https. + * Return true if the config contains settings that enable https. * @param cfg: config information. * @return true if https ports are used for server. */ From 6cda81b7e487afa35fe723eb0f92c6ce6ea42f7c Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 24 Feb 2021 17:36:22 +0100 Subject: [PATCH 157/168] Fix to use a simple pointer in the call of make_sock and make_sock_port. --- services/listen_dnsport.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 9a95a8e32..ceccd6056 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -926,7 +926,7 @@ static int make_sock(int stype, const char* ifname, const char* port, struct addrinfo *hints, int v6only, int* noip6, size_t rcv, size_t snd, int* reuseport, int transparent, int tcp_mss, int nodelay, int freebind, - int use_systemd, int dscp, struct unbound_socket** ub_sock) + int use_systemd, int dscp, struct unbound_socket* ub_sock) { struct addrinfo *res = NULL; int r, s, inuse, noproto; @@ -969,9 +969,9 @@ make_sock(int stype, const char* ifname, const char* port, } } - (*ub_sock)->addr = res; - (*ub_sock)->s = s; - (*ub_sock)->fam = hints->ai_family; + ub_sock->addr = res; + ub_sock->s = s; + ub_sock->fam = hints->ai_family; return s; } @@ -981,7 +981,7 @@ static int make_sock_port(int stype, const char* ifname, const char* port, struct addrinfo *hints, int v6only, int* noip6, size_t rcv, size_t snd, int* reuseport, int transparent, int tcp_mss, int nodelay, int freebind, - int use_systemd, int dscp, struct unbound_socket** ub_sock) + int use_systemd, int dscp, struct unbound_socket* ub_sock) { char* s = strchr(ifname, '@'); if(s) { @@ -1177,7 +1177,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, return 0; if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, &noip6, rcv, snd, reuseport, transparent, - tcp_mss, nodelay, freebind, use_systemd, dscp, &ub_sock)) == -1) { + tcp_mss, nodelay, freebind, use_systemd, dscp, ub_sock)) == -1) { free(ub_sock); if(noip6) { log_warn("IPv6 protocol not available"); @@ -1204,7 +1204,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, /* regular udp socket */ if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, &noip6, rcv, snd, reuseport, transparent, - tcp_mss, nodelay, freebind, use_systemd, dscp, &ub_sock)) == -1) { + tcp_mss, nodelay, freebind, use_systemd, dscp, ub_sock)) == -1) { free(ub_sock); if(noip6) { log_warn("IPv6 protocol not available"); @@ -1236,7 +1236,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, port_type = listen_type_tcp; if((s = make_sock_port(SOCK_STREAM, ifname, port, hints, 1, &noip6, 0, 0, reuseport, transparent, tcp_mss, nodelay, - freebind, use_systemd, dscp, &ub_sock)) == -1) { + freebind, use_systemd, dscp, ub_sock)) == -1) { free(ub_sock); if(noip6) { /*log_warn("IPv6 protocol not available");*/ From 04b4f515a7b3de1dc02d78990f7a0c3d1d6d84aa Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 25 Feb 2021 08:50:02 +0100 Subject: [PATCH 158/168] Fix comment item. --- services/outside_network.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/services/outside_network.c b/services/outside_network.c index dbe6121f2..89ccb70ad 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -1942,9 +1942,10 @@ randomize_and_send_udp(struct pending* pend, sldns_buffer* packet, int timeout) #ifdef USE_DNSTAP /* * sending src (local service)/dst (upstream) addresses over DNSTAP - * TODO: right now there are no chances to get the src (local service) addr. So we will pass 0.0.0.0 (::) - * to argument for dt_msg_send_outside_query()/dt_msg_send_outside_response() calls. - * For the both UDP and TCP. + * There are no chances to get the src (local service) addr if unbound + * is not configured with specific outgoing IP-addresses. So we will + * pass 0.0.0.0 (::) to argument for + * dt_msg_send_outside_query()/dt_msg_send_outside_response() calls. */ if(outnet->dtenv && (outnet->dtenv->log_resolver_query_messages || From 6c464386c6dd9675b1fd3fa1671bb60bd65ba77f Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 25 Feb 2021 12:00:28 +0100 Subject: [PATCH 159/168] Changelog note for #365, #367 and #368. - Merge PR #367 : DNSTAP log local address. With code from PR #365 and fixes #368 : dnstap does not log the DNS message ID for FORWARDER_QUERY. --- doc/Changelog | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 55f518f3d..7eb067740 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,8 @@ +25 February 2021: Wouter + - Merge PR #367 : DNSTAP log local address. With code from PR #365 + and fixes #368 : dnstap does not log the DNS message ID for + FORWARDER_QUERY. + 24 February 2021: George - Fix #384: (1) A minor request to improve the log (2) A minor bug in one log message. From a06d761f74e1f596ca77fca80861a5e043312fa5 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 25 Feb 2021 16:54:32 +0100 Subject: [PATCH 160/168] - Fix to allow rpz with wildcard that applies to all TLDs at once. --- doc/Changelog | 1 + services/rpz.c | 2 +- testdata/rpz_rootwc.rpl | 162 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 testdata/rpz_rootwc.rpl diff --git a/doc/Changelog b/doc/Changelog index 7eb067740..888cd5750 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,6 +2,7 @@ - Merge PR #367 : DNSTAP log local address. With code from PR #365 and fixes #368 : dnstap does not log the DNS message ID for FORWARDER_QUERY. + - Fix to allow rpz with wildcard that applies to all TLDs at once. 24 February 2021: George - Fix #384: (1) A minor request to improve the log (2) A minor bug in one diff --git a/services/rpz.c b/services/rpz.c index 40b8efe48..0c79a0620 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -716,7 +716,7 @@ rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass, * zone match, append '*' to that and do another lookup. */ ce = dname_get_shared_topdomain(z->name, qname); - if(!ce /* should not happen */ || !*ce /* root */) { + if(!ce /* should not happen */) { lock_rw_unlock(&z->lock); if(zones_keep_lock) { lock_rw_unlock(&r->local_zones->lock); diff --git a/testdata/rpz_rootwc.rpl b/testdata/rpz_rootwc.rpl new file mode 100644 index 000000000..1fb94a143 --- /dev/null +++ b/testdata/rpz_rootwc.rpl @@ -0,0 +1,162 @@ +; config options +server: + module-config: "respip validator iterator" + target-fetch-policy: "0 0 0 0 0" + qname-minimisation: no + +rpz: + name: "rpz.example.com." + zonefile: +TEMPFILE_NAME rpz.example.com +TEMPFILE_CONTENTS rpz.example.com +$ORIGIN example.com. +rpz 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. ( + 1379078166 28800 7200 604800 7200 ) + 3600 IN NS ns1.rpz.example.com. + 3600 IN NS ns2.rpz.example.com. +$ORIGIN rpz.example.com. +a CNAME . +a CNAME *. ; duplicate CNAME here on purpose +*.a TXT "wildcard local data" +* CNAME . +b.a CNAME *. +c.a CNAME rpz-passthru. +TEMPFILE_END + +rpz: + name: "rpz2.example.com." + zonefile: +TEMPFILE_NAME rpz2.example.com +TEMPFILE_CONTENTS rpz2.example.com +$ORIGIN example.com. +rpz2 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. ( + 1379078166 28800 7200 604800 7200 ) + 3600 IN NS ns1.rpz.example.com. + 3600 IN NS ns2.rpz.example.com. +$ORIGIN rpz2.example.com. +a TXT "local data 2nd zone" +d TXT "local data 2nd zone" +e CNAME *.a.example. +*.e CNAME *.b.example. +drop CNAME rpz-drop. +TEMPFILE_END + +stub-zone: + name: "a." + stub-addr: 10.20.30.40 +stub-zone: + name: "example." + stub-addr: 10.20.30.50 +CONFIG_END + +SCENARIO_BEGIN Test RPZ QNAME trigger for root wildcard. + +; a. +RANGE_BEGIN 0 100 + ADDRESS 10.20.30.40 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +a. IN NS +SECTION ANSWER +a. IN NS ns.a. +SECTION ADDITIONAL +ns.a IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +c.a. IN TXT +SECTION ANSWER +c.a. IN TXT "answer from upstream ns" +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +x.b.a. IN TXT +SECTION ANSWER +x.b.a. IN TXT "answer from upstream ns" +ENTRY_END + +RANGE_END + +; example. +RANGE_BEGIN 0 100 + ADDRESS 10.20.30.50 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example. IN NS +SECTION ANSWER +example. IN NS ns.example. +SECTION ADDITIONAL +ns.example IN A 10.20.30.50 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +e.a.example. IN TXT +SECTION ANSWER +e.a.example. IN TXT "e.a.example. answer from upstream ns" +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +something.e.b.example. IN TXT +SECTION ANSWER +something.e.b.example. IN TXT "*.b.example. answer from upstream ns" +ENTRY_END + +RANGE_END + +STEP 10 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +x. IN TXT +ENTRY_END + +; wildcard deny all +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NXDOMAIN +SECTION QUESTION +x. IN TXT +SECTION ANSWER +ENTRY_END + +STEP 30 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +y.tld. IN TXT +ENTRY_END + +; wildcard deny all +STEP 40 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NXDOMAIN +SECTION QUESTION +y.tld. IN TXT +SECTION ANSWER +ENTRY_END + +SCENARIO_END From 826828673a7a950ffd6615c6e693ff28b856f745 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Fri, 26 Feb 2021 13:13:37 +0100 Subject: [PATCH 161/168] - Fix for #367: rc_ports don't have ub_sock; skip cleaning up. --- doc/Changelog | 3 +++ services/listen_dnsport.c | 7 +++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 888cd5750..27e568aaf 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +26 February 2021: George + - Fix for #367: rc_ports don't have ub_sock; skip cleaning up. + 25 February 2021: Wouter - Merge PR #367 : DNSTAP log local address. With code from PR #365 and fixes #368 : dnstap does not log the DNS message ID for diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 2d6155699..aed9cf784 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -1690,8 +1690,11 @@ void listening_ports_free(struct listen_port* list) if(list->fd != -1) { sock_close(list->fd); } - freeaddrinfo(list->socket->addr); - free(list->socket); + /* rc_ports don't have ub_socket */ + if(list->socket) { + freeaddrinfo(list->socket->addr); + free(list->socket); + } free(list); list = nx; } From 6cd77933a3f113ea2bef7e4943f6dda6a26a39cb Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 26 Feb 2021 13:54:10 +0100 Subject: [PATCH 162/168] - Fix: Resolve interface names on control-interface too. --- daemon/daemon.c | 3 +- daemon/remote.c | 13 +++++-- doc/Changelog | 3 ++ services/listen_dnsport.c | 76 +++++++++++++++++++++++++++----------- services/listen_dnsport.h | 9 +++-- smallapp/unbound-control.c | 21 ++++++++++- testcode/fake_event.c | 5 ++- 7 files changed, 98 insertions(+), 32 deletions(-) diff --git a/daemon/daemon.c b/daemon/daemon.c index f5f0b88fe..6d6667883 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -320,7 +320,8 @@ daemon_open_shared_ports(struct daemon* daemon) free(daemon->ports); daemon->ports = NULL; } - if(!resolve_interface_names(daemon->cfg, &resif, &num_resif)) + if(!resolve_interface_names(daemon->cfg->ifs, + daemon->cfg->num_ifs, NULL, &resif, &num_resif)) return 0; /* see if we want to reuseport */ #ifdef SO_REUSEPORT diff --git a/daemon/remote.c b/daemon/remote.c index 18d960c56..7e432fe52 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -364,13 +364,20 @@ struct listen_port* daemon_remote_open_ports(struct config_file* cfg) struct listen_port* l = NULL; log_assert(cfg->remote_control_enable && cfg->control_port); if(cfg->control_ifs.first) { - struct config_strlist* p; - for(p = cfg->control_ifs.first; p; p = p->next) { - if(!add_open(p->str, cfg->control_port, &l, 1, cfg)) { + char** rcif = NULL; + int i, num_rcif = 0; + if(!resolve_interface_names(NULL, 0, cfg->control_ifs.first, + &rcif, &num_rcif)) { + return NULL; + } + for(i=0; icontrol_port, &l, 1, cfg)) { listening_ports_free(l); + config_del_strarray(rcif, num_rcif); return NULL; } } + config_del_strarray(rcif, num_rcif); } else { /* defaults */ if(cfg->do_ip6 && diff --git a/doc/Changelog b/doc/Changelog index 27e568aaf..ca2182719 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,9 @@ 26 February 2021: George - Fix for #367: rc_ports don't have ub_sock; skip cleaning up. +26 February 2021: Wouter + - Fix: Resolve interface names on control-interface too. + 25 February 2021: Wouter - Merge PR #367 : DNSTAP log local address. With code from PR #365 and fixes #368 : dnstap does not log the DNS message ID for diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index aed9cf784..b8c04a3ec 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -1528,13 +1528,12 @@ resolve_ifa_name(struct ifaddrs *ifas, const char *search_ifa, char ***ip_addres } #endif /* HAVE_GETIFADDRS */ -int resolve_interface_names(struct config_file* cfg, char*** resif, - int* num_resif) +int resolve_interface_names(char** ifs, int num_ifs, + struct config_strlist* list, char*** resif, int* num_resif) { #ifdef HAVE_GETIFADDRS - int i; struct ifaddrs *addrs = NULL; - if(cfg->num_ifs == 0) { + if(num_ifs == 0 && list == NULL) { *resif = NULL; *num_resif = 0; return 1; @@ -1545,38 +1544,71 @@ int resolve_interface_names(struct config_file* cfg, char*** resif, freeifaddrs(addrs); return 0; } - for(i=0; inum_ifs; i++) { - if(!resolve_ifa_name(addrs, cfg->ifs[i], resif, num_resif)) { - freeifaddrs(addrs); - config_del_strarray(*resif, *num_resif); - *resif = NULL; - *num_resif = 0; - return 0; + if(ifs) { + int i; + for(i=0; inext) { + if(!resolve_ifa_name(addrs, p->str, resif, num_resif)) { + freeifaddrs(addrs); + config_del_strarray(*resif, *num_resif); + *resif = NULL; + *num_resif = 0; + return 0; + } +} + } freeifaddrs(addrs); return 1; #else - int i; - if(cfg->num_ifs == 0) { + struct config_strlist* p; + if(num_ifs == 0 && list == NULL) { *resif = NULL; *num_resif = 0; return 1; } - *num_resif = cfg->num_ifs; + *num_resif = num_ifs; + for(p = list; p; p = p->next) { + *num_resif ++; + } *resif = calloc(*num_resif, sizeof(**resif)); if(!*resif) { log_err("out of memory"); return 0; } - for(i=0; i<*num_resif; i++) { - (*resif)[i] = strdup(cfg->ifs[i]); - if(!((*resif)[i])) { - log_err("out of memory"); - config_del_strarray(*resif, *num_resif); - *resif = NULL; - *num_resif = 0; - return 0; + if(ifs) { + int i; + for(i=0; inext) { + (*resif)[i] = strdup(p->str); + if(!((*resif)[i])) { + log_err("out of memory"); + config_del_strarray(*resif, *num_resif); + *resif = NULL; + *num_resif = 0; + return 0; + } } } return 1; diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h index cb614c834..1e51be9bf 100644 --- a/services/listen_dnsport.h +++ b/services/listen_dnsport.h @@ -150,16 +150,19 @@ struct listen_port* listening_ports_open(struct config_file* cfg, */ void listening_ports_free(struct listen_port* list); +struct config_strlist; /** * Resolve interface names in config and store result IP addresses - * @param cfg: config + * @param ifs: array of interfaces. The list of interface names, if not NULL. + * @param num_ifs: length of ifs array. + * @param list: if not NULL, this is used as the list of interface names. * @param resif: string array (malloced array of malloced strings) with * result. NULL if cfg has none. * @param num_resif: length of resif. Zero if cfg has zero num_ifs. * @return 0 on failure. */ -int resolve_interface_names(struct config_file* cfg, char*** resif, - int* num_resif); +int resolve_interface_names(char** ifs, int num_ifs, + struct config_strlist* list, char*** resif, int* num_resif); /** * Create commpoints with for this thread for the shared ports. diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c index d58f1b2f9..5a6f0c560 100644 --- a/smallapp/unbound-control.c +++ b/smallapp/unbound-control.c @@ -63,6 +63,7 @@ #include "sldns/wire2str.h" #include "sldns/pkthdr.h" #include "services/rpz.h" +#include "services/listen_dnsport.h" #ifdef HAVE_SYS_IPC_H #include "sys/ipc.h" @@ -583,10 +584,27 @@ contact_server(const char* svr, struct config_file* cfg, int statuscmd) socklen_t addrlen; int addrfamily = 0, proto = IPPROTO_TCP; int fd, useport = 1; + char** rcif = NULL; + int num_rcif = 0; /* use svr or the first config entry */ if(!svr) { if(cfg->control_ifs.first) { - svr = cfg->control_ifs.first->str; + struct sockaddr_storage addr2; + socklen_t addrlen2; + if(extstrtoaddr(cfg->control_ifs.first->str, &addr2, + &addrlen2)) { + svr = cfg->control_ifs.first->str; + } else { + if(!resolve_interface_names(NULL, 0, + cfg->control_ifs.first, &rcif, + &num_rcif)) { + fatal_exit("could not resolve interface names"); + } + if(rcif == NULL || num_rcif == 0) { + fatal_exit("no control interfaces"); + } + svr = rcif[0]; + } } else if(cfg->do_ip4) { svr = "127.0.0.1"; } else { @@ -697,6 +715,7 @@ contact_server(const char* svr, struct config_file* cfg, int statuscmd) break; } fd_set_block(fd); + config_del_strarray(rcif, num_rcif); return fd; } diff --git a/testcode/fake_event.c b/testcode/fake_event.c index 9508f3225..3ff933928 100644 --- a/testcode/fake_event.c +++ b/testcode/fake_event.c @@ -1306,8 +1306,9 @@ void outnet_serviced_query_stop(struct serviced_query* sq, void* cb_arg) log_info("double delete of pending serviced query"); } -int resolve_interface_names(struct config_file* ATTR_UNUSED(cfg), - char*** ATTR_UNUSED(resif), int* ATTR_UNUSED(num_resif)) +int resolve_interface_names(char** ATTR_UNUSED(ifs), int ATTR_UNUSED(num_ifs), + struct config_strlist* ATTR_UNUSED(list), char*** ATTR_UNUSED(resif), + int* ATTR_UNUSED(num_resif)) { return 1; } From 9753f36463eb88124490ec16de0eb3ae21c0078a Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 4 Mar 2021 10:14:32 +0100 Subject: [PATCH 163/168] - iana portlist update. --- doc/Changelog | 3 +++ util/iana_ports.inc | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index ca2182719..d2b76a0cd 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +4 March 2021: Wouter + - iana portlist update. + 26 February 2021: George - Fix for #367: rc_ports don't have ub_sock; skip cleaning up. diff --git a/util/iana_ports.inc b/util/iana_ports.inc index 875851e6a..82bbc867b 100644 --- a/util/iana_ports.inc +++ b/util/iana_ports.inc @@ -118,7 +118,6 @@ 140, 141, 142, -143, 144, 145, 146, @@ -679,7 +678,6 @@ 990, 991, 992, -993, 995, 996, 997, From 6e4ecf7bc1ee90aacc0e46534e13e1061849891d Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 4 Mar 2021 14:13:44 +0100 Subject: [PATCH 164/168] - Fix spurious errors about "Could not generate request: out of memory". The mesh detect cycle routine no longer wrongly stops the check when the calling mesh state is unique. --- doc/Changelog | 3 +++ services/mesh.c | 3 +-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index d2b76a0cd..accfaade9 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,8 @@ 4 March 2021: Wouter - iana portlist update. + - Fix spurious errors about "Could not generate request: out of + memory". The mesh detect cycle routine no longer wrongly stops + the check when the calling mesh state is unique. 26 February 2021: George - Fix for #367: rc_ports don't have ub_sock; skip cleaning up. diff --git a/services/mesh.c b/services/mesh.c index 91d23debf..88b3d15d0 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -1813,8 +1813,7 @@ mesh_detect_cycle(struct module_qstate* qstate, struct query_info* qinfo, { struct mesh_area* mesh = qstate->env->mesh; struct mesh_state* dep_m = NULL; - if(!mesh_state_is_unique(qstate->mesh_info)) - dep_m = mesh_area_find(mesh, NULL, qinfo, flags, prime, valrec); + dep_m = mesh_area_find(mesh, NULL, qinfo, flags, prime, valrec); return mesh_detect_cycle_found(qstate, dep_m); } From 1bdae426eee393cf6916683f17ddd9d23a747457 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 5 Mar 2021 13:46:36 +0100 Subject: [PATCH 165/168] - Workaround for #439: prevent loops in the reuse rbtree. --- doc/Changelog | 3 +++ services/outside_network.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index accfaade9..d8f88f88c 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +5 March 2021: Wouter + - Workaround for #439: prevent loops in the reuse rbtree. + 4 March 2021: Wouter - iana portlist update. - Fix spurious errors about "Could not generate request: out of diff --git a/services/outside_network.c b/services/outside_network.c index 18e2c8da9..d2d8c56f5 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -892,6 +892,9 @@ reuse_tcp_remove_tree_list(struct outside_network* outnet, /* delete it from reuse tree */ (void)rbtree_delete(&outnet->tcp_reuse, reuse); reuse->node.key = NULL; + /* defend against loops on broken tree by zeroing the + * rbnode structure */ + memset(&reuse->node, 0, sizeof(reuse->node)); } /* delete from reuse list */ if(reuse->item_on_lru_list) { From 269c168f7e58dc3a18ff0148fd8cce959f71bad7 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 5 Mar 2021 13:54:26 +0100 Subject: [PATCH 166/168] - Debug output for #411 and #439: printout internal error and details. --- doc/Changelog | 1 + services/outside_network.c | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index d8f88f88c..3b3073405 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,6 @@ 5 March 2021: Wouter - Workaround for #439: prevent loops in the reuse rbtree. + - Debug output for #411 and #439: printout internal error and details. 4 March 2021: Wouter - iana portlist update. diff --git a/services/outside_network.c b/services/outside_network.c index d2d8c56f5..9769b7602 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -890,7 +890,13 @@ reuse_tcp_remove_tree_list(struct outside_network* outnet, verbose(VERB_CLIENT, "reuse_tcp_remove_tree_list"); if(reuse->node.key) { /* delete it from reuse tree */ - (void)rbtree_delete(&outnet->tcp_reuse, reuse); + if(!rbtree_delete(&outnet->tcp_reuse, reuse)) { + /* should not be possible, it should be there */ + char buf[256]; + addr_to_str(&reuse->addr, reuse->addrlen, buf, + sizeof(buf)); + log_err("reuse tcp delete: node not present, internal error, %s ssl %d lru %d", buf, reuse->is_ssl, reuse->item_on_lru_list); + } reuse->node.key = NULL; /* defend against loops on broken tree by zeroing the * rbnode structure */ From 6c5e67a5a2153397b8f947d84c2095587f696588 Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Wed, 10 Mar 2021 15:14:45 +0100 Subject: [PATCH 167/168] put tls-use-sni: on a line of its own Sorry about this, this must have happened when I added the entries for padding queries and responses. --- doc/unbound.conf.5.in | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 649078ea3..00c1191be 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -583,6 +583,7 @@ Default is yes. .B pad\-queries\-block\-size: \fI The block size with which to pad queries sent over TLS upstreams. Default is 128. +.TP .B tls\-use\-sni: \fI Enable or disable sending the SNI extension on TLS connections. Default is yes. From 0927fe6fc45da77c07088e6e50528f346974732c Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 11 Mar 2021 13:22:05 +0100 Subject: [PATCH 168/168] - Fix parse of LOC RR type for decimetres. --- doc/Changelog | 3 +++ sldns/str2wire.c | 6 +++++- testdata/test_ldnsrr.5 | 2 ++ testdata/test_ldnsrr.c5 | 2 ++ 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 3b3073405..b6bbfa210 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +11 March 2021: Wouter + - Fix parse of LOC RR type for decimetres. + 5 March 2021: Wouter - Workaround for #439: prevent loops in the reuse rbtree. - Debug output for #411 and #439: printout internal error and details. diff --git a/sldns/str2wire.c b/sldns/str2wire.c index 977cda28a..70eec6dab 100644 --- a/sldns/str2wire.c +++ b/sldns/str2wire.c @@ -1491,13 +1491,17 @@ static int loc_parse_cm(char* my_str, char** endstr, uint8_t* m, uint8_t* e) { uint32_t meters = 0, cm = 0, val; + char* cm_endstr; while (isblank((unsigned char)*my_str)) { my_str++; } meters = (uint32_t)strtol(my_str, &my_str, 10); if (*my_str == '.') { my_str++; - cm = (uint32_t)strtol(my_str, &my_str, 10); + cm = (uint32_t)strtol(my_str, &cm_endstr, 10); + if(cm_endstr == my_str + 1) + cm *= 10; + my_str = cm_endstr; } if (meters >= 1) { *e = 2; diff --git a/testdata/test_ldnsrr.5 b/testdata/test_ldnsrr.5 index 9be72b4aa..c6e7ea2ba 100644 --- a/testdata/test_ldnsrr.5 +++ b/testdata/test_ldnsrr.5 @@ -170,3 +170,5 @@ example. 86400 IN ZONEMD 2018031900 241 1 ( e1846540e33a9e41 89792d18d5 uri.arpa. 3600 IN ZONEMD 2018100702 1 1 ( 1291b78ddf7669b1a39d014d87626b709b55774c5d7d58fa dc556439889a10eaf6f11d615900a4f996bd46279514e473 ) ; from draft-ietf-dnsop-dns-zone-digest-12#section-A.5 root-servers.net. 3600000 IN ZONEMD 2018091100 1 1 ( f1ca0ccd91bd5573d9f431c00ee0101b2545c97602be0a97 8a3b11dbfc1c776d5b3e86ae3d973d6b5349ba7f04340f79 ) +; from ldns issue #121, 0.10m was parsed as 0.01m. +foo. 12345 IN LOC 12 45 52.333 N 105 40 33.452 W -24m 0.1m 0.1m 0.1m diff --git a/testdata/test_ldnsrr.c5 b/testdata/test_ldnsrr.c5 index 98c2ed380..f30aa0b73 100644 --- a/testdata/test_ldnsrr.c5 +++ b/testdata/test_ldnsrr.c5 @@ -210,3 +210,5 @@ example. 86400 IN ZONEMD 2018031900 241 1 E1846540E33A9E4189792D18D5D131F605FC28 uri.arpa. 3600 IN ZONEMD 2018100702 1 1 1291B78DDF7669B1A39D014D87626B709B55774C5D7D58FADC556439889A10EAF6F11D615900A4F996BD46279514E473 0C726F6F742D73657276657273036E657400003F00010036EE8000367849A05C0101F1CA0CCD91BD5573D9F431C00EE0101B2545C97602BE0A978A3B11DBFC1C776D5B3E86AE3D973D6B5349BA7F04340F79 root-servers.net. 3600000 IN ZONEMD 2018091100 1 1 F1CA0CCD91BD5573D9F431C00EE0101B2545C97602BE0A978A3B11DBFC1C776D5B3E86AE3D973D6B5349BA7F04340F79 +03666F6F00001D00010000303900100011111182BD2D4D69530BD400988D20 +foo. 12345 IN LOC 12 45 52.333 N 105 40 33.452 W -24m 0.10m 0.10m 0.10m