From: Wouter Wijngaards Date: Mon, 31 Oct 2011 14:48:48 +0000 (+0000) Subject: - dns over ssl support, ssl-service-pem and ssl-service-key files X-Git-Tag: release-1.4.14rc1~37 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aa0536dcb5846206d016a03d8d66ad4279247d9e;p=thirdparty%2Funbound.git - dns over ssl support, ssl-service-pem and ssl-service-key files can be given and then TCP queries are serviced wrapped in SSL. git-svn-id: file:///svn/unbound/trunk@2530 be551aaa-1e26-0410-a405-d3ace91eadb9 --- diff --git a/Makefile.in b/Makefile.in index 12da827de..e5c78f7c6 100644 --- a/Makefile.in +++ b/Makefile.in @@ -239,7 +239,7 @@ endif libunbound.la: $(LIBUNBOUND_OBJ) $(INFO) Link $@ ifeq ($(CHECKLOCK_SRC),) - $Q$(LINK_LIB) $(UBSYMS) -o $@ $(sort $(LIBUNBOUND_OBJ)) -rpath $(libdir) $(LIBS) + $Q$(LINK_LIB) $(UBSYMS) -o $@ $(sort $(LIBUNBOUND_OBJ)) -rpath $(libdir) -lssl $(LIBS) else cp $(srcdir)/libunbound/ubsyms.def $(BUILD)clubsyms.def echo lock_protect >> $(BUILD)clubsyms.def @@ -252,7 +252,7 @@ else echo checklock_init >> $(BUILD)clubsyms.def echo checklock_thrcreate >> $(BUILD)clubsyms.def echo checklock_thrjoin >> $(BUILD)clubsyms.def - $Q$(LINK_LIB) $(CLUBSYMS) -o $@ $(sort $(LIBUNBOUND_OBJ)) -rpath $(libdir) $(LIBS) + $Q$(LINK_LIB) $(CLUBSYMS) -o $@ $(sort $(LIBUNBOUND_OBJ)) -rpath $(libdir) -lssl $(LIBS) endif unbound$(EXEEXT): $(DAEMON_OBJ) libunbound.la @@ -289,7 +289,7 @@ anchor-update$(EXEEXT): $(ANCHORUPD_OBJ) libunbound.la unittest$(EXEEXT): $(UNITTEST_OBJ) $(INFO) Link $@ - $Q$(LINK) -o $@ $(sort $(UNITTEST_OBJ)) $(LIBS) + $Q$(LINK) -o $@ $(sort $(UNITTEST_OBJ)) -lssl $(LIBS) testbound$(EXEEXT): $(TESTBOUND_OBJ) $(INFO) Link $@ @@ -297,7 +297,7 @@ testbound$(EXEEXT): $(TESTBOUND_OBJ) lock-verify$(EXEEXT): $(LOCKVERIFY_OBJ) $(INFO) Link $@ - $Q$(LINK) -o $@ $(sort $(LOCKVERIFY_OBJ)) $(LIBS) + $Q$(LINK) -o $@ $(sort $(LOCKVERIFY_OBJ)) -lssl $(LIBS) petal$(EXEEXT): $(PETAL_OBJ) $(INFO) Link $@ @@ -305,15 +305,15 @@ petal$(EXEEXT): $(PETAL_OBJ) pktview$(EXEEXT): $(PKTVIEW_OBJ) $(INFO) Link $@ - $Q$(LINK) -o $@ $(sort $(PKTVIEW_OBJ)) $(LIBS) + $Q$(LINK) -o $@ $(sort $(PKTVIEW_OBJ)) -lssl $(LIBS) signit$(EXEEXT): $(SIGNIT_OBJ) $(INFO) Link $@ - $Q$(LINK) -o $@ $(sort $(SIGNIT_OBJ)) $(LIBS) + $Q$(LINK) -o $@ $(sort $(SIGNIT_OBJ)) -lssl $(LIBS) memstats$(EXEEXT): $(MEMSTATS_OBJ) $(INFO) Link $@ - $Q$(LINK) -o $@ $(sort $(MEMSTATS_OBJ)) $(LIBS) + $Q$(LINK) -o $@ $(sort $(MEMSTATS_OBJ)) -lssl $(LIBS) asynclook$(EXEEXT): $(ASYNCLOOK_OBJ) libunbound.la $(INFO) Link $@ @@ -321,15 +321,15 @@ asynclook$(EXEEXT): $(ASYNCLOOK_OBJ) libunbound.la streamtcp$(EXEEXT): $(STREAMTCP_OBJ) $(INFO) Link $@ - $Q$(LINK) -o $@ $(sort $(STREAMTCP_OBJ)) $(LIBS) + $Q$(LINK) -o $@ $(sort $(STREAMTCP_OBJ)) -lssl $(LIBS) perf$(EXEEXT): $(PERF_OBJ) $(INFO) Link $@ - $Q$(LINK) -o $@ $(sort $(PERF_OBJ)) $(LIBS) + $Q$(LINK) -o $@ $(sort $(PERF_OBJ)) -lssl $(LIBS) delayer$(EXEEXT): $(DELAYER_OBJ) $(INFO) Link $@ - $Q$(LINK) -o $@ $(sort $(DELAYER_OBJ)) $(LIBS) + $Q$(LINK) -o $@ $(sort $(DELAYER_OBJ)) -lssl $(LIBS) harvest$(EXEEXT): $(HARVEST_OBJ) libunbound.la $(INFO) Link $@ diff --git a/daemon/daemon.c b/daemon/daemon.c index 5d10acb71..3e6ac0505 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -528,6 +528,8 @@ daemon_delete(struct daemon* daemon) free(daemon->chroot); free(daemon->pidfile); free(daemon->env); + SSL_CTX_free((SSL_CTX*)daemon->listen_sslctx); + SSL_CTX_free((SSL_CTX*)daemon->connect_sslctx); free(daemon); #ifdef LEX_HAS_YYLEX_DESTROY /* lex cleanup */ diff --git a/daemon/daemon.h b/daemon/daemon.h index e0feaf59c..8e47ea00b 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -80,6 +80,8 @@ struct daemon { struct listen_port* rc_ports; /** remote control connections management (for first worker) */ struct daemon_remote* rc; + /** ssl context for listening to dnstcp over ssl, and connecting ssl */ + void* listen_sslctx, *connect_sslctx; /** num threads allocated */ int num; /** the worker entries */ diff --git a/daemon/remote.c b/daemon/remote.c index ba54d78b3..a89b45942 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -92,21 +92,6 @@ /** if true, inhibits a lot of =0 lines from the stats output */ static const int inhibit_zero = 1; -/** log ssl crypto err */ -static void -log_crypto_err(const char* str) -{ - /* error:[error code]:[library name]:[function name]:[reason string] */ - char buf[128]; - unsigned long e; - ERR_error_string_n(ERR_get_error(), buf, sizeof(buf)); - log_err("%s crypto %s", str, buf); - while( (e=ERR_get_error()) ) { - ERR_error_string_n(e, buf, sizeof(buf)); - log_err("and additionally crypto %s", buf); - } -} - /** subtract timers and the values do not overflow or become negative */ static void timeval_subtract(struct timeval* d, const struct timeval* end, diff --git a/daemon/unbound.c b/daemon/unbound.c index 44ad1f5c3..685277d5d 100644 --- a/daemon/unbound.c +++ b/daemon/unbound.c @@ -55,6 +55,7 @@ #include "services/cache/infra.h" #include "util/data/msgreply.h" #include "util/module.h" +#include "util/net_help.h" #include #include #include @@ -446,6 +447,13 @@ perform_setup(struct daemon* daemon, struct config_file* cfg, int debug_mode, /* read ssl keys while superuser and outside chroot */ if(!(daemon->rc = daemon_remote_create(cfg))) fatal_exit("could not set up remote-control"); + if(cfg->ssl_service_key && cfg->ssl_service_key[0]) { + if(!(daemon->listen_sslctx = listen_sslctx_create( + cfg->ssl_service_key, cfg->ssl_service_pem, NULL))) + fatal_exit("could not set up listen SSL_CTX"); + } + if(!(daemon->connect_sslctx = connect_sslctx_create(NULL, NULL, NULL))) + fatal_exit("could not set up connect SSL_CTX"); #ifdef HAVE_KILL /* check old pid file before forking */ diff --git a/daemon/worker.c b/daemon/worker.c index e16afe5b7..8121f86e5 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1092,7 +1092,7 @@ worker_init(struct worker* worker, struct config_file *cfg, } worker->front = listen_create(worker->base, ports, cfg->msg_buffer_size, (int)cfg->incoming_num_tcp, - worker_handle_request, worker); + worker->daemon->listen_sslctx, worker_handle_request, worker); if(!worker->front) { log_err("could not create listening sockets"); worker_delete(worker); @@ -1105,7 +1105,7 @@ worker_init(struct worker* worker, struct config_file *cfg, worker->daemon->env->infra_cache, worker->rndstate, cfg->use_caps_bits_for_id, worker->ports, worker->numports, cfg->unwanted_threshold, &worker_alloc_cleanup, worker, - cfg->do_udp); + cfg->do_udp, worker->daemon->connect_sslctx); if(!worker->back) { log_err("could not create outgoing sockets"); worker_delete(worker); @@ -1255,9 +1255,9 @@ worker_send_query(uint8_t* qname, size_t qnamelen, uint16_t qtype, e->qstate = q; e->qsent = outnet_serviced_query(worker->back, qname, qnamelen, qtype, qclass, flags, dnssec, want_dnssec, - q->env->cfg->tcp_upstream, addr, addrlen, zone, zonelen, - worker_handle_service_reply, e, worker->back->udp_buff, - &outbound_entry_compare); + q->env->cfg->tcp_upstream || q->env->cfg->ssl_upstream, addr, + addrlen, zone, zonelen, worker_handle_service_reply, e, + worker->back->udp_buff, &outbound_entry_compare); if(!e->qsent) { return NULL; } diff --git a/doc/Changelog b/doc/Changelog index ca0facd4b..17920c717 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +31 October 2011: Wouter + - dns over ssl support, ssl-service-pem and ssl-service-key files + can be given and then TCP queries are serviced wrapped in SSL. + 27 October 2011: Wouter - lame-ttl and lame-size options no longer exist, it is integrated with the host info. They are ignored (with verbose warning) if diff --git a/libunbound/libworker.c b/libunbound/libworker.c index 1c56f7ed6..4a90451e4 100644 --- a/libunbound/libworker.c +++ b/libunbound/libworker.c @@ -44,6 +44,7 @@ #include "config.h" #include #include +#include #include "libunbound/libworker.h" #include "libunbound/context.h" #include "libunbound/unbound.h" @@ -84,6 +85,7 @@ libworker_delete(struct libworker* w) ub_randfree(w->env->rnd); free(w->env); } + SSL_CTX_free(w->sslctx); outside_network_delete(w->back); comm_base_delete(w->base); free(w); @@ -124,6 +126,13 @@ libworker_setup(struct ub_ctx* ctx, int is_bg) forwards_delete(w->env->fwds); w->env->fwds = NULL; } + if(cfg->ssl_upstream) { + w->sslctx = connect_sslctx_create(NULL, NULL, NULL); + if(!w->sslctx) { + libworker_delete(w); + return NULL; + } + } if(!w->is_bg || w->is_bg_thread) { lock_basic_unlock(&ctx->cfglock); } @@ -171,7 +180,7 @@ libworker_setup(struct ub_ctx* ctx, int is_bg) cfg->do_tcp?cfg->outgoing_num_tcp:0, w->env->infra_cache, w->env->rnd, cfg->use_caps_bits_for_id, ports, numports, cfg->unwanted_threshold, - &libworker_alloc_cleanup, w, cfg->do_udp); + &libworker_alloc_cleanup, w, cfg->do_udp, w->sslctx); if(!w->is_bg || w->is_bg_thread) { lock_basic_unlock(&ctx->cfglock); } @@ -695,9 +704,9 @@ struct outbound_entry* libworker_send_query(uint8_t* qname, size_t qnamelen, e->qstate = q; e->qsent = outnet_serviced_query(w->back, qname, qnamelen, qtype, qclass, flags, dnssec, want_dnssec, - q->env->cfg->tcp_upstream, addr, addrlen, zone, zonelen, - libworker_handle_service_reply, e, w->back->udp_buff, - &outbound_entry_compare); + q->env->cfg->tcp_upstream || q->env->cfg->ssl_upstream, addr, + addrlen, zone, zonelen, libworker_handle_service_reply, e, + w->back->udp_buff, &outbound_entry_compare); if(!e->qsent) { return NULL; } diff --git a/libunbound/libworker.h b/libunbound/libworker.h index fea480c0c..c3896fc5a 100644 --- a/libunbound/libworker.h +++ b/libunbound/libworker.h @@ -81,6 +81,8 @@ struct libworker { struct outside_network* back; /** random() table for this worker. */ struct ub_randstate* rndstate; + /** sslcontext for SSL wrapped DNS over TCP queries */ + void* sslctx; }; /** diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index dd416a249..9693b437c 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -723,7 +723,7 @@ listen_cp_insert(struct comm_point* c, struct listen_dnsport* front) struct listen_dnsport* listen_create(struct comm_base* base, struct listen_port* ports, - size_t bufsize, int tcp_accept_count, + size_t bufsize, int tcp_accept_count, void* sslctx, comm_point_callback_t* cb, void *cb_arg) { struct listen_dnsport* front = (struct listen_dnsport*) @@ -736,17 +736,21 @@ listen_create(struct comm_base* base, struct listen_port* ports, free(front); return NULL; } - + if(sslctx) { + verbose(VERB_ALGO, "setup for SSL-wrapped TCP service"); + } + /* create comm points as needed */ while(ports) { struct comm_point* cp = NULL; if(ports->ftype == listen_type_udp) cp = comm_point_create_udp(base, ports->fd, front->udp_buff, cb, cb_arg); - else if(ports->ftype == listen_type_tcp) + else if(ports->ftype == listen_type_tcp) { cp = comm_point_create_tcp(base, ports->fd, tcp_accept_count, bufsize, cb, cb_arg); - else if(ports->ftype == listen_type_udpancil) + cp->ssl = sslctx; + } else if(ports->ftype == listen_type_udpancil) cp = comm_point_create_udp_ancil(base, ports->fd, front->udp_buff, cb, cb_arg); if(!cp) { diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h index 0abc52478..15328b637 100644 --- a/services/listen_dnsport.h +++ b/services/listen_dnsport.h @@ -121,6 +121,7 @@ void listening_ports_free(struct listen_port* list); * @param bufsize: size of datagram buffer. * @param tcp_accept_count: max number of simultaneous TCP connections * from clients. + * @param sslctx: nonNULL if ssl context. * @param cb: callback function when a request arrives. It is passed * the packet and user argument. Return true to send a reply. * @param cb_arg: user data argument for callback function. @@ -128,7 +129,7 @@ void listening_ports_free(struct listen_port* list); */ struct listen_dnsport* listen_create(struct comm_base* base, struct listen_port* ports, size_t bufsize, int tcp_accept_count, - comm_point_callback_t* cb, void* cb_arg); + void* sslctx, comm_point_callback_t* cb, void* cb_arg); /** * delete the listening structure diff --git a/services/outside_network.c b/services/outside_network.c index 8d93d1892..3a41554c7 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -535,7 +535,8 @@ outside_network_create(struct comm_base *base, size_t bufsize, int do_ip6, size_t num_tcp, struct infra_cache* infra, struct ub_randstate* rnd, int use_caps_for_id, int* availports, int numavailports, size_t unwanted_threshold, - void (*unwanted_action)(void*), void* unwanted_param, int do_udp) + void (*unwanted_action)(void*), void* unwanted_param, int do_udp, + void* sslctx) { struct outside_network* outnet = (struct outside_network*) calloc(1, sizeof(struct outside_network)); @@ -549,6 +550,7 @@ outside_network_create(struct comm_base *base, size_t bufsize, outnet->num_tcp = num_tcp; outnet->infra = infra; outnet->rnd = rnd; + outnet->sslctx = sslctx; outnet->svcd_overhead = 0; outnet->want_to_quit = 0; outnet->unwanted_threshold = unwanted_threshold; diff --git a/services/outside_network.h b/services/outside_network.h index 798b0d453..bc8d7e0f2 100644 --- a/services/outside_network.h +++ b/services/outside_network.h @@ -118,6 +118,8 @@ struct outside_network { struct infra_cache* infra; /** where to get random numbers */ struct ub_randstate* rnd; + /** ssl context to create ssl wrapped TCP with DNS connections */ + void* sslctx; /** * Array of tcp pending used for outgoing TCP connections. @@ -369,6 +371,7 @@ struct serviced_query { * @param unwanted_action: the action to take. * @param unwanted_param: user parameter to action. * @param do_udp: if udp is done. + * @param sslctx: context to create outgoing connections with (if enabled). * @return: the new structure (with no pending answers) or NULL on error. */ struct outside_network* outside_network_create(struct comm_base* base, @@ -376,7 +379,8 @@ struct outside_network* outside_network_create(struct comm_base* base, int do_ip4, int do_ip6, size_t num_tcp, struct infra_cache* infra, struct ub_randstate* rnd, int use_caps_for_id, int* availports, int numavailports, size_t unwanted_threshold, - void (*unwanted_action)(void*), void* unwanted_param, int do_udp); + void (*unwanted_action)(void*), void* unwanted_param, int do_udp, + void* sslctx); /** * Delete outside_network structure. diff --git a/testcode/fake_event.c b/testcode/fake_event.c index dc62496a7..7abcafa3d 100644 --- a/testcode/fake_event.c +++ b/testcode/fake_event.c @@ -708,7 +708,7 @@ run_scenario(struct replay_runtime* runtime) struct listen_dnsport* listen_create(struct comm_base* base, struct listen_port* ATTR_UNUSED(ports), size_t bufsize, int ATTR_UNUSED(tcp_accept_count), - comm_point_callback_t* cb, void* cb_arg) + void* ATTR_UNUSED(sslctx), comm_point_callback_t* cb, void* cb_arg) { struct replay_runtime* runtime = (struct replay_runtime*)base; struct listen_dnsport* l= calloc(1, sizeof(struct listen_dnsport)); @@ -877,7 +877,7 @@ outside_network_create(struct comm_base* base, size_t bufsize, int ATTR_UNUSED(use_caps_for_id), int* ATTR_UNUSED(availports), int ATTR_UNUSED(numavailports), size_t ATTR_UNUSED(unwanted_threshold), void (*unwanted_action)(void*), void* ATTR_UNUSED(unwanted_param), - int ATTR_UNUSED(do_udp)) + int ATTR_UNUSED(do_udp), void* ATTR_UNUSED(sslctx)) { struct replay_runtime* runtime = (struct replay_runtime*)base; struct outside_network* outnet = calloc(1, diff --git a/testcode/streamtcp.c b/testcode/streamtcp.c index 39d2db317..e32e578c3 100644 --- a/testcode/streamtcp.c +++ b/testcode/streamtcp.c @@ -49,6 +49,7 @@ #include "util/log.h" #include "util/net_help.h" #include "util/data/msgencode.h" +#include "util/data/msgparse.h" #include "util/data/msgreply.h" #include "util/data/dname.h" @@ -65,6 +66,7 @@ static void usage(char* argv[]) printf("-f server what ipaddr@portnr to send the queries to\n"); printf("-u use UDP. No retries are attempted.\n"); printf("-n do not wait for an answer.\n"); + printf("-s use ssl\n"); printf("-h this help text\n"); exit(1); } @@ -105,7 +107,7 @@ open_svr(const char* svr, int udp) /** write a query over the TCP fd */ static void -write_q(int fd, int udp, ldns_buffer* buf, int id, +write_q(int fd, int udp, SSL* ssl, ldns_buffer* buf, uint16_t id, const char* strname, const char* strtype, const char* strclass) { struct query_info qinfo; @@ -128,31 +130,58 @@ write_q(int fd, int udp, ldns_buffer* buf, int id, /* make query */ qinfo_query_encode(buf, &qinfo); - ldns_buffer_write_u16_at(buf, 0, (uint16_t)id); + ldns_buffer_write_u16_at(buf, 0, id); ldns_buffer_write_u16_at(buf, 2, BIT_RD); + if(1) { + /* add EDNS DO */ + struct edns_data edns; + memset(&edns, 0, sizeof(edns)); + edns.edns_present = 1; + edns.bits = EDNS_DO; + edns.udp_size = 4096; + attach_edns_record(buf, &edns); + } + /* send it */ if(!udp) { len = (uint16_t)ldns_buffer_limit(buf); len = htons(len); - if(send(fd, (void*)&len, sizeof(len), 0)<(ssize_t)sizeof(len)){ + if(ssl) { + if(SSL_write(ssl, (void*)&len, (int)sizeof(len)) <= 0) { + log_crypto_err("cannot SSL_write"); + exit(1); + } + } else { + if(send(fd, (void*)&len, sizeof(len), 0) < + (ssize_t)sizeof(len)){ #ifndef USE_WINSOCK - perror("send() len failed"); + perror("send() len failed"); #else - printf("send len: %s\n", - wsa_strerror(WSAGetLastError())); + printf("send len: %s\n", + wsa_strerror(WSAGetLastError())); #endif - exit(1); + exit(1); + } } } - if(send(fd, (void*)ldns_buffer_begin(buf), ldns_buffer_limit(buf), 0) < - (ssize_t)ldns_buffer_limit(buf)) { + if(ssl) { + if(SSL_write(ssl, (void*)ldns_buffer_begin(buf), + (int)ldns_buffer_limit(buf)) <= 0) { + log_crypto_err("cannot SSL_write"); + exit(1); + } + } else { + if(send(fd, (void*)ldns_buffer_begin(buf), + ldns_buffer_limit(buf), 0) < + (ssize_t)ldns_buffer_limit(buf)) { #ifndef USE_WINSOCK - perror("send() data failed"); + perror("send() data failed"); #else - printf("send data: %s\n", wsa_strerror(WSAGetLastError())); + printf("send data: %s\n", wsa_strerror(WSAGetLastError())); #endif - exit(1); + exit(1); + } } free(qinfo.qname); @@ -160,33 +189,52 @@ write_q(int fd, int udp, ldns_buffer* buf, int id, /** receive DNS datagram over TCP and print it */ static void -recv_one(int fd, int udp, ldns_buffer* buf) +recv_one(int fd, int udp, SSL* ssl, ldns_buffer* buf) { uint16_t len; ldns_pkt* pkt; ldns_status status; if(!udp) { - if(recv(fd, (void*)&len, sizeof(len), 0)<(ssize_t)sizeof(len)){ + if(ssl) { + if(SSL_read(ssl, (void*)&len, (int)sizeof(len)) <= 0) { + log_crypto_err("could not SSL_read"); + exit(1); + } + } else { + if(recv(fd, (void*)&len, sizeof(len), 0) < + (ssize_t)sizeof(len)) { #ifndef USE_WINSOCK - perror("read() len failed"); + perror("read() len failed"); #else - printf("read len: %s\n", - wsa_strerror(WSAGetLastError())); + printf("read len: %s\n", + wsa_strerror(WSAGetLastError())); #endif - exit(1); + exit(1); + } } len = ntohs(len); ldns_buffer_clear(buf); ldns_buffer_set_limit(buf, len); - if(recv(fd, (void*)ldns_buffer_begin(buf), len, 0) < - (ssize_t)len) { + if(ssl) { + int r = SSL_read(ssl, (void*)ldns_buffer_begin(buf), + (int)len); + if(r <= 0) { + log_crypto_err("could not SSL_read"); + exit(1); + } + if(r != (int)len) + fatal_exit("ssl_read %d of %d", r, len); + } else { + if(recv(fd, (void*)ldns_buffer_begin(buf), len, 0) < + (ssize_t)len) { #ifndef USE_WINSOCK - perror("read() data failed"); + perror("read() data failed"); #else - printf("read data: %s\n", - wsa_strerror(WSAGetLastError())); + printf("read data: %s\n", + wsa_strerror(WSAGetLastError())); #endif - exit(1); + exit(1); + } } } else { ssize_t l; @@ -220,20 +268,34 @@ recv_one(int fd, int udp, ldns_buffer* buf) /** send the TCP queries and print answers */ static void -send_em(const char* svr, int udp, int noanswer, int num, char** qs) +send_em(const char* svr, int udp, int usessl, int noanswer, int num, char** qs) { ldns_buffer* buf = ldns_buffer_new(65553); int fd = open_svr(svr, udp); int i; + SSL_CTX* ctx; + SSL* ssl; if(!buf) fatal_exit("out of memory"); + if(usessl) { + ctx = connect_sslctx_create(NULL, NULL, NULL); + if(!ctx) fatal_exit("cannot create ssl ctx"); + ssl = outgoing_ssl_fd(ctx, fd); + if(!ssl) fatal_exit("cannot create ssl"); + } for(i=0; ido_udp = 1; cfg->do_tcp = 1; cfg->tcp_upstream = 0; + cfg->ssl_service_key = NULL; + cfg->ssl_service_pem = NULL; + cfg->ssl_upstream = 0; cfg->use_syslog = 1; cfg->log_time_ascii = 0; cfg->log_queries = 0; @@ -326,6 +329,9 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_YNO("do-udp:", do_udp) else S_YNO("do-tcp:", do_tcp) else S_YNO("tcp-upstream:", tcp_upstream) + else S_YNO("ssl-upstream:", ssl_upstream) + else S_STR("ssl-service-key:", ssl_service_key) + else S_STR("ssl-service-pem:", ssl_service_pem) else S_YNO("interface-automatic:", if_automatic) else S_YNO("do-daemonize:", do_daemonize) else S_NUMBER_NONZERO("port:", port) @@ -574,6 +580,9 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "do-udp", do_udp) else O_YNO(opt, "do-tcp", do_tcp) else O_YNO(opt, "tcp-upstream", tcp_upstream) + else O_YNO(opt, "ssl-upstream", ssl_upstream) + else O_STR(opt, "ssl-service-key", ssl_service_key) + else O_STR(opt, "ssl-service-pem", ssl_service_pem) else O_YNO(opt, "do-daemonize", do_daemonize) else O_STR(opt, "chroot", chrootdir) else O_STR(opt, "username", username) @@ -728,6 +737,8 @@ config_delete(struct config_file* cfg) free(cfg->logfile); free(cfg->pidfile); free(cfg->target_fetch_policy); + free(cfg->ssl_service_key); + free(cfg->ssl_service_pem); if(cfg->ifs) { int i; for(i=0; inum_ifs; i++) diff --git a/util/config_file.h b/util/config_file.h index ea81f683c..61a45629d 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -79,6 +79,13 @@ struct config_file { /** tcp upstream queries (no UDP upstream queries) */ int tcp_upstream; + /** private key file for dnstcp-ssl service (enabled if not NULL) */ + char* ssl_service_key; + /** public key file for dnstcp-ssl service */ + char* ssl_service_pem; + /** if outgoing tcp connections use SSL */ + int ssl_upstream; + /** outgoing port range number of ports (per thread) */ int outgoing_num_ports; /** number of outgoing tcp buffers per (per thread) */ diff --git a/util/configlexer.c b/util/configlexer.c index d438a24a9..67363d800 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -362,8 +362,8 @@ static void yy_fatal_error (yyconst char msg[] ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 134 -#define YY_END_OF_BUFFER 135 +#define YY_NUM_RULES 137 +#define YY_END_OF_BUFFER 138 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -371,147 +371,151 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[1270] = +static yyconst flex_int16_t yy_accept[1298] = { 0, - 1, 1, 116, 116, 120, 120, 124, 124, 128, 128, - 1, 1, 135, 132, 1, 114, 114, 133, 2, 133, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 116, - 117, 117, 118, 133, 120, 121, 121, 122, 133, 127, - 124, 125, 125, 126, 133, 128, 129, 129, 130, 133, - 131, 115, 2, 119, 133, 131, 132, 0, 1, 2, - 2, 2, 2, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 116, 0, 120, - 0, 127, 0, 124, 128, 0, 131, 0, 2, 2, - 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 131, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 131, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 58, 132, 132, 132, 132, 132, 6, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 131, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, - 132, 132, 132, 132, 23, 132, 132, 132, 132, 132, - - 12, 13, 132, 15, 14, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 112, - 132, 132, 132, 132, 3, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 123, 132, 132, 132, 132, - - 132, 132, 132, 132, 132, 132, 132, 132, 26, 132, - 132, 132, 132, 132, 132, 132, 27, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 71, 123, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 70, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - - 132, 56, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 24, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 25, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 18, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 21, 22, 132, 59, 60, - - 132, 57, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 5, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 73, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 98, 97, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 28, 132, 132, 132, 132, - 61, 132, 132, 132, 132, 132, 132, 94, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 47, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 96, 132, 132, 132, 132, 132, - 132, 132, 4, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 91, 132, 132, 132, 132, 132, 132, 132, 106, - 92, 132, 17, 132, 132, 132, 132, 63, 64, 62, - 132, 132, 132, 132, 132, 132, 69, 132, 132, 132, - - 132, 132, 132, 132, 132, 132, 93, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 55, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 16, 132, 78, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 35, 36, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 68, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 72, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 111, 132, 132, 132, 132, 132, 132, 132, 132, 132, - - 132, 132, 132, 82, 132, 86, 132, 132, 132, 132, - 67, 132, 132, 104, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 85, 132, 132, - 132, 132, 37, 38, 132, 43, 87, 132, 99, 95, - 132, 31, 132, 89, 132, 132, 132, 132, 132, 7, - 132, 54, 103, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 74, 132, 132, 113, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 88, 30, 32, 132, 132, 132, 132, 132, 53, 132, - - 132, 132, 107, 132, 132, 132, 132, 132, 132, 51, - 132, 132, 132, 132, 132, 132, 132, 132, 132, 109, - 132, 132, 29, 132, 132, 132, 132, 132, 132, 11, - 132, 132, 132, 132, 132, 132, 10, 132, 132, 33, - 132, 108, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 81, 80, 132, 110, 105, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 39, 132, 132, - 132, 132, 132, 34, 132, 132, 132, 75, 77, 132, - 132, 132, 79, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 19, 132, 132, - - 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 102, 132, 132, 132, 132, 132, 132, 132, 20, 132, - 9, 132, 132, 100, 44, 132, 132, 132, 84, 132, - 65, 132, 132, 132, 46, 50, 45, 132, 40, 132, - 8, 132, 132, 83, 132, 132, 132, 49, 132, 41, - 132, 101, 132, 132, 76, 66, 48, 42, 132, 132, - 132, 132, 52, 132, 132, 132, 132, 90, 0 + 1, 1, 119, 119, 123, 123, 127, 127, 131, 131, + 1, 1, 138, 135, 1, 117, 117, 136, 2, 136, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 119, + 120, 120, 121, 136, 123, 124, 124, 125, 136, 130, + 127, 128, 128, 129, 136, 131, 132, 132, 133, 136, + 134, 118, 2, 122, 136, 134, 135, 0, 1, 2, + 2, 2, 2, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 119, 0, + 123, 0, 130, 0, 127, 131, 0, 134, 0, 2, + 2, 134, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 134, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 134, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 61, 135, 135, 135, 135, 135, 6, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 134, 135, 135, 135, + + 135, 26, 135, 135, 135, 135, 135, 12, 13, 135, + 15, 14, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 115, 135, 135, 135, + 135, 3, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 134, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + + 135, 135, 135, 135, 126, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 29, 135, 135, + 135, 135, 135, 135, 135, 30, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 74, + 126, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 73, 135, 135, 135, 135, 135, 135, 135, 135, 135, + + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 59, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 27, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 28, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 21, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + + 135, 135, 135, 135, 135, 135, 135, 135, 24, 25, + 135, 135, 135, 62, 63, 135, 60, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 5, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 76, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 101, 100, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 31, 135, 135, 135, 135, 135, 135, 64, 135, 135, + + 135, 135, 135, 135, 97, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 50, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 99, 135, 135, 135, 135, 135, 135, 135, 4, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 94, 135, 135, 135, 135, 135, 135, 135, 109, 95, + + 135, 20, 135, 135, 135, 135, 66, 67, 65, 135, + 135, 135, 135, 135, 135, 72, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 96, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 58, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 17, 135, 135, 135, 16, 135, 81, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 38, + 39, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 71, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + + 75, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 114, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 85, 135, 89, + 135, 135, 135, 135, 70, 135, 135, 107, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 88, 135, 135, 135, 135, 40, 41, 135, 46, + 90, 135, 102, 98, 135, 34, 135, 92, 135, 135, + 135, 135, 135, 7, 135, 57, 106, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + + 77, 135, 135, 116, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 91, 33, 35, 135, + 135, 135, 135, 135, 56, 135, 135, 135, 110, 18, + 19, 135, 135, 135, 135, 135, 135, 54, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 112, 135, 135, + 32, 135, 135, 135, 135, 135, 135, 11, 135, 135, + 135, 135, 135, 135, 10, 135, 135, 36, 135, 111, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 84, 83, 135, 113, 108, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 42, 135, 135, 135, 135, + + 135, 37, 135, 135, 135, 78, 80, 135, 135, 135, + 82, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 22, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 105, 135, + 135, 135, 135, 135, 135, 135, 23, 135, 9, 135, + 135, 103, 47, 135, 135, 135, 87, 135, 68, 135, + 135, 135, 49, 53, 48, 135, 43, 135, 8, 135, + 135, 86, 135, 135, 135, 52, 135, 44, 135, 104, + 135, 135, 79, 69, 51, 45, 135, 135, 135, 135, + 55, 135, 135, 135, 135, 93, 0 + } ; static yyconst flex_int32_t yy_ec[256] = @@ -554,585 +558,599 @@ static yyconst flex_int32_t yy_meta[40] = 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_int16_t yy_base[1284] = +static yyconst flex_int16_t yy_base[1312] = { 0, 0, 0, 37, 40, 44, 51, 63, 75, 56, 68, - 87, 108, 2440, 2426, 50, 2543, 2543, 2543, 129, 94, + 87, 108, 2492, 2415, 50, 2598, 2598, 2598, 129, 94, 70, 104, 122, 90, 92, 115, 126, 95, 84, 132, - 135, 138, 50, 142, 148, 141, 168, 158, 144, 2425, - 2543, 2543, 2543, 70, 2424, 2543, 2543, 2543, 42, 2396, - 2130, 2543, 2543, 2543, 184, 1549, 2543, 2543, 2543, 173, - 1424, 2543, 190, 2543, 200, 111, 1348, 204, 120, 0, - 215, 0, 0, 103, 170, 180, 152, 183, 185, 205, - 202, 188, 213, 197, 212, 216, 218, 219, 222, 221, - 225, 224, 233, 237, 242, 241, 239, 247, 249, 230, - - 251, 253, 256, 257, 259, 260, 263, 266, 269, 267, - 273, 270, 274, 49, 276, 278, 279, 1108, 301, 1033, - 289, 839, 307, 769, 482, 311, 229, 315, 319, 0, - 312, 289, 305, 314, 316, 317, 318, 325, 321, 327, - 339, 330, 323, 328, 334, 336, 341, 335, 337, 350, - 345, 351, 344, 354, 366, 367, 374, 355, 377, 373, - 384, 386, 375, 383, 371, 387, 385, 388, 390, 392, - 394, 395, 397, 398, 285, 401, 409, 400, 402, 411, - 425, 421, 410, 413, 426, 433, 430, 424, 427, 436, - 438, 442, 446, 437, 448, 449, 450, 451, 461, 455, - - 457, 459, 467, 465, 466, 468, 470, 471, 473, 474, - 480, 476, 478, 477, 487, 481, 498, 503, 492, 488, - 499, 504, 507, 510, 511, 509, 516, 522, 518, 520, - 523, 519, 521, 532, 529, 528, 531, 539, 537, 541, - 557, 535, 543, 542, 545, 546, 547, 570, 548, 562, - 566, 554, 544, 575, 585, 578, 579, 584, 587, 586, - 589, 590, 591, 594, 597, 599, 592, 602, 612, 609, - 613, 610, 619, 622, 614, 621, 624, 626, 625, 627, - 2543, 632, 629, 634, 638, 637, 2543, 639, 640, 641, - 643, 644, 656, 645, 653, 654, 657, 661, 664, 665, - - 673, 666, 670, 162, 679, 667, 683, 674, 672, 685, - 688, 690, 692, 694, 696, 702, 698, 701, 703, 705, - 706, 708, 712, 714, 713, 722, 724, 730, 729, 732, - 738, 715, 734, 737, 740, 742, 743, 744, 750, 747, - 749, 753, 754, 762, 751, 766, 767, 768, 759, 770, - 779, 776, 777, 778, 783, 784, 785, 786, 787, 789, - 797, 800, 798, 801, 810, 806, 811, 803, 812, 814, - 815, 817, 824, 818, 820, 822, 825, 827, 828, 831, - 834, 835, 838, 846, 848, 836, 842, 850, 852, 855, - 858, 863, 856, 864, 2543, 862, 868, 869, 870, 871, - - 2543, 2543, 414, 2543, 2543, 874, 875, 876, 884, 888, - 889, 885, 891, 893, 898, 901, 904, 899, 909, 912, - 882, 911, 913, 917, 919, 920, 922, 924, 925, 926, - 929, 931, 933, 935, 936, 942, 944, 950, 946, 2543, - 953, 947, 948, 955, 2543, 954, 957, 959, 960, 962, - 963, 969, 967, 970, 971, 979, 976, 977, 982, 984, - 986, 987, 997, 995, 991, 993, 1004, 1000, 1002, 1011, - 1003, 1008, 1005, 1013, 1014, 1038, 1015, 1017, 1016, 1021, - 1023, 1022, 1026, 1030, 1045, 1029, 1048, 1027, 1050, 1052, - 1055, 1056, 1040, 1061, 1064, 2543, 1072, 1066, 1058, 1065, - - 1074, 1073, 1075, 1076, 1080, 1083, 1084, 1090, 2543, 1086, - 1087, 1091, 1098, 1095, 1088, 1107, 2543, 1110, 1111, 1113, - 1099, 1106, 1117, 1118, 1119, 1121, 1122, 1129, 1125, 1130, - 1131, 1133, 1134, 1135, 1137, 347, 1141, 1147, 1145, 1149, - 1146, 1152, 1151, 1158, 1155, 1159, 1156, 1157, 2543, 136, - 1162, 1164, 1161, 1172, 1174, 1178, 1170, 1171, 1186, 1177, - 1180, 1188, 1189, 1190, 1193, 1194, 1196, 1197, 1200, 1202, - 1203, 1208, 1205, 1206, 1210, 1209, 1211, 1212, 1214, 2543, - 1230, 1219, 1221, 1222, 1231, 1239, 1235, 1237, 1245, 1243, - 1247, 1249, 1250, 1241, 1253, 1261, 1262, 1258, 1260, 1259, - - 1265, 2543, 1266, 1267, 1269, 1272, 1274, 1280, 1278, 1279, - 1284, 1290, 1281, 1292, 1295, 1297, 1299, 1285, 1301, 1303, - 1307, 1308, 1309, 1310, 2543, 1318, 1319, 1316, 1325, 1322, - 1323, 1324, 1328, 1329, 1330, 1337, 1334, 1336, 1333, 1338, - 1340, 1341, 1343, 1344, 2543, 1363, 1345, 1346, 1347, 1350, - 1355, 1365, 1357, 1359, 1370, 1372, 1374, 1377, 1378, 1380, - 1381, 1382, 1386, 1387, 1388, 1394, 1400, 1401, 2543, 1399, - 1396, 1403, 1412, 1406, 1409, 1413, 1414, 1421, 1415, 1417, - 1418, 1419, 1425, 1423, 1426, 1429, 1435, 1427, 1433, 1442, - 1443, 1448, 1445, 1449, 1457, 2543, 2543, 1458, 2543, 2543, - - 1455, 2543, 1456, 1460, 1462, 1464, 1465, 1466, 1468, 1471, - 1472, 1474, 1475, 1476, 1478, 1479, 2543, 1482, 1485, 1487, - 1483, 1490, 1492, 1493, 1501, 1507, 1494, 1504, 1505, 2543, - 1508, 1498, 1516, 1520, 1521, 1509, 1517, 1524, 1525, 1526, - 1533, 1530, 1528, 1534, 1536, 1538, 1539, 1540, 1547, 1541, - 1543, 1544, 1545, 1550, 1555, 1558, 2543, 2543, 1569, 1559, - 1566, 1570, 1571, 1572, 1578, 1577, 1579, 1582, 1584, 1586, - 1585, 1587, 1590, 1588, 1593, 2543, 1597, 1601, 1603, 1612, - 2543, 1598, 1594, 1608, 1613, 1614, 1616, 2543, 1617, 1618, - 1619, 1620, 1623, 1627, 1629, 1631, 1639, 1633, 1641, 1642, - - 1640, 1643, 1644, 1645, 1649, 1657, 1650, 1661, 1663, 1664, - 1665, 1666, 1668, 1670, 1672, 1678, 1674, 2543, 1680, 1676, - 1687, 1679, 1689, 1690, 1697, 1681, 1683, 1696, 1698, 1699, - 1702, 1705, 1706, 1708, 2543, 1710, 1714, 1713, 1709, 1711, - 1715, 1717, 2543, 1724, 1730, 1723, 1727, 1737, 1739, 1738, - 1726, 1740, 1732, 1742, 1745, 1749, 1750, 1757, 1759, 1761, - 1767, 1753, 1768, 1766, 1769, 1771, 1772, 1779, 1776, 1780, - 1777, 2543, 1781, 1786, 1788, 1790, 1794, 1795, 1782, 2543, - 2543, 1792, 2543, 1802, 1793, 1800, 1806, 2543, 2543, 2543, - 1805, 1812, 1808, 1816, 1818, 1822, 2543, 1823, 1813, 1826, - - 1810, 1824, 1828, 1829, 1832, 1834, 2543, 1837, 1843, 1835, - 1839, 1850, 1838, 1846, 1855, 1856, 1858, 1844, 1852, 1865, - 1866, 2543, 1859, 1867, 1869, 1870, 1874, 1875, 1873, 1876, - 1877, 1879, 2543, 1887, 2543, 1888, 1880, 1890, 1892, 1898, - 1901, 1896, 1902, 1903, 1904, 1910, 1911, 2543, 2543, 1912, - 1914, 1922, 1916, 1920, 1926, 1918, 1924, 1927, 1931, 1932, - 1935, 1934, 1936, 1937, 2543, 1939, 1940, 1944, 1946, 1941, - 1952, 1961, 1949, 1964, 1966, 1967, 1969, 1971, 2543, 1972, - 1974, 1975, 1979, 1980, 1976, 1981, 1987, 1990, 1983, 1992, - 2543, 1996, 1985, 1999, 1993, 2001, 1997, 2004, 2007, 2008, - - 2010, 2020, 2012, 2543, 2013, 2543, 2014, 2024, 2026, 2027, - 2543, 2029, 2030, 2543, 2031, 2032, 2039, 2041, 2040, 2047, - 2048, 2035, 2050, 2049, 2051, 2057, 2058, 2543, 2059, 2060, - 2062, 1945, 2543, 2543, 2066, 2543, 2543, 2072, 2543, 2543, - 2074, 2543, 2077, 2543, 2068, 2078, 2080, 2061, 2081, 2543, - 2085, 2543, 2543, 2082, 2088, 2089, 2092, 2093, 2095, 2097, - 2098, 2099, 2100, 2102, 2103, 2104, 2106, 2108, 2107, 2114, - 2115, 2117, 2118, 2125, 2543, 2116, 2135, 2543, 2138, 2132, - 2127, 2129, 2139, 2140, 2143, 2145, 2151, 2148, 2149, 2150, - 2543, 2543, 2543, 2152, 2155, 2154, 2159, 2160, 2543, 2165, - - 2161, 2167, 2543, 2175, 2169, 2173, 2179, 2181, 2177, 2543, - 2183, 2187, 2188, 2189, 2195, 2197, 2205, 2202, 2207, 2543, - 2203, 2199, 2543, 2209, 2210, 2213, 2215, 2216, 2218, 2543, - 2171, 2214, 2220, 2221, 2226, 2231, 2543, 2228, 2225, 2543, - 2240, 2543, 2229, 2241, 2232, 2244, 2246, 2247, 2248, 2255, - 2252, 2253, 2543, 2543, 2254, 2543, 2543, 2256, 2258, 2259, - 2263, 2261, 2267, 2268, 2269, 2270, 2271, 2543, 2273, 2274, - 2281, 2282, 2284, 2543, 2285, 2287, 2283, 2543, 2543, 2296, - 2289, 2297, 2543, 2298, 2300, 2302, 2304, 2311, 2305, 2307, - 2312, 2316, 2313, 2315, 2317, 2326, 2322, 2543, 2329, 2320, - - 2330, 2333, 2335, 2337, 2338, 2339, 2343, 2345, 2347, 2344, - 2543, 2348, 2349, 2361, 2365, 2367, 2353, 2369, 2543, 2370, - 2543, 2373, 2374, 2543, 2543, 2375, 2377, 2380, 2543, 2381, - 2543, 2378, 2388, 2351, 2543, 2543, 2543, 2390, 2543, 2391, - 2543, 2393, 2382, 2543, 2384, 2400, 2404, 2543, 2406, 2543, - 2408, 2543, 2401, 2409, 2543, 2543, 2543, 2543, 2411, 2394, - 2417, 2412, 2543, 2418, 2420, 2419, 2423, 2543, 2543, 2451, - 2458, 2465, 2472, 2479, 94, 2486, 2493, 2500, 2507, 2514, - 2521, 2528, 2535 + 135, 138, 50, 142, 148, 156, 169, 164, 144, 2409, + 2598, 2598, 2598, 70, 2174, 2598, 2598, 2598, 42, 1992, + 1799, 2598, 2598, 2598, 188, 1727, 2598, 2598, 2598, 182, + 1579, 2598, 197, 2598, 201, 111, 1377, 207, 120, 0, + 218, 0, 0, 103, 158, 165, 152, 184, 194, 203, + 204, 146, 216, 200, 205, 213, 219, 220, 136, 221, + 227, 223, 234, 238, 228, 236, 240, 244, 248, 226, + + 250, 249, 255, 252, 256, 258, 257, 262, 268, 265, + 270, 266, 274, 275, 49, 278, 281, 279, 1248, 294, + 1100, 298, 895, 309, 739, 397, 296, 357, 313, 317, + 0, 310, 294, 319, 312, 315, 316, 318, 325, 321, + 329, 339, 332, 322, 330, 328, 336, 337, 344, 334, + 350, 345, 347, 346, 354, 361, 367, 369, 355, 377, + 373, 379, 385, 381, 383, 371, 384, 382, 386, 387, + 392, 393, 395, 396, 405, 399, 401, 406, 416, 407, + 408, 423, 425, 427, 410, 421, 424, 433, 430, 434, + 436, 431, 442, 437, 443, 447, 450, 448, 452, 453, + + 460, 457, 458, 461, 469, 467, 468, 470, 282, 472, + 474, 476, 480, 478, 477, 479, 484, 482, 495, 501, + 502, 490, 503, 504, 509, 506, 514, 512, 516, 522, + 519, 520, 521, 523, 526, 529, 533, 530, 531, 534, + 532, 540, 541, 560, 542, 544, 548, 549, 550, 551, + 561, 558, 566, 567, 564, 573, 580, 591, 570, 577, + 583, 586, 483, 592, 594, 595, 597, 598, 603, 601, + 602, 615, 614, 613, 604, 621, 628, 616, 624, 626, + 625, 627, 631, 2598, 634, 629, 636, 640, 639, 2598, + 641, 642, 643, 647, 645, 659, 646, 655, 656, 658, + + 665, 666, 667, 669, 670, 679, 671, 672, 676, 687, + 680, 678, 682, 692, 694, 698, 696, 699, 700, 702, + 709, 707, 708, 710, 713, 717, 720, 721, 722, 714, + 731, 734, 740, 738, 742, 744, 724, 743, 746, 752, + 749, 751, 754, 760, 757, 758, 761, 765, 768, 767, + 775, 777, 779, 770, 780, 787, 786, 788, 790, 789, + 795, 796, 797, 798, 799, 812, 805, 806, 814, 821, + 822, 823, 808, 809, 818, 827, 819, 829, 830, 837, + 833, 835, 839, 841, 840, 842, 844, 848, 849, 851, + 859, 860, 850, 862, 863, 853, 866, 870, 874, 875, + + 876, 2598, 884, 882, 880, 881, 887, 2598, 2598, 883, + 2598, 2598, 888, 893, 890, 906, 907, 903, 892, 891, + 912, 905, 913, 917, 921, 922, 924, 928, 930, 929, + 931, 935, 933, 934, 941, 942, 938, 946, 947, 943, + 952, 953, 959, 956, 967, 963, 2598, 965, 966, 969, + 972, 2598, 971, 973, 974, 977, 976, 984, 979, 978, + 981, 993, 986, 989, 1005, 1004, 990, 759, 1002, 991, + 1010, 1018, 1014, 1001, 1015, 1021, 1020, 1023, 1025, 1026, + 1027, 1029, 1030, 1032, 1055, 1033, 1034, 1035, 1038, 1036, + 1039, 1043, 1047, 1061, 1051, 1063, 1067, 1044, 1065, 1068, + + 1072, 1073, 1075, 1078, 2598, 1085, 1081, 1083, 1088, 1089, + 1090, 1091, 1093, 1095, 1097, 1096, 1108, 2598, 1104, 1107, + 1109, 1113, 1116, 1120, 1122, 2598, 1128, 1129, 1131, 1124, + 1106, 1132, 1136, 1137, 1138, 1140, 1143, 1145, 1147, 1148, + 1149, 1151, 1153, 1154, 1155, 1157, 1156, 1170, 1176, 1162, + 1175, 1161, 1168, 1172, 1183, 1178, 1181, 1185, 1186, 2598, + 181, 1187, 1188, 1189, 1197, 1198, 1194, 1191, 1200, 1202, + 1195, 1206, 1213, 1208, 1215, 1217, 1216, 1218, 1219, 1225, + 1227, 1228, 1220, 1230, 1231, 1233, 1234, 1239, 1236, 1237, + 2598, 1250, 1241, 1253, 1244, 1257, 1268, 1247, 1265, 1271, + + 1258, 1270, 1272, 1278, 1269, 1273, 1281, 1285, 1282, 1284, + 1286, 1290, 2598, 1289, 1292, 1294, 1296, 1297, 1298, 1299, + 1303, 1309, 1314, 1315, 1319, 1311, 1321, 1323, 1326, 1333, + 1305, 1329, 1327, 1336, 1337, 1338, 1339, 2598, 1345, 1347, + 1343, 1354, 1350, 1351, 1352, 1357, 1353, 1358, 1365, 1362, + 1364, 1361, 1366, 1368, 1369, 1371, 1372, 2598, 1391, 1374, + 1375, 1378, 1380, 1376, 1397, 1385, 1392, 1387, 1399, 1403, + 1405, 1409, 1407, 1410, 1411, 1415, 1413, 1417, 1428, 1429, + 1430, 2598, 1427, 1433, 1416, 1441, 1438, 1420, 1442, 1443, + 1450, 1444, 1446, 1448, 1451, 1452, 1453, 1454, 1455, 1457, + + 1460, 1458, 1459, 1472, 1476, 1473, 1477, 1484, 2598, 2598, + 1480, 1481, 1488, 2598, 2598, 1487, 2598, 1490, 1494, 1489, + 1491, 1496, 1498, 1500, 1502, 1505, 1503, 1507, 1508, 1509, + 1510, 2598, 1511, 1517, 1519, 1514, 1521, 1523, 1524, 1527, + 1535, 1533, 1536, 1538, 2598, 1537, 1539, 1545, 1551, 1554, + 1540, 1547, 1552, 1549, 1556, 1560, 1563, 1562, 1565, 1566, + 1569, 1570, 1571, 1578, 1574, 1575, 1576, 1577, 1581, 1587, + 1589, 2598, 2598, 1591, 1598, 1593, 1600, 1603, 1604, 1611, + 1608, 1609, 1610, 1614, 1616, 1617, 1618, 1620, 1622, 1625, + 2598, 1631, 1633, 1634, 1644, 1624, 1645, 2598, 1627, 1646, + + 1647, 1641, 1650, 1649, 2598, 1651, 1652, 1653, 1657, 1663, + 1655, 1661, 1670, 1673, 1669, 1674, 1675, 1681, 1677, 1678, + 1682, 1680, 1691, 1692, 1694, 1700, 1697, 1698, 1699, 1703, + 1705, 1707, 1713, 1709, 2598, 1715, 1711, 1721, 1714, 1723, + 1724, 1731, 1728, 1730, 1732, 1733, 1720, 1735, 1736, 1737, + 1743, 2598, 1745, 1744, 1746, 1748, 1756, 1749, 1760, 2598, + 1759, 1766, 1758, 1765, 1768, 1777, 1770, 1769, 1771, 1773, + 1781, 1784, 1780, 1795, 1783, 1785, 1802, 1801, 1808, 1810, + 1806, 1814, 1811, 1812, 1813, 1790, 1822, 1798, 1824, 1821, + 2598, 1826, 1828, 1831, 1832, 1834, 1835, 1836, 2598, 2598, + + 1837, 2598, 1842, 1840, 1844, 1846, 2598, 2598, 2598, 1847, + 1856, 1848, 1859, 1850, 1863, 2598, 1857, 1866, 1867, 1869, + 1870, 1871, 1872, 1873, 1874, 2598, 1875, 1876, 1877, 1887, + 1892, 1879, 1893, 1897, 1901, 1902, 1885, 1889, 1913, 1910, + 2598, 1881, 1904, 1912, 1914, 1916, 1920, 1919, 1917, 1927, + 2598, 1921, 1923, 1924, 2598, 1930, 2598, 1933, 1935, 1937, + 1942, 1938, 1945, 1948, 1949, 1950, 1951, 1957, 1954, 2598, + 2598, 1952, 1959, 1965, 1963, 1968, 1970, 1969, 1971, 1972, + 1977, 1978, 1980, 1979, 1981, 1982, 2598, 1986, 1987, 1988, + 1991, 1994, 2006, 2008, 1997, 2012, 2014, 2009, 2016, 2018, + + 2598, 2019, 2021, 2022, 2026, 2027, 1983, 2029, 2030, 2034, + 2023, 2036, 2598, 2038, 2039, 2043, 2040, 2048, 2047, 2049, + 2050, 2051, 2054, 2055, 2057, 2063, 2070, 2598, 2059, 2598, + 2067, 2060, 2073, 2077, 2598, 2075, 2080, 2598, 2081, 2082, + 2089, 2091, 2093, 2098, 2094, 2083, 2100, 2085, 2101, 2107, + 2108, 2598, 2109, 2110, 2111, 2116, 2598, 2598, 2112, 2598, + 2598, 2121, 2598, 2598, 2123, 2598, 2127, 2598, 2129, 2130, + 2117, 2128, 2132, 2598, 2135, 2598, 2598, 2136, 2138, 2139, + 2143, 2146, 2148, 2149, 2151, 2152, 2153, 2154, 2155, 2157, + 2158, 2159, 2160, 2163, 2162, 2168, 2170, 2172, 2173, 2184, + + 2598, 2171, 2190, 2598, 2193, 2187, 2179, 2181, 2195, 2198, + 2197, 2201, 2207, 2203, 2204, 2205, 2598, 2598, 2598, 2206, + 2208, 2210, 2212, 2215, 2598, 2220, 2217, 2222, 2598, 2598, + 2598, 2228, 2224, 2230, 2232, 2235, 2234, 2598, 2238, 2243, + 2244, 2241, 2251, 2255, 2252, 2258, 2260, 2598, 2261, 2262, + 2598, 2264, 2263, 2268, 2269, 2270, 2272, 2598, 2265, 2273, + 2280, 2282, 2275, 2285, 2598, 2286, 2287, 2598, 2289, 2598, + 2293, 2296, 2298, 2303, 2305, 2294, 2231, 2311, 2308, 2310, + 2598, 2598, 2309, 2598, 2598, 2299, 2316, 2317, 2319, 2321, + 2322, 2323, 2325, 2326, 2328, 2598, 2329, 2331, 2334, 2338, + + 2330, 2598, 2341, 2340, 2344, 2598, 2598, 2353, 2345, 2347, + 2598, 2354, 2355, 2357, 2360, 2362, 2363, 2365, 2366, 2370, + 2368, 2367, 2371, 2380, 2377, 2598, 2384, 2374, 2386, 2388, + 2392, 2395, 2389, 2396, 2398, 2399, 2403, 2400, 2598, 2404, + 2405, 2407, 2413, 2421, 2417, 2424, 2598, 2425, 2598, 2428, + 2429, 2598, 2598, 2430, 2432, 2435, 2598, 2436, 2598, 2433, + 2443, 2444, 2598, 2598, 2598, 2446, 2598, 2447, 2598, 2450, + 2437, 2598, 2439, 2455, 2459, 2598, 2461, 2598, 2463, 2598, + 2456, 2464, 2598, 2598, 2598, 2598, 2466, 2467, 2472, 2469, + 2598, 2473, 2475, 2474, 2477, 2598, 2598, 2506, 2513, 2520, + + 2527, 2534, 94, 2541, 2548, 2555, 2562, 2569, 2576, 2583, + 2590 } ; -static yyconst flex_int16_t yy_def[1284] = +static yyconst flex_int16_t yy_def[1312] = { 0, - 1269, 1, 1270, 1270, 1271, 1271, 1272, 1272, 1273, 1273, - 1274, 1274, 1269, 1275, 1269, 1269, 1269, 1269, 1276, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1277, - 1269, 1269, 1269, 1277, 1278, 1269, 1269, 1269, 1278, 1279, - 1269, 1269, 1269, 1269, 1279, 1280, 1269, 1269, 1269, 1280, - 1281, 1269, 1282, 1269, 1281, 1281, 1275, 1275, 1269, 1283, - 1276, 1283, 1276, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1277, 1277, 1278, - 1278, 1279, 1279, 1269, 1280, 1280, 1281, 1281, 1282, 1282, - 1281, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1281, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1281, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1269, 1275, 1275, 1275, 1275, 1275, 1269, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1281, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1281, - 1275, 1275, 1275, 1275, 1269, 1275, 1275, 1275, 1275, 1275, - - 1269, 1269, 1275, 1269, 1269, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1269, - 1275, 1275, 1275, 1275, 1269, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1281, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1269, 1275, 1275, 1275, 1275, - - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1269, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1269, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1269, 1281, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1269, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - - 1275, 1269, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1269, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1269, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1269, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1269, 1269, 1275, 1269, 1269, - - 1275, 1269, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1269, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1269, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1269, 1269, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1269, 1275, 1275, 1275, 1275, - 1269, 1275, 1275, 1275, 1275, 1275, 1275, 1269, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1269, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1269, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1269, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1269, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1269, - 1269, 1275, 1269, 1275, 1275, 1275, 1275, 1269, 1269, 1269, - 1275, 1275, 1275, 1275, 1275, 1275, 1269, 1275, 1275, 1275, - - 1275, 1275, 1275, 1275, 1275, 1275, 1269, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1269, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1269, 1275, 1269, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1269, 1269, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1269, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1269, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1269, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - - 1275, 1275, 1275, 1269, 1275, 1269, 1275, 1275, 1275, 1275, - 1269, 1275, 1275, 1269, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1269, 1275, 1275, - 1275, 1275, 1269, 1269, 1275, 1269, 1269, 1275, 1269, 1269, - 1275, 1269, 1275, 1269, 1275, 1275, 1275, 1275, 1275, 1269, - 1275, 1269, 1269, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1269, 1275, 1275, 1269, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1269, 1269, 1269, 1275, 1275, 1275, 1275, 1275, 1269, 1275, - - 1275, 1275, 1269, 1275, 1275, 1275, 1275, 1275, 1275, 1269, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1269, - 1275, 1275, 1269, 1275, 1275, 1275, 1275, 1275, 1275, 1269, - 1275, 1275, 1275, 1275, 1275, 1275, 1269, 1275, 1275, 1269, - 1275, 1269, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1269, 1269, 1275, 1269, 1269, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1269, 1275, 1275, - 1275, 1275, 1275, 1269, 1275, 1275, 1275, 1269, 1269, 1275, - 1275, 1275, 1269, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1269, 1275, 1275, - - 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, - 1269, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1269, 1275, - 1269, 1275, 1275, 1269, 1269, 1275, 1275, 1275, 1269, 1275, - 1269, 1275, 1275, 1275, 1269, 1269, 1269, 1275, 1269, 1275, - 1269, 1275, 1275, 1269, 1275, 1275, 1275, 1269, 1275, 1269, - 1275, 1269, 1275, 1275, 1269, 1269, 1269, 1269, 1275, 1275, - 1275, 1275, 1269, 1275, 1275, 1275, 1275, 1269, 0, 1269, - 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, - 1269, 1269, 1269 + 1297, 1, 1298, 1298, 1299, 1299, 1300, 1300, 1301, 1301, + 1302, 1302, 1297, 1303, 1297, 1297, 1297, 1297, 1304, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1305, + 1297, 1297, 1297, 1305, 1306, 1297, 1297, 1297, 1306, 1307, + 1297, 1297, 1297, 1297, 1307, 1308, 1297, 1297, 1297, 1308, + 1309, 1297, 1310, 1297, 1309, 1309, 1303, 1303, 1297, 1311, + 1304, 1311, 1304, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1305, 1305, + 1306, 1306, 1307, 1307, 1297, 1308, 1308, 1309, 1309, 1310, + 1310, 1309, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1309, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1309, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1297, 1303, 1303, 1303, 1303, 1303, 1297, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1309, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1309, 1303, 1303, 1303, + + 1303, 1297, 1303, 1303, 1303, 1303, 1303, 1297, 1297, 1303, + 1297, 1297, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1297, 1303, 1303, 1303, + 1303, 1297, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1309, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + + 1303, 1303, 1303, 1303, 1297, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1297, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1297, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1297, + 1309, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1297, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1297, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1297, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1297, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1297, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1297, 1297, + 1303, 1303, 1303, 1297, 1297, 1303, 1297, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1297, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1297, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1297, 1297, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1297, 1303, 1303, 1303, 1303, 1303, 1303, 1297, 1303, 1303, + + 1303, 1303, 1303, 1303, 1297, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1297, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1297, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1297, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1297, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1297, 1297, + + 1303, 1297, 1303, 1303, 1303, 1303, 1297, 1297, 1297, 1303, + 1303, 1303, 1303, 1303, 1303, 1297, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1297, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1297, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1297, 1303, 1303, 1303, 1297, 1303, 1297, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1297, + 1297, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1297, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + + 1297, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1297, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1297, 1303, 1297, + 1303, 1303, 1303, 1303, 1297, 1303, 1303, 1297, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1297, 1303, 1303, 1303, 1303, 1297, 1297, 1303, 1297, + 1297, 1303, 1297, 1297, 1303, 1297, 1303, 1297, 1303, 1303, + 1303, 1303, 1303, 1297, 1303, 1297, 1297, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + + 1297, 1303, 1303, 1297, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1297, 1297, 1297, 1303, + 1303, 1303, 1303, 1303, 1297, 1303, 1303, 1303, 1297, 1297, + 1297, 1303, 1303, 1303, 1303, 1303, 1303, 1297, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1297, 1303, 1303, + 1297, 1303, 1303, 1303, 1303, 1303, 1303, 1297, 1303, 1303, + 1303, 1303, 1303, 1303, 1297, 1303, 1303, 1297, 1303, 1297, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1297, 1297, 1303, 1297, 1297, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1297, 1303, 1303, 1303, 1303, + + 1303, 1297, 1303, 1303, 1303, 1297, 1297, 1303, 1303, 1303, + 1297, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1297, 1303, 1303, 1303, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1297, 1303, + 1303, 1303, 1303, 1303, 1303, 1303, 1297, 1303, 1297, 1303, + 1303, 1297, 1297, 1303, 1303, 1303, 1297, 1303, 1297, 1303, + 1303, 1303, 1297, 1297, 1297, 1303, 1297, 1303, 1297, 1303, + 1303, 1297, 1303, 1303, 1303, 1297, 1303, 1297, 1303, 1297, + 1303, 1303, 1297, 1297, 1297, 1297, 1303, 1303, 1303, 1303, + 1297, 1303, 1303, 1303, 1303, 1297, 0, 1297, 1297, 1297, + + 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, + 1297 } ; -static yyconst flex_int16_t yy_nxt[2583] = +static yyconst flex_int16_t yy_nxt[2638] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 18, 20, 21, 14, 22, 23, 24, 25, 14, 26, 27, 28, 29, 30, 31, 32, 33, 34, 14, 35, 36, 37, 38, 39, 14, 14, 14, 14, 41, - 42, 43, 41, 42, 43, 120, 46, 47, 120, 44, + 42, 43, 41, 42, 43, 121, 46, 47, 121, 44, 48, 69, 44, 46, 47, 70, 49, 48, 57, 58, 59, 68, 68, 49, 51, 52, 53, 54, 60, 18, - 57, 58, 59, 118, 118, 55, 51, 52, 53, 54, - 60, 18, 68, 100, 179, 74, 75, 55, 15, 16, + 57, 58, 59, 119, 119, 55, 51, 52, 53, 54, + 60, 18, 68, 100, 181, 74, 75, 55, 15, 16, 17, 62, 63, 64, 67, 67, 68, 67, 67, 65, 67, 93, 68, 76, 68, 67, 84, 68, 66, 15, - 16, 17, 62, 63, 64, 68, 68, 77, 132, 86, - 65, 69, 92, 128, 78, 70, 85, 68, 87, 66, - 72, 79, 72, 72, 68, 72, 88, 131, 68, 80, - 72, 73, 89, 81, 68, 90, 82, 68, 128, 83, - 68, 97, 91, 68, 68, 98, 68, 116, 108, 94, - 68, 117, 95, 101, 68, 105, 96, 135, 109, 102, - 68, 99, 103, 110, 68, 106, 125, 125, 107, 104, - 68, 111, 68, 112, 114, 122, 133, 122, 122, 115, - 122, 72, 68, 72, 72, 68, 72, 68, 113, 379, - - 68, 127, 130, 127, 127, 67, 127, 67, 67, 68, - 67, 137, 134, 136, 68, 67, 72, 68, 72, 72, - 141, 72, 140, 143, 68, 68, 72, 73, 68, 138, - 68, 68, 139, 68, 68, 147, 68, 68, 142, 148, - 150, 128, 68, 151, 144, 68, 145, 149, 146, 68, - 154, 68, 156, 68, 68, 153, 157, 152, 158, 68, - 159, 68, 163, 68, 160, 68, 161, 164, 68, 68, - 155, 68, 68, 166, 162, 68, 173, 167, 68, 68, - 174, 68, 68, 165, 169, 68, 68, 170, 68, 168, - 68, 68, 120, 180, 171, 120, 172, 68, 177, 234, - - 175, 68, 181, 176, 118, 118, 184, 178, 122, 182, - 122, 122, 185, 122, 125, 125, 127, 68, 127, 127, - 72, 127, 72, 72, 128, 72, 68, 183, 68, 68, - 68, 130, 190, 68, 192, 68, 187, 68, 191, 68, - 68, 186, 68, 198, 188, 200, 68, 68, 68, 68, - 189, 68, 202, 68, 199, 193, 68, 68, 203, 68, - 194, 204, 68, 68, 205, 195, 68, 68, 209, 201, - 621, 196, 197, 212, 206, 208, 210, 207, 68, 68, - 213, 214, 211, 68, 217, 68, 68, 68, 216, 68, - 218, 219, 215, 220, 221, 68, 68, 68, 68, 68, - - 68, 222, 68, 223, 68, 224, 68, 68, 226, 68, - 68, 229, 68, 68, 68, 238, 236, 227, 239, 225, - 235, 68, 128, 68, 228, 68, 68, 231, 232, 230, - 233, 237, 241, 68, 244, 242, 68, 68, 68, 68, - 247, 240, 68, 481, 245, 68, 246, 248, 68, 68, - 68, 249, 243, 252, 68, 253, 251, 250, 68, 254, - 68, 68, 68, 68, 257, 255, 258, 68, 260, 68, - 262, 68, 259, 68, 264, 256, 263, 68, 68, 68, - 68, 261, 68, 68, 269, 68, 68, 272, 68, 68, - 68, 273, 68, 68, 126, 268, 266, 265, 271, 68, - - 68, 267, 274, 270, 68, 278, 275, 282, 277, 276, - 68, 68, 279, 280, 281, 68, 68, 283, 287, 68, - 284, 68, 68, 68, 289, 286, 285, 288, 68, 292, - 68, 68, 68, 68, 68, 68, 290, 294, 295, 298, - 68, 68, 297, 68, 68, 296, 299, 68, 291, 68, - 293, 68, 303, 68, 128, 68, 68, 68, 68, 68, - 68, 300, 313, 301, 314, 302, 68, 305, 304, 68, - 324, 306, 307, 317, 68, 315, 316, 319, 68, 318, - 320, 308, 68, 309, 310, 311, 323, 68, 312, 321, - 68, 68, 325, 322, 326, 327, 68, 68, 68, 68, - - 332, 68, 68, 68, 68, 333, 68, 329, 340, 68, - 328, 68, 330, 331, 68, 336, 339, 335, 338, 342, - 334, 68, 68, 341, 68, 68, 68, 343, 337, 347, - 344, 68, 346, 68, 68, 345, 68, 68, 68, 68, - 353, 68, 349, 351, 68, 354, 68, 348, 350, 68, - 68, 68, 68, 68, 356, 68, 68, 68, 352, 357, - 362, 358, 355, 364, 363, 68, 68, 361, 68, 68, - 367, 359, 360, 68, 369, 365, 68, 68, 68, 68, - 375, 370, 68, 378, 68, 68, 68, 366, 368, 371, - 376, 68, 380, 374, 381, 68, 373, 68, 377, 372, - - 68, 383, 68, 384, 68, 386, 68, 382, 128, 391, - 68, 387, 390, 68, 68, 68, 395, 68, 68, 385, - 68, 389, 392, 388, 68, 68, 68, 68, 394, 399, - 396, 393, 397, 401, 68, 402, 68, 403, 400, 398, - 404, 68, 68, 405, 68, 406, 68, 410, 407, 68, - 68, 408, 68, 409, 68, 68, 68, 414, 411, 68, - 412, 68, 68, 68, 415, 68, 68, 420, 417, 421, - 124, 68, 422, 418, 68, 416, 413, 419, 68, 68, - 68, 423, 68, 424, 427, 426, 429, 428, 68, 68, - 68, 68, 431, 432, 430, 68, 68, 68, 68, 68, - - 433, 68, 437, 436, 439, 425, 438, 441, 440, 68, - 68, 435, 68, 68, 434, 68, 443, 444, 68, 442, - 446, 445, 68, 68, 68, 447, 68, 68, 449, 68, - 68, 453, 68, 455, 68, 448, 68, 68, 456, 68, - 68, 450, 457, 68, 452, 451, 68, 68, 68, 454, - 68, 123, 462, 461, 68, 458, 460, 463, 68, 459, - 68, 467, 68, 464, 68, 465, 466, 128, 68, 476, - 68, 468, 470, 471, 68, 68, 68, 474, 469, 472, - 68, 68, 68, 68, 477, 475, 68, 68, 68, 473, - 479, 485, 484, 483, 68, 482, 68, 68, 480, 478, - - 68, 68, 486, 68, 487, 68, 492, 488, 495, 496, - 68, 68, 489, 68, 502, 493, 68, 498, 490, 491, - 497, 68, 500, 68, 68, 68, 499, 501, 494, 68, - 505, 68, 68, 504, 68, 509, 68, 68, 68, 508, - 510, 68, 503, 68, 511, 68, 506, 68, 68, 512, - 507, 513, 515, 517, 68, 516, 68, 519, 68, 68, - 68, 523, 68, 514, 518, 68, 68, 68, 521, 68, - 524, 68, 68, 522, 68, 68, 529, 520, 525, 68, - 528, 68, 68, 68, 531, 533, 536, 526, 68, 68, - 527, 68, 537, 530, 68, 532, 68, 535, 68, 68, - - 542, 540, 534, 68, 543, 68, 539, 68, 538, 68, - 544, 547, 68, 549, 68, 68, 68, 68, 546, 541, - 68, 545, 550, 128, 552, 68, 68, 68, 68, 68, - 551, 561, 548, 68, 68, 68, 553, 568, 68, 68, - 555, 68, 68, 563, 567, 121, 572, 564, 566, 554, - 68, 574, 68, 556, 562, 557, 565, 68, 569, 558, - 68, 559, 68, 575, 68, 570, 560, 68, 68, 576, - 68, 579, 580, 68, 573, 577, 68, 68, 68, 582, - 581, 583, 578, 571, 68, 68, 68, 68, 68, 584, - 585, 586, 68, 589, 587, 68, 68, 593, 68, 68, - - 68, 599, 68, 68, 595, 592, 588, 68, 596, 591, - 68, 68, 590, 594, 600, 597, 598, 601, 68, 68, - 119, 602, 68, 68, 603, 68, 606, 604, 605, 68, - 68, 68, 608, 68, 68, 609, 610, 68, 607, 611, - 612, 68, 68, 68, 613, 68, 68, 68, 622, 68, - 617, 618, 620, 68, 623, 614, 616, 68, 68, 68, - 625, 68, 615, 68, 68, 619, 629, 68, 68, 68, - 68, 68, 624, 68, 68, 628, 68, 626, 627, 637, - 631, 638, 68, 68, 68, 630, 68, 632, 634, 68, - 68, 635, 68, 636, 633, 639, 640, 641, 68, 645, - - 68, 68, 68, 642, 643, 68, 68, 644, 68, 68, - 648, 647, 68, 650, 68, 68, 652, 68, 68, 646, - 68, 68, 68, 68, 68, 649, 68, 659, 651, 653, - 654, 68, 655, 68, 68, 662, 656, 663, 660, 657, - 658, 665, 68, 68, 661, 664, 668, 68, 667, 68, - 669, 68, 672, 68, 666, 68, 673, 68, 671, 68, - 670, 68, 68, 676, 674, 68, 675, 677, 679, 680, - 68, 68, 68, 68, 68, 681, 682, 68, 68, 68, - 683, 68, 688, 678, 68, 684, 68, 685, 687, 686, - 68, 68, 68, 68, 689, 696, 68, 68, 691, 690, - - 693, 697, 68, 699, 68, 692, 700, 68, 694, 68, - 702, 68, 698, 68, 701, 68, 695, 703, 704, 68, - 68, 68, 68, 705, 706, 710, 711, 708, 68, 709, - 68, 68, 713, 712, 68, 68, 68, 68, 707, 717, - 68, 68, 68, 714, 720, 68, 68, 716, 68, 68, - 68, 724, 68, 68, 715, 68, 68, 68, 68, 68, - 68, 718, 68, 723, 733, 719, 721, 68, 722, 68, - 729, 68, 725, 727, 730, 68, 732, 68, 726, 728, - 734, 736, 68, 731, 68, 738, 68, 735, 737, 68, - 68, 741, 68, 68, 68, 743, 742, 739, 68, 68, - - 68, 750, 745, 740, 747, 749, 68, 751, 68, 746, - 744, 68, 68, 68, 752, 68, 753, 758, 68, 756, - 748, 68, 754, 757, 68, 68, 68, 68, 762, 68, - 68, 68, 761, 68, 755, 68, 128, 68, 68, 68, - 759, 68, 770, 772, 760, 68, 763, 68, 764, 765, - 766, 767, 771, 769, 68, 68, 768, 68, 773, 776, - 68, 68, 777, 774, 779, 780, 781, 68, 68, 68, - 68, 782, 68, 783, 68, 775, 68, 68, 68, 788, - 68, 778, 786, 68, 68, 790, 68, 68, 68, 784, - 68, 68, 793, 787, 68, 68, 795, 68, 792, 68, - - 798, 785, 68, 789, 68, 68, 68, 802, 791, 794, - 68, 797, 796, 68, 804, 799, 68, 68, 803, 68, - 68, 68, 800, 807, 801, 808, 805, 811, 68, 68, - 806, 810, 68, 68, 812, 809, 68, 68, 68, 813, - 68, 815, 68, 817, 818, 68, 68, 819, 68, 814, - 68, 68, 68, 68, 826, 68, 68, 68, 820, 68, - 816, 126, 68, 824, 823, 825, 821, 68, 822, 831, - 68, 68, 830, 827, 836, 828, 832, 829, 68, 833, - 835, 68, 68, 68, 68, 842, 834, 837, 843, 68, - 68, 68, 839, 841, 68, 840, 68, 68, 68, 68, - - 68, 838, 68, 850, 853, 68, 68, 845, 854, 68, - 68, 844, 847, 68, 846, 68, 851, 849, 858, 859, - 68, 855, 848, 852, 68, 68, 68, 856, 68, 68, - 68, 68, 68, 857, 865, 68, 866, 867, 860, 68, - 868, 68, 862, 68, 861, 68, 863, 876, 869, 864, - 872, 68, 68, 68, 68, 68, 68, 68, 871, 873, - 880, 68, 68, 879, 870, 874, 875, 877, 881, 68, - 884, 882, 883, 68, 878, 68, 68, 68, 68, 888, - 68, 889, 68, 890, 68, 891, 68, 893, 68, 892, - 68, 68, 68, 68, 895, 68, 886, 885, 887, 68, - - 897, 68, 68, 898, 899, 900, 894, 901, 68, 68, - 68, 68, 902, 907, 68, 903, 896, 68, 68, 909, - 68, 68, 68, 68, 915, 68, 68, 68, 904, 68, - 905, 911, 906, 912, 913, 68, 68, 919, 68, 68, - 910, 918, 68, 908, 68, 917, 921, 914, 922, 68, - 68, 68, 68, 916, 68, 920, 923, 68, 925, 924, - 928, 68, 68, 927, 932, 68, 929, 926, 934, 68, - 933, 68, 935, 68, 936, 938, 931, 937, 68, 68, - 68, 68, 930, 68, 68, 940, 943, 945, 68, 68, - 939, 68, 68, 68, 68, 941, 947, 948, 68, 949, - - 68, 946, 68, 953, 68, 68, 68, 68, 950, 942, - 944, 951, 68, 952, 68, 955, 954, 68, 68, 961, - 68, 958, 68, 957, 68, 68, 956, 959, 68, 963, - 68, 960, 964, 965, 68, 68, 68, 962, 68, 968, - 68, 68, 966, 969, 68, 967, 68, 68, 970, 68, - 68, 68, 971, 972, 975, 68, 68, 976, 68, 973, - 978, 979, 68, 981, 68, 977, 974, 68, 68, 982, - 68, 68, 987, 983, 985, 984, 980, 68, 68, 68, - 991, 68, 68, 988, 986, 68, 68, 68, 68, 68, - 989, 68, 68, 990, 992, 993, 995, 996, 994, 68, - - 68, 997, 68, 1004, 68, 1000, 1001, 999, 68, 998, - 68, 1003, 1006, 68, 68, 68, 68, 1002, 1008, 1005, - 1009, 1011, 68, 68, 68, 1014, 68, 1007, 68, 1010, - 68, 1012, 68, 1013, 68, 1015, 68, 1017, 68, 68, - 1016, 1020, 1018, 68, 68, 1019, 68, 68, 68, 68, - 1028, 68, 68, 68, 1032, 1029, 68, 68, 68, 1089, - 1026, 68, 1022, 1033, 68, 1021, 1024, 1025, 1023, 1030, - 1027, 1031, 1034, 68, 1035, 1036, 68, 1037, 68, 68, - 1039, 68, 1040, 68, 68, 1042, 68, 68, 68, 1041, - 1044, 68, 68, 68, 1046, 68, 1047, 68, 1038, 68, - - 1048, 1050, 68, 1052, 68, 68, 1043, 1053, 68, 68, - 1045, 68, 1055, 68, 1051, 1049, 68, 1056, 1057, 68, - 68, 1059, 68, 1054, 68, 68, 68, 1063, 1064, 1061, - 1058, 1062, 68, 1068, 1060, 1066, 68, 1067, 68, 68, - 1069, 68, 68, 68, 68, 1065, 1073, 68, 1070, 1074, - 1075, 68, 68, 68, 1072, 1077, 1071, 1076, 1078, 68, - 68, 68, 68, 68, 1084, 1079, 1081, 1080, 1083, 68, - 68, 68, 68, 68, 68, 1094, 1085, 1087, 68, 1090, - 68, 1082, 1088, 1091, 68, 1092, 68, 1086, 1093, 68, - 68, 1095, 68, 68, 68, 1097, 1099, 68, 1098, 1100, - - 68, 68, 1101, 1103, 68, 68, 1102, 68, 1096, 68, - 68, 68, 68, 1110, 68, 68, 68, 1104, 68, 68, - 68, 1106, 1107, 1108, 1111, 1105, 68, 68, 68, 68, - 68, 124, 1109, 1114, 1118, 1119, 1120, 68, 1113, 68, - 1116, 68, 1112, 1115, 68, 1117, 1121, 68, 1122, 1123, - 68, 68, 68, 1124, 1125, 68, 1130, 68, 1131, 1126, - 68, 68, 68, 68, 68, 1137, 68, 68, 1128, 1127, - 1136, 68, 68, 68, 1129, 1132, 1140, 68, 1142, 68, - 1133, 68, 1134, 68, 1135, 68, 1138, 68, 1143, 68, - 1139, 68, 1141, 68, 1145, 68, 1146, 1148, 1147, 68, - - 68, 68, 1166, 1144, 1150, 1151, 1153, 68, 1154, 68, - 1149, 68, 1155, 1156, 68, 68, 1152, 68, 1157, 68, - 1158, 68, 68, 1159, 1160, 68, 68, 68, 68, 1164, - 68, 1168, 68, 68, 1162, 1161, 1163, 68, 68, 1165, - 68, 68, 1169, 68, 68, 1167, 1170, 1177, 1171, 1172, - 1173, 1174, 68, 68, 1176, 1178, 68, 1179, 68, 68, - 68, 1175, 1182, 1183, 68, 68, 68, 68, 68, 1184, - 68, 68, 1185, 68, 1181, 68, 1189, 1180, 1187, 68, - 68, 68, 68, 68, 1191, 68, 68, 1186, 1196, 1190, - 1188, 1194, 1198, 68, 68, 68, 68, 68, 1199, 68, - - 1192, 68, 1205, 1195, 1197, 1200, 1201, 1193, 68, 68, - 68, 1202, 68, 1204, 68, 1207, 68, 68, 1206, 68, - 1203, 1208, 1211, 68, 68, 68, 1212, 68, 68, 68, - 1216, 1210, 68, 1209, 68, 1213, 1215, 1219, 68, 1220, - 1221, 68, 68, 1214, 1224, 68, 1225, 68, 1218, 68, - 68, 68, 1222, 1217, 1229, 68, 68, 68, 1231, 68, - 68, 68, 1227, 68, 1223, 68, 1234, 1249, 1226, 1230, - 1238, 1228, 1235, 68, 1233, 1232, 1236, 68, 1237, 68, - 1239, 68, 68, 1240, 1241, 68, 68, 68, 1244, 68, - 68, 1242, 68, 68, 68, 1243, 68, 1245, 1246, 1248, - - 68, 1250, 68, 68, 1252, 68, 68, 1251, 123, 1253, - 1247, 1255, 68, 68, 1254, 1256, 68, 1257, 68, 1258, - 68, 68, 1260, 68, 68, 1259, 1262, 1261, 1263, 68, - 68, 68, 68, 1264, 1268, 68, 121, 119, 68, 1269, - 1269, 1269, 1269, 1269, 1269, 1265, 1266, 1269, 1269, 1269, - 1267, 40, 40, 40, 40, 40, 40, 40, 45, 45, - 45, 45, 45, 45, 45, 50, 50, 50, 50, 50, - 50, 50, 56, 56, 56, 56, 56, 56, 56, 61, - 61, 61, 61, 61, 61, 61, 71, 71, 1269, 71, - 71, 71, 71, 118, 118, 1269, 1269, 1269, 118, 118, - - 120, 120, 1269, 1269, 120, 1269, 120, 122, 1269, 1269, - 1269, 1269, 1269, 122, 125, 125, 1269, 1269, 1269, 125, - 125, 127, 1269, 1269, 1269, 1269, 1269, 127, 129, 129, - 1269, 129, 129, 129, 129, 72, 72, 1269, 72, 72, - 72, 72, 13, 1269, 1269, 1269, 1269, 1269, 1269, 1269, - 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, - 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, - 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, - 1269, 1269 + 16, 17, 62, 63, 64, 68, 68, 77, 133, 86, + 65, 69, 92, 129, 78, 70, 85, 68, 87, 66, + 72, 79, 72, 72, 68, 72, 88, 132, 68, 80, + 72, 73, 89, 81, 68, 90, 82, 68, 68, 83, + 68, 97, 91, 149, 68, 98, 68, 117, 68, 94, + 68, 118, 95, 101, 68, 105, 96, 136, 68, 102, + 68, 99, 103, 108, 134, 106, 68, 68, 107, 104, + 141, 68, 112, 109, 113, 126, 126, 110, 111, 123, + 115, 123, 123, 129, 123, 116, 68, 135, 72, 114, + + 72, 72, 128, 72, 128, 128, 68, 128, 67, 131, + 67, 67, 68, 67, 137, 68, 68, 68, 67, 72, + 138, 72, 72, 142, 72, 68, 144, 139, 68, 72, + 73, 68, 68, 68, 140, 68, 148, 145, 68, 68, + 68, 143, 151, 146, 159, 152, 68, 150, 68, 147, + 68, 155, 68, 157, 154, 160, 68, 158, 164, 153, + 68, 68, 68, 162, 68, 161, 165, 68, 68, 68, + 68, 156, 167, 163, 68, 174, 168, 68, 68, 166, + 68, 170, 68, 176, 169, 171, 68, 68, 172, 175, + 68, 68, 173, 68, 68, 182, 178, 119, 119, 126, + + 126, 121, 179, 177, 121, 183, 68, 271, 180, 184, + 123, 186, 123, 123, 128, 123, 128, 128, 72, 128, + 72, 72, 129, 72, 68, 185, 187, 68, 68, 131, + 68, 68, 192, 68, 68, 189, 194, 68, 193, 188, + 68, 68, 68, 190, 68, 200, 68, 202, 68, 68, + 191, 68, 204, 201, 205, 195, 68, 68, 68, 68, + 196, 207, 68, 203, 211, 197, 68, 68, 214, 129, + 206, 198, 199, 68, 208, 210, 216, 209, 212, 68, + 215, 68, 213, 68, 219, 68, 221, 217, 218, 68, + 220, 68, 222, 68, 68, 68, 68, 68, 68, 68, + + 223, 224, 226, 225, 68, 68, 228, 68, 68, 127, + 231, 68, 235, 68, 229, 237, 227, 68, 68, 68, + 68, 241, 129, 239, 230, 238, 233, 234, 68, 232, + 242, 236, 244, 68, 247, 68, 68, 68, 240, 68, + 250, 245, 68, 68, 249, 68, 68, 251, 68, 68, + 256, 254, 248, 243, 68, 68, 257, 255, 246, 68, + 68, 252, 68, 260, 68, 68, 253, 263, 261, 68, + 68, 265, 68, 68, 262, 258, 267, 259, 266, 68, + 68, 68, 68, 264, 68, 272, 68, 275, 68, 68, + 68, 68, 68, 276, 68, 68, 68, 337, 269, 268, + + 274, 277, 68, 270, 273, 280, 281, 68, 278, 282, + 283, 279, 284, 68, 68, 68, 68, 285, 68, 286, + 290, 68, 287, 291, 68, 289, 68, 292, 68, 295, + 288, 68, 68, 68, 68, 68, 298, 297, 68, 293, + 303, 68, 68, 68, 68, 68, 68, 304, 294, 299, + 302, 296, 68, 68, 68, 308, 68, 300, 307, 301, + 129, 68, 68, 68, 305, 319, 306, 310, 324, 318, + 68, 309, 68, 68, 311, 312, 68, 322, 68, 68, + 321, 320, 68, 323, 313, 68, 314, 315, 316, 68, + 325, 317, 68, 326, 327, 68, 328, 330, 68, 329, + + 331, 332, 333, 68, 68, 334, 68, 68, 338, 68, + 68, 335, 336, 68, 68, 68, 68, 345, 341, 343, + 344, 340, 347, 346, 339, 68, 68, 68, 68, 350, + 349, 342, 348, 68, 351, 352, 68, 68, 68, 68, + 68, 68, 356, 68, 358, 354, 68, 359, 68, 353, + 355, 68, 68, 68, 68, 68, 361, 68, 68, 68, + 357, 362, 360, 363, 367, 368, 369, 68, 68, 366, + 68, 68, 372, 364, 365, 373, 370, 68, 68, 68, + 376, 68, 68, 68, 68, 385, 382, 377, 68, 371, + 68, 68, 68, 374, 68, 378, 383, 375, 381, 68, + + 387, 380, 389, 384, 68, 379, 68, 388, 68, 390, + 68, 68, 68, 386, 129, 393, 398, 394, 397, 68, + 68, 68, 68, 391, 402, 68, 68, 396, 392, 68, + 395, 399, 68, 68, 68, 401, 68, 406, 400, 407, + 125, 403, 408, 68, 404, 409, 68, 410, 405, 411, + 68, 413, 68, 412, 68, 68, 68, 414, 68, 417, + 415, 68, 416, 68, 68, 418, 68, 421, 419, 68, + 68, 68, 68, 68, 422, 428, 424, 68, 427, 68, + 68, 425, 68, 550, 423, 426, 420, 68, 429, 68, + 430, 68, 68, 431, 436, 434, 433, 435, 68, 68, + + 68, 68, 68, 438, 437, 439, 440, 68, 68, 68, + 68, 68, 448, 444, 443, 432, 445, 68, 68, 446, + 68, 68, 442, 447, 68, 441, 68, 449, 451, 450, + 68, 68, 452, 68, 68, 68, 453, 454, 455, 68, + 456, 68, 68, 458, 462, 68, 459, 68, 464, 68, + 457, 68, 68, 68, 68, 465, 68, 461, 466, 460, + 68, 68, 68, 68, 463, 68, 471, 470, 467, 469, + 472, 68, 68, 468, 68, 68, 473, 474, 129, 478, + 475, 476, 68, 479, 477, 480, 68, 68, 68, 483, + 481, 485, 68, 68, 68, 68, 68, 484, 486, 68, + + 68, 488, 68, 68, 68, 68, 493, 124, 482, 491, + 487, 492, 490, 494, 489, 68, 505, 68, 68, 68, + 501, 495, 502, 496, 68, 68, 497, 504, 503, 68, + 507, 498, 506, 68, 68, 509, 68, 499, 500, 510, + 68, 68, 68, 68, 514, 68, 68, 68, 508, 513, + 68, 517, 518, 68, 68, 68, 520, 519, 68, 68, + 511, 512, 515, 516, 68, 68, 521, 522, 68, 524, + 526, 68, 525, 523, 528, 68, 527, 68, 68, 68, + 530, 68, 532, 68, 68, 68, 68, 533, 68, 68, + 68, 68, 531, 68, 529, 534, 68, 539, 68, 542, + + 540, 68, 68, 68, 535, 68, 536, 543, 537, 538, + 541, 544, 547, 68, 68, 546, 68, 68, 545, 551, + 548, 549, 68, 553, 552, 554, 68, 68, 558, 555, + 68, 556, 68, 68, 560, 68, 561, 129, 68, 68, + 557, 68, 68, 563, 68, 68, 68, 68, 68, 572, + 68, 68, 559, 562, 579, 68, 68, 586, 566, 68, + 564, 578, 574, 68, 575, 577, 565, 68, 583, 576, + 567, 573, 568, 68, 580, 68, 569, 68, 570, 68, + 68, 581, 587, 571, 68, 68, 591, 68, 588, 584, + 68, 585, 593, 68, 592, 68, 594, 68, 589, 582, + + 68, 68, 68, 68, 590, 68, 597, 68, 68, 68, + 600, 598, 122, 596, 595, 604, 68, 603, 68, 68, + 68, 68, 599, 602, 606, 68, 607, 601, 68, 611, + 608, 605, 68, 610, 68, 612, 68, 609, 618, 613, + 68, 68, 614, 68, 68, 615, 616, 619, 68, 68, + 68, 617, 68, 620, 621, 68, 622, 68, 623, 68, + 68, 68, 626, 68, 624, 68, 68, 68, 68, 68, + 630, 631, 633, 68, 68, 625, 629, 635, 627, 634, + 68, 628, 68, 636, 68, 632, 638, 68, 68, 637, + 68, 642, 639, 68, 640, 68, 641, 68, 68, 68, + + 68, 68, 644, 68, 650, 651, 68, 68, 643, 68, + 68, 652, 68, 647, 68, 648, 645, 653, 68, 655, + 68, 649, 656, 646, 658, 68, 654, 68, 68, 68, + 68, 68, 68, 657, 661, 663, 660, 68, 659, 68, + 68, 665, 68, 68, 668, 68, 68, 662, 68, 68, + 664, 68, 672, 68, 666, 667, 68, 676, 675, 68, + 120, 669, 68, 671, 670, 68, 673, 677, 674, 68, + 68, 686, 683, 678, 680, 681, 679, 68, 685, 682, + 68, 68, 68, 68, 68, 68, 684, 687, 692, 688, + 68, 689, 693, 68, 68, 690, 68, 68, 68, 694, + + 695, 68, 68, 691, 68, 701, 68, 696, 68, 68, + 68, 68, 697, 700, 698, 68, 699, 68, 706, 702, + 709, 68, 704, 68, 703, 710, 68, 68, 705, 707, + 711, 68, 714, 68, 715, 68, 712, 718, 68, 68, + 708, 68, 713, 716, 717, 68, 719, 720, 68, 68, + 68, 68, 725, 721, 726, 68, 723, 68, 724, 68, + 727, 728, 68, 68, 68, 68, 68, 722, 732, 68, + 68, 729, 735, 68, 68, 731, 68, 68, 68, 739, + 68, 68, 730, 68, 68, 733, 68, 68, 68, 68, + 68, 738, 68, 734, 736, 748, 737, 68, 744, 68, + + 740, 742, 745, 68, 68, 747, 741, 743, 750, 68, + 749, 68, 746, 751, 754, 68, 752, 68, 753, 68, + 756, 68, 68, 68, 757, 68, 758, 68, 68, 68, + 755, 760, 68, 762, 764, 765, 766, 759, 761, 68, + 68, 68, 68, 767, 768, 68, 763, 770, 771, 773, + 68, 774, 772, 68, 68, 68, 68, 777, 68, 769, + 68, 776, 68, 68, 68, 68, 68, 68, 785, 68, + 68, 68, 68, 775, 786, 778, 787, 779, 782, 780, + 789, 784, 781, 788, 68, 68, 783, 791, 68, 68, + 792, 794, 68, 68, 796, 797, 68, 795, 798, 68, + + 68, 68, 68, 68, 790, 799, 68, 800, 68, 793, + 68, 805, 68, 803, 68, 68, 801, 68, 807, 68, + 68, 68, 68, 68, 810, 804, 68, 812, 802, 68, + 809, 68, 815, 68, 806, 68, 68, 808, 819, 68, + 811, 813, 821, 814, 820, 68, 816, 68, 68, 68, + 68, 68, 68, 817, 825, 818, 824, 68, 828, 68, + 827, 68, 823, 68, 68, 822, 68, 829, 68, 832, + 830, 835, 68, 834, 68, 68, 826, 68, 68, 831, + 836, 68, 68, 68, 833, 843, 68, 68, 68, 68, + 68, 129, 837, 68, 841, 840, 842, 838, 839, 68, + + 848, 68, 852, 68, 847, 68, 844, 845, 849, 846, + 68, 850, 68, 853, 854, 68, 68, 851, 859, 860, + 68, 68, 68, 68, 856, 858, 68, 857, 68, 68, + 68, 855, 68, 867, 68, 862, 68, 68, 870, 68, + 871, 861, 864, 68, 863, 68, 68, 877, 866, 874, + 868, 873, 872, 68, 865, 869, 68, 68, 68, 68, + 875, 68, 68, 68, 68, 68, 876, 68, 884, 68, + 885, 878, 880, 68, 886, 68, 888, 879, 881, 882, + 887, 68, 68, 883, 891, 68, 68, 68, 895, 68, + 68, 899, 68, 68, 68, 892, 889, 890, 893, 894, + + 898, 896, 900, 68, 68, 902, 68, 903, 897, 68, + 68, 68, 68, 901, 907, 68, 908, 68, 909, 68, + 910, 68, 912, 68, 911, 68, 68, 68, 914, 905, + 904, 906, 68, 68, 916, 68, 68, 917, 918, 127, + 68, 913, 68, 68, 68, 68, 926, 68, 68, 68, + 928, 915, 919, 925, 920, 68, 68, 68, 68, 921, + 68, 68, 922, 931, 923, 924, 930, 932, 68, 934, + 68, 68, 68, 938, 927, 929, 937, 68, 68, 941, + 68, 68, 68, 68, 940, 68, 933, 935, 936, 68, + 939, 943, 68, 68, 942, 68, 68, 68, 945, 947, + + 125, 944, 68, 949, 946, 948, 951, 68, 950, 954, + 68, 953, 955, 68, 68, 956, 952, 958, 68, 957, + 68, 960, 68, 68, 68, 68, 68, 964, 962, 965, + 959, 967, 966, 68, 68, 961, 68, 963, 68, 970, + 68, 969, 971, 68, 68, 968, 68, 68, 68, 68, + 972, 973, 68, 974, 68, 977, 68, 975, 68, 68, + 68, 976, 68, 983, 986, 980, 978, 981, 68, 68, + 979, 68, 985, 982, 987, 68, 988, 984, 68, 68, + 990, 68, 68, 68, 68, 68, 68, 68, 68, 68, + 998, 68, 997, 68, 992, 993, 994, 68, 989, 68, + + 995, 68, 991, 1001, 68, 68, 996, 999, 1000, 68, + 1003, 1004, 1011, 68, 68, 1007, 68, 1002, 1005, 1006, + 1009, 1008, 68, 1013, 68, 68, 68, 1010, 68, 68, + 1012, 68, 68, 68, 1019, 68, 68, 1015, 1014, 68, + 1016, 1017, 68, 1018, 1020, 68, 1021, 68, 1024, 68, + 68, 1025, 1023, 1028, 68, 1022, 1030, 68, 1027, 1029, + 68, 68, 68, 68, 68, 1032, 68, 1033, 1035, 68, + 1038, 68, 1026, 1037, 1036, 68, 1034, 68, 1039, 1031, + 68, 68, 68, 68, 68, 1041, 1042, 1040, 1044, 68, + 68, 68, 68, 68, 68, 68, 1043, 1052, 68, 68, + + 68, 1070, 1053, 68, 124, 1050, 68, 1056, 1046, 68, + 1045, 1048, 1049, 1054, 1047, 1051, 1055, 1057, 68, 1058, + 68, 68, 1059, 1060, 68, 1061, 68, 1063, 68, 1064, + 68, 68, 1066, 68, 68, 68, 1065, 1068, 68, 68, + 1062, 68, 68, 1072, 1071, 1074, 68, 1076, 68, 1077, + 68, 68, 68, 1067, 1075, 68, 1079, 1069, 1073, 68, + 68, 68, 68, 68, 1080, 1081, 68, 68, 1085, 68, + 1089, 68, 68, 1093, 1083, 68, 1087, 1078, 1088, 68, + 1094, 1086, 68, 1084, 1082, 68, 1090, 68, 1092, 68, + 1095, 1091, 68, 68, 68, 68, 1099, 68, 1096, 1100, + + 1101, 68, 1097, 68, 1098, 68, 68, 1102, 1103, 1104, + 68, 1105, 68, 68, 1110, 1106, 1107, 1108, 1109, 68, + 68, 68, 68, 68, 68, 1116, 1111, 1113, 68, 68, + 1115, 1114, 1117, 68, 1118, 68, 1120, 1112, 1119, 68, + 68, 68, 68, 1121, 68, 1122, 1125, 68, 68, 1124, + 68, 68, 1127, 1126, 1129, 68, 1128, 1130, 68, 1131, + 68, 68, 1123, 68, 68, 68, 68, 68, 1138, 68, + 68, 68, 68, 1132, 68, 68, 1134, 1135, 1136, 1139, + 68, 1133, 68, 68, 68, 68, 122, 1137, 1142, 1146, + 1147, 68, 1141, 68, 1144, 1148, 68, 1140, 1143, 68, + + 1145, 1149, 68, 1150, 1151, 68, 1153, 68, 1152, 68, + 68, 1154, 1158, 68, 1159, 68, 68, 68, 68, 68, + 68, 1165, 68, 1164, 68, 1155, 1156, 68, 1157, 68, + 1160, 1168, 68, 1170, 68, 1161, 68, 1162, 1163, 1166, + 68, 1171, 68, 68, 68, 1167, 68, 68, 1169, 1174, + 68, 1173, 1175, 68, 1176, 68, 68, 1209, 1172, 1183, + 1178, 1179, 1181, 68, 68, 1177, 1182, 68, 1180, 1184, + 68, 1185, 68, 68, 68, 68, 68, 68, 1186, 1188, + 68, 68, 68, 1192, 68, 68, 1187, 68, 1189, 1190, + 1191, 1196, 68, 1193, 68, 1198, 1194, 68, 68, 68, + + 1202, 68, 1199, 1197, 1195, 68, 68, 1200, 68, 1204, + 68, 68, 1201, 1205, 1206, 68, 1207, 68, 1210, 1211, + 68, 68, 68, 68, 1208, 1203, 1212, 1213, 68, 68, + 1214, 68, 1217, 68, 68, 68, 1215, 68, 68, 1219, + 68, 68, 68, 68, 1224, 1226, 68, 1222, 1216, 1218, + 68, 1228, 68, 68, 1227, 1220, 68, 68, 1233, 68, + 1223, 1225, 1229, 1221, 1230, 68, 68, 68, 1234, 68, + 1232, 1235, 68, 1239, 68, 68, 1236, 68, 68, 68, + 68, 1231, 68, 68, 1240, 1244, 68, 1238, 1237, 68, + 1243, 1247, 68, 1241, 1248, 1249, 68, 1242, 68, 1252, + + 68, 68, 1246, 1253, 68, 1245, 1250, 68, 68, 1257, + 68, 68, 68, 1255, 1259, 68, 68, 68, 1263, 68, + 1251, 120, 1262, 1258, 1264, 68, 1254, 68, 1256, 68, + 1261, 1260, 1265, 68, 1266, 1267, 68, 68, 1268, 1269, + 68, 68, 68, 1272, 68, 68, 1270, 68, 68, 68, + 1271, 68, 1273, 1274, 1276, 68, 68, 1278, 68, 68, + 1277, 1280, 68, 1279, 1281, 1275, 1283, 68, 68, 1282, + 1284, 68, 1285, 68, 1286, 68, 68, 1288, 68, 68, + 1287, 68, 1289, 1291, 68, 68, 68, 68, 1296, 68, + 1292, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1290, + + 1293, 1294, 1297, 1297, 1297, 1295, 40, 40, 40, 40, + 40, 40, 40, 45, 45, 45, 45, 45, 45, 45, + 50, 50, 50, 50, 50, 50, 50, 56, 56, 56, + 56, 56, 56, 56, 61, 61, 61, 61, 61, 61, + 61, 71, 71, 1297, 71, 71, 71, 71, 119, 119, + 1297, 1297, 1297, 119, 119, 121, 121, 1297, 1297, 121, + 1297, 121, 123, 1297, 1297, 1297, 1297, 1297, 123, 126, + 126, 1297, 1297, 1297, 126, 126, 128, 1297, 1297, 1297, + 1297, 1297, 128, 130, 130, 1297, 130, 130, 130, 130, + 72, 72, 1297, 72, 72, 72, 72, 13, 1297, 1297, + + 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, + 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, + 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, + 1297, 1297, 1297, 1297, 1297, 1297, 1297 } ; -static yyconst flex_int16_t yy_chk[2583] = +static yyconst flex_int16_t yy_chk[2638] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1140,284 +1158,290 @@ static yyconst flex_int16_t yy_chk[2583] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 4, 4, 4, 49, 5, 5, 49, 3, 5, 15, 4, 6, 6, 15, 5, 6, 9, 9, - 9, 114, 33, 6, 7, 7, 7, 7, 9, 7, + 9, 115, 33, 6, 7, 7, 7, 7, 9, 7, 10, 10, 10, 44, 44, 7, 8, 8, 8, 8, - 10, 8, 21, 33, 114, 21, 21, 8, 11, 11, - 11, 11, 11, 11, 1275, 20, 29, 20, 20, 11, + 10, 8, 21, 33, 115, 21, 21, 8, 11, 11, + 11, 11, 11, 11, 1303, 20, 29, 20, 20, 11, 20, 29, 24, 21, 25, 20, 24, 28, 11, 12, 12, 12, 12, 12, 12, 74, 22, 22, 74, 25, 12, 69, 28, 66, 22, 69, 24, 26, 26, 12, 19, 22, 19, 19, 23, 19, 26, 66, 27, 23, - 19, 19, 27, 23, 30, 27, 23, 31, 550, 23, - 32, 32, 27, 36, 34, 32, 39, 39, 36, 30, + 19, 19, 27, 23, 30, 27, 23, 31, 89, 23, + 32, 32, 27, 89, 34, 32, 39, 39, 82, 30, 35, 39, 31, 34, 77, 35, 31, 77, 36, 34, - 38, 32, 34, 36, 304, 35, 60, 60, 35, 34, - 37, 37, 75, 37, 38, 55, 75, 55, 55, 38, - 55, 63, 76, 63, 63, 78, 63, 79, 37, 304, - - 82, 65, 63, 65, 65, 68, 65, 68, 68, 84, - 68, 79, 76, 78, 81, 68, 71, 80, 71, 71, - 83, 71, 82, 84, 85, 83, 71, 71, 86, 80, - 87, 88, 81, 90, 89, 88, 92, 91, 83, 89, - 91, 127, 100, 91, 85, 93, 86, 90, 87, 94, - 93, 97, 94, 96, 95, 92, 94, 91, 95, 98, - 96, 99, 100, 101, 97, 102, 98, 101, 103, 104, - 93, 105, 106, 103, 99, 107, 109, 103, 108, 110, - 110, 109, 112, 102, 105, 111, 113, 106, 115, 104, - 116, 117, 121, 115, 107, 121, 108, 175, 112, 175, - - 110, 132, 116, 111, 119, 119, 132, 113, 123, 117, - 123, 123, 133, 123, 126, 126, 128, 133, 128, 128, - 129, 128, 129, 129, 131, 129, 134, 131, 135, 136, - 137, 129, 138, 139, 140, 143, 135, 138, 139, 140, - 144, 134, 142, 142, 136, 144, 145, 148, 146, 149, - 137, 141, 146, 147, 143, 141, 153, 151, 147, 536, - 141, 148, 150, 152, 149, 141, 154, 158, 152, 145, - 536, 141, 141, 155, 150, 151, 153, 150, 155, 156, - 156, 157, 154, 165, 159, 160, 157, 163, 158, 159, - 160, 161, 157, 162, 163, 164, 161, 167, 162, 166, - - 168, 164, 169, 165, 170, 166, 171, 172, 168, 173, - 174, 171, 178, 176, 179, 179, 177, 169, 180, 167, - 176, 177, 183, 180, 170, 184, 403, 173, 173, 172, - 174, 178, 181, 182, 183, 182, 188, 181, 185, 189, - 186, 180, 187, 403, 184, 186, 185, 187, 190, 194, - 191, 188, 182, 191, 192, 192, 190, 189, 193, 193, - 195, 196, 197, 198, 196, 194, 197, 200, 199, 201, - 201, 202, 198, 199, 203, 195, 202, 204, 205, 203, - 206, 200, 207, 208, 208, 209, 210, 211, 212, 214, - 213, 212, 211, 216, 125, 207, 205, 204, 210, 215, - - 220, 206, 213, 209, 219, 216, 214, 219, 215, 214, - 217, 221, 217, 217, 218, 218, 222, 220, 223, 223, - 220, 226, 224, 225, 225, 222, 221, 224, 227, 228, - 229, 232, 230, 233, 228, 231, 226, 230, 231, 234, - 236, 235, 233, 237, 234, 232, 235, 242, 227, 239, - 229, 238, 239, 240, 244, 243, 253, 245, 246, 247, - 249, 236, 242, 237, 243, 238, 252, 240, 239, 241, - 253, 241, 241, 246, 250, 244, 245, 248, 251, 247, - 249, 241, 248, 241, 241, 241, 252, 254, 241, 250, - 256, 257, 254, 251, 255, 255, 258, 255, 260, 259, - - 260, 261, 262, 263, 267, 261, 264, 257, 267, 265, - 256, 266, 258, 259, 268, 264, 266, 263, 265, 269, - 262, 270, 272, 268, 269, 271, 275, 270, 264, 274, - 271, 273, 273, 276, 274, 272, 277, 279, 278, 280, - 280, 283, 276, 278, 282, 282, 284, 275, 277, 286, - 285, 288, 289, 290, 284, 291, 292, 294, 279, 285, - 291, 286, 283, 293, 292, 295, 296, 290, 293, 297, - 296, 288, 289, 298, 298, 294, 299, 300, 302, 306, - 301, 298, 303, 303, 309, 301, 308, 295, 297, 298, - 301, 305, 305, 300, 306, 307, 299, 310, 302, 298, - - 311, 308, 312, 309, 313, 311, 314, 307, 315, 316, - 317, 312, 315, 318, 316, 319, 320, 320, 321, 310, - 322, 314, 317, 313, 323, 325, 324, 332, 319, 324, - 321, 318, 322, 326, 326, 327, 327, 328, 325, 323, - 329, 329, 328, 330, 330, 331, 333, 335, 332, 334, - 331, 333, 335, 334, 336, 337, 338, 339, 336, 340, - 337, 341, 339, 345, 340, 342, 343, 343, 342, 344, - 124, 349, 345, 342, 344, 341, 338, 342, 346, 347, - 348, 346, 350, 347, 349, 348, 351, 350, 352, 353, - 354, 351, 353, 354, 352, 355, 356, 357, 358, 359, - - 355, 360, 359, 358, 361, 347, 360, 362, 361, 361, - 363, 357, 362, 364, 356, 368, 364, 365, 366, 363, - 366, 365, 365, 367, 369, 367, 370, 371, 369, 372, - 374, 373, 375, 375, 376, 368, 373, 377, 376, 378, - 379, 370, 377, 380, 372, 371, 381, 382, 386, 374, - 383, 122, 382, 381, 387, 378, 380, 383, 384, 379, - 385, 387, 388, 384, 389, 385, 386, 390, 393, 396, - 391, 388, 390, 391, 396, 392, 394, 394, 389, 392, - 397, 398, 399, 400, 397, 394, 406, 407, 408, 393, - 399, 409, 408, 407, 421, 406, 409, 412, 400, 398, - - 410, 411, 410, 413, 410, 414, 411, 410, 414, 415, - 415, 418, 410, 416, 421, 412, 417, 417, 410, 410, - 416, 419, 419, 422, 420, 423, 418, 420, 413, 424, - 424, 425, 426, 423, 427, 428, 428, 429, 430, 427, - 429, 431, 422, 432, 430, 433, 425, 434, 435, 431, - 426, 432, 434, 436, 436, 435, 437, 438, 439, 442, - 443, 443, 438, 433, 437, 441, 446, 444, 441, 447, - 444, 448, 449, 442, 450, 451, 449, 439, 444, 453, - 448, 452, 454, 455, 451, 453, 456, 446, 457, 458, - 447, 456, 457, 450, 459, 452, 460, 455, 461, 462, - - 462, 460, 454, 465, 463, 466, 459, 464, 458, 463, - 464, 467, 468, 469, 469, 471, 467, 473, 466, 461, - 472, 465, 470, 470, 472, 474, 475, 477, 479, 478, - 471, 477, 468, 480, 482, 481, 473, 484, 483, 488, - 475, 486, 484, 479, 483, 120, 486, 480, 482, 474, - 476, 488, 493, 476, 478, 476, 481, 485, 485, 476, - 487, 476, 489, 489, 490, 485, 476, 491, 492, 490, - 499, 493, 494, 494, 487, 491, 495, 500, 498, 497, - 495, 498, 492, 485, 497, 502, 501, 503, 504, 499, - 500, 501, 505, 504, 502, 506, 507, 508, 510, 511, - - 515, 515, 508, 512, 511, 507, 503, 514, 512, 506, - 513, 521, 505, 510, 516, 513, 514, 518, 522, 516, - 118, 518, 518, 519, 519, 520, 521, 519, 520, 523, - 524, 525, 523, 526, 527, 524, 525, 529, 522, 526, - 527, 528, 530, 531, 528, 532, 533, 534, 537, 535, - 532, 533, 535, 537, 538, 529, 531, 539, 541, 538, - 540, 540, 530, 543, 542, 534, 544, 545, 547, 548, - 544, 546, 539, 553, 551, 543, 552, 541, 542, 554, - 546, 555, 557, 558, 554, 545, 555, 547, 551, 560, - 556, 552, 561, 553, 548, 556, 557, 558, 559, 562, - - 562, 563, 564, 559, 560, 565, 566, 561, 567, 568, - 565, 564, 569, 567, 570, 571, 569, 573, 574, 563, - 572, 576, 575, 577, 578, 566, 579, 576, 568, 570, - 571, 582, 572, 583, 584, 579, 573, 581, 577, 574, - 575, 583, 581, 585, 578, 582, 586, 587, 585, 588, - 586, 586, 589, 594, 584, 590, 590, 589, 588, 591, - 587, 592, 593, 593, 591, 595, 592, 594, 596, 597, - 598, 600, 599, 596, 597, 598, 599, 601, 603, 604, - 600, 605, 603, 595, 606, 600, 607, 600, 601, 600, - 609, 610, 608, 613, 604, 611, 611, 618, 606, 605, - - 608, 612, 612, 614, 614, 607, 615, 615, 609, 616, - 617, 617, 613, 619, 616, 620, 610, 618, 619, 621, - 622, 623, 624, 620, 621, 626, 627, 623, 628, 624, - 626, 627, 629, 628, 630, 631, 632, 629, 622, 633, - 633, 634, 635, 630, 636, 639, 637, 632, 638, 636, - 640, 640, 641, 642, 631, 643, 644, 647, 648, 649, - 67, 634, 650, 639, 649, 635, 637, 651, 638, 653, - 646, 654, 641, 643, 646, 646, 648, 652, 642, 644, - 650, 652, 655, 647, 656, 654, 657, 651, 653, 658, - 659, 657, 660, 661, 662, 659, 658, 655, 663, 664, - - 665, 666, 661, 656, 663, 665, 666, 667, 671, 662, - 660, 670, 667, 668, 668, 672, 670, 674, 674, 673, - 664, 675, 671, 673, 673, 676, 677, 679, 678, 680, - 681, 682, 677, 678, 672, 684, 61, 683, 685, 688, - 675, 686, 686, 688, 676, 689, 679, 687, 680, 681, - 682, 683, 687, 685, 690, 691, 684, 693, 689, 692, - 692, 694, 693, 690, 695, 698, 701, 701, 703, 695, - 698, 703, 704, 704, 705, 691, 706, 707, 708, 709, - 709, 694, 707, 710, 711, 711, 712, 713, 714, 705, - 715, 716, 714, 708, 718, 721, 716, 719, 713, 720, - - 720, 706, 722, 710, 723, 724, 727, 724, 712, 715, - 732, 719, 718, 725, 726, 721, 728, 729, 725, 726, - 731, 736, 722, 729, 723, 731, 727, 734, 733, 737, - 728, 733, 734, 735, 735, 732, 738, 739, 740, 736, - 743, 738, 742, 740, 741, 741, 744, 742, 745, 737, - 746, 747, 748, 750, 749, 751, 752, 753, 743, 749, - 739, 56, 754, 747, 746, 748, 744, 755, 745, 754, - 756, 760, 753, 750, 760, 751, 755, 752, 761, 755, - 759, 759, 762, 763, 764, 765, 756, 761, 766, 766, - 765, 767, 763, 764, 768, 763, 769, 771, 770, 772, - - 774, 762, 773, 773, 777, 775, 783, 768, 778, 777, - 782, 767, 770, 778, 769, 779, 774, 772, 782, 783, - 784, 779, 771, 775, 780, 785, 786, 780, 787, 789, - 790, 791, 792, 780, 790, 793, 791, 792, 784, 794, - 793, 795, 786, 796, 785, 798, 787, 801, 794, 789, - 797, 797, 801, 799, 800, 802, 803, 804, 796, 798, - 805, 805, 807, 804, 795, 799, 800, 802, 806, 806, - 809, 807, 808, 808, 803, 809, 810, 811, 812, 813, - 813, 814, 814, 815, 815, 816, 817, 819, 820, 817, - 816, 822, 819, 826, 821, 827, 811, 810, 812, 821, - - 823, 823, 824, 824, 825, 826, 820, 826, 828, 825, - 829, 830, 826, 831, 831, 827, 822, 832, 833, 833, - 834, 839, 836, 840, 840, 838, 837, 841, 828, 842, - 829, 836, 830, 837, 838, 846, 844, 845, 851, 847, - 834, 844, 845, 832, 853, 842, 847, 839, 848, 848, - 850, 849, 852, 841, 854, 846, 849, 855, 851, 850, - 854, 856, 857, 853, 858, 862, 855, 852, 860, 858, - 859, 859, 860, 860, 861, 863, 857, 862, 864, 861, - 863, 865, 856, 866, 867, 865, 868, 870, 869, 871, - 864, 868, 870, 873, 879, 866, 873, 874, 874, 875, - - 875, 871, 876, 879, 882, 885, 877, 878, 876, 867, - 869, 877, 886, 878, 884, 884, 882, 891, 887, 892, - 893, 886, 901, 885, 892, 899, 884, 887, 894, 894, - 895, 891, 895, 896, 896, 898, 902, 893, 900, 900, - 903, 904, 898, 901, 905, 899, 906, 910, 902, 908, - 913, 911, 903, 904, 908, 909, 918, 909, 914, 905, - 911, 912, 912, 914, 919, 910, 906, 915, 916, 915, - 917, 923, 920, 916, 918, 917, 913, 920, 921, 924, - 925, 925, 926, 921, 919, 929, 927, 928, 930, 931, - 923, 932, 937, 924, 926, 927, 928, 929, 927, 934, - - 936, 930, 938, 939, 939, 934, 936, 932, 942, 931, - 940, 938, 941, 941, 943, 944, 945, 937, 943, 940, - 944, 946, 946, 947, 950, 951, 951, 942, 953, 945, - 956, 947, 954, 950, 952, 952, 957, 954, 955, 958, - 953, 957, 955, 959, 960, 956, 962, 961, 963, 964, - 966, 966, 967, 970, 970, 967, 968, 1032, 969, 1032, - 963, 973, 959, 971, 971, 958, 961, 962, 960, 968, - 964, 969, 972, 972, 973, 974, 974, 975, 975, 976, - 977, 977, 978, 978, 980, 981, 981, 982, 985, 980, - 983, 983, 984, 986, 985, 989, 986, 993, 976, 987, - - 987, 988, 988, 990, 990, 995, 982, 992, 992, 997, - 984, 994, 994, 996, 989, 987, 998, 995, 996, 999, - 1000, 998, 1001, 993, 1003, 1005, 1007, 1002, 1003, 1000, - 997, 1001, 1002, 1009, 999, 1007, 1008, 1008, 1009, 1010, - 1010, 1012, 1013, 1015, 1016, 1005, 1015, 1022, 1010, 1016, - 1017, 1017, 1019, 1018, 1013, 1019, 1012, 1018, 1020, 1020, - 1021, 1024, 1023, 1025, 1026, 1021, 1023, 1022, 1025, 1026, - 1027, 1029, 1030, 1048, 1031, 1045, 1027, 1030, 1035, 1035, - 1045, 1024, 1031, 1038, 1038, 1041, 1041, 1029, 1043, 1043, - 1046, 1046, 1047, 1049, 1054, 1048, 1051, 1051, 1049, 1054, - - 1055, 1056, 1055, 1057, 1057, 1058, 1056, 1059, 1047, 1060, - 1061, 1062, 1063, 1064, 1064, 1065, 1066, 1058, 1067, 1069, - 1068, 1060, 1061, 1062, 1065, 1059, 1070, 1071, 1076, 1072, - 1073, 51, 1063, 1068, 1072, 1073, 1074, 1074, 1067, 1081, - 1070, 1082, 1066, 1069, 1080, 1071, 1076, 1077, 1077, 1079, - 1079, 1083, 1084, 1080, 1081, 1085, 1086, 1086, 1087, 1082, - 1088, 1089, 1090, 1087, 1094, 1096, 1096, 1095, 1084, 1083, - 1095, 1097, 1098, 1101, 1085, 1088, 1100, 1100, 1102, 1102, - 1089, 1105, 1090, 1131, 1094, 1106, 1097, 1104, 1104, 1109, - 1098, 1107, 1101, 1108, 1106, 1111, 1107, 1109, 1108, 1112, - - 1113, 1114, 1131, 1105, 1112, 1113, 1115, 1115, 1116, 1116, - 1111, 1122, 1117, 1118, 1118, 1121, 1114, 1117, 1119, 1119, - 1121, 1124, 1125, 1122, 1124, 1126, 1132, 1127, 1128, 1128, - 1129, 1133, 1133, 1134, 1126, 1125, 1127, 1139, 1135, 1129, - 1138, 1143, 1134, 1136, 1145, 1132, 1135, 1145, 1136, 1138, - 1139, 1141, 1141, 1144, 1144, 1146, 1146, 1147, 1147, 1148, - 1149, 1143, 1150, 1151, 1151, 1152, 1155, 1150, 1158, 1152, - 1159, 1160, 1155, 1162, 1149, 1161, 1161, 1148, 1159, 1163, - 1164, 1165, 1166, 1167, 1163, 1169, 1170, 1158, 1169, 1162, - 1160, 1166, 1171, 1171, 1172, 1177, 1173, 1175, 1172, 1176, - - 1164, 1181, 1181, 1167, 1170, 1173, 1175, 1165, 1180, 1182, - 1184, 1176, 1185, 1180, 1186, 1184, 1187, 1189, 1182, 1190, - 1177, 1185, 1188, 1188, 1191, 1193, 1189, 1194, 1192, 1195, - 1193, 1187, 1200, 1186, 1197, 1190, 1192, 1196, 1196, 1197, - 1199, 1199, 1201, 1191, 1202, 1202, 1203, 1203, 1195, 1204, - 1205, 1206, 1200, 1194, 1207, 1207, 1210, 1208, 1209, 1209, - 1212, 1213, 1205, 1234, 1201, 1217, 1213, 1234, 1204, 1208, - 1217, 1206, 1214, 1214, 1212, 1210, 1215, 1215, 1216, 1216, - 1218, 1218, 1220, 1220, 1222, 1222, 1223, 1226, 1227, 1227, - 1232, 1223, 1228, 1230, 1243, 1226, 1245, 1228, 1230, 1233, - - 1233, 1238, 1238, 1240, 1242, 1242, 1260, 1240, 50, 1243, - 1232, 1246, 1246, 1253, 1245, 1247, 1247, 1249, 1249, 1251, - 1251, 1254, 1254, 1259, 1262, 1253, 1260, 1259, 1261, 1261, - 1264, 1266, 1265, 1262, 1267, 1267, 45, 40, 14, 13, - 0, 0, 0, 0, 0, 1264, 1265, 0, 0, 0, - 1266, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1272, 1272, 1272, 1272, 1272, - 1272, 1272, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1274, - 1274, 1274, 1274, 1274, 1274, 1274, 1276, 1276, 0, 1276, - 1276, 1276, 1276, 1277, 1277, 0, 0, 0, 1277, 1277, - - 1278, 1278, 0, 0, 1278, 0, 1278, 1279, 0, 0, - 0, 0, 0, 1279, 1280, 1280, 0, 0, 0, 1280, - 1280, 1281, 0, 0, 0, 0, 0, 1281, 1282, 1282, - 0, 1282, 1282, 1282, 1282, 1283, 1283, 0, 1283, 1283, - 1283, 1283, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, - 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, - 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, - 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, - 1269, 1269 + 75, 32, 34, 36, 75, 35, 38, 76, 35, 34, + 82, 37, 37, 36, 37, 60, 60, 36, 36, 55, + 38, 55, 55, 561, 55, 38, 78, 76, 63, 37, + + 63, 63, 65, 63, 65, 65, 79, 65, 68, 63, + 68, 68, 84, 68, 78, 80, 81, 85, 68, 71, + 79, 71, 71, 83, 71, 86, 84, 80, 83, 71, + 71, 87, 88, 90, 81, 92, 88, 85, 100, 91, + 95, 83, 91, 86, 95, 91, 93, 90, 96, 87, + 94, 93, 97, 94, 92, 96, 98, 94, 100, 91, + 99, 102, 101, 98, 104, 97, 101, 103, 105, 107, + 106, 93, 103, 99, 108, 109, 103, 110, 112, 102, + 109, 105, 111, 111, 104, 106, 113, 114, 107, 110, + 116, 118, 108, 117, 209, 116, 112, 120, 120, 127, + + 127, 122, 113, 111, 122, 117, 133, 209, 114, 118, + 124, 133, 124, 124, 129, 124, 129, 129, 130, 129, + 130, 130, 132, 130, 135, 132, 134, 136, 137, 130, + 138, 134, 139, 140, 144, 136, 141, 139, 140, 135, + 146, 141, 145, 137, 143, 143, 150, 145, 147, 148, + 138, 142, 147, 144, 148, 142, 149, 152, 154, 153, + 142, 150, 151, 146, 153, 142, 155, 159, 156, 128, + 149, 142, 142, 156, 151, 152, 158, 151, 154, 157, + 157, 158, 155, 166, 160, 161, 162, 158, 159, 160, + 161, 162, 163, 164, 168, 165, 167, 163, 169, 170, + + 164, 165, 167, 166, 171, 172, 169, 173, 174, 126, + 172, 176, 175, 177, 170, 177, 168, 175, 178, 180, + 181, 181, 185, 179, 171, 178, 174, 174, 179, 173, + 182, 176, 183, 186, 185, 182, 187, 183, 180, 184, + 188, 184, 189, 192, 187, 188, 190, 189, 191, 194, + 194, 192, 186, 182, 193, 195, 195, 193, 184, 196, + 198, 190, 197, 198, 199, 200, 191, 201, 199, 202, + 203, 203, 201, 204, 200, 196, 205, 197, 204, 206, + 207, 205, 208, 202, 210, 210, 211, 213, 212, 215, + 214, 216, 213, 214, 218, 263, 217, 263, 207, 206, + + 212, 215, 222, 208, 211, 217, 218, 219, 216, 219, + 219, 216, 220, 220, 221, 223, 224, 221, 226, 222, + 225, 225, 222, 226, 228, 224, 227, 227, 229, 230, + 223, 231, 232, 233, 230, 234, 233, 232, 235, 228, + 237, 236, 238, 239, 241, 237, 240, 238, 229, 234, + 236, 231, 242, 243, 245, 242, 246, 235, 241, 235, + 247, 248, 249, 250, 239, 246, 240, 243, 251, 245, + 252, 242, 244, 251, 244, 244, 255, 249, 253, 254, + 248, 247, 259, 250, 244, 256, 244, 244, 244, 260, + 252, 244, 257, 253, 254, 261, 255, 257, 262, 256, + + 258, 258, 259, 258, 264, 260, 265, 266, 264, 267, + 268, 261, 262, 270, 271, 269, 275, 270, 267, 268, + 269, 266, 272, 271, 265, 274, 273, 272, 278, 275, + 274, 267, 273, 276, 276, 277, 279, 281, 280, 282, + 277, 286, 281, 283, 283, 279, 285, 285, 287, 278, + 280, 289, 288, 291, 292, 293, 287, 295, 297, 294, + 282, 288, 286, 289, 294, 295, 296, 298, 299, 293, + 300, 296, 299, 291, 292, 300, 297, 301, 302, 303, + 303, 304, 305, 307, 308, 308, 306, 303, 309, 298, + 312, 306, 311, 301, 313, 303, 306, 302, 305, 310, + + 310, 304, 312, 307, 314, 303, 315, 311, 317, 313, + 316, 318, 319, 309, 320, 316, 321, 317, 320, 322, + 323, 321, 324, 314, 325, 325, 330, 319, 315, 326, + 318, 322, 327, 328, 329, 324, 337, 329, 323, 330, + 125, 326, 331, 331, 327, 332, 332, 333, 328, 334, + 334, 336, 333, 335, 335, 338, 336, 337, 339, 340, + 338, 341, 339, 342, 340, 341, 343, 344, 342, 345, + 346, 468, 344, 347, 345, 349, 347, 348, 348, 350, + 349, 347, 354, 468, 346, 347, 343, 351, 350, 352, + 351, 353, 355, 352, 356, 354, 353, 355, 357, 356, + + 358, 360, 359, 358, 357, 359, 360, 361, 362, 363, + 364, 365, 367, 364, 363, 352, 365, 367, 368, 366, + 373, 374, 362, 366, 366, 361, 369, 368, 370, 369, + 375, 377, 370, 370, 371, 372, 371, 372, 373, 376, + 374, 378, 379, 376, 380, 381, 377, 382, 382, 380, + 375, 383, 385, 384, 386, 383, 387, 379, 384, 378, + 388, 389, 393, 390, 381, 396, 389, 388, 385, 387, + 390, 391, 392, 386, 394, 395, 391, 392, 397, 396, + 393, 394, 398, 397, 395, 398, 399, 400, 401, 401, + 399, 403, 405, 406, 404, 410, 403, 401, 404, 407, + + 413, 406, 415, 420, 419, 414, 415, 123, 400, 413, + 405, 414, 410, 416, 407, 418, 422, 422, 416, 417, + 418, 417, 419, 417, 421, 423, 417, 421, 420, 424, + 424, 417, 423, 425, 426, 426, 427, 417, 417, 427, + 428, 430, 429, 431, 431, 433, 434, 432, 425, 430, + 437, 434, 435, 435, 436, 440, 437, 436, 438, 439, + 428, 429, 432, 433, 441, 442, 438, 439, 444, 441, + 443, 443, 442, 440, 445, 446, 444, 448, 449, 445, + 448, 450, 450, 453, 451, 454, 455, 451, 457, 456, + 460, 459, 449, 461, 446, 451, 458, 457, 463, 460, + + 458, 464, 467, 470, 453, 462, 454, 461, 455, 456, + 459, 462, 465, 474, 469, 464, 466, 465, 463, 469, + 466, 467, 471, 471, 470, 472, 473, 475, 476, 473, + 472, 474, 477, 476, 478, 478, 479, 479, 480, 481, + 475, 482, 483, 481, 484, 486, 487, 488, 490, 486, + 489, 491, 477, 480, 493, 492, 498, 498, 484, 493, + 482, 492, 488, 495, 489, 491, 483, 485, 495, 490, + 485, 487, 485, 494, 494, 496, 485, 499, 485, 497, + 500, 494, 499, 485, 501, 502, 503, 503, 500, 496, + 504, 497, 506, 507, 504, 508, 507, 506, 501, 494, + + 509, 510, 511, 512, 502, 513, 510, 514, 516, 515, + 513, 511, 121, 509, 508, 517, 519, 516, 531, 520, + 517, 521, 512, 515, 520, 522, 521, 514, 523, 525, + 522, 519, 524, 524, 525, 527, 530, 523, 531, 527, + 527, 528, 528, 529, 532, 528, 529, 532, 533, 534, + 535, 530, 536, 533, 534, 537, 535, 538, 536, 539, + 540, 541, 539, 542, 537, 543, 544, 545, 547, 546, + 543, 544, 546, 552, 550, 538, 542, 548, 540, 547, + 553, 541, 548, 549, 554, 545, 551, 551, 549, 550, + 556, 555, 552, 557, 553, 555, 554, 558, 559, 562, + + 563, 564, 557, 568, 565, 566, 567, 571, 556, 565, + 566, 567, 569, 562, 570, 563, 558, 568, 572, 570, + 574, 564, 571, 559, 573, 573, 569, 575, 577, 576, + 578, 579, 583, 572, 576, 578, 575, 580, 574, 581, + 582, 580, 584, 585, 583, 586, 587, 577, 589, 590, + 579, 588, 587, 593, 581, 582, 595, 592, 590, 598, + 119, 584, 592, 586, 585, 594, 588, 593, 589, 596, + 601, 601, 598, 594, 596, 597, 595, 599, 600, 597, + 597, 605, 602, 600, 603, 606, 599, 602, 607, 603, + 604, 604, 608, 607, 609, 605, 610, 608, 611, 609, + + 610, 614, 612, 606, 615, 614, 616, 611, 617, 618, + 619, 620, 611, 612, 611, 621, 611, 631, 619, 615, + 622, 622, 617, 626, 616, 623, 623, 624, 618, 620, + 624, 625, 627, 627, 628, 628, 625, 631, 629, 633, + 621, 632, 626, 629, 630, 630, 632, 633, 634, 635, + 636, 637, 639, 634, 640, 641, 636, 639, 637, 640, + 641, 642, 643, 644, 645, 647, 642, 635, 646, 646, + 648, 643, 649, 652, 650, 645, 651, 649, 653, 653, + 654, 655, 644, 656, 657, 647, 660, 661, 664, 67, + 662, 652, 663, 648, 650, 662, 651, 666, 659, 668, + + 654, 656, 659, 659, 667, 661, 655, 657, 664, 665, + 663, 669, 660, 665, 668, 670, 666, 671, 667, 673, + 670, 672, 674, 675, 671, 677, 672, 676, 685, 678, + 669, 674, 688, 676, 678, 679, 680, 673, 675, 683, + 679, 680, 681, 681, 683, 684, 677, 685, 686, 687, + 687, 688, 686, 686, 689, 690, 692, 691, 693, 684, + 694, 690, 691, 695, 696, 697, 698, 699, 699, 700, + 702, 703, 701, 689, 700, 692, 701, 693, 696, 694, + 703, 698, 695, 702, 704, 706, 697, 705, 705, 707, + 706, 708, 711, 712, 712, 713, 708, 711, 716, 716, + + 713, 720, 718, 721, 704, 718, 719, 719, 722, 707, + 723, 724, 724, 722, 725, 727, 720, 726, 726, 728, + 729, 730, 731, 733, 729, 723, 736, 731, 721, 734, + 728, 735, 735, 737, 725, 738, 739, 727, 739, 740, + 730, 733, 741, 734, 740, 742, 736, 741, 743, 746, + 744, 747, 751, 737, 746, 738, 744, 748, 749, 752, + 748, 754, 743, 749, 753, 742, 750, 750, 755, 753, + 751, 756, 756, 755, 758, 757, 747, 759, 760, 752, + 757, 761, 762, 763, 754, 764, 765, 766, 767, 768, + 764, 61, 758, 769, 762, 761, 763, 759, 760, 770, + + 769, 771, 774, 774, 768, 776, 765, 766, 770, 767, + 775, 770, 777, 775, 776, 778, 779, 771, 780, 781, + 781, 782, 783, 780, 778, 779, 784, 778, 785, 786, + 787, 777, 788, 788, 789, 783, 796, 790, 792, 799, + 793, 782, 785, 792, 784, 793, 794, 799, 787, 796, + 789, 795, 794, 802, 786, 790, 795, 797, 800, 801, + 797, 804, 803, 806, 807, 808, 797, 811, 807, 809, + 808, 800, 802, 812, 809, 810, 811, 801, 803, 804, + 810, 815, 813, 806, 814, 814, 816, 817, 818, 819, + 820, 822, 822, 818, 821, 815, 812, 813, 816, 817, + + 821, 819, 823, 823, 824, 825, 825, 826, 820, 827, + 828, 829, 826, 824, 830, 830, 831, 831, 832, 832, + 833, 834, 836, 837, 834, 833, 839, 836, 838, 828, + 827, 829, 847, 838, 840, 840, 841, 841, 842, 56, + 843, 837, 844, 842, 845, 846, 848, 848, 849, 850, + 850, 839, 843, 847, 843, 851, 854, 853, 855, 843, + 856, 858, 844, 854, 845, 846, 853, 855, 857, 857, + 863, 861, 859, 862, 849, 851, 861, 864, 862, 865, + 865, 868, 867, 869, 864, 870, 856, 858, 859, 866, + 863, 867, 873, 871, 866, 875, 872, 876, 869, 871, + + 51, 868, 886, 873, 870, 872, 874, 874, 873, 877, + 888, 876, 878, 878, 877, 879, 875, 880, 881, 879, + 879, 882, 880, 883, 884, 885, 882, 886, 884, 887, + 881, 889, 888, 890, 887, 883, 889, 885, 892, 893, + 893, 892, 894, 894, 895, 890, 896, 897, 898, 901, + 895, 896, 904, 897, 903, 903, 905, 898, 906, 910, + 912, 901, 914, 911, 914, 905, 903, 906, 911, 917, + 904, 913, 913, 910, 915, 915, 917, 912, 918, 919, + 919, 920, 921, 922, 923, 924, 925, 927, 928, 929, + 928, 932, 927, 942, 921, 922, 923, 937, 918, 930, + + 924, 938, 920, 931, 931, 933, 925, 929, 930, 934, + 933, 934, 942, 935, 936, 937, 943, 932, 935, 936, + 939, 938, 940, 944, 944, 939, 945, 940, 946, 949, + 943, 948, 947, 952, 949, 953, 954, 946, 945, 950, + 946, 947, 956, 948, 950, 958, 952, 959, 956, 960, + 962, 958, 954, 961, 961, 953, 963, 963, 960, 962, + 964, 965, 966, 967, 972, 965, 969, 966, 968, 968, + 973, 973, 959, 972, 969, 975, 967, 974, 974, 964, + 976, 978, 977, 979, 980, 976, 977, 975, 979, 981, + 982, 984, 983, 985, 986, 1007, 978, 988, 988, 989, + + 990, 1007, 989, 991, 50, 985, 992, 992, 981, 995, + 980, 983, 984, 990, 982, 986, 991, 993, 993, 994, + 994, 998, 995, 996, 996, 997, 997, 999, 999, 1000, + 1000, 1002, 1003, 1003, 1004, 1011, 1002, 1005, 1005, 1006, + 998, 1008, 1009, 1009, 1008, 1010, 1010, 1012, 1012, 1014, + 1014, 1015, 1017, 1004, 1011, 1016, 1016, 1006, 1009, 1019, + 1018, 1020, 1021, 1022, 1017, 1018, 1023, 1024, 1022, 1025, + 1026, 1029, 1032, 1032, 1020, 1026, 1024, 1015, 1025, 1031, + 1033, 1023, 1027, 1021, 1019, 1033, 1027, 1036, 1031, 1034, + 1034, 1029, 1037, 1039, 1040, 1046, 1039, 1048, 1034, 1040, + + 1041, 1041, 1036, 1042, 1037, 1043, 1045, 1042, 1043, 1044, + 1044, 1045, 1047, 1049, 1050, 1046, 1047, 1048, 1049, 1050, + 1051, 1053, 1054, 1055, 1059, 1059, 1051, 1054, 1056, 1071, + 1056, 1055, 1062, 1062, 1065, 1065, 1069, 1053, 1067, 1067, + 1072, 1069, 1070, 1070, 1073, 1071, 1075, 1075, 1078, 1073, + 1079, 1080, 1079, 1078, 1081, 1081, 1080, 1082, 1082, 1083, + 1083, 1084, 1072, 1085, 1086, 1087, 1088, 1089, 1090, 1090, + 1091, 1092, 1093, 1084, 1095, 1094, 1086, 1087, 1088, 1091, + 1096, 1085, 1097, 1102, 1098, 1099, 45, 1089, 1094, 1098, + 1099, 1107, 1093, 1108, 1096, 1100, 1100, 1092, 1095, 1106, + + 1097, 1102, 1103, 1103, 1105, 1105, 1107, 1109, 1106, 1111, + 1110, 1108, 1112, 1112, 1113, 1114, 1115, 1116, 1120, 1113, + 1121, 1122, 1122, 1121, 1123, 1109, 1110, 1124, 1111, 1127, + 1114, 1126, 1126, 1128, 1128, 1115, 1133, 1116, 1120, 1123, + 1132, 1132, 1134, 1177, 1135, 1124, 1137, 1136, 1127, 1135, + 1139, 1134, 1136, 1142, 1137, 1140, 1141, 1177, 1133, 1145, + 1140, 1141, 1143, 1143, 1145, 1139, 1144, 1144, 1142, 1146, + 1146, 1147, 1147, 1149, 1150, 1153, 1152, 1159, 1149, 1152, + 1154, 1155, 1156, 1156, 1157, 1160, 1150, 1163, 1153, 1154, + 1155, 1161, 1161, 1157, 1162, 1163, 1159, 1164, 1166, 1167, + + 1169, 1169, 1164, 1162, 1160, 1171, 1176, 1166, 1172, 1172, + 1173, 1186, 1167, 1173, 1174, 1174, 1175, 1175, 1178, 1179, + 1179, 1183, 1180, 1178, 1176, 1171, 1180, 1183, 1187, 1188, + 1186, 1189, 1189, 1190, 1191, 1192, 1187, 1193, 1194, 1191, + 1195, 1197, 1201, 1198, 1197, 1199, 1199, 1194, 1188, 1190, + 1200, 1201, 1204, 1203, 1200, 1192, 1205, 1209, 1209, 1210, + 1195, 1198, 1203, 1193, 1204, 1208, 1212, 1213, 1210, 1214, + 1208, 1212, 1215, 1216, 1216, 1217, 1213, 1218, 1219, 1222, + 1221, 1205, 1220, 1223, 1217, 1221, 1228, 1215, 1214, 1225, + 1220, 1224, 1224, 1218, 1225, 1227, 1227, 1219, 1229, 1230, + + 1230, 1233, 1223, 1231, 1231, 1222, 1228, 1232, 1234, 1235, + 1235, 1236, 1238, 1233, 1237, 1237, 1240, 1241, 1242, 1242, + 1229, 40, 1241, 1236, 1243, 1243, 1232, 14, 1234, 1245, + 1240, 1238, 1244, 1244, 1245, 1246, 1246, 1248, 1248, 1250, + 1250, 1251, 1254, 1255, 1255, 1260, 1251, 1256, 1258, 1271, + 1254, 1273, 1256, 1258, 1261, 1261, 1262, 1266, 1266, 1268, + 1262, 1270, 1270, 1268, 1271, 1260, 1274, 1274, 1281, 1273, + 1275, 1275, 1277, 1277, 1279, 1279, 1282, 1282, 1287, 1288, + 1281, 1290, 1287, 1289, 1289, 1292, 1294, 1293, 1295, 1295, + 1290, 13, 0, 0, 0, 0, 0, 0, 0, 1288, + + 1292, 1293, 0, 0, 0, 1294, 1298, 1298, 1298, 1298, + 1298, 1298, 1298, 1299, 1299, 1299, 1299, 1299, 1299, 1299, + 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1301, 1301, 1301, + 1301, 1301, 1301, 1301, 1302, 1302, 1302, 1302, 1302, 1302, + 1302, 1304, 1304, 0, 1304, 1304, 1304, 1304, 1305, 1305, + 0, 0, 0, 1305, 1305, 1306, 1306, 0, 0, 1306, + 0, 1306, 1307, 0, 0, 0, 0, 0, 1307, 1308, + 1308, 0, 0, 0, 1308, 1308, 1309, 0, 0, 0, + 0, 0, 1309, 1310, 1310, 0, 1310, 1310, 1310, 1310, + 1311, 1311, 0, 1311, 1311, 1311, 1311, 1297, 1297, 1297, + + 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, + 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, + 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, + 1297, 1297, 1297, 1297, 1297, 1297, 1297 } ; static yy_state_type yy_last_accepting_state; @@ -1541,7 +1565,7 @@ static void config_end_include(void) #define YY_NO_INPUT 1 #endif -#line 1543 "" +#line 1567 "" #define INITIAL 0 #define quotedstring 1 @@ -1728,7 +1752,7 @@ YY_DECL #line 120 "util/configlexer.lex" -#line 1730 "" +#line 1754 "" if ( !(yy_init) ) { @@ -1787,13 +1811,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 >= 1270 ) + if ( yy_current_state >= 1298 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 2543 ); + while ( yy_base[yy_current_state] != 2598 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -1903,524 +1927,539 @@ YY_RULE_SETUP case 17: YY_RULE_SETUP #line 140 "util/configlexer.lex" -{ YDVAR(1, VAR_DO_DAEMONIZE) } +{ YDVAR(1, VAR_SSL_UPSTREAM) } YY_BREAK case 18: YY_RULE_SETUP #line 141 "util/configlexer.lex" -{ YDVAR(1, VAR_INTERFACE) } +{ YDVAR(1, VAR_SSL_SERVICE_KEY) } YY_BREAK case 19: YY_RULE_SETUP #line 142 "util/configlexer.lex" -{ YDVAR(1, VAR_OUTGOING_INTERFACE) } +{ YDVAR(1, VAR_SSL_SERVICE_PEM) } YY_BREAK case 20: YY_RULE_SETUP #line 143 "util/configlexer.lex" -{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) } +{ YDVAR(1, VAR_DO_DAEMONIZE) } YY_BREAK case 21: YY_RULE_SETUP #line 144 "util/configlexer.lex" -{ YDVAR(1, VAR_SO_RCVBUF) } +{ YDVAR(1, VAR_INTERFACE) } YY_BREAK case 22: YY_RULE_SETUP #line 145 "util/configlexer.lex" -{ YDVAR(1, VAR_SO_SNDBUF) } +{ YDVAR(1, VAR_OUTGOING_INTERFACE) } YY_BREAK case 23: YY_RULE_SETUP #line 146 "util/configlexer.lex" -{ YDVAR(1, VAR_CHROOT) } +{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) } YY_BREAK case 24: YY_RULE_SETUP #line 147 "util/configlexer.lex" -{ YDVAR(1, VAR_USERNAME) } +{ YDVAR(1, VAR_SO_RCVBUF) } YY_BREAK case 25: YY_RULE_SETUP #line 148 "util/configlexer.lex" -{ YDVAR(1, VAR_DIRECTORY) } +{ YDVAR(1, VAR_SO_SNDBUF) } YY_BREAK case 26: YY_RULE_SETUP #line 149 "util/configlexer.lex" -{ YDVAR(1, VAR_LOGFILE) } +{ YDVAR(1, VAR_CHROOT) } YY_BREAK case 27: YY_RULE_SETUP #line 150 "util/configlexer.lex" -{ YDVAR(1, VAR_PIDFILE) } +{ YDVAR(1, VAR_USERNAME) } YY_BREAK case 28: YY_RULE_SETUP #line 151 "util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_HINTS) } +{ YDVAR(1, VAR_DIRECTORY) } YY_BREAK case 29: YY_RULE_SETUP #line 152 "util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } +{ YDVAR(1, VAR_LOGFILE) } YY_BREAK case 30: YY_RULE_SETUP #line 153 "util/configlexer.lex" -{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } +{ YDVAR(1, VAR_PIDFILE) } YY_BREAK case 31: YY_RULE_SETUP #line 154 "util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SIZE) } +{ YDVAR(1, VAR_ROOT_HINTS) } YY_BREAK case 32: YY_RULE_SETUP #line 155 "util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SLABS) } +{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } YY_BREAK case 33: YY_RULE_SETUP #line 156 "util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } +{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } YY_BREAK case 34: YY_RULE_SETUP #line 157 "util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } +{ YDVAR(1, VAR_MSG_CACHE_SIZE) } YY_BREAK case 35: YY_RULE_SETUP #line 158 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MAX_TTL) } +{ YDVAR(1, VAR_MSG_CACHE_SLABS) } YY_BREAK case 36: YY_RULE_SETUP #line 159 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MIN_TTL) } +{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } YY_BREAK case 37: YY_RULE_SETUP #line 160 "util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_HOST_TTL) } +{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } YY_BREAK case 38: YY_RULE_SETUP #line 161 "util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_LAME_TTL) } +{ YDVAR(1, VAR_CACHE_MAX_TTL) } YY_BREAK case 39: YY_RULE_SETUP #line 162 "util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } +{ YDVAR(1, VAR_CACHE_MIN_TTL) } YY_BREAK case 40: YY_RULE_SETUP #line 163 "util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } +{ YDVAR(1, VAR_INFRA_HOST_TTL) } YY_BREAK case 41: YY_RULE_SETUP #line 164 "util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } +{ YDVAR(1, VAR_INFRA_LAME_TTL) } YY_BREAK case 42: YY_RULE_SETUP #line 165 "util/configlexer.lex" -{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } +{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } YY_BREAK case 43: YY_RULE_SETUP #line 166 "util/configlexer.lex" -{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } +{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } YY_BREAK case 44: YY_RULE_SETUP #line 167 "util/configlexer.lex" -{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } +{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } YY_BREAK case 45: YY_RULE_SETUP #line 168 "util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } +{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } YY_BREAK case 46: YY_RULE_SETUP #line 169 "util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } +{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } YY_BREAK case 47: YY_RULE_SETUP #line 170 "util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_GLUE) } +{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } YY_BREAK case 48: YY_RULE_SETUP #line 171 "util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } +{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } YY_BREAK case 49: YY_RULE_SETUP #line 172 "util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } +{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } YY_BREAK case 50: YY_RULE_SETUP #line 173 "util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } +{ YDVAR(1, VAR_HARDEN_GLUE) } YY_BREAK case 51: YY_RULE_SETUP #line 174 "util/configlexer.lex" -{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } +{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } YY_BREAK case 52: YY_RULE_SETUP #line 175 "util/configlexer.lex" -{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } +{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } YY_BREAK case 53: YY_RULE_SETUP #line 176 "util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_ADDRESS) } +{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } YY_BREAK case 54: YY_RULE_SETUP #line 177 "util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_DOMAIN) } +{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } YY_BREAK case 55: YY_RULE_SETUP #line 178 "util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH_KEY) } +{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } YY_BREAK case 56: YY_RULE_SETUP #line 179 "util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH) } +{ YDVAR(1, VAR_PRIVATE_ADDRESS) } YY_BREAK case 57: YY_RULE_SETUP #line 180 "util/configlexer.lex" -{ YDVAR(0, VAR_STUB_ZONE) } +{ YDVAR(1, VAR_PRIVATE_DOMAIN) } YY_BREAK case 58: YY_RULE_SETUP #line 181 "util/configlexer.lex" -{ YDVAR(1, VAR_NAME) } +{ YDVAR(1, VAR_PREFETCH_KEY) } YY_BREAK case 59: YY_RULE_SETUP #line 182 "util/configlexer.lex" -{ YDVAR(1, VAR_STUB_ADDR) } +{ YDVAR(1, VAR_PREFETCH) } YY_BREAK case 60: YY_RULE_SETUP #line 183 "util/configlexer.lex" -{ YDVAR(1, VAR_STUB_HOST) } +{ YDVAR(0, VAR_STUB_ZONE) } YY_BREAK case 61: YY_RULE_SETUP #line 184 "util/configlexer.lex" -{ YDVAR(1, VAR_STUB_PRIME) } +{ YDVAR(1, VAR_NAME) } YY_BREAK case 62: YY_RULE_SETUP #line 185 "util/configlexer.lex" -{ YDVAR(0, VAR_FORWARD_ZONE) } +{ YDVAR(1, VAR_STUB_ADDR) } YY_BREAK case 63: YY_RULE_SETUP #line 186 "util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_ADDR) } +{ YDVAR(1, VAR_STUB_HOST) } YY_BREAK case 64: YY_RULE_SETUP #line 187 "util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_HOST) } +{ YDVAR(1, VAR_STUB_PRIME) } YY_BREAK case 65: YY_RULE_SETUP #line 188 "util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } +{ YDVAR(0, VAR_FORWARD_ZONE) } YY_BREAK case 66: YY_RULE_SETUP #line 189 "util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } +{ YDVAR(1, VAR_FORWARD_ADDR) } YY_BREAK case 67: YY_RULE_SETUP #line 190 "util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL) } +{ YDVAR(1, VAR_FORWARD_HOST) } YY_BREAK case 68: YY_RULE_SETUP #line 191 "util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } YY_BREAK case 69: YY_RULE_SETUP #line 192 "util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } YY_BREAK case 70: YY_RULE_SETUP #line 193 "util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(2, VAR_ACCESS_CONTROL) } YY_BREAK case 71: YY_RULE_SETUP #line 194 "util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 72: YY_RULE_SETUP #line 195 "util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 73: YY_RULE_SETUP #line 196 "util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK case 74: YY_RULE_SETUP #line 197 "util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK case 75: YY_RULE_SETUP #line 198 "util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 76: YY_RULE_SETUP #line 199 "util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 77: YY_RULE_SETUP #line 200 "util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 78: YY_RULE_SETUP #line 201 "util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 79: YY_RULE_SETUP #line 202 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 80: YY_RULE_SETUP #line 203 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 81: YY_RULE_SETUP #line 204 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 82: YY_RULE_SETUP #line 205 "util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 83: YY_RULE_SETUP #line 206 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 84: YY_RULE_SETUP #line 207 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 85: YY_RULE_SETUP #line 208 "util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 86: YY_RULE_SETUP #line 209 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 87: YY_RULE_SETUP #line 210 "util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 88: YY_RULE_SETUP #line 211 "util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 89: YY_RULE_SETUP #line 212 "util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 90: YY_RULE_SETUP #line 213 "util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 91: YY_RULE_SETUP -#line 215 "util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +#line 214 "util/configlexer.lex" +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 92: YY_RULE_SETUP -#line 216 "util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +#line 215 "util/configlexer.lex" +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 93: YY_RULE_SETUP -#line 217 "util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +#line 216 "util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 94: YY_RULE_SETUP #line 218 "util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 95: YY_RULE_SETUP #line 219 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 96: YY_RULE_SETUP #line 220 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 97: YY_RULE_SETUP #line 221 "util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 98: YY_RULE_SETUP #line 222 "util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 99: YY_RULE_SETUP #line 223 "util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 100: YY_RULE_SETUP #line 224 "util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 101: YY_RULE_SETUP #line 225 "util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 102: YY_RULE_SETUP #line 226 "util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 103: YY_RULE_SETUP #line 227 "util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 104: YY_RULE_SETUP #line 228 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 105: YY_RULE_SETUP #line 229 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 106: YY_RULE_SETUP #line 230 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 107: YY_RULE_SETUP #line 231 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 108: YY_RULE_SETUP #line 232 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 109: YY_RULE_SETUP #line 233 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 110: YY_RULE_SETUP #line 234 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 111: YY_RULE_SETUP #line 235 "util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 112: YY_RULE_SETUP #line 236 "util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 113: YY_RULE_SETUP #line 237 "util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 114: -/* rule 114 can match eol */ YY_RULE_SETUP #line 238 "util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++; } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK -/* Quoted strings. Strip leading and ending quotes */ case 115: YY_RULE_SETUP +#line 239 "util/configlexer.lex" +{ YDVAR(0, VAR_PYTHON) } + YY_BREAK +case 116: +YY_RULE_SETUP +#line 240 "util/configlexer.lex" +{ YDVAR(1, VAR_DOMAIN_INSECURE) } + YY_BREAK +case 117: +/* rule 117 can match eol */ +YY_RULE_SETUP #line 241 "util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++; } + YY_BREAK +/* Quoted strings. Strip leading and ending quotes */ +case 118: +YY_RULE_SETUP +#line 244 "util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 242 "util/configlexer.lex" +#line 245 "util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 116: +case 119: YY_RULE_SETUP -#line 247 "util/configlexer.lex" +#line 250 "util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 117: -/* rule 117 can match eol */ +case 120: +/* rule 120 can match eol */ YY_RULE_SETUP -#line 248 "util/configlexer.lex" +#line 251 "util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 118: +case 121: YY_RULE_SETUP -#line 250 "util/configlexer.lex" +#line 253 "util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -2433,34 +2472,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 119: +case 122: YY_RULE_SETUP -#line 262 "util/configlexer.lex" +#line 265 "util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 263 "util/configlexer.lex" +#line 266 "util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 120: +case 123: YY_RULE_SETUP -#line 268 "util/configlexer.lex" +#line 271 "util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 121: -/* rule 121 can match eol */ +case 124: +/* rule 124 can match eol */ YY_RULE_SETUP -#line 269 "util/configlexer.lex" +#line 272 "util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 122: +case 125: YY_RULE_SETUP -#line 271 "util/configlexer.lex" +#line 274 "util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -2473,38 +2512,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 123: +case 126: YY_RULE_SETUP -#line 283 "util/configlexer.lex" +#line 286 "util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 285 "util/configlexer.lex" +#line 288 "util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 124: +case 127: YY_RULE_SETUP -#line 289 "util/configlexer.lex" +#line 292 "util/configlexer.lex" { LEXOUT(("ISP ")); /* ignore */ } YY_BREAK -case 125: -/* rule 125 can match eol */ +case 128: +/* rule 128 can match eol */ YY_RULE_SETUP -#line 290 "util/configlexer.lex" +#line 293 "util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK -case 126: +case 129: YY_RULE_SETUP -#line 291 "util/configlexer.lex" +#line 294 "util/configlexer.lex" { LEXOUT(("IQS ")); BEGIN(include_quoted); } YY_BREAK -case 127: +case 130: YY_RULE_SETUP -#line 292 "util/configlexer.lex" +#line 295 "util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include(yytext); @@ -2512,27 +2551,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 297 "util/configlexer.lex" +#line 300 "util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 128: +case 131: YY_RULE_SETUP -#line 301 "util/configlexer.lex" +#line 304 "util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 129: -/* rule 129 can match eol */ +case 132: +/* rule 132 can match eol */ YY_RULE_SETUP -#line 302 "util/configlexer.lex" +#line 305 "util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 130: +case 133: YY_RULE_SETUP -#line 304 "util/configlexer.lex" +#line 307 "util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -2542,7 +2581,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 310 "util/configlexer.lex" +#line 313 "util/configlexer.lex" { yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ if (config_include_stack_ptr == 0) { @@ -2553,33 +2592,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 131: +case 134: YY_RULE_SETUP -#line 320 "util/configlexer.lex" +#line 323 "util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 132: +case 135: YY_RULE_SETUP -#line 324 "util/configlexer.lex" +#line 327 "util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 133: +case 136: YY_RULE_SETUP -#line 328 "util/configlexer.lex" +#line 331 "util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 134: +case 137: YY_RULE_SETUP -#line 332 "util/configlexer.lex" +#line 335 "util/configlexer.lex" ECHO; YY_BREAK -#line 2581 "" +#line 2620 "" case YY_END_OF_BUFFER: { @@ -2869,7 +2908,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 >= 1270 ) + if ( yy_current_state >= 1298 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -2897,11 +2936,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 >= 1270 ) + if ( yy_current_state >= 1298 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 1269); + yy_is_jam = (yy_current_state == 1297); return yy_is_jam ? 0 : yy_current_state; } @@ -3538,7 +3577,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 332 "util/configlexer.lex" +#line 335 "util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index 938a2cebb..f1c9213ae 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -137,6 +137,9 @@ do-ip6{COLON} { YDVAR(1, VAR_DO_IP6) } do-udp{COLON} { YDVAR(1, VAR_DO_UDP) } do-tcp{COLON} { YDVAR(1, VAR_DO_TCP) } tcp-upstream{COLON} { YDVAR(1, VAR_TCP_UPSTREAM) } +ssl-upstream{COLON} { YDVAR(1, VAR_SSL_UPSTREAM) } +ssl-service-key{COLON} { YDVAR(1, VAR_SSL_SERVICE_KEY) } +ssl-service-pem{COLON} { YDVAR(1, VAR_SSL_SERVICE_PEM) } do-daemonize{COLON} { YDVAR(1, VAR_DO_DAEMONIZE) } interface{COLON} { YDVAR(1, VAR_INTERFACE) } outgoing-interface{COLON} { YDVAR(1, VAR_OUTGOING_INTERFACE) } diff --git a/util/configparser.c b/util/configparser.c index fab7d4b53..8fac0d216 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -241,7 +241,10 @@ extern struct config_parser_state* cfg_parser; VAR_HARDEN_BELOW_NXDOMAIN = 373, VAR_IGNORE_CD_FLAG = 374, VAR_LOG_QUERIES = 375, - VAR_TCP_UPSTREAM = 376 + VAR_TCP_UPSTREAM = 376, + VAR_SSL_UPSTREAM = 377, + VAR_SSL_SERVICE_KEY = 378, + VAR_SSL_SERVICE_PEM = 379 }; #endif /* Tokens. */ @@ -364,6 +367,9 @@ extern struct config_parser_state* cfg_parser; #define VAR_IGNORE_CD_FLAG 374 #define VAR_LOG_QUERIES 375 #define VAR_TCP_UPSTREAM 376 +#define VAR_SSL_UPSTREAM 377 +#define VAR_SSL_SERVICE_KEY 378 +#define VAR_SSL_SERVICE_PEM 379 @@ -380,7 +386,7 @@ typedef union YYSTYPE /* Line 214 of yacc.c */ -#line 384 "util/configparser.c" +#line 390 "util/configparser.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -392,7 +398,7 @@ typedef union YYSTYPE /* Line 264 of yacc.c */ -#line 396 "util/configparser.c" +#line 402 "util/configparser.c" #ifdef short # undef short @@ -607,20 +613,20 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 221 +#define YYLAST 227 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 122 +#define YYNTOKENS 125 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 125 +#define YYNNTS 128 /* YYNRULES -- Number of rules. */ -#define YYNRULES 237 +#define YYNRULES 243 /* YYNRULES -- Number of states. */ -#define YYNSTATES 347 +#define YYNSTATES 356 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 376 +#define YYMAXUTOK 379 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -665,7 +671,7 @@ static const yytype_uint8 yytranslate[] = 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 + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124 }; #if YYDEBUG @@ -683,113 +689,117 @@ static const yytype_uint16 yyprhs[] = 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, - 204, 206, 208, 210, 212, 214, 217, 218, 220, 222, - 224, 226, 228, 231, 232, 234, 236, 238, 241, 244, - 247, 250, 253, 256, 259, 262, 265, 268, 271, 274, - 277, 280, 283, 286, 289, 292, 295, 298, 301, 304, - 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, - 337, 340, 343, 346, 349, 352, 355, 358, 361, 364, - 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, - 397, 400, 403, 406, 409, 412, 415, 418, 421, 424, - 427, 430, 433, 436, 439, 442, 445, 448, 452, 455, - 458, 461, 464, 467, 470, 473, 476, 479, 482, 485, - 488, 491, 494, 497, 500, 503, 506, 510, 513, 516, - 519, 522, 525, 528, 531, 534, 537, 539, 542, 543, - 545, 547, 549, 551, 553, 555, 557, 560, 563, 566, - 569, 572, 575, 578, 580, 583, 584, 586 + 204, 206, 208, 210, 212, 214, 216, 218, 220, 223, + 224, 226, 228, 230, 232, 234, 237, 238, 240, 242, + 244, 247, 250, 253, 256, 259, 262, 265, 268, 271, + 274, 277, 280, 283, 286, 289, 292, 295, 298, 301, + 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, + 334, 337, 340, 343, 346, 349, 352, 355, 358, 361, + 364, 367, 370, 373, 376, 379, 382, 385, 388, 391, + 394, 397, 400, 403, 406, 409, 412, 415, 418, 421, + 424, 427, 430, 433, 436, 439, 442, 445, 448, 451, + 454, 457, 460, 463, 467, 470, 473, 476, 479, 482, + 485, 488, 491, 494, 497, 500, 503, 506, 509, 512, + 515, 518, 521, 525, 528, 531, 534, 537, 540, 543, + 546, 549, 552, 554, 557, 558, 560, 562, 564, 566, + 568, 570, 572, 575, 578, 581, 584, 587, 590, 593, + 595, 598, 599, 601 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int16 yyrhs[] = { - 123, 0, -1, -1, 123, 124, -1, 125, 126, -1, - 128, 129, -1, 131, 132, -1, 243, 244, -1, 233, - 234, -1, 11, -1, 126, 127, -1, -1, 134, -1, - 135, -1, 139, -1, 142, -1, 148, -1, 149, -1, - 150, -1, 151, -1, 140, -1, 157, -1, 158, -1, - 159, -1, 160, -1, 161, -1, 178, -1, 179, -1, - 180, -1, 182, -1, 183, -1, 145, -1, 184, -1, - 185, -1, 188, -1, 186, -1, 187, -1, 189, -1, - 190, -1, 191, -1, 202, -1, 170, -1, 171, -1, - 172, -1, 173, -1, 192, -1, 205, -1, 166, -1, - 168, -1, 206, -1, 211, -1, 212, -1, 213, -1, - 146, -1, 177, -1, 220, -1, 221, -1, 167, -1, - 216, -1, 154, -1, 141, -1, 162, -1, 203, -1, - 209, -1, 193, -1, 204, -1, 223, -1, 224, -1, - 147, -1, 136, -1, 153, -1, 196, -1, 137, -1, - 143, -1, 144, -1, 163, -1, 164, -1, 222, -1, - 195, -1, 197, -1, 198, -1, 138, -1, 225, -1, - 181, -1, 201, -1, 155, -1, 169, -1, 207, -1, - 208, -1, 210, -1, 215, -1, 165, -1, 217, -1, - 218, -1, 219, -1, 174, -1, 176, -1, 199, -1, - 200, -1, 175, -1, 194, -1, 214, -1, 156, -1, - 152, -1, 38, -1, 129, 130, -1, -1, 226, -1, - 227, -1, 228, -1, 229, -1, 44, -1, 132, 133, - -1, -1, 230, -1, 231, -1, 232, -1, 13, 10, - -1, 12, 10, -1, 76, 10, -1, 79, 10, -1, - 96, 10, -1, 14, 10, -1, 16, 10, -1, 67, - 10, -1, 15, 10, -1, 80, 10, -1, 81, 10, - -1, 31, 10, -1, 60, 10, -1, 75, 10, -1, - 17, 10, -1, 18, 10, -1, 19, 10, -1, 20, - 10, -1, 121, 10, -1, 77, 10, -1, 66, 10, - -1, 101, 10, -1, 120, 10, -1, 21, 10, -1, - 22, 10, -1, 23, 10, -1, 24, 10, -1, 25, - 10, -1, 68, 10, -1, 82, 10, -1, 83, 10, - -1, 109, 10, -1, 54, 10, -1, 64, 10, -1, - 55, 10, -1, 102, 10, -1, 48, 10, -1, 49, - 10, -1, 50, 10, -1, 51, 10, -1, 113, 10, - -1, 117, 10, -1, 114, 10, -1, 61, 10, -1, - 26, 10, -1, 27, 10, -1, 28, 10, -1, 98, - 10, -1, 29, 10, -1, 30, 10, -1, 32, 10, - -1, 33, 10, -1, 35, 10, -1, 36, 10, -1, - 34, 10, -1, 41, 10, -1, 42, 10, -1, 43, - 10, -1, 52, 10, -1, 71, 10, -1, 118, 10, - -1, 85, 10, -1, 78, 10, -1, 86, 10, -1, - 87, 10, -1, 115, 10, -1, 116, 10, -1, 100, - 10, -1, 47, 10, -1, 69, 10, -1, 72, 10, - 10, -1, 53, 10, -1, 56, 10, -1, 105, 10, - -1, 106, 10, -1, 70, 10, -1, 107, 10, -1, - 57, 10, -1, 58, 10, -1, 59, 10, -1, 119, - 10, -1, 108, 10, -1, 65, 10, -1, 111, 10, - -1, 112, 10, -1, 110, 10, -1, 62, 10, -1, - 63, 10, -1, 84, 10, -1, 73, 10, 10, -1, - 74, 10, -1, 97, 10, -1, 37, 10, -1, 39, - 10, -1, 40, 10, -1, 99, 10, -1, 37, 10, - -1, 45, 10, -1, 46, 10, -1, 88, -1, 234, - 235, -1, -1, 236, -1, 238, -1, 237, -1, 239, - -1, 240, -1, 241, -1, 242, -1, 89, 10, -1, - 91, 10, -1, 90, 10, -1, 92, 10, -1, 93, - 10, -1, 94, 10, -1, 95, 10, -1, 103, -1, - 244, 245, -1, -1, 246, -1, 104, 10, -1 + 126, 0, -1, -1, 126, 127, -1, 128, 129, -1, + 131, 132, -1, 134, 135, -1, 249, 250, -1, 239, + 240, -1, 11, -1, 129, 130, -1, -1, 137, -1, + 138, -1, 142, -1, 145, -1, 151, -1, 152, -1, + 153, -1, 154, -1, 143, -1, 163, -1, 164, -1, + 165, -1, 166, -1, 167, -1, 184, -1, 185, -1, + 186, -1, 188, -1, 189, -1, 148, -1, 190, -1, + 191, -1, 194, -1, 192, -1, 193, -1, 195, -1, + 196, -1, 197, -1, 208, -1, 176, -1, 177, -1, + 178, -1, 179, -1, 198, -1, 211, -1, 172, -1, + 174, -1, 212, -1, 217, -1, 218, -1, 219, -1, + 149, -1, 183, -1, 226, -1, 227, -1, 173, -1, + 222, -1, 160, -1, 144, -1, 168, -1, 209, -1, + 215, -1, 199, -1, 210, -1, 229, -1, 230, -1, + 150, -1, 139, -1, 159, -1, 202, -1, 140, -1, + 146, -1, 147, -1, 169, -1, 170, -1, 228, -1, + 201, -1, 203, -1, 204, -1, 141, -1, 231, -1, + 187, -1, 207, -1, 161, -1, 175, -1, 213, -1, + 214, -1, 216, -1, 221, -1, 171, -1, 223, -1, + 224, -1, 225, -1, 180, -1, 182, -1, 205, -1, + 206, -1, 181, -1, 200, -1, 220, -1, 162, -1, + 155, -1, 156, -1, 157, -1, 158, -1, 38, -1, + 132, 133, -1, -1, 232, -1, 233, -1, 234, -1, + 235, -1, 44, -1, 135, 136, -1, -1, 236, -1, + 237, -1, 238, -1, 13, 10, -1, 12, 10, -1, + 76, 10, -1, 79, 10, -1, 96, 10, -1, 14, + 10, -1, 16, 10, -1, 67, 10, -1, 15, 10, + -1, 80, 10, -1, 81, 10, -1, 31, 10, -1, + 60, 10, -1, 75, 10, -1, 17, 10, -1, 18, + 10, -1, 19, 10, -1, 20, 10, -1, 121, 10, + -1, 122, 10, -1, 123, 10, -1, 124, 10, -1, + 77, 10, -1, 66, 10, -1, 101, 10, -1, 120, + 10, -1, 21, 10, -1, 22, 10, -1, 23, 10, + -1, 24, 10, -1, 25, 10, -1, 68, 10, -1, + 82, 10, -1, 83, 10, -1, 109, 10, -1, 54, + 10, -1, 64, 10, -1, 55, 10, -1, 102, 10, + -1, 48, 10, -1, 49, 10, -1, 50, 10, -1, + 51, 10, -1, 113, 10, -1, 117, 10, -1, 114, + 10, -1, 61, 10, -1, 26, 10, -1, 27, 10, + -1, 28, 10, -1, 98, 10, -1, 29, 10, -1, + 30, 10, -1, 32, 10, -1, 33, 10, -1, 35, + 10, -1, 36, 10, -1, 34, 10, -1, 41, 10, + -1, 42, 10, -1, 43, 10, -1, 52, 10, -1, + 71, 10, -1, 118, 10, -1, 85, 10, -1, 78, + 10, -1, 86, 10, -1, 87, 10, -1, 115, 10, + -1, 116, 10, -1, 100, 10, -1, 47, 10, -1, + 69, 10, -1, 72, 10, 10, -1, 53, 10, -1, + 56, 10, -1, 105, 10, -1, 106, 10, -1, 70, + 10, -1, 107, 10, -1, 57, 10, -1, 58, 10, + -1, 59, 10, -1, 119, 10, -1, 108, 10, -1, + 65, 10, -1, 111, 10, -1, 112, 10, -1, 110, + 10, -1, 62, 10, -1, 63, 10, -1, 84, 10, + -1, 73, 10, 10, -1, 74, 10, -1, 97, 10, + -1, 37, 10, -1, 39, 10, -1, 40, 10, -1, + 99, 10, -1, 37, 10, -1, 45, 10, -1, 46, + 10, -1, 88, -1, 240, 241, -1, -1, 242, -1, + 244, -1, 243, -1, 245, -1, 246, -1, 247, -1, + 248, -1, 89, 10, -1, 91, 10, -1, 90, 10, + -1, 92, 10, -1, 93, 10, -1, 94, 10, -1, + 95, 10, -1, 103, -1, 250, 251, -1, -1, 252, + -1, 104, 10, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 108, 108, 108, 109, 109, 110, 110, 111, 115, - 120, 121, 122, 122, 122, 123, 123, 124, 124, 124, - 125, 125, 125, 126, 126, 126, 127, 127, 128, 128, - 129, 129, 130, 130, 131, 131, 132, 132, 133, 133, - 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, - 137, 138, 138, 139, 139, 140, 140, 141, 141, 142, - 142, 142, 143, 143, 144, 144, 145, 145, 145, 146, - 146, 147, 147, 148, 148, 149, 149, 149, 150, 150, - 151, 151, 152, 152, 153, 153, 154, 154, 155, 155, - 155, 156, 156, 157, 157, 157, 158, 158, 158, 159, - 159, 159, 160, 160, 162, 174, 175, 176, 176, 176, - 176, 178, 190, 191, 192, 192, 192, 194, 203, 212, - 223, 232, 241, 250, 263, 278, 287, 296, 305, 314, - 323, 332, 341, 350, 359, 368, 377, 386, 400, 409, - 418, 425, 432, 439, 447, 454, 461, 468, 475, 483, - 491, 499, 506, 513, 522, 531, 538, 545, 553, 561, - 574, 585, 593, 606, 615, 624, 632, 645, 654, 662, - 671, 679, 692, 699, 709, 719, 729, 739, 749, 759, - 769, 776, 783, 792, 801, 810, 817, 827, 841, 848, - 866, 879, 892, 901, 910, 919, 929, 939, 948, 957, - 964, 973, 982, 991, 999, 1012, 1020, 1042, 1049, 1064, - 1074, 1081, 1088, 1098, 1108, 1115, 1122, 1127, 1128, 1129, - 1129, 1129, 1130, 1130, 1130, 1131, 1133, 1143, 1152, 1159, - 1166, 1173, 1180, 1187, 1192, 1193, 1194, 1196 + 0, 109, 109, 109, 110, 110, 111, 111, 112, 116, + 121, 122, 123, 123, 123, 124, 124, 125, 125, 125, + 126, 126, 126, 127, 127, 127, 128, 128, 129, 129, + 130, 130, 131, 131, 132, 132, 133, 133, 134, 134, + 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, + 138, 139, 139, 140, 140, 141, 141, 142, 142, 143, + 143, 143, 144, 144, 145, 145, 146, 146, 146, 147, + 147, 148, 148, 149, 149, 150, 150, 150, 151, 151, + 152, 152, 153, 153, 154, 154, 155, 155, 156, 156, + 156, 157, 157, 158, 158, 158, 159, 159, 159, 160, + 160, 160, 161, 161, 161, 162, 162, 164, 176, 177, + 178, 178, 178, 178, 180, 192, 193, 194, 194, 194, + 196, 205, 214, 225, 234, 243, 252, 265, 280, 289, + 298, 307, 316, 325, 334, 343, 352, 361, 370, 379, + 388, 395, 402, 411, 425, 434, 443, 450, 457, 464, + 472, 479, 486, 493, 500, 508, 516, 524, 531, 538, + 547, 556, 563, 570, 578, 586, 599, 610, 618, 631, + 640, 649, 657, 670, 679, 687, 696, 704, 717, 724, + 734, 744, 754, 764, 774, 784, 794, 801, 808, 817, + 826, 835, 842, 852, 866, 873, 891, 904, 917, 926, + 935, 944, 954, 964, 973, 982, 989, 998, 1007, 1016, + 1024, 1037, 1045, 1067, 1074, 1089, 1099, 1106, 1113, 1123, + 1133, 1140, 1147, 1152, 1153, 1154, 1154, 1154, 1155, 1155, + 1155, 1156, 1158, 1168, 1177, 1184, 1191, 1198, 1205, 1212, + 1217, 1218, 1219, 1221 }; #endif @@ -836,7 +846,8 @@ static const char *const yytname[] = "VAR_ADD_HOLDDOWN", "VAR_DEL_HOLDDOWN", "VAR_SO_RCVBUF", "VAR_EDNS_BUFFER_SIZE", "VAR_PREFETCH", "VAR_PREFETCH_KEY", "VAR_SO_SNDBUF", "VAR_HARDEN_BELOW_NXDOMAIN", "VAR_IGNORE_CD_FLAG", - "VAR_LOG_QUERIES", "VAR_TCP_UPSTREAM", "$accept", "toplevelvars", + "VAR_LOG_QUERIES", "VAR_TCP_UPSTREAM", "VAR_SSL_UPSTREAM", + "VAR_SSL_SERVICE_KEY", "VAR_SSL_SERVICE_PEM", "$accept", "toplevelvars", "toplevelvar", "serverstart", "contents_server", "content_server", "stubstart", "contents_stub", "content_stub", "forwardstart", "contents_forward", "content_forward", "server_num_threads", @@ -847,31 +858,33 @@ static const char *const yytname[] = "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_tcp_upstream", - "server_do_daemonize", "server_use_syslog", "server_log_time_ascii", - "server_log_queries", "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_domain_insecure", "server_hide_identity", "server_hide_version", - "server_identity", "server_version", "server_so_rcvbuf", - "server_so_sndbuf", "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_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_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_use_caps_for_id", "server_private_address", - "server_private_domain", "server_prefetch", "server_prefetch_key", - "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_min_ttl", "server_bogus_ttl", + "server_ssl_upstream", "server_ssl_service_key", + "server_ssl_service_pem", "server_do_daemonize", "server_use_syslog", + "server_log_time_ascii", "server_log_queries", "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_domain_insecure", "server_hide_identity", + "server_hide_version", "server_identity", "server_version", + "server_so_rcvbuf", "server_so_sndbuf", "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_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_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_use_caps_for_id", + "server_private_address", "server_private_domain", "server_prefetch", + "server_prefetch_key", "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_min_ttl", "server_bogus_ttl", "server_val_clean_additional", "server_val_permissive_mode", "server_ignore_cd_flag", "server_val_log_level", "server_val_nsec3_keysize_iterations", "server_add_holddown", @@ -904,25 +917,25 @@ static const yytype_uint16 yytoknum[] = 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 + 375, 376, 377, 378, 379 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 122, 123, 123, 124, 124, 124, 124, 124, 125, - 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 128, 129, 129, 130, 130, 130, - 130, 131, 132, 132, 133, 133, 133, 134, 135, 136, + 0, 125, 126, 126, 127, 127, 127, 127, 127, 128, + 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 131, 132, 132, + 133, 133, 133, 133, 134, 135, 135, 136, 136, 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, @@ -932,9 +945,10 @@ static const yytype_uint8 yyr1[] = 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, 234, 235, - 235, 235, 235, 235, 235, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 244, 245, 246 + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 240, 241, 241, 241, 241, 241, + 241, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 250, 251, 252 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -950,20 +964,21 @@ 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, 2, 0, 1, 1, 1, - 1, 1, 2, 0, 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, 3, 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, 1, 2, 0, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 1, 2, 0, 1, 2 + 2, 2, 2, 3, 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, 1, 2, 0, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, + 2, 0, 1, 2 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -971,8 +986,8 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 2, 0, 1, 9, 104, 111, 216, 233, 3, 11, - 106, 113, 218, 235, 4, 5, 6, 8, 7, 0, + 2, 0, 1, 9, 107, 114, 222, 239, 3, 11, + 109, 116, 224, 241, 4, 5, 6, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -982,48 +997,49 @@ static const yytype_uint8 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, 10, 12, 13, 69, 72, 81, 14, 20, 60, - 15, 73, 74, 31, 53, 68, 16, 17, 18, 19, - 103, 70, 59, 85, 102, 21, 22, 23, 24, 25, - 61, 75, 76, 91, 47, 57, 48, 86, 41, 42, - 43, 44, 95, 99, 96, 54, 26, 27, 28, 83, - 29, 30, 32, 33, 35, 36, 34, 37, 38, 39, - 45, 64, 100, 78, 71, 79, 80, 97, 98, 84, - 40, 62, 65, 46, 49, 87, 88, 63, 89, 50, - 51, 52, 101, 90, 58, 92, 93, 94, 55, 56, - 77, 66, 67, 82, 0, 0, 0, 0, 105, 107, - 108, 109, 110, 0, 0, 0, 112, 114, 115, 116, - 0, 0, 0, 0, 0, 0, 0, 217, 219, 221, - 220, 222, 223, 224, 225, 0, 234, 236, 118, 117, - 122, 125, 123, 131, 132, 133, 134, 140, 141, 142, - 143, 144, 161, 162, 163, 165, 166, 128, 167, 168, - 171, 169, 170, 172, 173, 174, 185, 153, 154, 155, - 156, 175, 188, 149, 151, 189, 194, 195, 196, 129, - 160, 203, 204, 150, 199, 137, 124, 145, 186, 192, - 176, 0, 0, 207, 130, 119, 136, 179, 120, 126, - 127, 146, 147, 205, 178, 180, 181, 121, 208, 164, - 184, 138, 152, 190, 191, 193, 198, 148, 202, 200, - 201, 157, 159, 182, 183, 158, 177, 197, 139, 135, - 209, 210, 211, 212, 213, 214, 215, 226, 228, 227, - 229, 230, 231, 232, 237, 187, 206 + 0, 0, 0, 0, 10, 12, 13, 69, 72, 81, + 14, 20, 60, 15, 73, 74, 31, 53, 68, 16, + 17, 18, 19, 103, 104, 105, 106, 70, 59, 85, + 102, 21, 22, 23, 24, 25, 61, 75, 76, 91, + 47, 57, 48, 86, 41, 42, 43, 44, 95, 99, + 96, 54, 26, 27, 28, 83, 29, 30, 32, 33, + 35, 36, 34, 37, 38, 39, 45, 64, 100, 78, + 71, 79, 80, 97, 98, 84, 40, 62, 65, 46, + 49, 87, 88, 63, 89, 50, 51, 52, 101, 90, + 58, 92, 93, 94, 55, 56, 77, 66, 67, 82, + 0, 0, 0, 0, 108, 110, 111, 112, 113, 0, + 0, 0, 115, 117, 118, 119, 0, 0, 0, 0, + 0, 0, 0, 223, 225, 227, 226, 228, 229, 230, + 231, 0, 240, 242, 121, 120, 125, 128, 126, 134, + 135, 136, 137, 146, 147, 148, 149, 150, 167, 168, + 169, 171, 172, 131, 173, 174, 177, 175, 176, 178, + 179, 180, 191, 159, 160, 161, 162, 181, 194, 155, + 157, 195, 200, 201, 202, 132, 166, 209, 210, 156, + 205, 143, 127, 151, 192, 198, 182, 0, 0, 213, + 133, 122, 142, 185, 123, 129, 130, 152, 153, 211, + 184, 186, 187, 124, 214, 170, 190, 144, 158, 196, + 197, 199, 204, 154, 208, 206, 207, 163, 165, 188, + 189, 164, 183, 203, 145, 138, 139, 140, 141, 215, + 216, 217, 218, 219, 220, 221, 232, 234, 233, 235, + 236, 237, 238, 243, 193, 212 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 8, 9, 14, 111, 10, 15, 208, 11, - 16, 216, 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, 209, 210, 211, 212, 217, 218, - 219, 12, 17, 227, 228, 229, 230, 231, 232, 233, - 234, 13, 18, 236, 237 + -1, 1, 8, 9, 14, 114, 10, 15, 214, 11, + 16, 222, 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, 215, 216, 217, + 218, 223, 224, 225, 12, 17, 233, 234, 235, 236, + 237, 238, 239, 240, 13, 18, 242, 243 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing @@ -1033,16 +1049,16 @@ static const yytype_int16 yypact[] = { -80, 76, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -12, 40, 46, 32, -79, 16, - 17, 18, 22, 23, 24, 68, 71, 72, 100, 101, - 102, 103, 105, 106, 107, 108, 109, 118, 119, 120, - 121, 122, 123, 124, 125, 126, 127, 128, 130, 131, - 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, - 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, - 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, - 163, 164, 165, 166, 167, 168, 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, -80, -80, -80, -80, -80, -80, -80, -80, -80, + 17, 18, 22, 23, 24, 68, 71, 72, 103, 105, + 106, 107, 108, 109, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 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, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, @@ -1051,21 +1067,22 @@ static const yytype_int16 yypact[] = -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, - -80, -80, -80, -80, 195, 196, 197, 198, -80, -80, - -80, -80, -80, 199, 200, 201, -80, -80, -80, -80, - 202, 203, 204, 205, 206, 207, 208, -80, -80, -80, - -80, -80, -80, -80, -80, 209, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + 201, 202, 203, 204, -80, -80, -80, -80, -80, 205, + 206, 207, -80, -80, -80, -80, 208, 209, 210, 211, + 212, 213, 214, -80, -80, -80, -80, -80, -80, -80, + -80, 215, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, - -80, 210, 211, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, 216, 217, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, - -80, -80, -80, -80, -80, -80, -80 + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80 }; /* YYPGOTO[NTERM-NUM]. */ @@ -1083,7 +1100,7 @@ static const yytype_int8 yypgoto[] = -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, - -80, -80, -80, -80, -80 + -80, -80, -80, -80, -80, -80, -80, -80 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -1095,27 +1112,27 @@ static const yytype_uint16 yytable[] = { 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, 235, 238, 239, 240, 44, - 45, 46, 241, 242, 243, 47, 48, 49, 50, 51, + 39, 40, 41, 42, 43, 241, 244, 245, 246, 44, + 45, 46, 247, 248, 249, 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, 2, 204, 244, 205, - 206, 245, 246, 213, 88, 89, 90, 3, 91, 92, - 93, 214, 215, 94, 95, 96, 97, 98, 99, 100, + 82, 83, 84, 85, 86, 87, 2, 210, 250, 211, + 212, 251, 252, 219, 88, 89, 90, 3, 91, 92, + 93, 220, 221, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 247, 248, 249, 250, 4, 251, 252, 253, 254, 255, - 5, 220, 221, 222, 223, 224, 225, 226, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 207, - 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 287, 288, 289, 290, 6, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 7, - 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 + 111, 112, 113, 253, 4, 254, 255, 256, 257, 258, + 5, 226, 227, 228, 229, 230, 231, 232, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 213, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 6, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 7, + 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 }; static const yytype_uint8 yycheck[] = @@ -1131,7 +1148,7 @@ static const yytype_uint8 yycheck[] = 40, 10, 10, 37, 96, 97, 98, 11, 100, 101, 102, 45, 46, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - 10, 10, 10, 10, 38, 10, 10, 10, 10, 10, + 122, 123, 124, 10, 38, 10, 10, 10, 10, 10, 44, 89, 90, 91, 92, 93, 94, 95, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 99, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1142,15 +1159,15 @@ static const yytype_uint8 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 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { - 0, 123, 0, 11, 38, 44, 88, 103, 124, 125, - 128, 131, 233, 243, 126, 129, 132, 234, 244, 12, + 0, 126, 0, 11, 38, 44, 88, 103, 127, 128, + 131, 134, 239, 249, 129, 132, 135, 240, 250, 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, 41, 42, 43, 47, 48, 49, @@ -1160,7 +1177,7 @@ static const yytype_uint8 yystos[] = 80, 81, 82, 83, 84, 85, 86, 87, 96, 97, 98, 100, 101, 102, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 127, 134, 135, 136, 137, 138, 139, 140, 141, + 121, 122, 123, 124, 130, 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, @@ -1169,10 +1186,11 @@ static const yytype_uint8 yystos[] = 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, 37, 39, 40, 99, 130, 226, - 227, 228, 229, 37, 45, 46, 133, 230, 231, 232, - 89, 90, 91, 92, 93, 94, 95, 235, 236, 237, - 238, 239, 240, 241, 242, 104, 245, 246, 10, 10, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 37, 39, 40, 99, 133, 232, 233, 234, 235, 37, + 45, 46, 136, 236, 237, 238, 89, 90, 91, 92, + 93, 94, 95, 241, 242, 243, 244, 245, 246, 247, + 248, 104, 251, 252, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1183,7 +1201,7 @@ static const yytype_uint8 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 }; #define yyerrok (yyerrstatus = 0) @@ -2006,16 +2024,16 @@ yyreduce: case 9: /* Line 1464 of yacc.c */ -#line 116 "util/configparser.y" +#line 117 "util/configparser.y" { OUTYY(("\nP(server:)\n")); } break; - case 104: + case 107: /* Line 1464 of yacc.c */ -#line 163 "util/configparser.y" +#line 165 "util/configparser.y" { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2028,10 +2046,10 @@ yyreduce: } break; - case 111: + case 114: /* Line 1464 of yacc.c */ -#line 179 "util/configparser.y" +#line 181 "util/configparser.y" { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2044,10 +2062,10 @@ yyreduce: } break; - case 117: + case 120: /* Line 1464 of yacc.c */ -#line 195 "util/configparser.y" +#line 197 "util/configparser.y" { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -2057,10 +2075,10 @@ yyreduce: } break; - case 118: + case 121: /* Line 1464 of yacc.c */ -#line 204 "util/configparser.y" +#line 206 "util/configparser.y" { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -2070,10 +2088,10 @@ yyreduce: } break; - case 119: + case 122: /* Line 1464 of yacc.c */ -#line 213 "util/configparser.y" +#line 215 "util/configparser.y" { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "") == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) @@ -2085,10 +2103,10 @@ yyreduce: } break; - case 120: + case 123: /* Line 1464 of yacc.c */ -#line 224 "util/configparser.y" +#line 226 "util/configparser.y" { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2098,10 +2116,10 @@ yyreduce: } break; - case 121: + case 124: /* Line 1464 of yacc.c */ -#line 233 "util/configparser.y" +#line 235 "util/configparser.y" { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2111,10 +2129,10 @@ yyreduce: } break; - case 122: + case 125: /* Line 1464 of yacc.c */ -#line 242 "util/configparser.y" +#line 244 "util/configparser.y" { OUTYY(("P(server_port:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2124,10 +2142,10 @@ yyreduce: } break; - case 123: + case 126: /* Line 1464 of yacc.c */ -#line 251 "util/configparser.y" +#line 253 "util/configparser.y" { OUTYY(("P(server_interface:%s)\n", (yyvsp[(2) - (2)].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -2141,10 +2159,10 @@ yyreduce: } break; - case 124: + case 127: /* Line 1464 of yacc.c */ -#line 264 "util/configparser.y" +#line 266 "util/configparser.y" { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[(2) - (2)].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -2160,10 +2178,10 @@ yyreduce: } break; - case 125: + case 128: /* Line 1464 of yacc.c */ -#line 279 "util/configparser.y" +#line 281 "util/configparser.y" { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2173,10 +2191,10 @@ yyreduce: } break; - case 126: + case 129: /* Line 1464 of yacc.c */ -#line 288 "util/configparser.y" +#line 290 "util/configparser.y" { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_mark_ports((yyvsp[(2) - (2)].str), 1, @@ -2186,10 +2204,10 @@ yyreduce: } break; - case 127: + case 130: /* Line 1464 of yacc.c */ -#line 297 "util/configparser.y" +#line 299 "util/configparser.y" { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_mark_ports((yyvsp[(2) - (2)].str), 0, @@ -2199,10 +2217,10 @@ yyreduce: } break; - case 128: + case 131: /* Line 1464 of yacc.c */ -#line 306 "util/configparser.y" +#line 308 "util/configparser.y" { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -2212,10 +2230,10 @@ yyreduce: } break; - case 129: + case 132: /* Line 1464 of yacc.c */ -#line 315 "util/configparser.y" +#line 317 "util/configparser.y" { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -2225,10 +2243,10 @@ yyreduce: } break; - case 130: + case 133: /* Line 1464 of yacc.c */ -#line 324 "util/configparser.y" +#line 326 "util/configparser.y" { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2238,10 +2256,10 @@ yyreduce: } break; - case 131: + case 134: /* Line 1464 of yacc.c */ -#line 333 "util/configparser.y" +#line 335 "util/configparser.y" { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2251,10 +2269,10 @@ yyreduce: } break; - case 132: + case 135: /* Line 1464 of yacc.c */ -#line 342 "util/configparser.y" +#line 344 "util/configparser.y" { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2264,10 +2282,10 @@ yyreduce: } break; - case 133: + case 136: /* Line 1464 of yacc.c */ -#line 351 "util/configparser.y" +#line 353 "util/configparser.y" { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2277,10 +2295,10 @@ yyreduce: } break; - case 134: + case 137: /* Line 1464 of yacc.c */ -#line 360 "util/configparser.y" +#line 362 "util/configparser.y" { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2290,10 +2308,10 @@ yyreduce: } break; - case 135: + case 138: /* Line 1464 of yacc.c */ -#line 369 "util/configparser.y" +#line 371 "util/configparser.y" { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2303,10 +2321,45 @@ yyreduce: } break; - case 136: + case 139: + +/* Line 1464 of yacc.c */ +#line 380 "util/configparser.y" + { + OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[(2) - (2)].str))); + if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); + free((yyvsp[(2) - (2)].str)); + } + break; + + case 140: /* Line 1464 of yacc.c */ -#line 378 "util/configparser.y" +#line 389 "util/configparser.y" + { + OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->ssl_service_key); + cfg_parser->cfg->ssl_service_key = (yyvsp[(2) - (2)].str); + } + break; + + case 141: + +/* Line 1464 of yacc.c */ +#line 396 "util/configparser.y" + { + OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[(2) - (2)].str))); + free(cfg_parser->cfg->ssl_service_pem); + cfg_parser->cfg->ssl_service_pem = (yyvsp[(2) - (2)].str); + } + break; + + case 142: + +/* Line 1464 of yacc.c */ +#line 403 "util/configparser.y" { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2316,10 +2369,10 @@ yyreduce: } break; - case 137: + case 143: /* Line 1464 of yacc.c */ -#line 387 "util/configparser.y" +#line 412 "util/configparser.y" { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2334,10 +2387,10 @@ yyreduce: } break; - case 138: + case 144: /* Line 1464 of yacc.c */ -#line 401 "util/configparser.y" +#line 426 "util/configparser.y" { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2347,10 +2400,10 @@ yyreduce: } break; - case 139: + case 145: /* Line 1464 of yacc.c */ -#line 410 "util/configparser.y" +#line 435 "util/configparser.y" { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2360,10 +2413,10 @@ yyreduce: } break; - case 140: + case 146: /* Line 1464 of yacc.c */ -#line 419 "util/configparser.y" +#line 444 "util/configparser.y" { OUTYY(("P(server_chroot:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->chrootdir); @@ -2371,10 +2424,10 @@ yyreduce: } break; - case 141: + case 147: /* Line 1464 of yacc.c */ -#line 426 "util/configparser.y" +#line 451 "util/configparser.y" { OUTYY(("P(server_username:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->username); @@ -2382,10 +2435,10 @@ yyreduce: } break; - case 142: + case 148: /* Line 1464 of yacc.c */ -#line 433 "util/configparser.y" +#line 458 "util/configparser.y" { OUTYY(("P(server_directory:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->directory); @@ -2393,10 +2446,10 @@ yyreduce: } break; - case 143: + case 149: /* Line 1464 of yacc.c */ -#line 440 "util/configparser.y" +#line 465 "util/configparser.y" { OUTYY(("P(server_logfile:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->logfile); @@ -2405,10 +2458,10 @@ yyreduce: } break; - case 144: + case 150: /* Line 1464 of yacc.c */ -#line 448 "util/configparser.y" +#line 473 "util/configparser.y" { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->pidfile); @@ -2416,10 +2469,10 @@ yyreduce: } break; - case 145: + case 151: /* Line 1464 of yacc.c */ -#line 455 "util/configparser.y" +#line 480 "util/configparser.y" { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[(2) - (2)].str))) @@ -2427,10 +2480,10 @@ yyreduce: } break; - case 146: + case 152: /* Line 1464 of yacc.c */ -#line 462 "util/configparser.y" +#line 487 "util/configparser.y" { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->dlv_anchor_file); @@ -2438,10 +2491,10 @@ yyreduce: } break; - case 147: + case 153: /* Line 1464 of yacc.c */ -#line 469 "util/configparser.y" +#line 494 "util/configparser.y" { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[(2) - (2)].str))) @@ -2449,10 +2502,10 @@ yyreduce: } break; - case 148: + case 154: /* Line 1464 of yacc.c */ -#line 476 "util/configparser.y" +#line 501 "util/configparser.y" { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> @@ -2461,10 +2514,10 @@ yyreduce: } break; - case 149: + case 155: /* Line 1464 of yacc.c */ -#line 484 "util/configparser.y" +#line 509 "util/configparser.y" { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> @@ -2473,10 +2526,10 @@ yyreduce: } break; - case 150: + case 156: /* Line 1464 of yacc.c */ -#line 492 "util/configparser.y" +#line 517 "util/configparser.y" { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> @@ -2485,10 +2538,10 @@ yyreduce: } break; - case 151: + case 157: /* Line 1464 of yacc.c */ -#line 500 "util/configparser.y" +#line 525 "util/configparser.y" { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[(2) - (2)].str))) @@ -2496,10 +2549,10 @@ yyreduce: } break; - case 152: + case 158: /* Line 1464 of yacc.c */ -#line 507 "util/configparser.y" +#line 532 "util/configparser.y" { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[(2) - (2)].str))) @@ -2507,10 +2560,10 @@ yyreduce: } break; - case 153: + case 159: /* Line 1464 of yacc.c */ -#line 514 "util/configparser.y" +#line 539 "util/configparser.y" { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2520,10 +2573,10 @@ yyreduce: } break; - case 154: + case 160: /* Line 1464 of yacc.c */ -#line 523 "util/configparser.y" +#line 548 "util/configparser.y" { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2533,10 +2586,10 @@ yyreduce: } break; - case 155: + case 161: /* Line 1464 of yacc.c */ -#line 532 "util/configparser.y" +#line 557 "util/configparser.y" { OUTYY(("P(server_identity:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->identity); @@ -2544,10 +2597,10 @@ yyreduce: } break; - case 156: + case 162: /* Line 1464 of yacc.c */ -#line 539 "util/configparser.y" +#line 564 "util/configparser.y" { OUTYY(("P(server_version:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->version); @@ -2555,10 +2608,10 @@ yyreduce: } break; - case 157: + case 163: /* Line 1464 of yacc.c */ -#line 546 "util/configparser.y" +#line 571 "util/configparser.y" { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->so_rcvbuf)) @@ -2567,10 +2620,10 @@ yyreduce: } break; - case 158: + case 164: /* Line 1464 of yacc.c */ -#line 554 "util/configparser.y" +#line 579 "util/configparser.y" { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->so_sndbuf)) @@ -2579,10 +2632,10 @@ yyreduce: } break; - case 159: + case 165: /* Line 1464 of yacc.c */ -#line 562 "util/configparser.y" +#line 587 "util/configparser.y" { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2596,10 +2649,10 @@ yyreduce: } break; - case 160: + case 166: /* Line 1464 of yacc.c */ -#line 575 "util/configparser.y" +#line 600 "util/configparser.y" { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2611,10 +2664,10 @@ yyreduce: } break; - case 161: + case 167: /* Line 1464 of yacc.c */ -#line 586 "util/configparser.y" +#line 611 "util/configparser.y" { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->msg_cache_size)) @@ -2623,10 +2676,10 @@ yyreduce: } break; - case 162: + case 168: /* Line 1464 of yacc.c */ -#line 594 "util/configparser.y" +#line 619 "util/configparser.y" { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2640,10 +2693,10 @@ yyreduce: } break; - case 163: + case 169: /* Line 1464 of yacc.c */ -#line 607 "util/configparser.y" +#line 632 "util/configparser.y" { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2653,10 +2706,10 @@ yyreduce: } break; - case 164: + case 170: /* Line 1464 of yacc.c */ -#line 616 "util/configparser.y" +#line 641 "util/configparser.y" { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -2666,10 +2719,10 @@ yyreduce: } break; - case 165: + case 171: /* Line 1464 of yacc.c */ -#line 625 "util/configparser.y" +#line 650 "util/configparser.y" { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->rrset_cache_size)) @@ -2678,10 +2731,10 @@ yyreduce: } break; - case 166: + case 172: /* Line 1464 of yacc.c */ -#line 633 "util/configparser.y" +#line 658 "util/configparser.y" { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2695,10 +2748,10 @@ yyreduce: } break; - case 167: + case 173: /* Line 1464 of yacc.c */ -#line 646 "util/configparser.y" +#line 671 "util/configparser.y" { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -2708,10 +2761,10 @@ yyreduce: } break; - case 168: + case 174: /* Line 1464 of yacc.c */ -#line 655 "util/configparser.y" +#line 680 "util/configparser.y" { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[(2) - (2)].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " @@ -2720,10 +2773,10 @@ yyreduce: } break; - case 169: + case 175: /* Line 1464 of yacc.c */ -#line 663 "util/configparser.y" +#line 688 "util/configparser.y" { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2733,10 +2786,10 @@ yyreduce: } break; - case 170: + case 176: /* Line 1464 of yacc.c */ -#line 672 "util/configparser.y" +#line 697 "util/configparser.y" { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[(2) - (2)].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " @@ -2745,10 +2798,10 @@ yyreduce: } break; - case 171: + case 177: /* Line 1464 of yacc.c */ -#line 680 "util/configparser.y" +#line 705 "util/configparser.y" { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2762,10 +2815,10 @@ yyreduce: } break; - case 172: + case 178: /* Line 1464 of yacc.c */ -#line 693 "util/configparser.y" +#line 718 "util/configparser.y" { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->target_fetch_policy); @@ -2773,10 +2826,10 @@ yyreduce: } break; - case 173: + case 179: /* Line 1464 of yacc.c */ -#line 700 "util/configparser.y" +#line 725 "util/configparser.y" { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2787,10 +2840,10 @@ yyreduce: } break; - case 174: + case 180: /* Line 1464 of yacc.c */ -#line 710 "util/configparser.y" +#line 735 "util/configparser.y" { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2801,10 +2854,10 @@ yyreduce: } break; - case 175: + case 181: /* Line 1464 of yacc.c */ -#line 720 "util/configparser.y" +#line 745 "util/configparser.y" { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2815,10 +2868,10 @@ yyreduce: } break; - case 176: + case 182: /* Line 1464 of yacc.c */ -#line 730 "util/configparser.y" +#line 755 "util/configparser.y" { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2829,10 +2882,10 @@ yyreduce: } break; - case 177: + case 183: /* Line 1464 of yacc.c */ -#line 740 "util/configparser.y" +#line 765 "util/configparser.y" { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2843,10 +2896,10 @@ yyreduce: } break; - case 178: + case 184: /* Line 1464 of yacc.c */ -#line 750 "util/configparser.y" +#line 775 "util/configparser.y" { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2857,10 +2910,10 @@ yyreduce: } break; - case 179: + case 185: /* Line 1464 of yacc.c */ -#line 760 "util/configparser.y" +#line 785 "util/configparser.y" { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2871,10 +2924,10 @@ yyreduce: } break; - case 180: + case 186: /* Line 1464 of yacc.c */ -#line 770 "util/configparser.y" +#line 795 "util/configparser.y" { OUTYY(("P(server_private_address:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[(2) - (2)].str))) @@ -2882,10 +2935,10 @@ yyreduce: } break; - case 181: + case 187: /* Line 1464 of yacc.c */ -#line 777 "util/configparser.y" +#line 802 "util/configparser.y" { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[(2) - (2)].str))) @@ -2893,10 +2946,10 @@ yyreduce: } break; - case 182: + case 188: /* Line 1464 of yacc.c */ -#line 784 "util/configparser.y" +#line 809 "util/configparser.y" { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2906,10 +2959,10 @@ yyreduce: } break; - case 183: + case 189: /* Line 1464 of yacc.c */ -#line 793 "util/configparser.y" +#line 818 "util/configparser.y" { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2919,10 +2972,10 @@ yyreduce: } break; - case 184: + case 190: /* Line 1464 of yacc.c */ -#line 802 "util/configparser.y" +#line 827 "util/configparser.y" { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -2932,10 +2985,10 @@ yyreduce: } break; - case 185: + case 191: /* Line 1464 of yacc.c */ -#line 811 "util/configparser.y" +#line 836 "util/configparser.y" { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[(2) - (2)].str))) @@ -2943,10 +2996,10 @@ yyreduce: } break; - case 186: + case 192: /* Line 1464 of yacc.c */ -#line 818 "util/configparser.y" +#line 843 "util/configparser.y" { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2957,10 +3010,10 @@ yyreduce: } break; - case 187: + case 193: /* Line 1464 of yacc.c */ -#line 828 "util/configparser.y" +#line 853 "util/configparser.y" { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); if(strcmp((yyvsp[(3) - (3)].str), "deny")!=0 && strcmp((yyvsp[(3) - (3)].str), "refuse")!=0 && @@ -2975,10 +3028,10 @@ yyreduce: } break; - case 188: + case 194: /* Line 1464 of yacc.c */ -#line 842 "util/configparser.y" +#line 867 "util/configparser.y" { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->module_conf); @@ -2986,10 +3039,10 @@ yyreduce: } break; - case 189: + case 195: /* Line 1464 of yacc.c */ -#line 849 "util/configparser.y" +#line 874 "util/configparser.y" { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[(2) - (2)].str))); if(strlen((yyvsp[(2) - (2)].str)) == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) { @@ -3008,10 +3061,10 @@ yyreduce: } break; - case 190: + case 196: /* Line 1464 of yacc.c */ -#line 867 "util/configparser.y" +#line 892 "util/configparser.y" { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[(2) - (2)].str))); if(strlen((yyvsp[(2) - (2)].str)) == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) { @@ -3025,10 +3078,10 @@ yyreduce: } break; - case 191: + case 197: /* Line 1464 of yacc.c */ -#line 880 "util/configparser.y" +#line 905 "util/configparser.y" { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[(2) - (2)].str))); if(strlen((yyvsp[(2) - (2)].str)) == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) { @@ -3042,10 +3095,10 @@ yyreduce: } break; - case 192: + case 198: /* Line 1464 of yacc.c */ -#line 893 "util/configparser.y" +#line 918 "util/configparser.y" { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3055,10 +3108,10 @@ yyreduce: } break; - case 193: + case 199: /* Line 1464 of yacc.c */ -#line 902 "util/configparser.y" +#line 927 "util/configparser.y" { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3068,10 +3121,10 @@ yyreduce: } break; - case 194: + case 200: /* Line 1464 of yacc.c */ -#line 911 "util/configparser.y" +#line 936 "util/configparser.y" { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3081,10 +3134,10 @@ yyreduce: } break; - case 195: + case 201: /* Line 1464 of yacc.c */ -#line 920 "util/configparser.y" +#line 945 "util/configparser.y" { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3095,10 +3148,10 @@ yyreduce: } break; - case 196: + case 202: /* Line 1464 of yacc.c */ -#line 930 "util/configparser.y" +#line 955 "util/configparser.y" { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3109,10 +3162,10 @@ yyreduce: } break; - case 197: + case 203: /* Line 1464 of yacc.c */ -#line 940 "util/configparser.y" +#line 965 "util/configparser.y" { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3122,10 +3175,10 @@ yyreduce: } break; - case 198: + case 204: /* Line 1464 of yacc.c */ -#line 949 "util/configparser.y" +#line 974 "util/configparser.y" { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3135,10 +3188,10 @@ yyreduce: } break; - case 199: + case 205: /* Line 1464 of yacc.c */ -#line 958 "util/configparser.y" +#line 983 "util/configparser.y" { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); @@ -3146,10 +3199,10 @@ yyreduce: } break; - case 200: + case 206: /* Line 1464 of yacc.c */ -#line 965 "util/configparser.y" +#line 990 "util/configparser.y" { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3159,10 +3212,10 @@ yyreduce: } break; - case 201: + case 207: /* Line 1464 of yacc.c */ -#line 974 "util/configparser.y" +#line 999 "util/configparser.y" { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3172,10 +3225,10 @@ yyreduce: } break; - case 202: + case 208: /* Line 1464 of yacc.c */ -#line 983 "util/configparser.y" +#line 1008 "util/configparser.y" { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3185,10 +3238,10 @@ yyreduce: } break; - case 203: + case 209: /* Line 1464 of yacc.c */ -#line 992 "util/configparser.y" +#line 1017 "util/configparser.y" { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->key_cache_size)) @@ -3197,10 +3250,10 @@ yyreduce: } break; - case 204: + case 210: /* Line 1464 of yacc.c */ -#line 1000 "util/configparser.y" +#line 1025 "util/configparser.y" { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -3214,10 +3267,10 @@ yyreduce: } break; - case 205: + case 211: /* Line 1464 of yacc.c */ -#line 1013 "util/configparser.y" +#line 1038 "util/configparser.y" { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->neg_cache_size)) @@ -3226,10 +3279,10 @@ yyreduce: } break; - case 206: + case 212: /* Line 1464 of yacc.c */ -#line 1021 "util/configparser.y" +#line 1046 "util/configparser.y" { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); if(strcmp((yyvsp[(3) - (3)].str), "static")!=0 && strcmp((yyvsp[(3) - (3)].str), "deny")!=0 && @@ -3252,10 +3305,10 @@ yyreduce: } break; - case 207: + case 213: /* Line 1464 of yacc.c */ -#line 1043 "util/configparser.y" +#line 1068 "util/configparser.y" { OUTYY(("P(server_local_data:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[(2) - (2)].str))) @@ -3263,10 +3316,10 @@ yyreduce: } break; - case 208: + case 214: /* Line 1464 of yacc.c */ -#line 1050 "util/configparser.y" +#line 1075 "util/configparser.y" { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[(2) - (2)].str))); @@ -3282,10 +3335,10 @@ yyreduce: } break; - case 209: + case 215: /* Line 1464 of yacc.c */ -#line 1065 "util/configparser.y" +#line 1090 "util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str))); if(cfg_parser->cfg->stubs->name) @@ -3296,10 +3349,10 @@ yyreduce: } break; - case 210: + case 216: /* Line 1464 of yacc.c */ -#line 1075 "util/configparser.y" +#line 1100 "util/configparser.y" { OUTYY(("P(stub-host:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[(2) - (2)].str))) @@ -3307,10 +3360,10 @@ yyreduce: } break; - case 211: + case 217: /* Line 1464 of yacc.c */ -#line 1082 "util/configparser.y" +#line 1107 "util/configparser.y" { OUTYY(("P(stub-addr:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[(2) - (2)].str))) @@ -3318,10 +3371,10 @@ yyreduce: } break; - case 212: + case 218: /* Line 1464 of yacc.c */ -#line 1089 "util/configparser.y" +#line 1114 "util/configparser.y" { OUTYY(("P(stub-prime:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3332,10 +3385,10 @@ yyreduce: } break; - case 213: + case 219: /* Line 1464 of yacc.c */ -#line 1099 "util/configparser.y" +#line 1124 "util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str))); if(cfg_parser->cfg->forwards->name) @@ -3346,10 +3399,10 @@ yyreduce: } break; - case 214: + case 220: /* Line 1464 of yacc.c */ -#line 1109 "util/configparser.y" +#line 1134 "util/configparser.y" { OUTYY(("P(forward-host:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[(2) - (2)].str))) @@ -3357,10 +3410,10 @@ yyreduce: } break; - case 215: + case 221: /* Line 1464 of yacc.c */ -#line 1116 "util/configparser.y" +#line 1141 "util/configparser.y" { OUTYY(("P(forward-addr:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[(2) - (2)].str))) @@ -3368,19 +3421,19 @@ yyreduce: } break; - case 216: + case 222: /* Line 1464 of yacc.c */ -#line 1123 "util/configparser.y" +#line 1148 "util/configparser.y" { OUTYY(("\nP(remote-control:)\n")); } break; - case 226: + case 232: /* Line 1464 of yacc.c */ -#line 1134 "util/configparser.y" +#line 1159 "util/configparser.y" { OUTYY(("P(control_enable:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3391,10 +3444,10 @@ yyreduce: } break; - case 227: + case 233: /* Line 1464 of yacc.c */ -#line 1144 "util/configparser.y" +#line 1169 "util/configparser.y" { OUTYY(("P(control_port:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -3404,10 +3457,10 @@ yyreduce: } break; - case 228: + case 234: /* Line 1464 of yacc.c */ -#line 1153 "util/configparser.y" +#line 1178 "util/configparser.y" { OUTYY(("P(control_interface:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, (yyvsp[(2) - (2)].str))) @@ -3415,10 +3468,10 @@ yyreduce: } break; - case 229: + case 235: /* Line 1464 of yacc.c */ -#line 1160 "util/configparser.y" +#line 1185 "util/configparser.y" { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->server_key_file); @@ -3426,10 +3479,10 @@ yyreduce: } break; - case 230: + case 236: /* Line 1464 of yacc.c */ -#line 1167 "util/configparser.y" +#line 1192 "util/configparser.y" { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->server_cert_file); @@ -3437,10 +3490,10 @@ yyreduce: } break; - case 231: + case 237: /* Line 1464 of yacc.c */ -#line 1174 "util/configparser.y" +#line 1199 "util/configparser.y" { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->control_key_file); @@ -3448,10 +3501,10 @@ yyreduce: } break; - case 232: + case 238: /* Line 1464 of yacc.c */ -#line 1181 "util/configparser.y" +#line 1206 "util/configparser.y" { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->control_cert_file); @@ -3459,19 +3512,19 @@ yyreduce: } break; - case 233: + case 239: /* Line 1464 of yacc.c */ -#line 1188 "util/configparser.y" +#line 1213 "util/configparser.y" { OUTYY(("\nP(python:)\n")); } break; - case 237: + case 243: /* Line 1464 of yacc.c */ -#line 1197 "util/configparser.y" +#line 1222 "util/configparser.y" { OUTYY(("P(python-script:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->python_script); @@ -3482,7 +3535,7 @@ yyreduce: /* Line 1464 of yacc.c */ -#line 3486 "util/configparser.c" +#line 3539 "util/configparser.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -3694,7 +3747,7 @@ yyreturn: /* Line 1684 of yacc.c */ -#line 1202 "util/configparser.y" +#line 1227 "util/configparser.y" /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 58d0a2420..b17e3f010 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -156,7 +156,10 @@ VAR_HARDEN_BELOW_NXDOMAIN = 373, VAR_IGNORE_CD_FLAG = 374, VAR_LOG_QUERIES = 375, - VAR_TCP_UPSTREAM = 376 + VAR_TCP_UPSTREAM = 376, + VAR_SSL_UPSTREAM = 377, + VAR_SSL_SERVICE_KEY = 378, + VAR_SSL_SERVICE_PEM = 379 }; #endif /* Tokens. */ @@ -279,6 +282,9 @@ #define VAR_IGNORE_CD_FLAG 374 #define VAR_LOG_QUERIES 375 #define VAR_TCP_UPSTREAM 376 +#define VAR_SSL_UPSTREAM 377 +#define VAR_SSL_SERVICE_KEY 378 +#define VAR_SSL_SERVICE_PEM 379 @@ -295,7 +301,7 @@ typedef union YYSTYPE /* Line 1685 of yacc.c */ -#line 299 "util/configparser.h" +#line 305 "util/configparser.h" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ diff --git a/util/configparser.y b/util/configparser.y index 9b808ea4a..2cbbb870c 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -102,7 +102,8 @@ extern struct config_parser_state* cfg_parser; %token VAR_AUTO_TRUST_ANCHOR_FILE VAR_KEEP_MISSING VAR_ADD_HOLDDOWN %token VAR_DEL_HOLDDOWN VAR_SO_RCVBUF VAR_EDNS_BUFFER_SIZE VAR_PREFETCH %token VAR_PREFETCH_KEY VAR_SO_SNDBUF VAR_HARDEN_BELOW_NXDOMAIN -%token VAR_IGNORE_CD_FLAG VAR_LOG_QUERIES VAR_TCP_UPSTREAM +%token VAR_IGNORE_CD_FLAG VAR_LOG_QUERIES VAR_TCP_UPSTREAM VAR_SSL_UPSTREAM +%token VAR_SSL_SERVICE_KEY VAR_SSL_SERVICE_PEM %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -157,7 +158,8 @@ content_server: server_num_threads | server_verbosity | server_port | server_del_holddown | server_keep_missing | server_so_rcvbuf | server_edns_buffer_size | server_prefetch | server_prefetch_key | server_so_sndbuf | server_harden_below_nxdomain | server_ignore_cd_flag | - server_log_queries | server_tcp_upstream + server_log_queries | server_tcp_upstream | server_ssl_upstream | + server_ssl_service_key | server_ssl_service_pem ; stubstart: VAR_STUB_ZONE { @@ -374,6 +376,29 @@ server_tcp_upstream: VAR_TCP_UPSTREAM STRING_ARG free($2); } ; +server_ssl_upstream: VAR_SSL_UPSTREAM STRING_ARG + { + OUTYY(("P(server_ssl_upstream:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ssl_upstream = (strcmp($2, "yes")==0); + free($2); + } + ; +server_ssl_service_key: VAR_SSL_SERVICE_KEY STRING_ARG + { + OUTYY(("P(server_ssl_service_key:%s)\n", $2)); + free(cfg_parser->cfg->ssl_service_key); + cfg_parser->cfg->ssl_service_key = $2; + } + ; +server_ssl_service_pem: VAR_SSL_SERVICE_PEM STRING_ARG + { + OUTYY(("P(server_ssl_service_pem:%s)\n", $2)); + free(cfg_parser->cfg->ssl_service_pem); + cfg_parser->cfg->ssl_service_pem = $2; + } + ; server_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG { OUTYY(("P(server_do_daemonize:%s)\n", $2)); diff --git a/util/net_help.c b/util/net_help.c index c9604e21d..3a8070b6e 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -45,6 +45,8 @@ #include "util/module.h" #include "util/regional.h" #include +#include +#include /** max length of an IP address (the address portion) that we allow */ #define MAX_ADDR_STRLEN 128 /* characters */ @@ -553,3 +555,139 @@ void sock_list_merge(struct sock_list** list, struct regional* region, sock_list_insert(list, &p->addr, p->len, region); } } + +void +log_crypto_err(const char* str) +{ + /* error:[error code]:[library name]:[function name]:[reason string] */ + char buf[128]; + unsigned long e; + ERR_error_string_n(ERR_get_error(), buf, sizeof(buf)); + log_err("%s crypto %s", str, buf); + while( (e=ERR_get_error()) ) { + ERR_error_string_n(e, buf, sizeof(buf)); + log_err("and additionally crypto %s", buf); + } +} + +void* listen_sslctx_create(char* key, char* pem, char* verifypem) +{ + SSL_CTX* ctx = SSL_CTX_new(SSLv23_server_method()); + if(!ctx) { + log_crypto_err("could not SSL_CTX_new"); + return NULL; + } + /* no SSLv2 because has defects */ + if(!(SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2) & SSL_OP_NO_SSLv2)){ + log_crypto_err("could not set SSL_OP_NO_SSLv2"); + SSL_CTX_free(ctx); + return NULL; + } + if(!SSL_CTX_use_certificate_file(ctx, pem, SSL_FILETYPE_PEM)) { + log_err("error for cert file: %s", pem); + log_crypto_err("error in SSL_CTX use_certificate_file"); + SSL_CTX_free(ctx); + return NULL; + } + if(!SSL_CTX_use_PrivateKey_file(ctx, key, SSL_FILETYPE_PEM)) { + log_err("error for private key file: %s", key); + log_crypto_err("Error in SSL_CTX use_PrivateKey_file"); + SSL_CTX_free(ctx); + return NULL; + } + if(!SSL_CTX_check_private_key(ctx)) { + log_err("error for key file: %s", key); + log_crypto_err("Error in SSL_CTX check_private_key"); + SSL_CTX_free(ctx); + return NULL; + } + + if(verifypem && verifypem[0]) { + if(!SSL_CTX_load_verify_locations(ctx, verifypem, NULL)) { + log_crypto_err("Error in SSL_CTX verify locations"); + SSL_CTX_free(ctx); + return NULL; + } + SSL_CTX_set_client_CA_list(ctx, SSL_load_client_CA_file( + verifypem)); + SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL); + } + return ctx; +} + +void* connect_sslctx_create(char* key, char* pem, char* verifypem) +{ + SSL_CTX* ctx = SSL_CTX_new(SSLv23_client_method()); + if(!ctx) { + log_crypto_err("could not allocate SSL_CTX pointer"); + return NULL; + } + if(!(SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2) & SSL_OP_NO_SSLv2)) { + log_crypto_err("could not set SSL_OP_NO_SSLv2"); + SSL_CTX_free(ctx); + return NULL; + } + if(key && key[0]) { + if(!SSL_CTX_use_certificate_file(ctx, pem, SSL_FILETYPE_PEM)) { + log_err("error in client certificate %s", pem); + log_crypto_err("error in certificate file"); + SSL_CTX_free(ctx); + return NULL; + } + if(!SSL_CTX_use_PrivateKey_file(ctx, key, SSL_FILETYPE_PEM)) { + log_err("error in client private key %s", key); + log_crypto_err("error in key file"); + SSL_CTX_free(ctx); + return NULL; + } + if(!SSL_CTX_check_private_key(ctx)) { + log_err("error in client key %s", key); + log_crypto_err("error in SSL_CTX_check_private_key"); + SSL_CTX_free(ctx); + return NULL; + } + } + if(verifypem && verifypem[0]) { + if(!SSL_CTX_load_verify_locations(ctx, verifypem, NULL) != 1) { + log_crypto_err("error in SSL_CTX verify"); + SSL_CTX_free(ctx); + return NULL; + } + SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL); + } + return ctx; +} + +void* incoming_ssl_fd(void* sslctx, int fd) +{ + SSL* ssl = SSL_new((SSL_CTX*)sslctx); + if(!ssl) { + log_crypto_err("could not SSL_new"); + return NULL; + } + SSL_set_accept_state(ssl); + (void)SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY); + if(!SSL_set_fd(ssl, fd)) { + log_crypto_err("could not SSL_set_fd"); + SSL_free(ssl); + return NULL; + } + return ssl; +} + +void* outgoing_ssl_fd(void* sslctx, int fd) +{ + SSL* ssl = SSL_new((SSL_CTX*)sslctx); + if(!ssl) { + log_crypto_err("could not SSL_new"); + return NULL; + } + SSL_set_connect_state(ssl); + (void)SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY); + if(!SSL_set_fd(ssl, fd)) { + log_crypto_err("could not SSL_set_fd"); + SSL_free(ssl); + return NULL; + } + return ssl; +} diff --git a/util/net_help.h b/util/net_help.h index d09904747..a45270cd4 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -323,4 +323,44 @@ int sock_list_find(struct sock_list* list, struct sockaddr_storage* addr, void sock_list_merge(struct sock_list** list, struct regional* region, struct sock_list* add); +/** + * Log libcrypto error with descriptive string. Calls log_err(). + * @param str: what failed. + */ +void log_crypto_err(const char* str); + +/** + * create SSL listen context + * @param key: private key file. + * @param pem: public key cert. + * @param verifypem: if nonNULL, verifylocation file. + * return SSL_CTX* or NULL on failure (logged). + */ +void* listen_sslctx_create(char* key, char* pem, char* verifypem); + +/** + * create SSL connect context + * @param key: if nonNULL (also pem nonNULL), the client private key. + * @param pem: client public key (or NULL if key is NULL). + * @param verifypem: if nonNULL used for verifylocation file. + * @return SSL_CTX* or NULL on failure (logged). + */ +void* connect_sslctx_create(char* key, char* pem, char* verifypem); + +/** + * accept a new fd and wrap it in a BIO in SSL + * @param sslctx: the SSL_CTX to use (from listen_sslctx_create()). + * @param fd: from accept, nonblocking. + * @return SSL or NULL on alloc failure. + */ +void* incoming_ssl_fd(void* sslctx, int fd); + +/** + * connect a new fd and wrap it in a BIO in SSL + * @param sslctx: the SSL_CTX to use (from connect_sslctx_create()) + * @param fd: from connect. + * @return SSL or NULL on alloc failure + */ +void* outgoing_ssl_fd(void* sslctx, int fd); + #endif /* NET_HELP_H */ diff --git a/util/netevent.c b/util/netevent.c index 9ee752178..328679948 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -44,6 +44,8 @@ #include "util/log.h" #include "util/net_help.h" #include "util/fptr_wlist.h" +#include +#include /* -------- Start of local definitions -------- */ /** if CMSG_ALIGN is not defined on this platform, a workaround */ @@ -683,6 +685,32 @@ int comm_point_perform_accept(struct comm_point* c, return new_fd; } +#ifdef USE_WINSOCK +static long win_bio_cb(BIO *b, int oper, const char* ATTR_UNUSED(argp), + int ATTR_UNUSED(argi), long argl, long retvalue) +{ + verbose(VERB_ALGO, "bio_cb %d, %s %s %s", oper, + (oper&BIO_CB_RETURN)?"return":"before", + (oper&BIO_CB_READ)?"read":((oper&BIO_CB_WRITE)?"write":"other"), + WSAGetLastError()==WSAEWOULDBLOCK?"wsawb":""); + /* on windows, check if previous operation caused EWOULDBLOCK */ + if( (oper == (BIO_CB_READ|BIO_CB_RETURN) && argl == 0) || + (oper == (BIO_CB_GETS|BIO_CB_RETURN) && argl == 0)) { + if(WSAGetLastError() == WSAEWOULDBLOCK) + winsock_tcp_wouldblock((struct event*) + BIO_get_callback_arg(b), EV_READ); + } + if( (oper == (BIO_CB_WRITE|BIO_CB_RETURN) && argl == 0) || + (oper == (BIO_CB_PUTS|BIO_CB_RETURN) && argl == 0)) { + if(WSAGetLastError() == WSAEWOULDBLOCK) + winsock_tcp_wouldblock((struct event*) + BIO_get_callback_arg(b), EV_WRITE); + } + /* return original return value */ + return retvalue; +} +#endif + void comm_point_tcp_accept_callback(int fd, short event, void* arg) { @@ -706,6 +734,21 @@ comm_point_tcp_accept_callback(int fd, short event, void* arg) &c_hdl->repinfo.addrlen); if(new_fd == -1) return; + if(c->ssl) { + c_hdl->ssl = incoming_ssl_fd(c->ssl, new_fd); + if(!c_hdl->ssl) + return; + c_hdl->ssl_shake_state = comm_ssl_shake_read; +#ifdef USE_WINSOCK + /* set them both just in case, but usually they are the same BIO */ + BIO_set_callback(SSL_get_rbio(c_hdl->ssl), &win_bio_cb); + BIO_set_callback_arg(SSL_get_rbio(c_hdl->ssl), + (char*)comm_point_internal(c_hdl)); + BIO_set_callback(SSL_get_wbio(c_hdl->ssl), &win_bio_cb); + BIO_set_callback_arg(SSL_get_wbio(c_hdl->ssl), + (char*)comm_point_internal(c_hdl)); +#endif + } /* grab the tcp handler buffers */ c->tcp_free = c_hdl->tcp_free; @@ -722,6 +765,11 @@ static void reclaim_tcp_handler(struct comm_point* c) { log_assert(c->type == comm_tcp); + if(c->ssl) { + SSL_shutdown(c->ssl); + SSL_free(c->ssl); + c->ssl = NULL; + } comm_point_close(c); if(c->tcp_parent) { c->tcp_free = c->tcp_parent->tcp_free; @@ -764,6 +812,231 @@ tcp_callback_reader(struct comm_point* c) } } +/** continue ssl handshake */ +static int +ssl_handshake(struct comm_point* c) +{ + int r; + if(c->ssl_shake_state == comm_ssl_shake_hs_read) { + /* read condition satisfied back to writing */ + comm_point_listen_for_rw(c, 1, 1); + c->ssl_shake_state = comm_ssl_shake_none; + return 1; + } + if(c->ssl_shake_state == comm_ssl_shake_hs_write) { + /* write condition satisfied, back to reading */ + comm_point_listen_for_rw(c, 1, 0); + c->ssl_shake_state = comm_ssl_shake_none; + return 1; + } + + ERR_clear_error(); + r = SSL_do_handshake(c->ssl); + if(r != 1) { + int want = SSL_get_error(c->ssl, r); + if(want == SSL_ERROR_WANT_READ) { + if(c->ssl_shake_state == comm_ssl_shake_read) + return 1; + c->ssl_shake_state = comm_ssl_shake_read; + comm_point_listen_for_rw(c, 1, 0); + return 1; + } else if(want == SSL_ERROR_WANT_WRITE) { + if(c->ssl_shake_state == comm_ssl_shake_write) + return 1; + c->ssl_shake_state = comm_ssl_shake_write; + comm_point_listen_for_rw(c, 0, 1); + return 1; + } else if(r == 0) { + return 0; /* closed */ + } else if(want == SSL_ERROR_SYSCALL) { + /* SYSCALL and errno==0 means closed uncleanly */ + if(errno != 0) + log_err("SSL_handshake syscall: %s", + strerror(errno)); + return 0; + } else { + log_crypto_err("ssl handshake failed"); + log_addr(1, "ssl handshake failed", &c->repinfo.addr, + c->repinfo.addrlen); + return 0; + } + } + /* this is where peer verification could take place */ + log_addr(VERB_ALGO, "SSL connection from", &c->repinfo.addr, + c->repinfo.addrlen); + + /* setup listen rw correctly */ + if(c->tcp_is_reading) { + if(c->ssl_shake_state != comm_ssl_shake_read) + comm_point_listen_for_rw(c, 1, 0); + } else { + comm_point_listen_for_rw(c, 1, 1); + } + c->ssl_shake_state = comm_ssl_shake_none; + return 1; +} + +/** ssl read callback on TCP */ +static int +ssl_handle_read(struct comm_point* c) +{ + int r; + if(c->ssl_shake_state != comm_ssl_shake_none) { + if(!ssl_handshake(c)) + return 0; + if(c->ssl_shake_state != comm_ssl_shake_none) + return 1; + } + if(c->tcp_byte_count < sizeof(uint16_t)) { + /* read length bytes */ + ERR_clear_error(); + if((r=SSL_read(c->ssl, (void*)ldns_buffer_at(c->buffer, + c->tcp_byte_count), (int)(sizeof(uint16_t) - + c->tcp_byte_count))) <= 0) { + int want = SSL_get_error(c->ssl, r); + if(want == SSL_ERROR_ZERO_RETURN) { + return 0; /* shutdown, closed */ + } else if(want == SSL_ERROR_WANT_READ) { + return 1; /* read more later */ + } else if(want == SSL_ERROR_WANT_WRITE) { + c->ssl_shake_state = comm_ssl_shake_hs_write; + comm_point_listen_for_rw(c, 0, 1); + return 1; + } else if(want == SSL_ERROR_SYSCALL) { + if(errno != 0) + log_err("SSL_read syscall: %s", + strerror(errno)); + return 0; + } + log_crypto_err("could not SSL_read"); + return 0; + } + c->tcp_byte_count += r; + if(c->tcp_byte_count != sizeof(uint16_t)) + return 1; + if(ldns_buffer_read_u16_at(c->buffer, 0) > + ldns_buffer_capacity(c->buffer)) { + verbose(VERB_QUERY, "ssl: dropped larger than buffer"); + return 0; + } + ldns_buffer_set_limit(c->buffer, + ldns_buffer_read_u16_at(c->buffer, 0)); + if(ldns_buffer_limit(c->buffer) < LDNS_HEADER_SIZE) { + verbose(VERB_QUERY, "ssl: dropped bogus too short."); + return 0; + } + verbose(VERB_ALGO, "Reading ssl tcp query of length %d", + (int)ldns_buffer_limit(c->buffer)); + } + log_assert(ldns_buffer_remaining(c->buffer) > 0); + ERR_clear_error(); + r = SSL_read(c->ssl, (void*)ldns_buffer_current(c->buffer), + (int)ldns_buffer_remaining(c->buffer)); + if(r <= 0) { + int want = SSL_get_error(c->ssl, r); + if(want == SSL_ERROR_ZERO_RETURN) { + return 0; /* shutdown, closed */ + } else if(want == SSL_ERROR_WANT_READ) { + return 1; /* read more later */ + } else if(want == SSL_ERROR_WANT_WRITE) { + c->ssl_shake_state = comm_ssl_shake_hs_write; + comm_point_listen_for_rw(c, 0, 1); + return 1; + } else if(want == SSL_ERROR_SYSCALL) { + if(errno != 0) + log_err("SSL_read syscall: %s", + strerror(errno)); + return 0; + } + log_crypto_err("could not SSL_read"); + return 0; + } + ldns_buffer_skip(c->buffer, (ssize_t)r); + if(ldns_buffer_remaining(c->buffer) <= 0) { + tcp_callback_reader(c); + } + return 1; +} + +/** ssl write callback on TCP */ +static int +ssl_handle_write(struct comm_point* c) +{ + int r; + if(c->ssl_shake_state != comm_ssl_shake_none) { + if(!ssl_handshake(c)) + return 0; + if(c->ssl_shake_state != comm_ssl_shake_none) + return 1; + } + /* ignore return, if fails we may simply block */ + (void)SSL_set_mode(c->ssl, SSL_MODE_ENABLE_PARTIAL_WRITE); + if(c->tcp_byte_count < sizeof(uint16_t)) { + uint16_t len = htons(ldns_buffer_limit(c->buffer)); + ERR_clear_error(); + r = SSL_write(c->ssl, + (void*)(((uint8_t*)&len)+c->tcp_byte_count), + (int)(sizeof(uint16_t)-c->tcp_byte_count)); + if(r <= 0) { + int want = SSL_get_error(c->ssl, r); + if(want == SSL_ERROR_ZERO_RETURN) { + return 0; /* closed */ + } else if(want == SSL_ERROR_WANT_READ) { + c->ssl_shake_state = comm_ssl_shake_read; + comm_point_listen_for_rw(c, 1, 0); + return 1; /* wait for read condition */ + } else if(want == SSL_ERROR_WANT_WRITE) { + return 1; /* write more later */ + } else if(want == SSL_ERROR_SYSCALL) { + if(errno != 0) + log_err("SSL_write syscall: %s", + strerror(errno)); + return 0; + } + log_crypto_err("could not SSL_write"); + return 0; + } + c->tcp_byte_count += r; + if(c->tcp_byte_count < sizeof(uint16_t)) + return 1; + ldns_buffer_set_position(c->buffer, c->tcp_byte_count - + sizeof(uint16_t)); + if(ldns_buffer_remaining(c->buffer) == 0) { + tcp_callback_writer(c); + return 1; + } + } + log_assert(ldns_buffer_remaining(c->buffer) > 0); + ERR_clear_error(); + r = SSL_write(c->ssl, (void*)ldns_buffer_current(c->buffer), + (int)ldns_buffer_remaining(c->buffer)); + if(r <= 0) { + int want = SSL_get_error(c->ssl, r); + if(want == SSL_ERROR_ZERO_RETURN) { + return 0; /* closed */ + } else if(want == SSL_ERROR_WANT_READ) { + c->ssl_shake_state = comm_ssl_shake_read; + comm_point_listen_for_rw(c, 1, 0); + return 1; /* wait for read condition */ + } else if(want == SSL_ERROR_WANT_WRITE) { + return 1; /* write more later */ + } else if(want == SSL_ERROR_SYSCALL) { + if(errno != 0) + log_err("SSL_write syscall: %s", + strerror(errno)); + return 0; + } + log_crypto_err("could not SSL_write"); + return 0; + } + ldns_buffer_skip(c->buffer, (ssize_t)r); + + if(ldns_buffer_remaining(c->buffer) == 0) { + tcp_callback_writer(c); + } + return 1; +} + /** Handle tcp reading callback. * @param fd: file descriptor of socket. * @param c: comm point to read from into buffer. @@ -777,6 +1050,8 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok) log_assert(c->type == comm_tcp || c->type == comm_local); if(!c->tcp_is_reading) return 0; + if(c->ssl) + return ssl_handle_read(c); log_assert(fd != -1); if(c->tcp_byte_count < sizeof(uint16_t)) { @@ -915,6 +1190,8 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) return 0; } } + if(c->ssl) + return ssl_handle_write(c); if(c->tcp_byte_count < sizeof(uint16_t)) { uint16_t len = htons(ldns_buffer_limit(c->buffer)); @@ -1476,6 +1753,10 @@ comm_point_delete(struct comm_point* c) { if(!c) return; + if(c->type == comm_tcp && c->ssl) { + SSL_shutdown(c->ssl); + SSL_free(c->ssl); + } comm_point_close(c); if(c->tcp_handlers) { int i; diff --git a/util/netevent.h b/util/netevent.h index de57ee36c..5425eebc6 100644 --- a/util/netevent.h +++ b/util/netevent.h @@ -160,6 +160,23 @@ struct comm_point { For tcp_accept the first entry, for tcp_handlers the next one. */ struct comm_point* tcp_free; + /* -------- SSL TCP DNS ------- */ + /** the SSL object with rw bio (owned) or for commaccept ctx ref */ + void* ssl; + /** handshake state for init and renegotiate */ + enum { + /** no handshake, it has been done */ + comm_ssl_shake_none = 0, + /** ssl initial handshake wants to read */ + comm_ssl_shake_read, + /** ssl initial handshake wants to write */ + comm_ssl_shake_write, + /** ssl_write wants to read */ + comm_ssl_shake_hs_read, + /** ssl_read wants to write */ + comm_ssl_shake_hs_write + } ssl_shake_state; + /** is this a UDP, TCP-accept or TCP socket. */ enum comm_point_type { /** UDP socket - handle datagrams. */