From 2bda7bda432fb0f867072224dd97e10435c8ad94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dag-Erling=20Sm=C3=B8rgrav?= Date: Sat, 12 May 2018 11:55:57 +0000 Subject: [PATCH] Vendor import of Unbound 1.6.7. --- cachedb/cachedb.c | 44 +- configure | 27 +- configure.ac | 7 +- contrib/aaaa-filter-iterator.patch | 96 +- contrib/parseunbound.pl | 4 +- daemon/remote.c | 11 +- daemon/stats.c | 23 + daemon/unbound.c | 2 +- daemon/worker.c | 3 +- dns64/dns64.c | 4 + dnscrypt/dnscrypt.c | 199 +- dnscrypt/dnscrypt.h | 30 + doc/Changelog | 52 +- doc/README | 2 +- doc/example.conf.in | 10 +- doc/libunbound.3.in | 4 +- doc/requirements.txt | 2 +- doc/unbound-anchor.8.in | 2 +- doc/unbound-checkconf.8.in | 2 +- doc/unbound-control.8.in | 54 +- doc/unbound-host.1.in | 2 +- doc/unbound.8.in | 4 +- doc/unbound.conf.5.in | 22 +- edns-subnet/addrtree.h | 2 +- edns-subnet/subnetmod.c | 7 +- edns-subnet/subnetmod.h | 2 +- iterator/iter_utils.h | 2 +- iterator/iterator.c | 12 +- iterator/iterator.h | 14 +- libunbound/context.h | 2 +- libunbound/libunbound.c | 2 +- libunbound/libworker.c | 5 +- libunbound/python/doc/examples/example7.rst | 2 +- libunbound/unbound.h | 11 +- pythonmod/doc/examples/example2.rst | 2 +- pythonmod/doc/examples/example3.rst | 2 +- pythonmod/doc/examples/example5.rst | 4 +- pythonmod/doc/examples/example6.rst | 4 +- pythonmod/doc/modules/functions.rst | 2 +- pythonmod/doc/modules/struct.rst | 2 +- pythonmod/doc/usecase.rst | 2 +- pythonmod/examples/edns.py | 4 +- pythonmod/examples/inplace_callbacks.py | 12 +- pythonmod/interface.i | 2 +- services/cache/dns.c | 10 +- services/cache/dns.h | 13 +- services/mesh.c | 77 +- services/outside_network.c | 8 +- services/view.h | 2 +- sldns/parse.c | 6 +- sldns/parse.h | 12 +- sldns/parseutil.c | 8 +- sldns/parseutil.h | 4 +- sldns/rrdef.h | 6 +- sldns/sbuffer.h | 2 +- sldns/str2wire.c | 2 +- sldns/wire2str.c | 2 +- smallapp/unbound-anchor.c | 2 +- smallapp/unbound-control.c | 7 +- smallapp/unbound-host.c | 1 + testcode/checklocks.h | 2 +- testcode/unitecs.c | 2 +- testdata/autotrust_10key.rpl | 1 + testdata/autotrust_addpend_2exceed.rpl | 1 + testdata/autotrust_addpend_early.rpl | 1 + testdata/autotrust_addpend_nosign.rpl | 1 + testdata/autotrust_addpend_nosignnew.rpl | 1 + testdata/autotrust_addpend_once.rpl | 1 + testdata/autotrust_addpend_twice.rpl | 1 + testdata/autotrust_init.rpl | 1 + testdata/autotrust_init_ds.rpl | 1 + testdata/autotrust_init_fail.rpl | 1 + testdata/autotrust_init_failsig.rpl | 1 + testdata/autotrust_init_legacy.rpl | 1 + testdata/autotrust_init_sigs.rpl | 1 + testdata/autotrust_init_zsk.rpl | 1 + testdata/autotrust_missing.rpl | 1 + testdata/autotrust_missing_all.rpl | 1 + testdata/autotrust_missing_returns.rpl | 1 + testdata/autotrust_probefail.rpl | 1 + testdata/autotrust_probefailsig.rpl | 1 + testdata/autotrust_revoked_use.rpl | 1 + testdata/autotrust_revoked_with_invalid.rpl | 1 + testdata/autotrust_revtp.rpl | 1 + testdata/autotrust_revtp_use.rpl | 1 + testdata/autotrust_rollalgo.rpl | 1 + testdata/autotrust_rollalgo_unknown.rpl | 1 + testdata/autotrust_rollover.rpl | 1 + testdata/autotrust_valid_use.rpl | 1 + testdata/black_data.rpl | 1 + testdata/black_dnskey.rpl | 1 + testdata/black_ds.rpl | 1 + testdata/black_ds_entry.rpl | 1 + testdata/black_ent.rpl | 1 + testdata/black_key_entry.rpl | 1 + testdata/black_prime.rpl | 1 + testdata/black_prime_entry.rpl | 1 + testdata/dlv_anchor.rpl | 1 + testdata/dlv_ask_higher.rpl | 1 + testdata/dlv_below_ta.rpl | 1 + testdata/dlv_delegation.rpl | 1 + testdata/dlv_ds_lookup.rpl | 1 + testdata/dlv_insecure.rpl | 1 + testdata/dlv_insecure_negcache.rpl | 1 + testdata/dlv_keyretry.rpl | 1 + testdata/dlv_negnx.rpl | 1 + testdata/dlv_optout.rpl | 1 + testdata/dlv_remove_pos.rpl | 1 + testdata/dlv_unused.rpl | 1 + testdata/fwddlv_parse.rpl | 1 + testdata/ipsecmod_bogus_ipseckey.crpl | 1 + testdata/ipsecmod_ignore_bogus_ipseckey.crpl | 1 + testdata/iter_class_any.rpl | 1 + testdata/iter_dnsseclame_bug.rpl | 1 + testdata/iter_dnsseclame_ds.rpl | 1 + testdata/iter_dnsseclame_ds_ok.rpl | 1 + testdata/iter_dnsseclame_ta.rpl | 1 + testdata/iter_dnsseclame_ta_ok.rpl | 1 + testdata/iter_emptydp.rpl | 1 + testdata/iter_emptydp_for_glue.rpl | 1 + testdata/iter_primenoglue.rpl | 1 + testdata/iter_scrub_dname_rev.rpl | 1 + testdata/iter_scrub_dname_sec.rpl | 1 + testdata/local_cname.rpl | 1 + testdata/net_signed_servfail.rpl | 1 + testdata/nomem_cnametopos.rpl | 1 + testdata/stop_nxdomain.rpl | 1 + testdata/stop_nxdomain_minimised.rpl | 1 + testdata/subnet_cached.crpl | 1 + testdata/subnet_val_positive.crpl | 1 + testdata/subnet_val_positive_client.crpl | 1 + testdata/val_adbit.rpl | 1 + testdata/val_anchor_nx.rpl | 1 + testdata/val_ans_dsent.rpl | 1 + testdata/val_ans_nx.rpl | 1 + testdata/val_any.rpl | 1 + testdata/val_any_cname.rpl | 1 + testdata/val_any_dname.rpl | 1 + testdata/val_cnameinsectopos.rpl | 1 + testdata/val_cnamenx_dblnsec.rpl | 1 + testdata/val_cnamenx_rcodenx.rpl | 1 + testdata/val_cnameqtype.rpl | 1 + testdata/val_cnametocloser.rpl | 1 + testdata/val_cnametocloser_nosig.rpl | 1 + testdata/val_cnametocnamewctoposwc.rpl | 1 + testdata/val_cnametodname.rpl | 1 + testdata/val_cnametodnametocnametopos.rpl | 1 + testdata/val_cnametoinsecure.rpl | 1 + testdata/val_cnametonodata.rpl | 1 + testdata/val_cnametonodata_nonsec.rpl | 1 + testdata/val_cnametonsec.rpl | 1 + testdata/val_cnametonx.rpl | 1 + testdata/val_cnametooptin.rpl | 1 + testdata/val_cnametooptout.rpl | 1 + testdata/val_cnametopos.rpl | 1 + testdata/val_cnametoposnowc.rpl | 1 + testdata/val_cnametoposwc.rpl | 1 + testdata/val_cnamewctonodata.rpl | 1 + testdata/val_cnamewctonx.rpl | 1 + testdata/val_cnamewctoposwc.rpl | 1 + testdata/val_deleg_nons.rpl | 1 + testdata/val_dnametopos.rpl | 1 + testdata/val_dnametoposwc.rpl | 1 + testdata/val_dnamewc.rpl | 1 + testdata/val_ds_afterprime.rpl | 1 + testdata/val_ds_cname.rpl | 1 + testdata/val_ds_cnamesub.rpl | 1 + testdata/val_ds_gost.crpl | 1 + testdata/val_ds_gost_downgrade.crpl | 1 + testdata/val_ds_sha2.crpl | 1 + testdata/val_ds_sha2_downgrade.crpl | 1 + testdata/val_ds_sha2_lenient.crpl | 1 + testdata/val_dsnsec.rpl | 1 + testdata/val_faildnskey.rpl | 1 + testdata/val_faildnskey_ok.rpl | 1 + testdata/val_fwdds.rpl | 1 + testdata/val_keyprefetch.rpl | 1 + testdata/val_keyprefetch_verify.rpl | 1 + testdata/val_mal_wc.rpl | 1 + testdata/val_negcache_ds.rpl | 1 + testdata/val_negcache_dssoa.rpl | 1 + testdata/val_noadwhennodo.rpl | 1 + testdata/val_nodata.rpl | 1 + testdata/val_nodata_ent.rpl | 1 + testdata/val_nodata_entnx.rpl | 1 + testdata/val_nodata_entwc.rpl | 1 + testdata/val_nodata_failsig.rpl | 1 + testdata/val_nodata_hasdata.rpl | 1 + testdata/val_nodata_zonecut.rpl | 1 + testdata/val_nodatawc.rpl | 1 + testdata/val_nodatawc_badce.rpl | 1 + testdata/val_nodatawc_nodeny.rpl | 1 + testdata/val_nodatawc_one.rpl | 1 + testdata/val_nokeyprime.rpl | 1 + testdata/val_nsec3_b1_nameerror.rpl | 1 + testdata/val_nsec3_b1_nameerror_noce.rpl | 1 + testdata/val_nsec3_b1_nameerror_nonc.rpl | 1 + testdata/val_nsec3_b1_nameerror_nowc.rpl | 1 + testdata/val_nsec3_b21_nodataent.rpl | 1 + testdata/val_nsec3_b21_nodataent_wr.rpl | 1 + testdata/val_nsec3_b2_nodata.rpl | 1 + testdata/val_nsec3_b2_nodata_nons.rpl | 1 + testdata/val_nsec3_b3_optout.rpl | 1 + testdata/val_nsec3_b3_optout_negcache.rpl | 1 + testdata/val_nsec3_b3_optout_noce.rpl | 1 + testdata/val_nsec3_b3_optout_nonc.rpl | 1 + testdata/val_nsec3_b4_wild.rpl | 1 + testdata/val_nsec3_b4_wild_wr.rpl | 1 + testdata/val_nsec3_b5_wcnodata.rpl | 1 + testdata/val_nsec3_b5_wcnodata_noce.rpl | 1 + testdata/val_nsec3_b5_wcnodata_nonc.rpl | 1 + testdata/val_nsec3_b5_wcnodata_nowc.rpl | 1 + testdata/val_nsec3_cname_ds.rpl | 1 + testdata/val_nsec3_cname_par.rpl | 1 + testdata/val_nsec3_cname_sub.rpl | 1 + testdata/val_nsec3_cnametocnamewctoposwc.rpl | 1 + testdata/val_nsec3_entnodata_optout.rpl | 1 + .../val_nsec3_entnodata_optout_badopt.rpl | 1 + testdata/val_nsec3_entnodata_optout_match.rpl | 1 + testdata/val_nsec3_iter_high.rpl | 1 + testdata/val_nsec3_nodatawccname.rpl | 1 + testdata/val_nsec3_nods.rpl | 1 + testdata/val_nsec3_nods_badopt.rpl | 1 + testdata/val_nsec3_nods_badsig.rpl | 1 + testdata/val_nsec3_nods_negcache.rpl | 1 + testdata/val_nsec3_nods_soa.rpl | 1 + testdata/val_nsec3_optout_ad.rpl | 1 + testdata/val_nsec3_optout_cache.rpl | 1 + testdata/val_nsec3_wcany.rpl | 1 + testdata/val_nsec3_wcany_nodeny.rpl | 1 + testdata/val_nx.rpl | 1 + testdata/val_nx_nodeny.rpl | 1 + testdata/val_nx_nowc.rpl | 1 + testdata/val_nx_nsec3_collision.rpl | 1 + testdata/val_nx_nsec3_params.rpl | 1 + testdata/val_nx_overreach.rpl | 1 + testdata/val_pos_truncns.rpl | 1 + testdata/val_positive.rpl | 1 + testdata/val_positive_nosigs.rpl | 1 + testdata/val_positive_wc.rpl | 1 + testdata/val_positive_wc_nodeny.rpl | 1 + testdata/val_qds_oneanc.rpl | 1 + testdata/val_qds_twoanc.rpl | 1 + testdata/val_refer_unsignadd.rpl | 1 + testdata/val_referd.rpl | 1 + testdata/val_referglue.rpl | 1 + testdata/val_secds.rpl | 1 + testdata/val_secds_nosig.rpl | 1 + testdata/val_spurious_ns.rpl | 1 + testdata/val_stub_noroot.rpl | 1 + testdata/val_stubds.rpl | 1 + testdata/val_ta_algo_dnskey.rpl | 1 + testdata/val_ta_algo_dnskey_dp.rpl | 1 + testdata/val_ta_algo_missing.rpl | 1 + testdata/val_ta_algo_missing_dp.rpl | 1 + testdata/val_twocname.rpl | 1 + testdata/val_unalgo_dlv.rpl | 1 + testdata/val_unalgo_ds.rpl | 1 + testdata/val_unsec_cname.rpl | 1 + testdata/val_unsecds.rpl | 1 + testdata/val_unsecds_negcache.rpl | 1 + testdata/val_unsecds_qtypeds.rpl | 1 + testdata/val_wild_pos.rpl | 1 + util/config_file.c | 20 +- util/config_file.h | 11 +- util/configlexer.c | 4487 +++++++++-------- util/configlexer.lex | 3 + util/configparser.c | 2244 +++++---- util/configparser.h | 44 +- util/configparser.y | 42 +- util/data/msgreply.c | 3 + util/data/msgreply.h | 2 +- util/fptr_wlist.c | 4 + util/module.h | 4 +- util/netevent.c | 2 +- util/shm_side/shm_main.c | 2 + util/storage/slabhash.h | 2 +- util/ub_event.h | 2 +- validator/autotrust.c | 2 +- validator/val_nsec3.c | 2 +- validator/val_secalgo.c | 2 +- validator/val_sigcrypt.c | 2 +- validator/val_utils.h | 2 +- validator/validator.c | 2 +- 284 files changed, 4430 insertions(+), 3524 deletions(-) diff --git a/cachedb/cachedb.c b/cachedb/cachedb.c index f5f6937eeeed..d07d76973fd2 100644 --- a/cachedb/cachedb.c +++ b/cachedb/cachedb.c @@ -347,6 +347,13 @@ prep_data(struct module_qstate* qstate, struct sldns_buffer* buf) if(!qstate->return_msg || !qstate->return_msg->rep) return 0; + /* We don't store the reply if its TTL is 0 unless serve-expired is + * enabled. Such a reply won't be reusable and simply be a waste for + * the backend. It's also compatible with the default behavior of + * dns_cache_store_msg(). */ + if(qstate->return_msg->rep->ttl == 0 && + !qstate->env->cfg->serve_expired) + return 0; if(verbosity >= VERB_ALGO) log_dns_msg("cachedb encoding", &qstate->return_msg->qinfo, qstate->return_msg->rep); @@ -387,32 +394,37 @@ good_expiry_and_qinfo(struct module_qstate* qstate, struct sldns_buffer* buf) &expiry, sizeof(expiry)); expiry = be64toh(expiry); - if((time_t)expiry < *qstate->env->now) + if((time_t)expiry < *qstate->env->now && + !qstate->env->cfg->serve_expired) return 0; return 1; } +/* Adjust the TTL of the given RRset by 'subtract'. If 'subtract' is + * negative, set the TTL to 0. */ static void packed_rrset_ttl_subtract(struct packed_rrset_data* data, time_t subtract) { size_t i; size_t total = data->count + data->rrsig_count; - if(data->ttl > subtract) + if(subtract >= 0 && data->ttl > subtract) data->ttl -= subtract; else data->ttl = 0; for(i=0; irr_ttl[i] > subtract) + if(subtract >= 0 && data->rr_ttl[i] > subtract) data->rr_ttl[i] -= subtract; else data->rr_ttl[i] = 0; } } +/* Adjust the TTL of a DNS message and its RRs by 'adjust'. If 'adjust' is + * negative, set the TTLs to 0. */ static void adjust_msg_ttl(struct dns_msg* msg, time_t adjust) { size_t i; - if(msg->rep->ttl > adjust) + if(adjust >= 0 && msg->rep->ttl > adjust) msg->rep->ttl -= adjust; else msg->rep->ttl = 0; msg->rep->prefetch_ttl = PREFETCH_TTL_CALC(msg->rep->ttl); @@ -476,10 +488,26 @@ parse_data(struct module_qstate* qstate, struct sldns_buffer* buf) adjust = *qstate->env->now - (time_t)timestamp; if(qstate->return_msg->rep->ttl < adjust) { verbose(VERB_ALGO, "cachedb msg expired"); - return 0; /* message expired */ + /* If serve-expired is enabled, we still use an expired message + * setting the TTL to 0. */ + if(qstate->env->cfg->serve_expired) + adjust = -1; + else + return 0; /* message expired */ } verbose(VERB_ALGO, "cachedb msg adjusted down by %d", (int)adjust); adjust_msg_ttl(qstate->return_msg, adjust); + + /* Similar to the unbound worker, if serve-expired is enabled and + * the msg would be considered to be expired, mark the state so a + * refetch will be scheduled. The comparison between 'expiry' and + * 'now' should be redundant given how these values were calculated, + * but we check it just in case as does good_expiry_and_qinfo(). */ + if(qstate->env->cfg->serve_expired && + (adjust == -1 || (time_t)expiry < *qstate->env->now)) { + qstate->need_refetch = 1; + } + return 1; } @@ -563,11 +591,15 @@ cachedb_intcache_lookup(struct module_qstate* qstate) static void cachedb_intcache_store(struct module_qstate* qstate) { + uint32_t store_flags = qstate->query_flags; + + if(qstate->env->cfg->serve_expired) + store_flags |= DNSCACHE_STORE_ZEROTTL; if(!qstate->return_msg) return; (void)dns_cache_store(qstate->env, &qstate->qinfo, qstate->return_msg->rep, 0, qstate->prefetch_leeway, 0, - qstate->region, qstate->query_flags); + qstate->region, store_flags); } /** diff --git a/configure b/configure index 2821d3209fbd..796e20c727d1 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for unbound 1.6.6. +# Generated by GNU Autoconf 2.69 for unbound 1.6.7. # # Report bugs to . # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='unbound' PACKAGE_TARNAME='unbound' -PACKAGE_VERSION='1.6.6' -PACKAGE_STRING='unbound 1.6.6' +PACKAGE_VERSION='1.6.7' +PACKAGE_STRING='unbound 1.6.7' PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl' PACKAGE_URL='' @@ -1437,7 +1437,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures unbound 1.6.6 to adapt to many kinds of systems. +\`configure' configures unbound 1.6.7 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1502,7 +1502,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of unbound 1.6.6:";; + short | recursive ) echo "Configuration of unbound 1.6.7:";; esac cat <<\_ACEOF @@ -1714,7 +1714,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -unbound configure 1.6.6 +unbound configure 1.6.7 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2423,7 +2423,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by unbound $as_me 1.6.6, which was +It was created by unbound $as_me 1.6.7, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2775,11 +2775,11 @@ UNBOUND_VERSION_MAJOR=1 UNBOUND_VERSION_MINOR=6 -UNBOUND_VERSION_MICRO=6 +UNBOUND_VERSION_MICRO=7 LIBUNBOUND_CURRENT=7 -LIBUNBOUND_REVISION=5 +LIBUNBOUND_REVISION=6 LIBUNBOUND_AGE=5 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -2836,6 +2836,7 @@ LIBUNBOUND_AGE=5 # 1.6.4 had 7:3:5 # 1.6.5 had 7:4:5 # 1.6.6 had 7:5:5 +# 1.6.7 had 7:6:5 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -2851,7 +2852,7 @@ LIBUNBOUND_AGE=5 # Current and Age. Set Revision to 0, since this is the first # implementation of the new API. # -# Otherwise, we're changing the binary API and breaking bakward +# Otherwise, we're changing the binary API and breaking backward # compatibility with old binaries. Increment Current. Set Age to 0, # since we're backward compatible with no previous APIs. Set Revision # to 0 too. @@ -20693,7 +20694,7 @@ _ACEOF -version=1.6.6 +version=1.6.7 date=`date +'%b %e, %Y'` @@ -21212,7 +21213,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by unbound $as_me 1.6.6, which was +This file was extended by unbound $as_me 1.6.7, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -21278,7 +21279,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -unbound config.status 1.6.6 +unbound config.status 1.6.7 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 23a318ee5b77..730ac383c240 100644 --- a/configure.ac +++ b/configure.ac @@ -11,14 +11,14 @@ sinclude(dnscrypt/dnscrypt.m4) # must be numbers. ac_defun because of later processing m4_define([VERSION_MAJOR],[1]) m4_define([VERSION_MINOR],[6]) -m4_define([VERSION_MICRO],[6]) +m4_define([VERSION_MICRO],[7]) AC_INIT(unbound, m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]), unbound-bugs@nlnetlabs.nl, unbound) AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR]) AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR]) AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO]) LIBUNBOUND_CURRENT=7 -LIBUNBOUND_REVISION=5 +LIBUNBOUND_REVISION=6 LIBUNBOUND_AGE=5 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -75,6 +75,7 @@ LIBUNBOUND_AGE=5 # 1.6.4 had 7:3:5 # 1.6.5 had 7:4:5 # 1.6.6 had 7:5:5 +# 1.6.7 had 7:6:5 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -90,7 +91,7 @@ LIBUNBOUND_AGE=5 # Current and Age. Set Revision to 0, since this is the first # implementation of the new API. # -# Otherwise, we're changing the binary API and breaking bakward +# Otherwise, we're changing the binary API and breaking backward # compatibility with old binaries. Increment Current. Set Age to 0, # since we're backward compatible with no previous APIs. Set Revision # to 0 too. diff --git a/contrib/aaaa-filter-iterator.patch b/contrib/aaaa-filter-iterator.patch index 0647f4979d25..b5c5268223d1 100644 --- a/contrib/aaaa-filter-iterator.patch +++ b/contrib/aaaa-filter-iterator.patch @@ -1,10 +1,10 @@ Index: trunk/doc/unbound.conf.5.in =================================================================== ---- trunk/doc/unbound.conf.5.in (revision 3587) +--- trunk/doc/unbound.conf.5.in (revision 4357) +++ trunk/doc/unbound.conf.5.in (working copy) -@@ -593,6 +593,13 @@ - possible. Best effort approach, full QNAME and original QTYPE will be sent when - upstream replies with a RCODE other than NOERROR. Default is off. +@@ -701,6 +701,13 @@ + this option in enabled. Only use if you know what you are doing. + This option only has effect when qname-minimisation is enabled. Default is off. .TP +.B aaaa\-filter: \fI +Activate behavior similar to BIND's AAAA-filter. @@ -18,7 +18,7 @@ Index: trunk/doc/unbound.conf.5.in on your private network, and are not allowed to be returned for Index: trunk/iterator/iter_scrub.c =================================================================== ---- trunk/iterator/iter_scrub.c (revision 3587) +--- trunk/iterator/iter_scrub.c (revision 4357) +++ trunk/iterator/iter_scrub.c (working copy) @@ -617,6 +617,32 @@ } @@ -75,10 +75,11 @@ Index: trunk/iterator/iter_scrub.c /* At this point, we brutally remove ALL rrsets that aren't * children of the originating zone. The idea here is that, * as far as we know, the server that we contacted is ONLY -@@ -681,6 +715,24 @@ +@@ -680,6 +714,24 @@ + prev = NULL; rrset = msg->rrset_first; while(rrset) { - ++ + /* ASN: For AAAA records only... */ + if((ie->aaaa_filter) && (rrset->type == LDNS_RR_TYPE_AAAA)) { + /* ASN: If this is not a AAAA query, then remove AAAA @@ -96,13 +97,12 @@ Index: trunk/iterator/iter_scrub.c + LDNS_RR_TYPE_AAAA, qinfo->qclass); + } + /* ASN: End of added code */ -+ + /* remove private addresses */ if( (rrset->type == LDNS_RR_TYPE_A || - rrset->type == LDNS_RR_TYPE_AAAA)) { Index: trunk/iterator/iter_utils.c =================================================================== ---- trunk/iterator/iter_utils.c (revision 3587) +--- trunk/iterator/iter_utils.c (revision 4357) +++ trunk/iterator/iter_utils.c (working copy) @@ -175,6 +175,7 @@ } @@ -114,9 +114,9 @@ Index: trunk/iterator/iter_utils.c Index: trunk/iterator/iterator.c =================================================================== ---- trunk/iterator/iterator.c (revision 3587) +--- trunk/iterator/iterator.c (revision 4357) +++ trunk/iterator/iterator.c (working copy) -@@ -1776,6 +1776,53 @@ +@@ -1847,6 +1847,53 @@ return 0; } @@ -170,7 +170,7 @@ Index: trunk/iterator/iterator.c /** * This is the request event state where the request will be sent to one of -@@ -1823,6 +1870,13 @@ +@@ -1894,6 +1941,13 @@ return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } @@ -184,7 +184,7 @@ Index: trunk/iterator/iterator.c /* Make sure we have a delegation point, otherwise priming failed * or another failure occurred */ if(!iq->dp) { -@@ -2922,6 +2976,61 @@ +@@ -3095,6 +3149,61 @@ return 0; } @@ -244,9 +244,9 @@ Index: trunk/iterator/iterator.c +/* ASN: End of added code */ + /* - * Return priming query results to interestes super querystates. + * Return priming query results to interested super querystates. * -@@ -2941,6 +3050,9 @@ +@@ -3114,6 +3223,9 @@ else if(super->qinfo.qtype == LDNS_RR_TYPE_DS && ((struct iter_qstate*) super->minfo[id])->state == DSNS_FIND_STATE) processDSNSResponse(qstate, id, super); @@ -256,7 +256,7 @@ Index: trunk/iterator/iterator.c else if(qstate->return_rcode != LDNS_RCODE_NOERROR) error_supers(qstate, id, super); else if(qstate->is_priming) -@@ -2978,6 +3090,9 @@ +@@ -3151,6 +3263,9 @@ case INIT_REQUEST_3_STATE: cont = processInitRequest3(qstate, iq, id); break; @@ -266,7 +266,7 @@ Index: trunk/iterator/iterator.c case QUERYTARGETS_STATE: cont = processQueryTargets(qstate, iq, ie, id); break; -@@ -3270,6 +3385,8 @@ +@@ -3460,6 +3575,8 @@ return "INIT REQUEST STATE (stage 2)"; case INIT_REQUEST_3_STATE: return "INIT REQUEST STATE (stage 3)"; @@ -275,7 +275,7 @@ Index: trunk/iterator/iterator.c case QUERYTARGETS_STATE : return "QUERY TARGETS STATE"; case PRIME_RESP_STATE : -@@ -3294,6 +3411,7 @@ +@@ -3484,6 +3601,7 @@ case INIT_REQUEST_STATE : case INIT_REQUEST_2_STATE : case INIT_REQUEST_3_STATE : @@ -285,19 +285,19 @@ Index: trunk/iterator/iterator.c return 0; Index: trunk/iterator/iterator.h =================================================================== ---- trunk/iterator/iterator.h (revision 3587) +--- trunk/iterator/iterator.h (revision 4357) +++ trunk/iterator/iterator.h (working copy) -@@ -113,6 +113,9 @@ +@@ -130,6 +130,9 @@ */ int* target_fetch_policy; + /** ASN: AAAA-filter flag */ + int aaaa_filter; + - /** ip6.arpa dname in wireformat, used for qname-minimisation */ - uint8_t* ip6arpa_dname; - }; -@@ -163,6 +166,14 @@ + /** lock on ratelimit counter */ + lock_basic_type queries_ratelimit_lock; + /** number of queries that have been ratelimited */ +@@ -182,6 +185,14 @@ INIT_REQUEST_3_STATE, /** @@ -311,26 +311,26 @@ Index: trunk/iterator/iterator.h + /** * Each time a delegation point changes for a given query or a * query times out and/or wakes up, this state is (re)visited. - * This state is reponsible for iterating through a list of -@@ -346,6 +357,13 @@ + * This state is responsible for iterating through a list of +@@ -364,6 +375,13 @@ + * be used when creating the state. A higher one will be attempted. */ int refetch_glue; - ++ + /** + * ASN: This is a flag that, if true, means that this query is + * for fetching A records to populate cache and determine if we must + * return AAAA records or not. + */ + int fetch_a_for_aaaa; -+ + /** list of pending queries to authoritative servers. */ struct outbound_list outlist; - Index: trunk/pythonmod/interface.i =================================================================== ---- trunk/pythonmod/interface.i (revision 3587) +--- trunk/pythonmod/interface.i (revision 4357) +++ trunk/pythonmod/interface.i (working copy) -@@ -632,6 +632,7 @@ +@@ -851,6 +851,7 @@ int harden_dnssec_stripped; int harden_referral_path; int use_caps_bits_for_id; @@ -340,9 +340,9 @@ Index: trunk/pythonmod/interface.i size_t unwanted_threshold; Index: trunk/util/config_file.c =================================================================== ---- trunk/util/config_file.c (revision 3587) +--- trunk/util/config_file.c (revision 4357) +++ trunk/util/config_file.c (working copy) -@@ -176,6 +176,7 @@ +@@ -195,6 +195,7 @@ cfg->harden_referral_path = 0; cfg->harden_algo_downgrade = 0; cfg->use_caps_bits_for_id = 0; @@ -352,9 +352,9 @@ Index: trunk/util/config_file.c cfg->private_domain = NULL; Index: trunk/util/config_file.h =================================================================== ---- trunk/util/config_file.h (revision 3587) +--- trunk/util/config_file.h (revision 4357) +++ trunk/util/config_file.h (working copy) -@@ -179,6 +179,8 @@ +@@ -209,6 +209,8 @@ int harden_algo_downgrade; /** use 0x20 bits in query as random ID bits */ int use_caps_bits_for_id; @@ -365,9 +365,9 @@ Index: trunk/util/config_file.h /** strip away these private addrs from answers, no DNS Rebinding */ Index: trunk/util/configlexer.lex =================================================================== ---- trunk/util/configlexer.lex (revision 3587) +--- trunk/util/configlexer.lex (revision 4357) +++ trunk/util/configlexer.lex (working copy) -@@ -267,6 +267,7 @@ +@@ -279,6 +279,7 @@ use-caps-for-id{COLON} { YDVAR(1, VAR_USE_CAPS_FOR_ID) } caps-whitelist{COLON} { YDVAR(1, VAR_CAPS_WHITELIST) } unwanted-reply-threshold{COLON} { YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } @@ -377,9 +377,9 @@ Index: trunk/util/configlexer.lex prefetch-key{COLON} { YDVAR(1, VAR_PREFETCH_KEY) } Index: trunk/util/configparser.y =================================================================== ---- trunk/util/configparser.y (revision 3587) +--- trunk/util/configparser.y (revision 4357) +++ trunk/util/configparser.y (working copy) -@@ -92,6 +92,7 @@ +@@ -95,6 +95,7 @@ %token VAR_STATISTICS_CUMULATIVE VAR_OUTGOING_PORT_PERMIT %token VAR_OUTGOING_PORT_AVOID VAR_DLV_ANCHOR_FILE VAR_DLV_ANCHOR %token VAR_NEG_CACHE_SIZE VAR_HARDEN_REFERRAL_PATH VAR_PRIVATE_ADDRESS @@ -387,7 +387,7 @@ Index: trunk/util/configparser.y %token VAR_PRIVATE_DOMAIN VAR_REMOTE_CONTROL VAR_CONTROL_ENABLE %token VAR_CONTROL_INTERFACE VAR_CONTROL_PORT VAR_SERVER_KEY_FILE %token VAR_SERVER_CERT_FILE VAR_CONTROL_KEY_FILE VAR_CONTROL_CERT_FILE -@@ -169,6 +170,7 @@ +@@ -203,6 +204,7 @@ server_dlv_anchor_file | server_dlv_anchor | server_neg_cache_size | server_harden_referral_path | server_private_address | server_private_domain | server_extended_statistics | @@ -395,10 +395,12 @@ Index: trunk/util/configparser.y server_local_data_ptr | server_jostle_timeout | server_unwanted_reply_threshold | server_log_time_ascii | server_domain_insecure | server_val_sig_skew_min | -@@ -893,6 +895,15 @@ +@@ -1183,6 +1185,15 @@ + OUTYY(("P(server_caps_whitelist:%s)\n", $2)); + if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, $2)) yyerror("out of memory"); - } - ; ++ } ++ ; +server_aaaa_filter: VAR_AAAA_FILTER STRING_ARG + { + OUTYY(("P(server_aaaa_filter:%s)\n", $2)); @@ -406,8 +408,6 @@ Index: trunk/util/configparser.y + yyerror("expected yes or no."); + else cfg_parser->cfg->aaaa_filter = (strcmp($2, "yes")==0); + free($2); -+ } -+ ; + } + ; server_private_address: VAR_PRIVATE_ADDRESS STRING_ARG - { - OUTYY(("P(server_private_address:%s)\n", $2)); diff --git a/contrib/parseunbound.pl b/contrib/parseunbound.pl index 6a6a76d6fb21..1d294b13288d 100755 --- a/contrib/parseunbound.pl +++ b/contrib/parseunbound.pl @@ -91,7 +91,7 @@ while ( scalar keys %startstats < $numthreads || scalar keys %donestats < $numth $allstats{$inthread}->{outstandingexc} = $4; } elsif ( $line =~ m/info: average recursion processing time ([0-9\.]+) sec/ ) { - $allstats{$inthread}->{recursionavg} = int($1 * 1000); # change sec to milisec. + $allstats{$inthread}->{recursionavg} = int($1 * 1000); # change sec to millisec. } elsif ( $line =~ m/info: histogram of recursion processing times/ ) { next; @@ -103,7 +103,7 @@ while ( scalar keys %startstats < $numthreads || scalar keys %donestats < $numth } elsif ( $line =~ m/info: lower\(secs\) upper\(secs\) recursions/ ) { # since after this line we're unsure if we get these numbers - # at all, we sould consider this marker as the end of the + # at all, we should consider this marker as the end of the # block. Chances that we're parsing a file halfway written # at this stage are small. Bold statement. $donestats{$inthread} = 1; diff --git a/daemon/remote.c b/daemon/remote.c index 243d94c49aa1..3477340ff578 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -827,6 +827,7 @@ print_mem(SSL* ssl, struct worker* worker, struct daemon* daemon) #endif /* USE_IPSECMOD */ #ifdef USE_DNSCRYPT size_t dnscrypt_shared_secret = 0; + size_t dnscrypt_nonce = 0; #endif /* USE_DNSCRYPT */ msg = slabhash_get_mem(daemon->env->msg_cache); rrset = slabhash_get_mem(&daemon->env->rrset_cache->table); @@ -843,6 +844,7 @@ print_mem(SSL* ssl, struct worker* worker, struct daemon* daemon) if(daemon->dnscenv) { dnscrypt_shared_secret = slabhash_get_mem( daemon->dnscenv->shared_secrets_cache); + dnscrypt_nonce = slabhash_get_mem(daemon->dnscenv->nonces_cache); } #endif /* USE_DNSCRYPT */ @@ -868,6 +870,9 @@ print_mem(SSL* ssl, struct worker* worker, struct daemon* daemon) if(!print_longnum(ssl, "mem.cache.dnscrypt_shared_secret"SQ, dnscrypt_shared_secret)) return 0; + if(!print_longnum(ssl, "mem.cache.dnscrypt_nonce"SQ, + dnscrypt_nonce)) + return 0; #endif /* USE_DNSCRYPT */ return 1; } @@ -1058,8 +1063,12 @@ print_ext(SSL* ssl, struct ub_stats_info* s) #ifdef USE_DNSCRYPT if(!ssl_printf(ssl, "dnscrypt_shared_secret.cache.count"SQ"%u\n", (unsigned)s->svr.shared_secret_cache_count)) return 0; + if(!ssl_printf(ssl, "dnscrypt_nonce.cache.count"SQ"%u\n", + (unsigned)s->svr.nonce_cache_count)) return 0; if(!ssl_printf(ssl, "num.query.dnscrypt.shared_secret.cachemiss"SQ"%lu\n", (unsigned long)s->svr.num_query_dnscrypt_secret_missed_cache)) return 0; + if(!ssl_printf(ssl, "num.query.dnscrypt.replay"SQ"%lu\n", + (unsigned long)s->svr.num_query_dnscrypt_replay)) return 0; #endif /* USE_DNSCRYPT */ return 1; } @@ -1771,7 +1780,7 @@ negative_del_rrset(struct lruhash_entry* e, void* arg) struct ub_packed_rrset_key* k = (struct ub_packed_rrset_key*)e->key; struct packed_rrset_data* d = (struct packed_rrset_data*)e->data; /* delete the parentside negative cache rrsets, - * these are namerserver rrsets that failed lookup, rdata empty */ + * these are nameserver rrsets that failed lookup, rdata empty */ if((k->rk.flags & PACKED_RRSET_PARENT_SIDE) && d->count == 1 && d->rrsig_count == 0 && d->rr_len[0] == 0) { d->ttl = inf->expired; diff --git a/daemon/stats.c b/daemon/stats.c index 1058556be7c2..ed788720846a 100644 --- a/daemon/stats.c +++ b/daemon/stats.c @@ -174,6 +174,21 @@ get_dnscrypt_cache_miss(struct worker* worker, int reset) lock_basic_unlock(&de->shared_secrets_cache_lock); return r; } + +/** get the number of replayed queries */ +static size_t +get_dnscrypt_replay(struct worker* worker, int reset) +{ + size_t r; + struct dnsc_env* de = worker->daemon->dnscenv; + + lock_basic_lock(&de->nonces_cache_lock); + r = de->num_query_dnscrypt_replay; + if(reset && !worker->env.cfg->stat_cumulative) + de->num_query_dnscrypt_replay = 0; + lock_basic_unlock(&de->nonces_cache_lock); + return r; +} #endif /* USE_DNSCRYPT */ void @@ -225,13 +240,21 @@ server_stats_compile(struct worker* worker, struct ub_stats_info* s, int reset) (long long)get_dnscrypt_cache_miss(worker, reset); s->svr.shared_secret_cache_count = (long long)count_slabhash_entries( worker->daemon->dnscenv->shared_secrets_cache); + s->svr.nonce_cache_count = (long long)count_slabhash_entries( + worker->daemon->dnscenv->nonces_cache); + s->svr.num_query_dnscrypt_replay = + (long long)get_dnscrypt_replay(worker, reset); } else { s->svr.num_query_dnscrypt_secret_missed_cache = 0; s->svr.shared_secret_cache_count = 0; + s->svr.nonce_cache_count = 0; + s->svr.num_query_dnscrypt_replay = 0; } #else s->svr.num_query_dnscrypt_secret_missed_cache = 0; s->svr.shared_secret_cache_count = 0; + s->svr.nonce_cache_count = 0; + s->svr.num_query_dnscrypt_replay = 0; #endif /* USE_DNSCRYPT */ /* get tcp accept usage */ diff --git a/daemon/unbound.c b/daemon/unbound.c index 070a824d6734..432aa912e681 100644 --- a/daemon/unbound.c +++ b/daemon/unbound.c @@ -400,7 +400,7 @@ detach(void) #endif /* HAVE_DAEMON */ } -/** daemonize, drop user priviliges and chroot if needed */ +/** daemonize, drop user privileges and chroot if needed */ static void perform_setup(struct daemon* daemon, struct config_file* cfg, int debug_mode, const char** cfgfile, int need_pidfile) diff --git a/daemon/worker.c b/daemon/worker.c index 683f93169117..ac7053abddf3 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1633,7 +1633,8 @@ worker_init(struct worker* worker, struct config_file *cfg, cfg->use_caps_bits_for_id, worker->ports, worker->numports, cfg->unwanted_threshold, cfg->outgoing_tcp_mss, &worker_alloc_cleanup, worker, - cfg->do_udp, worker->daemon->connect_sslctx, cfg->delay_close, + cfg->do_udp || cfg->udp_upstream_without_downstream, + worker->daemon->connect_sslctx, cfg->delay_close, dtenv); if(!worker->back) { log_err("could not create outgoing sockets"); diff --git a/dns64/dns64.c b/dns64/dns64.c index 2f2d1255d6ff..7889d72e2299 100644 --- a/dns64/dns64.c +++ b/dns64/dns64.c @@ -792,6 +792,10 @@ dns64_inform_super(struct module_qstate* qstate, int id, qstate->return_msg->rep)) return; + /* Use return code from A query in response to client. */ + if (super->return_rcode != LDNS_RCODE_NOERROR) + super->return_rcode = qstate->return_rcode; + /* Generate a response suitable for the original query. */ if (qstate->qinfo.qtype == LDNS_RR_TYPE_A) { dns64_adjust_a(id, super, qstate); diff --git a/dnscrypt/dnscrypt.c b/dnscrypt/dnscrypt.c index db054df9d680..a0db12077093 100644 --- a/dnscrypt/dnscrypt.c +++ b/dnscrypt/dnscrypt.c @@ -60,6 +60,17 @@ struct shared_secret_cache_key { }; +struct nonce_cache_key { + /** the nonce used by the client */ + uint8_t nonce[crypto_box_HALF_NONCEBYTES]; + /** the client_magic used by the client, this is associated to 1 cert only */ + uint8_t magic_query[DNSCRYPT_MAGIC_HEADER_LEN]; + /** the client public key */ + uint8_t client_publickey[crypto_box_PUBLICKEYBYTES]; + /** the hash table entry, data is uint8_t */ + struct lruhash_entry entry; +}; + /** * Generate a key suitable to find shared secret in slabhash. * \param[in] key: a uint8_t pointer of size DNSCRYPT_SHARED_SECRET_KEY_LENGTH @@ -135,6 +146,87 @@ dnsc_shared_secrets_lookup(struct slabhash* cache, return slabhash_lookup(cache, hash, key, 0); } +/** + * Generate a key hash suitable to find a nonce in slabhash. + * \param[in] nonce: a uint8_t pointer of size crypto_box_HALF_NONCEBYTES + * \param[in] magic_query: a uint8_t pointer of size DNSCRYPT_MAGIC_HEADER_LEN + * \param[in] pk: The public key of the client. uint8_t pointer of size + * crypto_box_PUBLICKEYBYTES. + * \return the hash of the key. + */ +static uint32_t +dnsc_nonce_cache_key_hash(const uint8_t nonce[crypto_box_HALF_NONCEBYTES], + const uint8_t magic_query[DNSCRYPT_MAGIC_HEADER_LEN], + const uint8_t pk[crypto_box_PUBLICKEYBYTES]) +{ + uint32_t h = 0; + h = hashlittle(nonce, crypto_box_HALF_NONCEBYTES, h); + h = hashlittle(magic_query, DNSCRYPT_MAGIC_HEADER_LEN, h); + return hashlittle(pk, crypto_box_PUBLICKEYBYTES, h); +} + +/** + * Inserts a nonce, magic_query, pk tuple into the nonces_cache slabhash. + * \param[in] cache: the slabhash in which to look for the key. + * \param[in] nonce: a uint8_t pointer of size crypto_box_HALF_NONCEBYTES + * \param[in] magic_query: a uint8_t pointer of size DNSCRYPT_MAGIC_HEADER_LEN + * \param[in] pk: The public key of the client. uint8_t pointer of size + * crypto_box_PUBLICKEYBYTES. + * \param[in] hash: the hash of the key. + */ +static void +dnsc_nonce_cache_insert(struct slabhash *cache, + const uint8_t nonce[crypto_box_HALF_NONCEBYTES], + const uint8_t magic_query[DNSCRYPT_MAGIC_HEADER_LEN], + const uint8_t pk[crypto_box_PUBLICKEYBYTES], + uint32_t hash) +{ + struct nonce_cache_key* k = + (struct nonce_cache_key*)calloc(1, sizeof(*k)); + if(!k) { + free(k); + return; + } + lock_rw_init(&k->entry.lock); + memcpy(k->nonce, nonce, crypto_box_HALF_NONCEBYTES); + memcpy(k->magic_query, magic_query, DNSCRYPT_MAGIC_HEADER_LEN); + memcpy(k->client_publickey, pk, crypto_box_PUBLICKEYBYTES); + k->entry.hash = hash; + k->entry.key = k; + k->entry.data = NULL; + slabhash_insert(cache, + hash, &k->entry, + NULL, + NULL); +} + +/** + * Lookup a record in nonces_cache. + * \param[in] cache: the slabhash in which to look for the key. + * \param[in] nonce: a uint8_t pointer of size crypto_box_HALF_NONCEBYTES + * \param[in] magic_query: a uint8_t pointer of size DNSCRYPT_MAGIC_HEADER_LEN + * \param[in] pk: The public key of the client. uint8_t pointer of size + * crypto_box_PUBLICKEYBYTES. + * \param[in] hash: the hash of the key. + * \return a pointer to the locked cache entry or NULL on failure. + */ +static struct lruhash_entry* +dnsc_nonces_lookup(struct slabhash* cache, + const uint8_t nonce[crypto_box_HALF_NONCEBYTES], + const uint8_t magic_query[DNSCRYPT_MAGIC_HEADER_LEN], + const uint8_t pk[crypto_box_PUBLICKEYBYTES], + uint32_t hash) +{ + struct nonce_cache_key k; + memset(&k, 0, sizeof(k)); + k.entry.hash = hash; + memcpy(k.nonce, nonce, crypto_box_HALF_NONCEBYTES); + memcpy(k.magic_query, magic_query, DNSCRYPT_MAGIC_HEADER_LEN); + memcpy(k.client_publickey, pk, crypto_box_PUBLICKEYBYTES); + + return slabhash_lookup(cache, hash, &k, 0); +} + /** * Decrypt a query using the dnsccert that was found using dnsc_find_cert. * The client nonce will be extracted from the encrypted query and stored in @@ -163,11 +255,44 @@ dnscrypt_server_uncurve(struct dnsc_env* env, struct lruhash_entry* entry; uint32_t hash; + uint32_t nonce_hash; + if (len <= DNSCRYPT_QUERY_HEADER_SIZE) { return -1; } query_header = (struct dnscrypt_query_header *)buf; + + /* Detect replay attacks */ + nonce_hash = dnsc_nonce_cache_key_hash( + query_header->nonce, + cert->magic_query, + query_header->publickey); + + lock_basic_lock(&env->nonces_cache_lock); + entry = dnsc_nonces_lookup( + env->nonces_cache, + query_header->nonce, + cert->magic_query, + query_header->publickey, + nonce_hash); + + if(entry) { + lock_rw_unlock(&entry->lock); + env->num_query_dnscrypt_replay++; + lock_basic_unlock(&env->nonces_cache_lock); + return -1; + } + + dnsc_nonce_cache_insert( + env->nonces_cache, + query_header->nonce, + cert->magic_query, + query_header->publickey, + nonce_hash); + lock_basic_unlock(&env->nonces_cache_lock); + + /* Find existing shared secret */ hash = dnsc_shared_secrets_cache_key(key, cert->es_version[1], query_header->publickey, @@ -547,7 +672,7 @@ dnsc_find_cert(struct dnsc_env* dnscenv, struct sldns_buffer* buffer) * In order to be able to serve certs over TXT, we can reuse the local-zone and * local-data config option. The zone and qname are infered from the * provider_name and the content of the TXT record from the certificate content. - * returns the number of certtificate TXT record that were loaded. + * returns the number of certificate TXT record that were loaded. * < 0 in case of error. */ static int @@ -770,8 +895,16 @@ dnsc_create(void) env = (struct dnsc_env *) calloc(1, sizeof(struct dnsc_env)); lock_basic_init(&env->shared_secrets_cache_lock); lock_protect(&env->shared_secrets_cache_lock, - &env->num_query_dnscrypt_secret_missed_cache, - sizeof(env->num_query_dnscrypt_secret_missed_cache)); + &env->num_query_dnscrypt_secret_missed_cache, + sizeof(env->num_query_dnscrypt_secret_missed_cache)); + lock_basic_init(&env->nonces_cache_lock); + lock_protect(&env->nonces_cache_lock, + &env->nonces_cache, + sizeof(env->nonces_cache)); + lock_protect(&env->nonces_cache_lock, + &env->num_query_dnscrypt_replay, + sizeof(env->num_query_dnscrypt_replay)); + return env; } @@ -803,6 +936,16 @@ dnsc_apply_cfg(struct dnsc_env *env, struct config_file *cfg) if(!env->shared_secrets_cache){ fatal_exit("dnsc_apply_cfg: could not create shared secrets cache."); } + env->nonces_cache = slabhash_create( + cfg->dnscrypt_nonce_cache_slabs, + HASH_DEFAULT_STARTARRAY, + cfg->dnscrypt_nonce_cache_size, + dnsc_nonces_sizefunc, + dnsc_nonces_compfunc, + dnsc_nonces_delkeyfunc, + dnsc_nonces_deldatafunc, + NULL + ); return 0; } @@ -817,7 +960,9 @@ dnsc_delete(struct dnsc_env *env) sodium_free(env->certs); sodium_free(env->keypairs); slabhash_delete(env->shared_secrets_cache); + slabhash_delete(env->nonces_cache); lock_basic_destroy(&env->shared_secrets_cache_lock); + lock_basic_destroy(&env->nonces_cache_lock); free(env); } @@ -858,3 +1003,51 @@ dnsc_shared_secrets_deldatafunc(void* d, void* ATTR_UNUSED(arg)) uint8_t* data = (uint8_t*)d; free(data); } + +/** + * ######################################################### + * ############### Nonces cache functions ################## + * ######################################################### + */ + +size_t +dnsc_nonces_sizefunc(void *k, void* ATTR_UNUSED(d)) +{ + struct nonce_cache_key* nk = (struct nonce_cache_key*)k; + size_t key_size = sizeof(struct nonce_cache_key) + + lock_get_mem(&nk->entry.lock); + (void)nk; /* otherwise ssk is unused if no threading, or fixed locksize */ + return key_size; +} + +int +dnsc_nonces_compfunc(void *m1, void *m2) +{ + struct nonce_cache_key *k1 = m1, *k2 = m2; + return + sodium_memcmp( + k1->nonce, + k2->nonce, + crypto_box_HALF_NONCEBYTES) != 0 || + sodium_memcmp( + k1->magic_query, + k2->magic_query, + DNSCRYPT_MAGIC_HEADER_LEN) != 0 || + sodium_memcmp( + k1->client_publickey, k2->client_publickey, + crypto_box_PUBLICKEYBYTES) != 0; +} + +void +dnsc_nonces_delkeyfunc(void *k, void* ATTR_UNUSED(arg)) +{ + struct nonce_cache_key* nk = (struct nonce_cache_key*)k; + lock_rw_destroy(&nk->entry.lock); + free(nk); +} + +void +dnsc_nonces_deldatafunc(void* ATTR_UNUSED(d), void* ATTR_UNUSED(arg)) +{ + return; +} diff --git a/dnscrypt/dnscrypt.h b/dnscrypt/dnscrypt.h index dde36d6675d1..7dec2c488cf3 100644 --- a/dnscrypt/dnscrypt.h +++ b/dnscrypt/dnscrypt.h @@ -63,11 +63,20 @@ struct dnsc_env { uint64_t nonce_ts_last; unsigned char hash_key[crypto_shorthash_KEYBYTES]; char * provider_name; + + /** Caches */ struct slabhash *shared_secrets_cache; /** lock on shared secret cache counters */ lock_basic_type shared_secrets_cache_lock; /** number of misses from shared_secrets_cache */ size_t num_query_dnscrypt_secret_missed_cache; + + /** slabhash keeping track of nonce/cient pk/server sk pairs. */ + struct slabhash *nonces_cache; + /** lock on nonces_cache, used to avoid race condition in updating the hash */ + lock_basic_type nonces_cache_lock; + /** number of replayed queries */ + size_t num_query_dnscrypt_replay; }; struct dnscrypt_query_header { @@ -139,5 +148,26 @@ void dnsc_shared_secrets_delkeyfunc(void *k, void* arg); */ void dnsc_shared_secrets_deldatafunc(void* d, void* arg); +/** + * Computes the size of the nonce cache entry. + */ +size_t dnsc_nonces_sizefunc(void *k, void *d); + +/** + * Compares two nonce cache keys. + */ +int dnsc_nonces_compfunc(void *m1, void *m2); + +/** + * Function to delete a nonce cache key. + */ +void dnsc_nonces_delkeyfunc(void *k, void* arg); + +/** + * Function to delete a nonce cache value. + */ +void dnsc_nonces_deldatafunc(void* d, void* arg); + + #endif /* USE_DNSCRYPT */ #endif diff --git a/doc/Changelog b/doc/Changelog index 39a3a2b7f4aa..3a03d6888810 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,55 @@ +10 October 2017: Wouter + - tag 1.6.7 + +6 October 2017: Wouter + - Fix spelling in unbound-control man page. + +5 October 2017: Wouter + - Fix trust-anchor-signaling works in libunbound. + - Fix some more crpls in testdata for different signaling default. + - tag 1.6.7rc1 + +5 October 2017: Ralph + - Set trust-anchor-signaling default to yes + - Use RCODE from A query on DNS64 synthesized answer. + +2 October 2017: Wouter + - Fix param unused warning for windows exportsymbol compile. + +25 September 2017: Ralph + - Fix #1450: Generate again patch contrib/aaaa-filter-iterator.patch + (by Danilo G. Baio). + +21 September 2017: Ralph + - Log name of looping module + +19 September 2017: Wouter + - use a cachedb answer even if it's "expired" when serve-expired is yes + (patch from Jinmei Tatuya). + - trigger refetching of the answer in that case (this will bypass + cachedb lookup) + - allow storing a 0-TTL answer from cachedb in the in-memory message + cache when serve-expired is yes + - Fix DNSCACHE_STORE_ZEROTTL to be bigger than 0xffff. + +18 September 2017: Ralph + - Fix #1400: allowing use of global cache on ECS-forwarding unless + always-forward. + +18 September 2017: Wouter + - tag 1.6.6 (is 1.6.6rc2) + - Fix that looping modules always stop the query, and don't pass + control. + - Fix #1435: Please allow UDP to be disabled separately upstream and + downstream. + - Fix #1440: [dnscrypt] client nonce cache. + +15 September 2017: Wouter + - Fix unbound-host to report error for DNSSEC state of failed lookups. + - Spelling fixes, from Josh Soref. + 13 September 2017: Wouter - - tag 1.6.6rc2 + - tag 1.6.6rc2, became 1.6.6 on 18 sep. trunk 1.6.7 in development. 12 September 2017: Wouter - Add dns64 for client-subnet in unbound-checkconf. diff --git a/doc/README b/doc/README index d0c0bf34f3fb..6d8cc2ef8a28 100644 --- a/doc/README +++ b/doc/README @@ -1,4 +1,4 @@ -README for Unbound 1.6.6 +README for Unbound 1.6.7 Copyright 2007 NLnet Labs http://unbound.net diff --git a/doc/example.conf.in b/doc/example.conf.in index e7978b79c898..e636dc858201 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -1,7 +1,7 @@ # # Example configuration file. # -# See unbound.conf(5) man page, version 1.6.6. +# See unbound.conf(5) man page, version 1.6.7. # # this is a comment. @@ -199,6 +199,10 @@ server: # upstream connections use TCP only (and no UDP), "yes" or "no" # useful for tunneling scenarios, default no. # tcp-upstream: no + + # upstream connections also use UDP (even if do-udp is no). + # useful if if you want UDP upstream, but don't provide UDP downstream. + # udp-upstream-without-downstream: no # Maximum segment size (MSS) of TCP socket on which the server # responds to queries. Default is 0, system default MSS. @@ -449,7 +453,7 @@ server: # auto-trust-anchor-file: "@UNBOUND_ROOTKEY_FILE@" # trust anchor signaling sends a RFC8145 key tag query after priming. - # trust-anchor-signaling: no + # trust-anchor-signaling: yes # File with DLV trusted keys. Same format as trust-anchor-file. # There can be only one DLV configured, it is trusted from root down. @@ -512,7 +516,7 @@ server: # that set CD but cannot validate themselves. # ignore-cd-flag: no - # Serve expired reponses from cache, with TTL 0 in the response, + # Serve expired responses from cache, with TTL 0 in the response, # and then attempt to fetch the data afresh. # serve-expired: no diff --git a/doc/libunbound.3.in b/doc/libunbound.3.in index fbf3cd832af6..7dd8de65273b 100644 --- a/doc/libunbound.3.in +++ b/doc/libunbound.3.in @@ -1,4 +1,4 @@ -.TH "libunbound" "3" "Sep 18, 2017" "NLnet Labs" "unbound 1.6.6" +.TH "libunbound" "3" "Oct 10, 2017" "NLnet Labs" "unbound 1.6.7" .\" .\" libunbound.3 -- unbound library functions manual .\" @@ -43,7 +43,7 @@ .B ub_ctx_zone_remove, .B ub_ctx_data_add, .B ub_ctx_data_remove -\- Unbound DNS validating resolver 1.6.6 functions. +\- Unbound DNS validating resolver 1.6.7 functions. .SH "SYNOPSIS" .B #include .LP diff --git a/doc/requirements.txt b/doc/requirements.txt index a66962d4a401..b643cec17d3b 100644 --- a/doc/requirements.txt +++ b/doc/requirements.txt @@ -81,7 +81,7 @@ o Too many Features. 5. Choices ---------- -o rfc2181 decourages duplicates RRs in RRsets. unbound does not create +o rfc2181 discourages duplicates RRs in RRsets. unbound does not create duplicates, but when presented with duplicates on the wire from the authoritative servers, does not perform duplicate removal. It does do some rrsig duplicate removal, in the msgparser, for dnssec qtype diff --git a/doc/unbound-anchor.8.in b/doc/unbound-anchor.8.in index a008e0c0e262..1e07f5e2b839 100644 --- a/doc/unbound-anchor.8.in +++ b/doc/unbound-anchor.8.in @@ -1,4 +1,4 @@ -.TH "unbound-anchor" "8" "Sep 18, 2017" "NLnet Labs" "unbound 1.6.6" +.TH "unbound-anchor" "8" "Oct 10, 2017" "NLnet Labs" "unbound 1.6.7" .\" .\" unbound-anchor.8 -- unbound anchor maintenance utility manual .\" diff --git a/doc/unbound-checkconf.8.in b/doc/unbound-checkconf.8.in index 2e38e76b9979..3a7e1e98a465 100644 --- a/doc/unbound-checkconf.8.in +++ b/doc/unbound-checkconf.8.in @@ -1,4 +1,4 @@ -.TH "unbound-checkconf" "8" "Sep 18, 2017" "NLnet Labs" "unbound 1.6.6" +.TH "unbound-checkconf" "8" "Oct 10, 2017" "NLnet Labs" "unbound 1.6.7" .\" .\" unbound-checkconf.8 -- unbound configuration checker manual .\" diff --git a/doc/unbound-control.8.in b/doc/unbound-control.8.in index 66ea690390a0..80501a7227fb 100644 --- a/doc/unbound-control.8.in +++ b/doc/unbound-control.8.in @@ -1,4 +1,4 @@ -.TH "unbound-control" "8" "Sep 18, 2017" "NLnet Labs" "unbound 1.6.6" +.TH "unbound-control" "8" "Oct 10, 2017" "NLnet Labs" "unbound 1.6.7" .\" .\" unbound-control.8 -- unbound remote control manual .\" @@ -337,6 +337,19 @@ number of queries that were successfully answered using a cache lookup .I threadX.num.cachemiss number of queries that needed recursive processing .TP +.I threadX.num.dnscrypt.crypted +number of queries that were encrypted and successfully decapsulated by dnscrypt. +.TP +.I threadX.num.dnscrypt.cert +number of queries that were requesting dnscrypt certificates. +.TP +.I threadX.num.dnscrypt.cleartext +number of queries received on dnscrypt port that were cleartext and not a +request for certificates. +.TP +.I threadX.num.dnscrypt.malformed +number of request that were neither cleartext, not valid dnscrypt messages. +.TP .I threadX.num.prefetch number of cache prefetches performed. This number is included in cachehits, as the original query had the unprefetched answer from cache, @@ -393,6 +406,18 @@ summed over threads. .I total.num.cachemiss summed over threads. .TP +.I total.num.dnscrypt.crypted +summed over threads. +.TP +.I total.num.dnscrypt.cert +summed over threads. +.TP +.I total.num.dnscrypt.cleartext +summed over threads. +.TP +.I total.num.dnscrypt.malformed +summed over threads. +.TP .I total.num.prefetch summed over threads. .TP @@ -439,6 +464,12 @@ Memory in bytes in use by the RRset cache. .I mem.cache.message Memory in bytes in use by the message cache. .TP +.I mem.cache.dnscrypt_shared_secret +Memory in bytes in use by the dnscrypt shared secrets cache. +.TP +.I mem.cache.dnscrypt_nonce +Memory in bytes in use by the dnscrypt nonce cache. +.TP .I mem.mod.iterator Memory in bytes in use by the iterator module. .TP @@ -497,6 +528,14 @@ These queries are also included in the num.query.edns.present number. The number of queries that are turned away from being send to nameserver due to ratelimiting. .TP +.I num.query.dnscrypt.shared_secret.cachemiss +The number of dnscrypt queries that did not find a shared secret in the cache. +The can be use to compute the shared secret hitrate. +.TP +.I num.query.dnscrypt.replay +The number of dnscrypt queries that found a nonce hit in the nonce cache and +hence are considered a query replay. +.TP .I num.answer.rcode.NXDOMAIN The number of answers to queries, from cache or from recursion, that had the return code NXDOMAIN. Also printed for the other return codes. @@ -546,6 +585,19 @@ timing and protocol support information. .I key.cache.count The number of items in the key cache. These are DNSSEC keys, one item per delegation point, and their validation status. +.TP +.I dnscrypt_shared_secret.cache.count +The number of items in the shared secret cache. These are precomputed shared +secrets for a given client public key/server secret key pair. Shared secrets +are CPU intensive and this cache allows unbound to avoid recomputing the +shared secret when multiple dnscrypt queries are sent from the same client. +.TP +.I dnscrypt_nonce.cache.count +The number of items in the client nonce cache. This cache is used to prevent +dnscrypt queries replay. The client nonce must be unique for each client public +key/server secret key pair. This cache should be able to host QPS * `replay +window` interval keys to prevent replay of a query during `replay window` +seconds. .SH "FILES" .TP .I @ub_conf_file@ diff --git a/doc/unbound-host.1.in b/doc/unbound-host.1.in index de8f0bdd052c..b16363c5d536 100644 --- a/doc/unbound-host.1.in +++ b/doc/unbound-host.1.in @@ -1,4 +1,4 @@ -.TH "unbound\-host" "1" "Sep 18, 2017" "NLnet Labs" "unbound 1.6.6" +.TH "unbound\-host" "1" "Oct 10, 2017" "NLnet Labs" "unbound 1.6.7" .\" .\" unbound-host.1 -- unbound DNS lookup utility .\" diff --git a/doc/unbound.8.in b/doc/unbound.8.in index 24959ba26cec..1f70ef6685f9 100644 --- a/doc/unbound.8.in +++ b/doc/unbound.8.in @@ -1,4 +1,4 @@ -.TH "unbound" "8" "Sep 18, 2017" "NLnet Labs" "unbound 1.6.6" +.TH "unbound" "8" "Oct 10, 2017" "NLnet Labs" "unbound 1.6.7" .\" .\" unbound.8 -- unbound manual .\" @@ -9,7 +9,7 @@ .\" .SH "NAME" .B unbound -\- Unbound DNS validating resolver 1.6.6. +\- Unbound DNS validating resolver 1.6.7. .SH "SYNOPSIS" .B unbound .RB [ \-h ] diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index f48ef9214afa..73c4db9561d6 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -1,4 +1,4 @@ -.TH "unbound.conf" "5" "Sep 18, 2017" "NLnet Labs" "unbound 1.6.6" +.TH "unbound.conf" "5" "Oct 10, 2017" "NLnet Labs" "unbound 1.6.7" .\" .\" unbound.conf.5 -- unbound.conf manual .\" @@ -391,6 +391,11 @@ negotiation between Unbound and other servers. Enable or disable whether the upstream queries use TCP only for transport. Default is no. Useful in tunneling scenarios. .TP +.B udp\-upstream\-without\-downstream: \fI +Enable udp upstream even if do-udp is no. Default is no, and this does not +change anything. Useful for TLS service providers, that want no udp downstream +but use udp to fetch data upstream. +.TP .B ssl\-upstream: \fI Enabled or disable whether the upstream queries use SSL only for transport. Default is no. Useful in tunneling scenarios. The SSL contains plain DNS in @@ -807,7 +812,7 @@ It is possible to use wildcards with this statement, the wildcard is expanded on start and on reload. .TP .B trust\-anchor\-signaling: \fI -Send RFC8145 key tag query after trust anchor priming. Default is off. +Send RFC8145 key tag query after trust anchor priming. Default is on. .TP .B dlv\-anchor\-file: \fI This option was used during early days DNSSEC deployment when no parent-side @@ -1518,6 +1523,17 @@ using the same public key. It saves a substantial amount of CPU. Give power of 2 number of slabs, this is used to reduce lock contention in the dnscrypt shared secrets cache. Close to the number of cpus is a fairly good setting. +.TP +.B dnscrypt\-nonce\-cache\-size: \fI +Give the size of the data structure in which the client nonces are kept in. +Default 4m. In bytes or use m(mega), k(kilo), g(giga). +The nonce cache is used to prevent dnscrypt message replaying. Client nonce +should be unique for any pair of client pk/server sk. +.TP +.B dnscrypt\-nonce\-cache\-slabs: \fI +Give power of 2 number of slabs, this is used to reduce lock contention +in the dnscrypt nonce cache. Close to the number of cpus is +a fairly good setting. .SS "EDNS Client Subnet Module Options" .LP The ECS module must be configured in the \fBmodule\-config:\fR "subnetcache @@ -1531,7 +1547,7 @@ specialized cache. If the authority indicated no support, the response is stored in the regular cache. .LP Additionally, when a client includes the option in its queries, Unbound will -forward the option to the authority if prensent in the whitelist, or +forward the option to the authority if present in the whitelist, or \fBclient\-subnet\-always\-forward\fR is set to yes. In this case the lookup in the regular cache is skipped. .LP diff --git a/edns-subnet/addrtree.h b/edns-subnet/addrtree.h index 857e677f9001..71d9d2ec6c9b 100644 --- a/edns-subnet/addrtree.h +++ b/edns-subnet/addrtree.h @@ -108,7 +108,7 @@ struct addrnode { struct addredge { /** address of connected node */ addrkey_t *str; - /** lenght in bits of str */ + /** length in bits of str */ addrlen_t len; /** child node this edge is connected to */ struct addrnode *node; diff --git a/edns-subnet/subnetmod.c b/edns-subnet/subnetmod.c index 9e76cefdf3b6..4b8a4b211275 100644 --- a/edns-subnet/subnetmod.c +++ b/edns-subnet/subnetmod.c @@ -532,7 +532,7 @@ parse_subnet_option(struct edns_option* ecs_option, struct ecs_data* ecs) ecs->subnet_addr_fam = sldns_read_uint16(ecs_option->opt_data); ecs->subnet_source_mask = ecs_option->opt_data[2]; ecs->subnet_scope_mask = ecs_option->opt_data[3]; - /* remaing bytes indicate address */ + /* remaining bytes indicate address */ /* validate input*/ /* option length matches calculated length? */ @@ -602,7 +602,7 @@ ecs_query_response(struct module_qstate* qstate, struct dns_msg* response, if(sq->subnet_sent && FLAGS_GET_RCODE(response->rep->flags) == LDNS_RCODE_REFUSED) { - /* REFUSED reponse to ECS query, remove ECS option. */ + /* REFUSED response to ECS query, remove ECS option. */ edns_opt_list_remove(&qstate->edns_opts_back_out, qstate->env->cfg->client_subnet_opcode); sq->subnet_sent = 0; @@ -628,7 +628,7 @@ ecs_edns_back_parsed(struct module_qstate* qstate, int id, sq->ecs_server_in.subnet_validdata) /* Only skip global cache store if we sent an ECS option * and received one back. Answers from non-whitelisted - * servers will end up in global cache. Ansers for + * servers will end up in global cache. Answers for * queries with 0 source will not (unless nameserver * does not support ECS). */ qstate->no_cache_store = 1; @@ -722,6 +722,7 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event, sq->ecs_server_out.subnet_scope_mask = 0; sq->ecs_server_out.subnet_validdata = 1; if(sq->ecs_server_out.subnet_source_mask != 0 && + qstate->env->cfg->client_subnet_always_forward && sq->subnet_downstream) /* ECS specific data required, do not look at the global * cache in other modules. */ diff --git a/edns-subnet/subnetmod.h b/edns-subnet/subnetmod.h index 29bf64b4f55d..c7f56327f9d2 100644 --- a/edns-subnet/subnetmod.h +++ b/edns-subnet/subnetmod.h @@ -119,7 +119,7 @@ int ecs_whitelist_check(struct query_info* qinfo, uint16_t flags, socklen_t addrlen, uint8_t* zone, size_t zonelen, struct regional* region, int id, void* cbargs); -/** Check whether reponse from server contains ECS record, if so, skip cache +/** Check whether response from server contains ECS record, if so, skip cache * store. Called just after parsing EDNS data from server. */ int ecs_edns_back_parsed(struct module_qstate* qstate, int id, void* cbargs); diff --git a/iterator/iter_utils.h b/iterator/iter_utils.h index 50c5fc093f6c..d0629a83e0df 100644 --- a/iterator/iter_utils.h +++ b/iterator/iter_utils.h @@ -252,7 +252,7 @@ void caps_strip_reply(struct reply_info* rep); int caps_failed_rcode(struct reply_info* rep); /** - * Store parent-side rrset in seperate rrset cache entries for later + * Store parent-side rrset in separate rrset cache entries for later * last-resort * lookups in case the child-side versions of this information * fails. * @param env: environment with cache, time, ... diff --git a/iterator/iterator.c b/iterator/iterator.c index 01ac883e81e8..6c49709adea3 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -36,7 +36,7 @@ /** * \file * - * This file contains a module that performs recusive iterative DNS query + * This file contains a module that performs recursive iterative DNS query * processing. */ @@ -833,7 +833,7 @@ prime_stub(struct module_qstate* qstate, struct iter_qstate* iq, int id, /** * Generate A and AAAA checks for glue that is in-zone for the referral - * we just got to obtain authoritative information on the adresses. + * we just got to obtain authoritative information on the addresses. * * @param qstate: the qtstate that triggered the need to prime. * @param iq: iterator query state. @@ -1353,7 +1353,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, * the same init processing as ones that do not. Request events that reach * this state must have a valid currentDelegationPoint set. * - * This part is primarly handling stub zone priming. Events that reach this + * This part is primarily handling stub zone priming. Events that reach this * state must have a current delegation point. * * @param qstate: query state. @@ -2396,7 +2396,7 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, if(FLAGS_GET_RCODE(iq->response->rep->flags) == LDNS_RCODE_NXDOMAIN) { /* Stop resolving when NXDOMAIN is DNSSEC - * signed. Based on assumption that namservers + * signed. Based on assumption that nameservers * serving signed zones do not return NXDOMAIN * for empty-non-terminals. */ if(iq->dnssec_expected) @@ -2753,7 +2753,7 @@ processPrimeResponse(struct module_qstate* qstate, int id) /** * Do final processing on responses to target queries. Events reach this * state after the iterative resolution algorithm terminates. This state is - * responsible for reactiving the original event, and housekeeping related + * responsible for reactivating the original event, and housekeeping related * to received target responses (caching, updating the current delegation * point, etc). * Callback from walk_supers for every super state that is interested in @@ -3096,7 +3096,7 @@ processFinished(struct module_qstate* qstate, struct iter_qstate* iq, } /* - * Return priming query results to interestes super querystates. + * Return priming query results to interested super querystates. * * Sets the delegation point and delegation message (not nonRD queries). * This is a callback from walk_supers. diff --git a/iterator/iterator.h b/iterator/iterator.h index 75aafee475e2..841a3643669c 100644 --- a/iterator/iterator.h +++ b/iterator/iterator.h @@ -36,7 +36,7 @@ /** * \file * - * This file contains a module that performs recusive iterative DNS query + * This file contains a module that performs recursive iterative DNS query * processing. */ @@ -62,7 +62,7 @@ struct rbtree_type; /** max number of queries-sent-out. Make sure large NS set does not loop */ #define MAX_SENT_COUNT 32 /** max number of queries for which to perform dnsseclameness detection, - * (rrsigs misssing detection) after that, just pick up that response */ + * (rrsigs missing detection) after that, just pick up that response */ #define DNSSEC_LAME_DETECT_COUNT 4 /** * max number of QNAME minimisation iterations. Limits number of queries for @@ -142,11 +142,11 @@ struct iter_env { enum minimisation_state { /** * (Re)start minimisation. Outgoing QNAME should be set to dp->name. - * State entered on new query or after following refferal or CNAME. + * State entered on new query or after following referral or CNAME. */ INIT_MINIMISE_STATE = 0, /** - * QNAME minimisataion ongoing. Increase QNAME on every iteration. + * QNAME minimisation ongoing. Increase QNAME on every iteration. */ MINIMISE_STATE, /** @@ -184,7 +184,7 @@ enum iter_state { /** * Each time a delegation point changes for a given query or a * query times out and/or wakes up, this state is (re)visited. - * This state is reponsible for iterating through a list of + * This state is responsible for iterating through a list of * nameserver targets. */ QUERYTARGETS_STATE, @@ -378,7 +378,7 @@ struct iter_qstate { struct query_info qinfo_out; /** - * Count number of QNAME minisation iterations. Used to limit number of + * Count number of QNAME minimisation iterations. Used to limit number of * outgoing queries when QNAME minimisation is enabled. */ int minimise_count; @@ -430,7 +430,7 @@ void iter_operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* outbound); /** - * Return priming query results to interestes super querystates. + * Return priming query results to interested super querystates. * * Sets the delegation point and delegation message (not nonRD queries). * This is a callback from walk_supers. diff --git a/libunbound/context.h b/libunbound/context.h index 1761c4d87216..684d11effbc4 100644 --- a/libunbound/context.h +++ b/libunbound/context.h @@ -90,7 +90,7 @@ struct ub_ctx { int dothread; /** next thread number for new threads */ int thr_next_num; - /** if logfile is overriden */ + /** if logfile is overridden */ int logfile_override; /** what logfile to use instead */ FILE* log_out; diff --git a/libunbound/libunbound.c b/libunbound/libunbound.c index eaa31c71c590..9b4dcab15794 100644 --- a/libunbound/libunbound.c +++ b/libunbound/libunbound.c @@ -37,7 +37,7 @@ * \file * * This file contains functions to resolve DNS queries and - * validate the answers. Synchonously and asynchronously. + * validate the answers. Synchronously and asynchronously. * */ diff --git a/libunbound/libworker.c b/libunbound/libworker.c index f6a1d1d1c47b..4067ef4d2853 100644 --- a/libunbound/libworker.c +++ b/libunbound/libworker.c @@ -232,8 +232,8 @@ libworker_setup(struct ub_ctx* ctx, int is_bg, struct ub_event_base* eb) 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, - cfg->outgoing_tcp_mss, - &libworker_alloc_cleanup, w, cfg->do_udp, w->sslctx, + cfg->outgoing_tcp_mss, &libworker_alloc_cleanup, w, + cfg->do_udp || cfg->udp_upstream_without_downstream, w->sslctx, cfg->delay_close, NULL); if(!w->is_bg || w->is_bg_thread) { lock_basic_unlock(&ctx->cfglock); @@ -251,6 +251,7 @@ libworker_setup(struct ub_ctx* ctx, int is_bg, struct ub_event_base* eb) w->env->send_query = &libworker_send_query; w->env->detach_subs = &mesh_detach_subs; w->env->attach_sub = &mesh_attach_sub; + w->env->add_sub = &mesh_add_sub; w->env->kill_sub = &mesh_state_delete; w->env->detect_cycle = &mesh_detect_cycle; comm_base_timept(w->base, &w->env->now, &w->env->now_tv); diff --git a/libunbound/python/doc/examples/example7.rst b/libunbound/python/doc/examples/example7.rst index 2f48c8f0f26f..5fde18e05488 100644 --- a/libunbound/python/doc/examples/example7.rst +++ b/libunbound/python/doc/examples/example7.rst @@ -23,7 +23,7 @@ IDN converted attributes The :class:`unbound.ub_data` class contains attributes suffix which converts the dname to UTF string. These attributes have the ``_idn`` suffix. -Apart from this aproach, two conversion functions exist +Apart from this approach, two conversion functions exist (:func:`unbound.idn2dname` and :func:`unbound.dname2idn`). Source code diff --git a/libunbound/unbound.h b/libunbound/unbound.h index ac747a7cc6cc..1b0f54fd2b6b 100644 --- a/libunbound/unbound.h +++ b/libunbound/unbound.h @@ -37,7 +37,7 @@ * \file * * This file contains functions to resolve DNS queries and - * validate the answers. Synchonously and asynchronously. + * validate the answers. Synchronously and asynchronously. * * Several ways to use this interface from an application wishing * to perform (validated) DNS lookups. @@ -177,7 +177,7 @@ struct ub_result { * False, if validation failed or domain queried has no security info. * * It is possible to get a result with no data (havedata is false), - * and secure is true. This means that the non-existance of the data + * and secure is true. This means that the non-existence of the data * was cryptographically proven (with signatures). */ int secure; @@ -623,6 +623,7 @@ struct ub_shm_stat_info { long long ipsecmod; long long respip; long long dnscrypt_shared_secret; + long long dnscrypt_nonce; } mem; }; @@ -742,11 +743,15 @@ struct ub_server_stats { long long num_query_dnscrypt_secret_missed_cache; /** number of dnscrypt shared secret cache entries */ long long shared_secret_cache_count; + /** number of queries which are replays */ + long long num_query_dnscrypt_replay; + /** number of dnscrypt nonces cache entries */ + long long nonce_cache_count; }; /** * Statistics to send over the control pipe when asked - * This struct is made to be memcpied, sent in binary. + * This struct is made to be memcopied, sent in binary. * shm mapped with (number+1) at num_threads+1, with first as total */ struct ub_stats_info { diff --git a/pythonmod/doc/examples/example2.rst b/pythonmod/doc/examples/example2.rst index 4ba9239a003f..663d1eb777cd 100644 --- a/pythonmod/doc/examples/example2.rst +++ b/pythonmod/doc/examples/example2.rst @@ -46,4 +46,4 @@ Dig produces the following output:: ;; MSG SIZE rcvd: 54 As we handle (override) in the python module only queries ending with -``localdomain.``, unboud can still resolve host names. +``localdomain.``, unbound can still resolve host names. diff --git a/pythonmod/doc/examples/example3.rst b/pythonmod/doc/examples/example3.rst index 6213dc188f12..bc0e05f2e32e 100644 --- a/pythonmod/doc/examples/example3.rst +++ b/pythonmod/doc/examples/example3.rst @@ -10,7 +10,7 @@ As soon as the iterator module returns the response, we : 3. rewrite the data in cache 4. return modified packet -Note that the steps 1 and 3 are neccessary only in case, the python module is the first module in the processing chain. +Note that the steps 1 and 3 are necessary only in case, the python module is the first module in the processing chain. In other cases, the validator module guarantees updating data which are produced by iterator module. Complete source code diff --git a/pythonmod/doc/examples/example5.rst b/pythonmod/doc/examples/example5.rst index 058fc331e4ba..938d8941bc9c 100644 --- a/pythonmod/doc/examples/example5.rst +++ b/pythonmod/doc/examples/example5.rst @@ -3,7 +3,7 @@ EDNS options This example shows how to interact with EDNS options. -When quering unbound with the EDNS option ``65001`` and data ``0xc001`` we +When querying unbound with the EDNS option ``65001`` and data ``0xc001`` we expect an answer with the same EDNS option code and data ``0xdeadbeef``. @@ -146,7 +146,7 @@ and use a valid script path:: python-script: "./examples/edns.py" -Quering with EDNS option ``65001:0xc001``: +Querying with EDNS option ``65001:0xc001``: :: diff --git a/pythonmod/doc/examples/example6.rst b/pythonmod/doc/examples/example6.rst index 07117cd556e7..eb3254022946 100644 --- a/pythonmod/doc/examples/example6.rst +++ b/pythonmod/doc/examples/example6.rst @@ -84,7 +84,7 @@ The callback function's prototype is the following: :param rep: reply_info struct; :param rcode: return code for the query; :param edns: edns_data sent from the client side. The list with the EDNS - options is accesible through edns.opt_list. It SHOULD NOT be + options is accessible through edns.opt_list. It SHOULD NOT be altered; :param opt_list_out: the list with the EDNS options that will be sent as a reply. It can be populated with EDNS options; @@ -120,7 +120,7 @@ The callback function's prototype is the following: :param rep: reply_info struct; :param rcode: return code for the query; :param edns: edns_data sent from the client side. The list with the - EDNS options is accesible through edns.opt_list. It + EDNS options is accessible through edns.opt_list. It SHOULD NOT be altered; :param opt_list_out: the list with the EDNS options that will be sent as a reply. It can be populated with EDNS options; diff --git a/pythonmod/doc/modules/functions.rst b/pythonmod/doc/modules/functions.rst index 627d44922477..49ea7bfa45f0 100644 --- a/pythonmod/doc/modules/functions.rst +++ b/pythonmod/doc/modules/functions.rst @@ -24,7 +24,7 @@ Cache :param qstate: :class:`module_qstate` :param qinfo: :class:`query_info` :param msgrep: :class:`reply_info` - :param is_referal: integer + :param is_referral: integer :rtype: boolean .. function:: invalidateQueryInCache(qstate, qinfo) diff --git a/pythonmod/doc/modules/struct.rst b/pythonmod/doc/modules/struct.rst index 3af5d8a48c01..c74298b8b75d 100644 --- a/pythonmod/doc/modules/struct.rst +++ b/pythonmod/doc/modules/struct.rst @@ -108,7 +108,7 @@ query_info .. attribute:: qname_len - Lenght of question name (number of bytes). + Length of question name (number of bytes). .. attribute:: qname_list[] diff --git a/pythonmod/doc/usecase.rst b/pythonmod/doc/usecase.rst index 2975740bb95d..5845061b02b3 100644 --- a/pythonmod/doc/usecase.rst +++ b/pythonmod/doc/usecase.rst @@ -25,7 +25,7 @@ Controled by secured queries secured with private key. Dynamic translation service --------------------------- -DNS request can be translated to virtualy any answer, that's easy to implement in client side +DNS request can be translated to virtually any answer, that's easy to implement in client side because of many DNS libraries available. Examples : diff --git a/pythonmod/examples/edns.py b/pythonmod/examples/edns.py index 3fae1c652af8..37ce9e27923d 100644 --- a/pythonmod/examples/edns.py +++ b/pythonmod/examples/edns.py @@ -77,7 +77,7 @@ def init_standard(id, env): The function's signature is the same as the C counterpart and allows for extra functionality during init. ..note:: This function is preferred by unbound over the old init function. - ..note:: The previously accesible configuration options can now be found in + ..note:: The previously accessible configuration options can now be found in env.cgf. """ log_info("python: inited script {}".format(env.cfg.python_script)) @@ -94,7 +94,7 @@ def init(id, cfg): """Previous version init function. ..note:: This function is still supported for backwards compatibility when the init_standard function is missing. When init_standard is - present this function SHOULD be ommited to avoid confusion to the + present this function SHOULD be omitted to avoid confusion to the reader. """ return True diff --git a/pythonmod/examples/inplace_callbacks.py b/pythonmod/examples/inplace_callbacks.py index 751dee510854..02ee56e36e21 100644 --- a/pythonmod/examples/inplace_callbacks.py +++ b/pythonmod/examples/inplace_callbacks.py @@ -99,7 +99,7 @@ def inplace_cache_callback(qinfo, qstate, rep, rcode, edns, opt_list_out, :param rep: reply_info struct; :param rcode: return code for the query; :param edns: edns_data sent from the client side. The list with the EDNS - options is accesible through edns.opt_list. It SHOULD NOT be + options is accessible through edns.opt_list. It SHOULD NOT be altered; :param opt_list_out: the list with the EDNS options that will be sent as a reply. It can be populated with EDNS options; @@ -107,7 +107,7 @@ def inplace_cache_callback(qinfo, qstate, rep, rcode, edns, opt_list_out, want to append a new option to opt_list_out. :return: True on success, False on failure. - For demostration purposes we want to see if EDNS option 65002 is present + For demonstration purposes we want to see if EDNS option 65002 is present and reply with a new value. """ log_info("python: called back while answering from cache.") @@ -142,7 +142,7 @@ def inplace_local_callback(qinfo, qstate, rep, rcode, edns, opt_list_out, :param rep: reply_info struct; :param rcode: return code for the query; :param edns: edns_data sent from the client side. The list with the - EDNS options is accesible through edns.opt_list. It + EDNS options is accessible through edns.opt_list. It SHOULD NOT be altered; :param opt_list_out: the list with the EDNS options that will be sent as a reply. It can be populated with EDNS options; @@ -173,7 +173,7 @@ def inplace_servfail_callback(qinfo, qstate, rep, rcode, edns, opt_list_out, want to append a new option to opt_list_out. :return: True on success, False on failure. - For demostration purposes we want to reply with an empty EDNS code '65003'. + For demonstration purposes we want to reply with an empty EDNS code '65003'. """ log_info("python: called back while servfail.") b = bytearray.fromhex("") @@ -186,7 +186,7 @@ def init_standard(id, env): The function's signature is the same as the C counterpart and allows for extra functionality during init. ..note:: This function is preferred by unbound over the old init function. - ..note:: The previously accesible configuration options can now be found in + ..note:: The previously accessible configuration options can now be found in env.cgf. """ log_info("python: inited script {}".format(env.cfg.python_script)) @@ -218,7 +218,7 @@ def init(id, cfg): """Previous version init function. ..note:: This function is still supported for backwards compatibility when the init_standard function is missing. When init_standard is - present this function SHOULD be ommited to avoid confusion to the + present this function SHOULD be omitted to avoid confusion to the reader. """ return True diff --git a/pythonmod/interface.i b/pythonmod/interface.i index 09d726f2cf46..748dec52db41 100644 --- a/pythonmod/interface.i +++ b/pythonmod/interface.i @@ -1277,7 +1277,7 @@ struct delegpt* find_delegation(struct module_qstate* qstate, char *nm, size_t n Functions * ************************************************************************************ */ /****************************** - * Various debuging functions * + * Various debugging functions * ******************************/ void verbose(enum verbosity_value level, const char* format, ...); void log_info(const char* format, ...); diff --git a/services/cache/dns.c b/services/cache/dns.c index da43c504dfa3..f9dc5922f682 100644 --- a/services/cache/dns.c +++ b/services/cache/dns.c @@ -111,7 +111,7 @@ store_rrsets(struct module_env* env, struct reply_info* rep, time_t now, void dns_cache_store_msg(struct module_env* env, struct query_info* qinfo, hashvalue_type hash, struct reply_info* rep, time_t leeway, int pside, - struct reply_info* qrep, struct regional* region) + struct reply_info* qrep, uint32_t flags, struct regional* region) { struct msgreply_entry* e; time_t ttl = rep->ttl; @@ -127,7 +127,7 @@ dns_cache_store_msg(struct module_env* env, struct query_info* qinfo, * unnecessary, because the cache gets locked per rrset. */ reply_info_set_ttls(rep, *env->now); store_rrsets(env, rep, *env->now, leeway, pside, qrep, region); - if(ttl == 0) { + if(ttl == 0 && !(flags & DNSCACHE_STORE_ZEROTTL)) { /* we do not store the message, but we did store the RRs, * which could be useful for delegation information */ verbose(VERB_ALGO, "TTL 0: dropped msg from cache"); @@ -845,7 +845,7 @@ dns_cache_lookup(struct module_env* env, int dns_cache_store(struct module_env* env, struct query_info* msgqinf, struct reply_info* msgrep, int is_referral, time_t leeway, int pside, - struct regional* region, uint16_t flags) + struct regional* region, uint32_t flags) { struct reply_info* rep = NULL; /* alloc, malloc properly (not in region, like msg is) */ @@ -890,9 +890,9 @@ dns_cache_store(struct module_env* env, struct query_info* msgqinf, * Not AA from cache. Not CD in cache (depends on client bit). */ rep->flags |= (BIT_RA | BIT_QR); rep->flags &= ~(BIT_AA | BIT_CD); - h = query_info_hash(&qinf, flags); + h = query_info_hash(&qinf, (uint16_t)flags); dns_cache_store_msg(env, &qinf, h, rep, leeway, pside, msgrep, - region); + flags, region); /* qname is used inside query_info_entrysetup, and set to * NULL. If it has not been used, free it. free(0) is safe. */ free(qinf.qname); diff --git a/services/cache/dns.h b/services/cache/dns.h index 096ddf28db63..9e10f437f1b4 100644 --- a/services/cache/dns.h +++ b/services/cache/dns.h @@ -49,6 +49,12 @@ struct reply_info; struct regional; struct delegpt; +/** Flags to control behavior of dns_cache_store() and dns_cache_store_msg(). + * Must be an unsigned 32-bit value larger than 0xffff */ + +/** Allow caching a DNS message with a zero TTL. */ +#define DNSCACHE_STORE_ZEROTTL 0x100000 + /** * Region allocated message reply */ @@ -80,11 +86,13 @@ struct dns_msg { * @param region: region to allocate better entries from cache into. * (used when is_referral is false). * @param flags: flags with BIT_CD for AAAA queries in dns64 translation. + * The higher 16 bits are used internally to customize the cache policy. + * (See DNSCACHE_STORE_xxx flags). * @return 0 on alloc error (out of memory). */ int dns_cache_store(struct module_env* env, struct query_info* qinf, struct reply_info* rep, int is_referral, time_t leeway, int pside, - struct regional* region, uint16_t flags); + struct regional* region, uint32_t flags); /** * Store message in the cache. Stores in message cache and rrset cache. @@ -103,11 +111,12 @@ int dns_cache_store(struct module_env* env, struct query_info* qinf, * from the parentside of the zonecut. This means that the type NS * can be updated to full TTL even in prefetch situations. * @param qrep: message that can be altered with better rrs from cache. + * @param flags: customization flags for the cache policy. * @param region: to allocate into for qmsg. */ void dns_cache_store_msg(struct module_env* env, struct query_info* qinfo, hashvalue_type hash, struct reply_info* rep, time_t leeway, int pside, - struct reply_info* qrep, struct regional* region); + struct reply_info* qrep, uint32_t flags, struct regional* region); /** * Find a delegation from the cache. diff --git a/services/mesh.c b/services/mesh.c index f04ae16ddbcb..3395dc62e674 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -533,8 +533,22 @@ mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo, return 1; } +static void mesh_schedule_prefetch(struct mesh_area* mesh, + struct query_info* qinfo, uint16_t qflags, time_t leeway, int run); + void mesh_new_prefetch(struct mesh_area* mesh, struct query_info* qinfo, uint16_t qflags, time_t leeway) +{ + mesh_schedule_prefetch(mesh, qinfo, qflags, leeway, 1); +} + +/* Internal backend routine of mesh_new_prefetch(). It takes one additional + * parameter, 'run', which controls whether to run the prefetch state + * immediately. When this function is called internally 'run' could be + * 0 (false), in which case the new state is only made runnable so it + * will not be run recursively on top of the current state. */ +static void mesh_schedule_prefetch(struct mesh_area* mesh, + struct query_info* qinfo, uint16_t qflags, time_t leeway, int run) { struct mesh_state* s = mesh_area_find(mesh, NULL, qinfo, qflags&(BIT_RD|BIT_CD), 0, 0); @@ -589,6 +603,18 @@ void mesh_new_prefetch(struct mesh_area* mesh, struct query_info* qinfo, s->list_select = mesh_jostle_list; } } + + if(!run) { +#ifdef UNBOUND_DEBUG + n = +#else + (void) +#endif + rbtree_insert(&mesh->run, &s->run_node); + log_assert(n != NULL); + return; + } + mesh_run(mesh, s, module_event_new, NULL); } @@ -666,6 +692,8 @@ mesh_state_create(struct module_env* env, struct query_info* qinfo, mstate->s.prefetch_leeway = 0; mstate->s.no_cache_lookup = 0; mstate->s.no_cache_store = 0; + mstate->s.need_refetch = 0; + /* init modules */ for(i=0; imesh->mods.num; i++) { mstate->s.minfo[i] = NULL; @@ -1288,9 +1316,30 @@ int mesh_state_add_reply(struct mesh_state* s, struct edns_data* edns, return 1; } +/* Extract the query info and flags from 'mstate' into '*qinfop' and '*qflags'. + * Since this is only used for internal refetch of otherwise-expired answer, + * we simply ignore the rare failure mode when memory allocation fails. */ +static void +mesh_copy_qinfo(struct mesh_state* mstate, struct query_info** qinfop, + uint16_t* qflags) +{ + struct regional* region = mstate->s.env->scratch; + struct query_info* qinfo; + + qinfo = regional_alloc_init(region, &mstate->s.qinfo, sizeof(*qinfo)); + if(!qinfo) + return; + qinfo->qname = regional_alloc_init(region, qinfo->qname, + qinfo->qname_len); + if(!qinfo->qname) + return; + *qinfop = qinfo; + *qflags = mstate->s.query_flags; +} + /** * Continue processing the mesh state at another module. - * Handles module to modules tranfer of control. + * Handles module to modules transfer of control. * Handles module finished. * @param mesh: the mesh area. * @param mstate: currently active mesh state. @@ -1310,7 +1359,8 @@ mesh_continue(struct mesh_area* mesh, struct mesh_state* mstate, mstate->num_activated++; if(mstate->num_activated > MESH_MAX_ACTIVATION) { /* module is looping. Stop it. */ - log_err("internal error: looping module stopped"); + log_err("internal error: looping module (%s) stopped", + mesh->mods.mod[mstate->s.curmod]->name); log_query_info(VERB_QUERY, "pass error for qstate", &mstate->s.qinfo); s = module_error; @@ -1350,11 +1400,32 @@ mesh_continue(struct mesh_area* mesh, struct mesh_state* mstate, /* error is bad, handle pass back up below */ mstate->s.return_rcode = LDNS_RCODE_SERVFAIL; } - if(s == module_error || s == module_finished) { + if(s == module_error) { + mesh_query_done(mstate); + mesh_walk_supers(mesh, mstate); + mesh_state_delete(&mstate->s); + return 0; + } + if(s == module_finished) { if(mstate->s.curmod == 0) { + struct query_info* qinfo = NULL; + uint16_t qflags; + mesh_query_done(mstate); mesh_walk_supers(mesh, mstate); + + /* If the answer to the query needs to be refetched + * from an external DNS server, we'll need to schedule + * a prefetch after removing the current state, so + * we need to make a copy of the query info here. */ + if(mstate->s.need_refetch) + mesh_copy_qinfo(mstate, &qinfo, &qflags); + mesh_state_delete(&mstate->s); + if(qinfo) { + mesh_schedule_prefetch(mesh, qinfo, qflags, + 0, 1); + } return 0; } /* pass along the locus of control */ diff --git a/services/outside_network.c b/services/outside_network.c index fe2b55b1ac17..ec9e11a0e7af 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -364,9 +364,9 @@ use_free_buffer(struct outside_network* outnet) } } -/** decomission a tcp buffer, closes commpoint and frees waiting_tcp entry */ +/** decommission a tcp buffer, closes commpoint and frees waiting_tcp entry */ static void -decomission_pending_tcp(struct outside_network* outnet, +decommission_pending_tcp(struct outside_network* outnet, struct pending_tcp* pend) { if(pend->c->ssl) { @@ -406,7 +406,7 @@ outnet_tcp_cb(struct comm_point* c, void* arg, int error, } fptr_ok(fptr_whitelist_pending_tcp(pend->query->cb)); (void)(*pend->query->cb)(c, pend->query->cb_arg, error, reply_info); - decomission_pending_tcp(outnet, pend); + decommission_pending_tcp(outnet, pend); return 0; } @@ -1416,7 +1416,7 @@ serviced_delete(struct serviced_query* sq) struct waiting_tcp* p = (struct waiting_tcp*) sq->pending; if(p->pkt == NULL) { - decomission_pending_tcp(sq->outnet, + decommission_pending_tcp(sq->outnet, (struct pending_tcp*)p->next_waiting); } else { waiting_list_remove(sq->outnet, p); diff --git a/services/view.h b/services/view.h index e0b346419e9b..17778100474b 100644 --- a/services/view.h +++ b/services/view.h @@ -67,7 +67,7 @@ struct view { /** rbtree node, key is name */ rbnode_type node; /** view name. - * Has to be right after rbnode_t due to pointer arithmatic in + * Has to be right after rbnode_t due to pointer arithmetic in * view_create's lock protect */ char* name; /** view specific local authority zones */ diff --git a/sldns/parse.c b/sldns/parse.c index e30a753a49bf..b62c40597756 100644 --- a/sldns/parse.c +++ b/sldns/parse.c @@ -33,14 +33,14 @@ ssize_t sldns_fget_token_l(FILE *f, char *token, const char *delim, size_t limit, int *line_nr) { int c, prev_c; - int p; /* 0 -> no parenthese seen, >0 nr of ( seen */ + int p; /* 0 -> no parentheses seen, >0 nr of ( seen */ int com, quoted; char *t; size_t i; const char *d; const char *del; - /* standard delimeters */ + /* standard delimiters */ if (!delim) { /* from isspace(3) */ del = LDNS_PARSE_NORMAL; @@ -244,7 +244,7 @@ sldns_bget_token_par(sldns_buffer *b, char *token, const char *delim, size_t limit, int* par, const char* skipw) { int c, lc; - int p; /* 0 -> no parenthese seen, >0 nr of ( seen */ + int p; /* 0 -> no parentheses seen, >0 nr of ( seen */ int com, quoted; char *t; size_t i; diff --git a/sldns/parse.h b/sldns/parse.h index 7b7456dd2068..44236bfd4951 100644 --- a/sldns/parse.h +++ b/sldns/parse.h @@ -103,9 +103,9 @@ ssize_t sldns_bget_token(struct sldns_buffer *b, char *token, const char *delim, * after the keyword + k_del until we hit d_del * \param[in] f file pointer to read from * \param[in] keyword keyword to look for - * \param[in] k_del keyword delimeter + * \param[in] k_del keyword delimiter * \param[out] data the data found - * \param[in] d_del the data delimeter + * \param[in] d_del the data delimiter * \param[in] data_limit maximum size the the data buffer * \return the number of character read */ @@ -116,9 +116,9 @@ ssize_t sldns_fget_keyword_data(FILE *f, const char *keyword, const char *k_del, * after the keyword + k_del until we hit d_del * \param[in] f file pointer to read from * \param[in] keyword keyword to look for - * \param[in] k_del keyword delimeter + * \param[in] k_del keyword delimiter * \param[out] data the data found - * \param[in] d_del the data delimeter + * \param[in] d_del the data delimiter * \param[in] data_limit maximum size the the data buffer * \param[in] line_nr pointer to an integer containing the current line number (for debugging purposes) @@ -131,9 +131,9 @@ ssize_t sldns_fget_keyword_data_l(FILE *f, const char *keyword, const char *k_de * after the keyword + k_del until we hit d_del * \param[in] b buffer pointer to read from * \param[in] keyword keyword to look for - * \param[in] k_del keyword delimeter + * \param[in] k_del keyword delimiter * \param[out] data the data found - * \param[in] d_del the data delimeter + * \param[in] d_del the data delimiter * \param[in] data_limit maximum size the the data buffer * \return the number of character read */ diff --git a/sldns/parseutil.c b/sldns/parseutil.c index 769987c64777..82dbc0fe113e 100644 --- a/sldns/parseutil.c +++ b/sldns/parseutil.c @@ -165,20 +165,20 @@ sldns_gmtime64_r(int64_t clock, struct tm *result) #endif /* SIZEOF_TIME_T <= 4 */ static int64_t -sldns_serial_arithmitics_time(int32_t time, time_t now) +sldns_serial_arithmetics_time(int32_t time, time_t now) { int32_t offset = time - (int32_t) now; return (int64_t) now + offset; } struct tm * -sldns_serial_arithmitics_gmtime_r(int32_t time, time_t now, struct tm *result) +sldns_serial_arithmetics_gmtime_r(int32_t time, time_t now, struct tm *result) { #if SIZEOF_TIME_T <= 4 - int64_t secs_since_epoch = sldns_serial_arithmitics_time(time, now); + int64_t secs_since_epoch = sldns_serial_arithmetics_time(time, now); return sldns_gmtime64_r(secs_since_epoch, result); #else - time_t secs_since_epoch = sldns_serial_arithmitics_time(time, now); + time_t secs_since_epoch = sldns_serial_arithmetics_time(time, now); return gmtime_r(&secs_since_epoch, result); #endif } diff --git a/sldns/parseutil.h b/sldns/parseutil.h index c5238bc10a99..10a2630a9733 100644 --- a/sldns/parseutil.h +++ b/sldns/parseutil.h @@ -62,13 +62,13 @@ time_t sldns_mktime_from_utc(const struct tm *tm); * fields of RRSIG records. * * \param[in] time number of seconds since epoch (midnight, January 1st, 1970) - * to be intepreted as a serial arithmetics number relative to now. + * to be interpreted as a serial arithmetics number relative to now. * \param[in] now number of seconds since epoch (midnight, January 1st, 1970) * to which the time value is compared to determine the final value. * \param[out] result the struct with the broken-out time information * \return result on success or NULL on error */ -struct tm * sldns_serial_arithmitics_gmtime_r(int32_t time, time_t now, struct tm *result); +struct tm * sldns_serial_arithmetics_gmtime_r(int32_t time, time_t now, struct tm *result); /** * converts a ttl value (like 5d2h) to a long. diff --git a/sldns/rrdef.h b/sldns/rrdef.h index 09d81d9b1920..0446687bd339 100644 --- a/sldns/rrdef.h +++ b/sldns/rrdef.h @@ -331,13 +331,13 @@ enum sldns_enum_rdf_type LDNS_RDF_TYPE_NSEC3_NEXT_OWNER, /** 4 shorts represented as 4 * 16 bit hex numbers - * seperated by colons. For NID and L64. + * separated by colons. For NID and L64. */ LDNS_RDF_TYPE_ILNP64, - /** 6 * 8 bit hex numbers seperated by dashes. For EUI48. */ + /** 6 * 8 bit hex numbers separated by dashes. For EUI48. */ LDNS_RDF_TYPE_EUI48, - /** 8 * 8 bit hex numbers seperated by dashes. For EUI64. */ + /** 8 * 8 bit hex numbers separated by dashes. For EUI64. */ LDNS_RDF_TYPE_EUI64, /** A non-zero sequence of US-ASCII letters and numbers in lower case. diff --git a/sldns/sbuffer.h b/sldns/sbuffer.h index d1aadf8a198c..2c30b3736708 100644 --- a/sldns/sbuffer.h +++ b/sldns/sbuffer.h @@ -497,7 +497,7 @@ sldns_buffer_set_at(sldns_buffer *buffer, size_t at, int c, size_t count) * writes count bytes of data to the current position of the buffer * \param[in] buffer the buffer * \param[in] data the data to write - * \param[in] count the lenght of the data to write + * \param[in] count the length of the data to write */ INLINE void sldns_buffer_write(sldns_buffer *buffer, const void *data, size_t count) diff --git a/sldns/str2wire.c b/sldns/str2wire.c index f84d7d6b823b..6759944e4a7f 100644 --- a/sldns/str2wire.c +++ b/sldns/str2wire.c @@ -1541,7 +1541,7 @@ int sldns_str2wire_loc_buf(const char* str, uint8_t* rd, size_t* len) s = strtod(my_str, &my_str); } - /* skip blanks before norterness */ + /* skip blanks before northerness */ while (isblank((unsigned char) *my_str)) { my_str++; } diff --git a/sldns/wire2str.c b/sldns/wire2str.c index 52b1ed0c2aa9..861b7648adec 100644 --- a/sldns/wire2str.c +++ b/sldns/wire2str.c @@ -1335,7 +1335,7 @@ int sldns_wire2str_time_scan(uint8_t** d, size_t* dl, char** s, size_t* sl) if(*dl < 4) return -1; t = sldns_read_uint32(*d); date_buf[15]=0; - if(sldns_serial_arithmitics_gmtime_r(t, time(NULL), &tm) && + if(sldns_serial_arithmetics_gmtime_r(t, time(NULL), &tm) && strftime(date_buf, 15, "%Y%m%d%H%M%S", &tm)) { (*d) += 4; (*dl) -= 4; diff --git a/smallapp/unbound-anchor.c b/smallapp/unbound-anchor.c index c060ad394c1d..b30091088008 100644 --- a/smallapp/unbound-anchor.c +++ b/smallapp/unbound-anchor.c @@ -669,7 +669,7 @@ wipe_ip_usage(struct ip_list* p) } } -/** cound unused IPs */ +/** count unused IPs */ static int count_unused(struct ip_list* p) { diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c index 4b3efc134dc0..086afa8dddeb 100644 --- a/smallapp/unbound-control.c +++ b/smallapp/unbound-control.c @@ -254,6 +254,8 @@ static void print_mem(struct ub_shm_stat_info* shm_stat) #ifdef USE_DNSCRYPT PR_LL("mem.cache.dnscrypt_shared_secret", shm_stat->mem.dnscrypt_shared_secret); + PR_LL("mem.cache.dnscrypt_nonce", + shm_stat->mem.dnscrypt_nonce); #endif } @@ -360,6 +362,9 @@ static void print_extended(struct ub_stats_info* s) s->svr.shared_secret_cache_count); PR_UL("num.query.dnscrypt.shared_secret.cachemiss", s->svr.num_query_dnscrypt_secret_missed_cache); + PR_UL("dnscrypt_nonce.cache.count", s->svr.nonce_cache_count); + PR_UL("num.query.dnscrypt.replay", + s->svr.num_query_dnscrypt_replay); #endif /* USE_DNSCRYPT */ } @@ -721,7 +726,7 @@ int main(int argc, char* argv[]) WSADATA wsa_data; #endif #ifdef USE_THREAD_DEBUG - /* stop the file output from unbound-control, overwites the servers */ + /* stop the file output from unbound-control, overwrites the servers */ extern int check_locking_order; check_locking_order = 0; #endif /* USE_THREAD_DEBUG */ diff --git a/smallapp/unbound-host.c b/smallapp/unbound-host.c index d7a36a23193e..93b5e4870011 100644 --- a/smallapp/unbound-host.c +++ b/smallapp/unbound-host.c @@ -209,6 +209,7 @@ massage_class(const char* c) static const char* secure_str(struct ub_result* result) { + if(result->rcode != 0 && result->rcode != 3) return "(error)"; if(result->secure) return "(secure)"; if(result->bogus) return "(BOGUS (security failure))"; return "(insecure)"; diff --git a/testcode/checklocks.h b/testcode/checklocks.h index 182a93858d92..61cc6fb0c5e2 100644 --- a/testcode/checklocks.h +++ b/testcode/checklocks.h @@ -182,7 +182,7 @@ struct checked_lock { * @param area: ptr to mem. * @param size: length of area. * You can call it multiple times with the same lock to give several areas. - * Call it when you are done initialising the area, since it will be copied + * Call it when you are done initializing the area, since it will be copied * at this time and protected right away against unauthorised changes until * the next lock() call is done. */ diff --git a/testcode/unitecs.c b/testcode/unitecs.c index 3584b0f983b6..097ae9ebba6a 100644 --- a/testcode/unitecs.c +++ b/testcode/unitecs.c @@ -86,7 +86,7 @@ */ /* what should we check? - * X - is it balanced? (a node with 1 child shoudl not have + * X - is it balanced? (a node with 1 child should not have * a node with 1 child MUST have elem * child must be sub of parent * edge must be longer than parent edge diff --git a/testdata/autotrust_10key.rpl b/testdata/autotrust_10key.rpl index 1f2998f77890..22cd5368141b 100644 --- a/testdata/autotrust_10key.rpl +++ b/testdata/autotrust_10key.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_addpend_2exceed.rpl b/testdata/autotrust_addpend_2exceed.rpl index 6a79a6436b07..ed2603047d25 100644 --- a/testdata/autotrust_addpend_2exceed.rpl +++ b/testdata/autotrust_addpend_2exceed.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_addpend_early.rpl b/testdata/autotrust_addpend_early.rpl index 3df5ff2d47f2..51eff310334f 100644 --- a/testdata/autotrust_addpend_early.rpl +++ b/testdata/autotrust_addpend_early.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_addpend_nosign.rpl b/testdata/autotrust_addpend_nosign.rpl index 32fb1beab201..be1b49bb0b01 100644 --- a/testdata/autotrust_addpend_nosign.rpl +++ b/testdata/autotrust_addpend_nosign.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_addpend_nosignnew.rpl b/testdata/autotrust_addpend_nosignnew.rpl index 32910e9c78d5..c390fb691a0b 100644 --- a/testdata/autotrust_addpend_nosignnew.rpl +++ b/testdata/autotrust_addpend_nosignnew.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_addpend_once.rpl b/testdata/autotrust_addpend_once.rpl index 2dcd7372725a..1fb8bf144ce2 100644 --- a/testdata/autotrust_addpend_once.rpl +++ b/testdata/autotrust_addpend_once.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_addpend_twice.rpl b/testdata/autotrust_addpend_twice.rpl index 2e14b0470e8b..c514503f29ad 100644 --- a/testdata/autotrust_addpend_twice.rpl +++ b/testdata/autotrust_addpend_twice.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_init.rpl b/testdata/autotrust_init.rpl index 35a693be9a12..c6bde72ac48b 100644 --- a/testdata/autotrust_init.rpl +++ b/testdata/autotrust_init.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_init_ds.rpl b/testdata/autotrust_init_ds.rpl index 765d58919453..37a168a1a0ab 100644 --- a/testdata/autotrust_init_ds.rpl +++ b/testdata/autotrust_init_ds.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_init_fail.rpl b/testdata/autotrust_init_fail.rpl index bf8f5d342555..497dfcf5731c 100644 --- a/testdata/autotrust_init_fail.rpl +++ b/testdata/autotrust_init_fail.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_init_failsig.rpl b/testdata/autotrust_init_failsig.rpl index 4348878aad37..38ecb4c860c8 100644 --- a/testdata/autotrust_init_failsig.rpl +++ b/testdata/autotrust_init_failsig.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_init_legacy.rpl b/testdata/autotrust_init_legacy.rpl index 91c3e7b1a924..e4fd66705a9c 100644 --- a/testdata/autotrust_init_legacy.rpl +++ b/testdata/autotrust_init_legacy.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_init_sigs.rpl b/testdata/autotrust_init_sigs.rpl index 8ee65585d6da..fe5eeb0d6509 100644 --- a/testdata/autotrust_init_sigs.rpl +++ b/testdata/autotrust_init_sigs.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_init_zsk.rpl b/testdata/autotrust_init_zsk.rpl index 08c60f9e1407..b807f8ebe046 100644 --- a/testdata/autotrust_init_zsk.rpl +++ b/testdata/autotrust_init_zsk.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_missing.rpl b/testdata/autotrust_missing.rpl index ed183a3182a7..0759a8c3be13 100644 --- a/testdata/autotrust_missing.rpl +++ b/testdata/autotrust_missing.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_missing_all.rpl b/testdata/autotrust_missing_all.rpl index 0813ef68ffb5..e59928017579 100644 --- a/testdata/autotrust_missing_all.rpl +++ b/testdata/autotrust_missing_all.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_missing_returns.rpl b/testdata/autotrust_missing_returns.rpl index 93735f1b9745..dd6c025d5bfc 100644 --- a/testdata/autotrust_missing_returns.rpl +++ b/testdata/autotrust_missing_returns.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_probefail.rpl b/testdata/autotrust_probefail.rpl index 7e5a4da82bed..d3ac6aedf7f2 100644 --- a/testdata/autotrust_probefail.rpl +++ b/testdata/autotrust_probefail.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_probefailsig.rpl b/testdata/autotrust_probefailsig.rpl index 7abf373dd4a5..48230050239e 100644 --- a/testdata/autotrust_probefailsig.rpl +++ b/testdata/autotrust_probefailsig.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_revoked_use.rpl b/testdata/autotrust_revoked_use.rpl index c87da44e7221..6990b1b461df 100644 --- a/testdata/autotrust_revoked_use.rpl +++ b/testdata/autotrust_revoked_use.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_revoked_with_invalid.rpl b/testdata/autotrust_revoked_with_invalid.rpl index 0c717f1adfac..8015c0105aae 100644 --- a/testdata/autotrust_revoked_with_invalid.rpl +++ b/testdata/autotrust_revoked_with_invalid.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_revtp.rpl b/testdata/autotrust_revtp.rpl index 275c8c6e18f7..4ed113f7444a 100644 --- a/testdata/autotrust_revtp.rpl +++ b/testdata/autotrust_revtp.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_revtp_use.rpl b/testdata/autotrust_revtp_use.rpl index 40223d334123..e0b8caa0c06e 100644 --- a/testdata/autotrust_revtp_use.rpl +++ b/testdata/autotrust_revtp_use.rpl @@ -4,6 +4,7 @@ server: log-time-ascii: yes val-override-date: '20091018111500' fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_rollalgo.rpl b/testdata/autotrust_rollalgo.rpl index 2381d399e99d..de9f39c59c23 100644 --- a/testdata/autotrust_rollalgo.rpl +++ b/testdata/autotrust_rollalgo.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_rollalgo_unknown.rpl b/testdata/autotrust_rollalgo_unknown.rpl index 9fedab2b80de..a50c6a950489 100644 --- a/testdata/autotrust_rollalgo_unknown.rpl +++ b/testdata/autotrust_rollalgo_unknown.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_rollover.rpl b/testdata/autotrust_rollover.rpl index f45ae53c4534..39f1255ed55c 100644 --- a/testdata/autotrust_rollover.rpl +++ b/testdata/autotrust_rollover.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/autotrust_valid_use.rpl b/testdata/autotrust_valid_use.rpl index 43d550026d61..998e94f04cb1 100644 --- a/testdata/autotrust_valid_use.rpl +++ b/testdata/autotrust_valid_use.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/black_data.rpl b/testdata/black_data.rpl index 945e8110732f..83429784261b 100644 --- a/testdata/black_data.rpl +++ b/testdata/black_data.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/black_dnskey.rpl b/testdata/black_dnskey.rpl index a8662bb728e9..7a6c1c21c03f 100644 --- a/testdata/black_dnskey.rpl +++ b/testdata/black_dnskey.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/black_ds.rpl b/testdata/black_ds.rpl index be605e011127..9ff79059e386 100644 --- a/testdata/black_ds.rpl +++ b/testdata/black_ds.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/black_ds_entry.rpl b/testdata/black_ds_entry.rpl index 42e56a50fa86..8b4fa9bd7c23 100644 --- a/testdata/black_ds_entry.rpl +++ b/testdata/black_ds_entry.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/black_ent.rpl b/testdata/black_ent.rpl index 2d84cd22d01c..c37c71bf335f 100644 --- a/testdata/black_ent.rpl +++ b/testdata/black_ent.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/black_key_entry.rpl b/testdata/black_key_entry.rpl index 167c91b5e4b3..4fb3c719d9ad 100644 --- a/testdata/black_key_entry.rpl +++ b/testdata/black_key_entry.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/black_prime.rpl b/testdata/black_prime.rpl index 8e2ba492b670..1093eee15fa0 100644 --- a/testdata/black_prime.rpl +++ b/testdata/black_prime.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/black_prime_entry.rpl b/testdata/black_prime_entry.rpl index 0e092cb60103..47105a3b4fe9 100644 --- a/testdata/black_prime_entry.rpl +++ b/testdata/black_prime_entry.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/dlv_anchor.rpl b/testdata/dlv_anchor.rpl index e00ea99bd2a8..5f13a800451f 100644 --- a/testdata/dlv_anchor.rpl +++ b/testdata/dlv_anchor.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/dlv_ask_higher.rpl b/testdata/dlv_ask_higher.rpl index 1e108b7b6f5b..75be7f5f2294 100644 --- a/testdata/dlv_ask_higher.rpl +++ b/testdata/dlv_ask_higher.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/dlv_below_ta.rpl b/testdata/dlv_below_ta.rpl index 2aa1ee107fbb..db62ab098c1a 100644 --- a/testdata/dlv_below_ta.rpl +++ b/testdata/dlv_below_ta.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/dlv_delegation.rpl b/testdata/dlv_delegation.rpl index 24e3af2e5299..427bcad39745 100644 --- a/testdata/dlv_delegation.rpl +++ b/testdata/dlv_delegation.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/dlv_ds_lookup.rpl b/testdata/dlv_ds_lookup.rpl index 70c89d66781d..c019b525b008 100644 --- a/testdata/dlv_ds_lookup.rpl +++ b/testdata/dlv_ds_lookup.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/dlv_insecure.rpl b/testdata/dlv_insecure.rpl index b37d5f61e745..0f3fef984f94 100644 --- a/testdata/dlv_insecure.rpl +++ b/testdata/dlv_insecure.rpl @@ -6,6 +6,7 @@ server: harden-referral-path: no target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/dlv_insecure_negcache.rpl b/testdata/dlv_insecure_negcache.rpl index bafd41efb895..fbfd9061542e 100644 --- a/testdata/dlv_insecure_negcache.rpl +++ b/testdata/dlv_insecure_negcache.rpl @@ -6,6 +6,7 @@ server: harden-referral-path: no target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/dlv_keyretry.rpl b/testdata/dlv_keyretry.rpl index e7dc6c7c8d73..75007bf997be 100644 --- a/testdata/dlv_keyretry.rpl +++ b/testdata/dlv_keyretry.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/dlv_negnx.rpl b/testdata/dlv_negnx.rpl index 218a57d85e61..7149f5bd3360 100644 --- a/testdata/dlv_negnx.rpl +++ b/testdata/dlv_negnx.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/dlv_optout.rpl b/testdata/dlv_optout.rpl index 7fbb560bd6e4..2e01f30e231f 100644 --- a/testdata/dlv_optout.rpl +++ b/testdata/dlv_optout.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/dlv_remove_pos.rpl b/testdata/dlv_remove_pos.rpl index 6309acbf10f3..0b68689cd272 100644 --- a/testdata/dlv_remove_pos.rpl +++ b/testdata/dlv_remove_pos.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/dlv_unused.rpl b/testdata/dlv_unused.rpl index 4d3233285137..386755835128 100644 --- a/testdata/dlv_unused.rpl +++ b/testdata/dlv_unused.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/fwddlv_parse.rpl b/testdata/fwddlv_parse.rpl index d79d31f40251..8c0552093133 100644 --- a/testdata/fwddlv_parse.rpl +++ b/testdata/fwddlv_parse.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20090617133009" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/ipsecmod_bogus_ipseckey.crpl b/testdata/ipsecmod_bogus_ipseckey.crpl index 1e76af3b963a..523da9368b9e 100644 --- a/testdata/ipsecmod_bogus_ipseckey.crpl +++ b/testdata/ipsecmod_bogus_ipseckey.crpl @@ -8,6 +8,7 @@ server: target-fetch-policy: "0 0 0 0 0" # test that default value of harden-dnssec-stripped is still yes. fake-sha1: yes + trust-anchor-signaling: no access-control: 127.0.0.1 allow_snoop module-config: "ipsecmod validator iterator" ; ../../ is there because the test runs from testdata/03-testbound.dir diff --git a/testdata/ipsecmod_ignore_bogus_ipseckey.crpl b/testdata/ipsecmod_ignore_bogus_ipseckey.crpl index b977790853e4..3d5a8faaf262 100644 --- a/testdata/ipsecmod_ignore_bogus_ipseckey.crpl +++ b/testdata/ipsecmod_ignore_bogus_ipseckey.crpl @@ -8,6 +8,7 @@ server: target-fetch-policy: "0 0 0 0 0" # test that default value of harden-dnssec-stripped is still yes. fake-sha1: yes + trust-anchor-signaling: no access-control: 127.0.0.1 allow_snoop module-config: "ipsecmod validator iterator" ; ../../ is there because the test runs from testdata/03-testbound.dir diff --git a/testdata/iter_class_any.rpl b/testdata/iter_class_any.rpl index a1fac46c9bcc..396692e1c767 100644 --- a/testdata/iter_class_any.rpl +++ b/testdata/iter_class_any.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/iter_dnsseclame_bug.rpl b/testdata/iter_dnsseclame_bug.rpl index cb5c549216ba..e96e309c4fb6 100644 --- a/testdata/iter_dnsseclame_bug.rpl +++ b/testdata/iter_dnsseclame_bug.rpl @@ -3,6 +3,7 @@ server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/iter_dnsseclame_ds.rpl b/testdata/iter_dnsseclame_ds.rpl index ca7e8f35aeb2..a92049be17ac 100644 --- a/testdata/iter_dnsseclame_ds.rpl +++ b/testdata/iter_dnsseclame_ds.rpl @@ -3,6 +3,7 @@ server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/iter_dnsseclame_ds_ok.rpl b/testdata/iter_dnsseclame_ds_ok.rpl index eb0ad34d4922..f3e9bf03a1a2 100644 --- a/testdata/iter_dnsseclame_ds_ok.rpl +++ b/testdata/iter_dnsseclame_ds_ok.rpl @@ -4,6 +4,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/iter_dnsseclame_ta.rpl b/testdata/iter_dnsseclame_ta.rpl index 6569949b274f..d4c1078b040a 100644 --- a/testdata/iter_dnsseclame_ta.rpl +++ b/testdata/iter_dnsseclame_ta.rpl @@ -3,6 +3,7 @@ server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/iter_dnsseclame_ta_ok.rpl b/testdata/iter_dnsseclame_ta_ok.rpl index 9c2e0a5d762e..60774fc61055 100644 --- a/testdata/iter_dnsseclame_ta_ok.rpl +++ b/testdata/iter_dnsseclame_ta_ok.rpl @@ -4,6 +4,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/iter_emptydp.rpl b/testdata/iter_emptydp.rpl index 8e1e4a68d6a7..34bce811c638 100644 --- a/testdata/iter_emptydp.rpl +++ b/testdata/iter_emptydp.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "3 2 1 0 0" # make sure it fetches for test fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/iter_emptydp_for_glue.rpl b/testdata/iter_emptydp_for_glue.rpl index ab19a6b91e65..aafb3b2d702f 100644 --- a/testdata/iter_emptydp_for_glue.rpl +++ b/testdata/iter_emptydp_for_glue.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "3 2 1 0 0" # make sure it fetches for test fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/iter_primenoglue.rpl b/testdata/iter_primenoglue.rpl index 3963a989ddee..efe248a7d9a7 100644 --- a/testdata/iter_primenoglue.rpl +++ b/testdata/iter_primenoglue.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "3 2 1 0 0" # make sure it fetches for test fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/iter_scrub_dname_rev.rpl b/testdata/iter_scrub_dname_rev.rpl index dc259bf63d45..67ee560edb69 100644 --- a/testdata/iter_scrub_dname_rev.rpl +++ b/testdata/iter_scrub_dname_rev.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/iter_scrub_dname_sec.rpl b/testdata/iter_scrub_dname_sec.rpl index 6cfa19455e8a..bcc289e8f612 100644 --- a/testdata/iter_scrub_dname_sec.rpl +++ b/testdata/iter_scrub_dname_sec.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/local_cname.rpl b/testdata/local_cname.rpl index 9f7c4f101ead..b8c4a56013ed 100644 --- a/testdata/local_cname.rpl +++ b/testdata/local_cname.rpl @@ -3,6 +3,7 @@ server: # put unbound.conf config options here. access-control: 127.0.0.1/32 allow_snoop #allow queries with RD bit + trust-anchor-signaling: no # DNSSEC trust anchor taken from a real world example. Used for # DNSSEC-signed CNAME target. diff --git a/testdata/net_signed_servfail.rpl b/testdata/net_signed_servfail.rpl index 23669ec2fb8a..925dceee25ec 100644 --- a/testdata/net_signed_servfail.rpl +++ b/testdata/net_signed_servfail.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20110207110823" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/nomem_cnametopos.rpl b/testdata/nomem_cnametopos.rpl index 3bc66f753de1..1c7f6a591219 100644 --- a/testdata/nomem_cnametopos.rpl +++ b/testdata/nomem_cnametopos.rpl @@ -8,6 +8,7 @@ server: rrset-cache-size: 8 target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/stop_nxdomain.rpl b/testdata/stop_nxdomain.rpl index a36138e9100d..04cf83a80501 100644 --- a/testdata/stop_nxdomain.rpl +++ b/testdata/stop_nxdomain.rpl @@ -5,6 +5,7 @@ server: trust-anchor: ". IN DNSKEY 257 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3" val-override-date: "20070916134226" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/stop_nxdomain_minimised.rpl b/testdata/stop_nxdomain_minimised.rpl index 6b9cbef0ce88..0de22edde641 100644 --- a/testdata/stop_nxdomain_minimised.rpl +++ b/testdata/stop_nxdomain_minimised.rpl @@ -6,6 +6,7 @@ server: trust-anchor: ". IN DNSKEY 257 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3" val-override-date: "20070916134226" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/subnet_cached.crpl b/testdata/subnet_cached.crpl index fefbdd1a0d83..3f7571a8b978 100644 --- a/testdata/subnet_cached.crpl +++ b/testdata/subnet_cached.crpl @@ -4,6 +4,7 @@ server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" + trust-anchor-signaling: no target-fetch-policy: "0 0 0 0 0" send-client-subnet: 1.2.3.4 max-client-subnet-ipv4: 17 diff --git a/testdata/subnet_val_positive.crpl b/testdata/subnet_val_positive.crpl index 732657374a13..2f75be72bb7c 100644 --- a/testdata/subnet_val_positive.crpl +++ b/testdata/subnet_val_positive.crpl @@ -3,6 +3,7 @@ server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" + trust-anchor-signaling: no target-fetch-policy: "0 0 0 0 0" send-client-subnet: 1.2.3.4 max-client-subnet-ipv4: 17 diff --git a/testdata/subnet_val_positive_client.crpl b/testdata/subnet_val_positive_client.crpl index 96be71f5082f..4bbfac139e06 100644 --- a/testdata/subnet_val_positive_client.crpl +++ b/testdata/subnet_val_positive_client.crpl @@ -4,6 +4,7 @@ server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" + trust-anchor-signaling: no target-fetch-policy: "0 0 0 0 0" send-client-subnet: 1.2.3.4 max-client-subnet-ipv4: 17 diff --git a/testdata/val_adbit.rpl b/testdata/val_adbit.rpl index 8e9b76e6f7e4..c859ab8ffe78 100644 --- a/testdata/val_adbit.rpl +++ b/testdata/val_adbit.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_anchor_nx.rpl b/testdata/val_anchor_nx.rpl index dbb384dc9145..6067cb3ff36a 100644 --- a/testdata/val_anchor_nx.rpl +++ b/testdata/val_anchor_nx.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_ans_dsent.rpl b/testdata/val_ans_dsent.rpl index dfac62879f91..4d543b22b515 100644 --- a/testdata/val_ans_dsent.rpl +++ b/testdata/val_ans_dsent.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_ans_nx.rpl b/testdata/val_ans_nx.rpl index 1e4cc8a1f661..d70316d83389 100644 --- a/testdata/val_ans_nx.rpl +++ b/testdata/val_ans_nx.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_any.rpl b/testdata/val_any.rpl index 388d25f6c458..bb4db8fef9f8 100644 --- a/testdata/val_any.rpl +++ b/testdata/val_any.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_any_cname.rpl b/testdata/val_any_cname.rpl index 1477299a49c6..56b22ba380af 100644 --- a/testdata/val_any_cname.rpl +++ b/testdata/val_any_cname.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_any_dname.rpl b/testdata/val_any_dname.rpl index cd9ede9a1bb0..331698d71d4b 100644 --- a/testdata/val_any_dname.rpl +++ b/testdata/val_any_dname.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_cnameinsectopos.rpl b/testdata/val_cnameinsectopos.rpl index d7ac6deadbaa..d11b7286df86 100644 --- a/testdata/val_cnameinsectopos.rpl +++ b/testdata/val_cnameinsectopos.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_cnamenx_dblnsec.rpl b/testdata/val_cnamenx_dblnsec.rpl index 85a58b5ef0cf..499e05159835 100644 --- a/testdata/val_cnamenx_dblnsec.rpl +++ b/testdata/val_cnamenx_dblnsec.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_cnamenx_rcodenx.rpl b/testdata/val_cnamenx_rcodenx.rpl index f4485921739a..e7336190b012 100644 --- a/testdata/val_cnamenx_rcodenx.rpl +++ b/testdata/val_cnamenx_rcodenx.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_cnameqtype.rpl b/testdata/val_cnameqtype.rpl index 0bd5b62e2ba2..73fc6a856c26 100644 --- a/testdata/val_cnameqtype.rpl +++ b/testdata/val_cnameqtype.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_cnametocloser.rpl b/testdata/val_cnametocloser.rpl index ef20c5674ab7..d29478bbf2a5 100644 --- a/testdata/val_cnametocloser.rpl +++ b/testdata/val_cnametocloser.rpl @@ -4,6 +4,7 @@ server: trust-anchor: "a.b.example.com. 3600 IN DNSKEY 257 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8=" val-override-date: "20091113091234" fake-sha1: yes + trust-anchor-signaling: no forward-zone: name: "." diff --git a/testdata/val_cnametocloser_nosig.rpl b/testdata/val_cnametocloser_nosig.rpl index 53793aa3e3eb..cfd0d72c8f46 100644 --- a/testdata/val_cnametocloser_nosig.rpl +++ b/testdata/val_cnametocloser_nosig.rpl @@ -4,6 +4,7 @@ server: trust-anchor: "a.b.example.com. 3600 IN DNSKEY 257 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8=" val-override-date: "20091113091234" fake-sha1: yes + trust-anchor-signaling: no forward-zone: name: "." diff --git a/testdata/val_cnametocnamewctoposwc.rpl b/testdata/val_cnametocnamewctoposwc.rpl index e7d9d9460481..374db7ba5694 100644 --- a/testdata/val_cnametocnamewctoposwc.rpl +++ b/testdata/val_cnametocnamewctoposwc.rpl @@ -5,6 +5,7 @@ server: val-override-date: "-1" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_cnametodname.rpl b/testdata/val_cnametodname.rpl index 8f60f7e540bc..9719dbae8aa6 100644 --- a/testdata/val_cnametodname.rpl +++ b/testdata/val_cnametodname.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_cnametodnametocnametopos.rpl b/testdata/val_cnametodnametocnametopos.rpl index 5c2d578edbfa..1d75f7eaa02d 100644 --- a/testdata/val_cnametodnametocnametopos.rpl +++ b/testdata/val_cnametodnametocnametopos.rpl @@ -7,6 +7,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_cnametoinsecure.rpl b/testdata/val_cnametoinsecure.rpl index c39c5e70eb4c..78d04de972cc 100644 --- a/testdata/val_cnametoinsecure.rpl +++ b/testdata/val_cnametoinsecure.rpl @@ -4,6 +4,7 @@ server: trust-anchor: "example.org. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20091011000000" fake-sha1: yes + trust-anchor-signaling: no forward-zone: name: "." diff --git a/testdata/val_cnametonodata.rpl b/testdata/val_cnametonodata.rpl index 3e323ff7fc42..2aba3ae9eb54 100644 --- a/testdata/val_cnametonodata.rpl +++ b/testdata/val_cnametonodata.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_cnametonodata_nonsec.rpl b/testdata/val_cnametonodata_nonsec.rpl index 097fc683acb5..4b1eeb20d299 100644 --- a/testdata/val_cnametonodata_nonsec.rpl +++ b/testdata/val_cnametonodata_nonsec.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_cnametonsec.rpl b/testdata/val_cnametonsec.rpl index 493b40ccdb46..e721dcad5ef5 100644 --- a/testdata/val_cnametonsec.rpl +++ b/testdata/val_cnametonsec.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_cnametonx.rpl b/testdata/val_cnametonx.rpl index c0b8a50da13a..973bfaf22904 100644 --- a/testdata/val_cnametonx.rpl +++ b/testdata/val_cnametonx.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_cnametooptin.rpl b/testdata/val_cnametooptin.rpl index 751d802cce16..622c5e2339f3 100644 --- a/testdata/val_cnametooptin.rpl +++ b/testdata/val_cnametooptin.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_cnametooptout.rpl b/testdata/val_cnametooptout.rpl index c520383820e1..c9e982253632 100644 --- a/testdata/val_cnametooptout.rpl +++ b/testdata/val_cnametooptout.rpl @@ -3,6 +3,7 @@ server: trust-anchor: "GOV. DS 26079 7 2 4ED5FFBC8A40262B56E1232135B929192804ACC006930D087AAB38A611C89041" val-override-date: "20091113091234" fake-sha1: yes + trust-anchor-signaling: no forward-zone: name: "." diff --git a/testdata/val_cnametopos.rpl b/testdata/val_cnametopos.rpl index 822f55e5902c..d0d38cad11f1 100644 --- a/testdata/val_cnametopos.rpl +++ b/testdata/val_cnametopos.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_cnametoposnowc.rpl b/testdata/val_cnametoposnowc.rpl index 7753a5553901..a5572a0e52c5 100644 --- a/testdata/val_cnametoposnowc.rpl +++ b/testdata/val_cnametoposnowc.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_cnametoposwc.rpl b/testdata/val_cnametoposwc.rpl index 1ceb297fba99..8cca50791c78 100644 --- a/testdata/val_cnametoposwc.rpl +++ b/testdata/val_cnametoposwc.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_cnamewctonodata.rpl b/testdata/val_cnamewctonodata.rpl index e2095f979636..3e51789c70f9 100644 --- a/testdata/val_cnamewctonodata.rpl +++ b/testdata/val_cnamewctonodata.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_cnamewctonx.rpl b/testdata/val_cnamewctonx.rpl index 638b665587c4..2de1f35e3c99 100644 --- a/testdata/val_cnamewctonx.rpl +++ b/testdata/val_cnamewctonx.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_cnamewctoposwc.rpl b/testdata/val_cnamewctoposwc.rpl index 731336aa46d5..7636521a209b 100644 --- a/testdata/val_cnamewctoposwc.rpl +++ b/testdata/val_cnamewctoposwc.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_deleg_nons.rpl b/testdata/val_deleg_nons.rpl index bdc68c465f34..49e72bf77b64 100644 --- a/testdata/val_deleg_nons.rpl +++ b/testdata/val_deleg_nons.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_dnametopos.rpl b/testdata/val_dnametopos.rpl index ed2948a9b8ec..edf932bf1d2f 100644 --- a/testdata/val_dnametopos.rpl +++ b/testdata/val_dnametopos.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_dnametoposwc.rpl b/testdata/val_dnametoposwc.rpl index c5856150e881..5c9c8f714f41 100644 --- a/testdata/val_dnametoposwc.rpl +++ b/testdata/val_dnametoposwc.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_dnamewc.rpl b/testdata/val_dnamewc.rpl index 9d74ee7ce14d..33055b142c87 100644 --- a/testdata/val_dnamewc.rpl +++ b/testdata/val_dnamewc.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_ds_afterprime.rpl b/testdata/val_ds_afterprime.rpl index deac3e550f2c..8f219e26945f 100644 --- a/testdata/val_ds_afterprime.rpl +++ b/testdata/val_ds_afterprime.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_ds_cname.rpl b/testdata/val_ds_cname.rpl index 85631e53a320..a9b7f0910f28 100644 --- a/testdata/val_ds_cname.rpl +++ b/testdata/val_ds_cname.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_ds_cnamesub.rpl b/testdata/val_ds_cnamesub.rpl index 618c3caba1cd..211d5502db9a 100644 --- a/testdata/val_ds_cnamesub.rpl +++ b/testdata/val_ds_cnamesub.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_ds_gost.crpl b/testdata/val_ds_gost.crpl index ec54cd94857c..d66234a7b096 100644 --- a/testdata/val_ds_gost.crpl +++ b/testdata/val_ds_gost.crpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_ds_gost_downgrade.crpl b/testdata/val_ds_gost_downgrade.crpl index a90fa8d180d9..ff88f90b7fe9 100644 --- a/testdata/val_ds_gost_downgrade.crpl +++ b/testdata/val_ds_gost_downgrade.crpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no harden-algo-downgrade: yes stub-zone: diff --git a/testdata/val_ds_sha2.crpl b/testdata/val_ds_sha2.crpl index 9ecba61bc618..1e13f89f5082 100644 --- a/testdata/val_ds_sha2.crpl +++ b/testdata/val_ds_sha2.crpl @@ -6,6 +6,7 @@ server: target-fetch-policy: "0 0 0 0 0" fake-dsa: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_ds_sha2_downgrade.crpl b/testdata/val_ds_sha2_downgrade.crpl index 5d9eecb6e236..2feacb18d347 100644 --- a/testdata/val_ds_sha2_downgrade.crpl +++ b/testdata/val_ds_sha2_downgrade.crpl @@ -6,6 +6,7 @@ server: target-fetch-policy: "0 0 0 0 0" fake-dsa: yes fake-sha1: yes + trust-anchor-signaling: no harden-algo-downgrade: yes stub-zone: diff --git a/testdata/val_ds_sha2_lenient.crpl b/testdata/val_ds_sha2_lenient.crpl index fb0fdf01f24f..a0d1cc05a26f 100644 --- a/testdata/val_ds_sha2_lenient.crpl +++ b/testdata/val_ds_sha2_lenient.crpl @@ -6,6 +6,7 @@ server: target-fetch-policy: "0 0 0 0 0" fake-dsa: yes fake-sha1: yes + trust-anchor-signaling: no harden-algo-downgrade: no stub-zone: diff --git a/testdata/val_dsnsec.rpl b/testdata/val_dsnsec.rpl index f0facea9770c..07dd40340c4d 100644 --- a/testdata/val_dsnsec.rpl +++ b/testdata/val_dsnsec.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_faildnskey.rpl b/testdata/val_faildnskey.rpl index 4fb7d70c2002..4c3139ac5e01 100644 --- a/testdata/val_faildnskey.rpl +++ b/testdata/val_faildnskey.rpl @@ -6,6 +6,7 @@ server: target-fetch-policy: "0 0 0 0 0" # test that default value of harden-dnssec-stripped is still yes. fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_faildnskey_ok.rpl b/testdata/val_faildnskey_ok.rpl index 5a50b0fb5e43..c191859b2079 100644 --- a/testdata/val_faildnskey_ok.rpl +++ b/testdata/val_faildnskey_ok.rpl @@ -6,6 +6,7 @@ server: harden-dnssec-stripped: no target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_fwdds.rpl b/testdata/val_fwdds.rpl index f6c23c6cd5e5..485e28693470 100644 --- a/testdata/val_fwdds.rpl +++ b/testdata/val_fwdds.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_keyprefetch.rpl b/testdata/val_keyprefetch.rpl index 4920375b7ee1..2bc50318f880 100644 --- a/testdata/val_keyprefetch.rpl +++ b/testdata/val_keyprefetch.rpl @@ -6,6 +6,7 @@ server: target-fetch-policy: "0 0 0 0 0" prefetch-key: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_keyprefetch_verify.rpl b/testdata/val_keyprefetch_verify.rpl index 3c3ea4d55165..a67c37b1cc13 100644 --- a/testdata/val_keyprefetch_verify.rpl +++ b/testdata/val_keyprefetch_verify.rpl @@ -7,6 +7,7 @@ server: prefetch-key: yes prefetch: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_mal_wc.rpl b/testdata/val_mal_wc.rpl index 3bd7794488ee..1113f7521e77 100644 --- a/testdata/val_mal_wc.rpl +++ b/testdata/val_mal_wc.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_negcache_ds.rpl b/testdata/val_negcache_ds.rpl index 78d823793395..00af0d6df933 100644 --- a/testdata/val_negcache_ds.rpl +++ b/testdata/val_negcache_ds.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_negcache_dssoa.rpl b/testdata/val_negcache_dssoa.rpl index a74e80969b2a..b02d98bd1754 100644 --- a/testdata/val_negcache_dssoa.rpl +++ b/testdata/val_negcache_dssoa.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_noadwhennodo.rpl b/testdata/val_noadwhennodo.rpl index 8f80b8b9f540..3d34b6f7a79d 100644 --- a/testdata/val_noadwhennodo.rpl +++ b/testdata/val_noadwhennodo.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nodata.rpl b/testdata/val_nodata.rpl index 73987685ba88..faf62d481fa1 100644 --- a/testdata/val_nodata.rpl +++ b/testdata/val_nodata.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nodata_ent.rpl b/testdata/val_nodata_ent.rpl index c67c4016ca48..0e41635d4096 100644 --- a/testdata/val_nodata_ent.rpl +++ b/testdata/val_nodata_ent.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nodata_entnx.rpl b/testdata/val_nodata_entnx.rpl index 298f8a2aea00..2e4fd8756bf3 100644 --- a/testdata/val_nodata_entnx.rpl +++ b/testdata/val_nodata_entnx.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20140301134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nodata_entwc.rpl b/testdata/val_nodata_entwc.rpl index 82e8258eaf1e..cf64da8ba6f6 100644 --- a/testdata/val_nodata_entwc.rpl +++ b/testdata/val_nodata_entwc.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nodata_failsig.rpl b/testdata/val_nodata_failsig.rpl index 44f7b4160d22..2b84e6f91cbd 100644 --- a/testdata/val_nodata_failsig.rpl +++ b/testdata/val_nodata_failsig.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nodata_hasdata.rpl b/testdata/val_nodata_hasdata.rpl index 47992da3a837..f3483759ea71 100644 --- a/testdata/val_nodata_hasdata.rpl +++ b/testdata/val_nodata_hasdata.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nodata_zonecut.rpl b/testdata/val_nodata_zonecut.rpl index 9f610654615c..135aa51d6bd5 100644 --- a/testdata/val_nodata_zonecut.rpl +++ b/testdata/val_nodata_zonecut.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nodatawc.rpl b/testdata/val_nodatawc.rpl index 6ac40b79ae3a..6b33985b2964 100644 --- a/testdata/val_nodatawc.rpl +++ b/testdata/val_nodatawc.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nodatawc_badce.rpl b/testdata/val_nodatawc_badce.rpl index 2811ff846810..da8118a848b0 100644 --- a/testdata/val_nodatawc_badce.rpl +++ b/testdata/val_nodatawc_badce.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nodatawc_nodeny.rpl b/testdata/val_nodatawc_nodeny.rpl index 1c1adbd251dc..2bedc9a29728 100644 --- a/testdata/val_nodatawc_nodeny.rpl +++ b/testdata/val_nodatawc_nodeny.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nodatawc_one.rpl b/testdata/val_nodatawc_one.rpl index 54f915cd8a1b..45eb518e27b5 100644 --- a/testdata/val_nodatawc_one.rpl +++ b/testdata/val_nodatawc_one.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nokeyprime.rpl b/testdata/val_nokeyprime.rpl index 22653ad1a983..4675a382bc99 100644 --- a/testdata/val_nokeyprime.rpl +++ b/testdata/val_nokeyprime.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b1_nameerror.rpl b/testdata/val_nsec3_b1_nameerror.rpl index 3e4c9f72adc5..219426b61500 100644 --- a/testdata/val_nsec3_b1_nameerror.rpl +++ b/testdata/val_nsec3_b1_nameerror.rpl @@ -4,6 +4,7 @@ server: val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b1_nameerror_noce.rpl b/testdata/val_nsec3_b1_nameerror_noce.rpl index f3262752048e..11a0d0c7fd07 100644 --- a/testdata/val_nsec3_b1_nameerror_noce.rpl +++ b/testdata/val_nsec3_b1_nameerror_noce.rpl @@ -4,6 +4,7 @@ server: val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b1_nameerror_nonc.rpl b/testdata/val_nsec3_b1_nameerror_nonc.rpl index 993e943b0d6a..27d1657986a7 100644 --- a/testdata/val_nsec3_b1_nameerror_nonc.rpl +++ b/testdata/val_nsec3_b1_nameerror_nonc.rpl @@ -4,6 +4,7 @@ server: val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b1_nameerror_nowc.rpl b/testdata/val_nsec3_b1_nameerror_nowc.rpl index db208bbe17cc..ca47687891d6 100644 --- a/testdata/val_nsec3_b1_nameerror_nowc.rpl +++ b/testdata/val_nsec3_b1_nameerror_nowc.rpl @@ -4,6 +4,7 @@ server: val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b21_nodataent.rpl b/testdata/val_nsec3_b21_nodataent.rpl index 0f41f1e9cfcf..625390026c9f 100644 --- a/testdata/val_nsec3_b21_nodataent.rpl +++ b/testdata/val_nsec3_b21_nodataent.rpl @@ -4,6 +4,7 @@ server: val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b21_nodataent_wr.rpl b/testdata/val_nsec3_b21_nodataent_wr.rpl index 7060fb9b7986..731c35f3d84e 100644 --- a/testdata/val_nsec3_b21_nodataent_wr.rpl +++ b/testdata/val_nsec3_b21_nodataent_wr.rpl @@ -4,6 +4,7 @@ server: val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b2_nodata.rpl b/testdata/val_nsec3_b2_nodata.rpl index 8ea653f6b3d3..158ad02e73a1 100644 --- a/testdata/val_nsec3_b2_nodata.rpl +++ b/testdata/val_nsec3_b2_nodata.rpl @@ -4,6 +4,7 @@ server: val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b2_nodata_nons.rpl b/testdata/val_nsec3_b2_nodata_nons.rpl index 85669401b134..43d815e76e83 100644 --- a/testdata/val_nsec3_b2_nodata_nons.rpl +++ b/testdata/val_nsec3_b2_nodata_nons.rpl @@ -4,6 +4,7 @@ server: val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b3_optout.rpl b/testdata/val_nsec3_b3_optout.rpl index ea89e82bf64a..48488f410be9 100644 --- a/testdata/val_nsec3_b3_optout.rpl +++ b/testdata/val_nsec3_b3_optout.rpl @@ -4,6 +4,7 @@ server: val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b3_optout_negcache.rpl b/testdata/val_nsec3_b3_optout_negcache.rpl index 06bcdb18cbcc..930df96a0c40 100644 --- a/testdata/val_nsec3_b3_optout_negcache.rpl +++ b/testdata/val_nsec3_b3_optout_negcache.rpl @@ -4,6 +4,7 @@ server: val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b3_optout_noce.rpl b/testdata/val_nsec3_b3_optout_noce.rpl index ce476b62c4b9..a859d2787259 100644 --- a/testdata/val_nsec3_b3_optout_noce.rpl +++ b/testdata/val_nsec3_b3_optout_noce.rpl @@ -4,6 +4,7 @@ server: val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b3_optout_nonc.rpl b/testdata/val_nsec3_b3_optout_nonc.rpl index f4804e40c21c..e7ff8d42eb51 100644 --- a/testdata/val_nsec3_b3_optout_nonc.rpl +++ b/testdata/val_nsec3_b3_optout_nonc.rpl @@ -4,6 +4,7 @@ server: val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b4_wild.rpl b/testdata/val_nsec3_b4_wild.rpl index 5dcd308c95d6..6143cba11587 100644 --- a/testdata/val_nsec3_b4_wild.rpl +++ b/testdata/val_nsec3_b4_wild.rpl @@ -4,6 +4,7 @@ server: val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b4_wild_wr.rpl b/testdata/val_nsec3_b4_wild_wr.rpl index b9a1cda665b0..1aaae027feac 100644 --- a/testdata/val_nsec3_b4_wild_wr.rpl +++ b/testdata/val_nsec3_b4_wild_wr.rpl @@ -4,6 +4,7 @@ server: val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b5_wcnodata.rpl b/testdata/val_nsec3_b5_wcnodata.rpl index 717125e8626d..ea8fa5b4bd8c 100644 --- a/testdata/val_nsec3_b5_wcnodata.rpl +++ b/testdata/val_nsec3_b5_wcnodata.rpl @@ -4,6 +4,7 @@ server: val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b5_wcnodata_noce.rpl b/testdata/val_nsec3_b5_wcnodata_noce.rpl index 0506a4780dca..4e7995cf0f9b 100644 --- a/testdata/val_nsec3_b5_wcnodata_noce.rpl +++ b/testdata/val_nsec3_b5_wcnodata_noce.rpl @@ -4,6 +4,7 @@ server: val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b5_wcnodata_nonc.rpl b/testdata/val_nsec3_b5_wcnodata_nonc.rpl index 440386ee5cc7..f3356972cef0 100644 --- a/testdata/val_nsec3_b5_wcnodata_nonc.rpl +++ b/testdata/val_nsec3_b5_wcnodata_nonc.rpl @@ -4,6 +4,7 @@ server: val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b5_wcnodata_nowc.rpl b/testdata/val_nsec3_b5_wcnodata_nowc.rpl index e6619cf81b3e..32bc7290a838 100644 --- a/testdata/val_nsec3_b5_wcnodata_nowc.rpl +++ b/testdata/val_nsec3_b5_wcnodata_nowc.rpl @@ -4,6 +4,7 @@ server: val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_cname_ds.rpl b/testdata/val_nsec3_cname_ds.rpl index bf4dc5903fa7..200b467d2268 100644 --- a/testdata/val_nsec3_cname_ds.rpl +++ b/testdata/val_nsec3_cname_ds.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_cname_par.rpl b/testdata/val_nsec3_cname_par.rpl index 20ae3b2911a2..71c095113174 100644 --- a/testdata/val_nsec3_cname_par.rpl +++ b/testdata/val_nsec3_cname_par.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_cname_sub.rpl b/testdata/val_nsec3_cname_sub.rpl index beb910c5f43d..52af44084858 100644 --- a/testdata/val_nsec3_cname_sub.rpl +++ b/testdata/val_nsec3_cname_sub.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_cnametocnamewctoposwc.rpl b/testdata/val_nsec3_cnametocnamewctoposwc.rpl index a7c45efcf099..24bf6cf19b4c 100644 --- a/testdata/val_nsec3_cnametocnamewctoposwc.rpl +++ b/testdata/val_nsec3_cnametocnamewctoposwc.rpl @@ -5,6 +5,7 @@ server: val-override-date: "-1" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_entnodata_optout.rpl b/testdata/val_nsec3_entnodata_optout.rpl index 5d868def0ac1..b0554707d1af 100644 --- a/testdata/val_nsec3_entnodata_optout.rpl +++ b/testdata/val_nsec3_entnodata_optout.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_entnodata_optout_badopt.rpl b/testdata/val_nsec3_entnodata_optout_badopt.rpl index 928814bfb3bc..7bf202e3abbb 100644 --- a/testdata/val_nsec3_entnodata_optout_badopt.rpl +++ b/testdata/val_nsec3_entnodata_optout_badopt.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_entnodata_optout_match.rpl b/testdata/val_nsec3_entnodata_optout_match.rpl index 2919ff76707b..daea3809c7dd 100644 --- a/testdata/val_nsec3_entnodata_optout_match.rpl +++ b/testdata/val_nsec3_entnodata_optout_match.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_iter_high.rpl b/testdata/val_nsec3_iter_high.rpl index 461b5503c59e..0315537d87ac 100644 --- a/testdata/val_nsec3_iter_high.rpl +++ b/testdata/val_nsec3_iter_high.rpl @@ -6,6 +6,7 @@ server: val-nsec3-keysize-iterations: "1024 100 2048 200 4096 500" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_nodatawccname.rpl b/testdata/val_nsec3_nodatawccname.rpl index ef5cadf89e4c..8a544640f9a6 100644 --- a/testdata/val_nsec3_nodatawccname.rpl +++ b/testdata/val_nsec3_nodatawccname.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_nods.rpl b/testdata/val_nsec3_nods.rpl index 592adf7617f9..1496a98d53a0 100644 --- a/testdata/val_nsec3_nods.rpl +++ b/testdata/val_nsec3_nods.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_nods_badopt.rpl b/testdata/val_nsec3_nods_badopt.rpl index 723bc767b237..607dd8bbdbc3 100644 --- a/testdata/val_nsec3_nods_badopt.rpl +++ b/testdata/val_nsec3_nods_badopt.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_nods_badsig.rpl b/testdata/val_nsec3_nods_badsig.rpl index b0a4ebe56c16..d12530594c7f 100644 --- a/testdata/val_nsec3_nods_badsig.rpl +++ b/testdata/val_nsec3_nods_badsig.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_nods_negcache.rpl b/testdata/val_nsec3_nods_negcache.rpl index 053e003597ef..d542aad9bcee 100644 --- a/testdata/val_nsec3_nods_negcache.rpl +++ b/testdata/val_nsec3_nods_negcache.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_nods_soa.rpl b/testdata/val_nsec3_nods_soa.rpl index 5b6877ebe13e..bbb0633aac0a 100644 --- a/testdata/val_nsec3_nods_soa.rpl +++ b/testdata/val_nsec3_nods_soa.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_optout_ad.rpl b/testdata/val_nsec3_optout_ad.rpl index 67675b830b2c..12a8716ef2bd 100644 --- a/testdata/val_nsec3_optout_ad.rpl +++ b/testdata/val_nsec3_optout_ad.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_optout_cache.rpl b/testdata/val_nsec3_optout_cache.rpl index f047d3571ed1..215cca6768e2 100644 --- a/testdata/val_nsec3_optout_cache.rpl +++ b/testdata/val_nsec3_optout_cache.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_wcany.rpl b/testdata/val_nsec3_wcany.rpl index f2b68a81bfc2..256bf6061026 100644 --- a/testdata/val_nsec3_wcany.rpl +++ b/testdata/val_nsec3_wcany.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nsec3_wcany_nodeny.rpl b/testdata/val_nsec3_wcany_nodeny.rpl index d2c91e0e07c6..1ac1514287aa 100644 --- a/testdata/val_nsec3_wcany_nodeny.rpl +++ b/testdata/val_nsec3_wcany_nodeny.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nx.rpl b/testdata/val_nx.rpl index 9dee57dd4378..c4684a1e4e49 100644 --- a/testdata/val_nx.rpl +++ b/testdata/val_nx.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nx_nodeny.rpl b/testdata/val_nx_nodeny.rpl index f98248e12be2..b1abb42c3eb8 100644 --- a/testdata/val_nx_nodeny.rpl +++ b/testdata/val_nx_nodeny.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nx_nowc.rpl b/testdata/val_nx_nowc.rpl index dc04c65f6058..12aca55d8a06 100644 --- a/testdata/val_nx_nowc.rpl +++ b/testdata/val_nx_nowc.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nx_nsec3_collision.rpl b/testdata/val_nx_nsec3_collision.rpl index 5cba2e109af2..25f962147ff9 100644 --- a/testdata/val_nx_nsec3_collision.rpl +++ b/testdata/val_nx_nsec3_collision.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nx_nsec3_params.rpl b/testdata/val_nx_nsec3_params.rpl index c24714d51acf..90ac45d13825 100644 --- a/testdata/val_nx_nsec3_params.rpl +++ b/testdata/val_nx_nsec3_params.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_nx_overreach.rpl b/testdata/val_nx_overreach.rpl index 11c3a4a191c9..d6bf758f1822 100644 --- a/testdata/val_nx_overreach.rpl +++ b/testdata/val_nx_overreach.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_pos_truncns.rpl b/testdata/val_pos_truncns.rpl index 76563a50b89a..2b52e772a8bc 100644 --- a/testdata/val_pos_truncns.rpl +++ b/testdata/val_pos_truncns.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_positive.rpl b/testdata/val_positive.rpl index 9c70fcbc92c6..d5a60612e9b3 100644 --- a/testdata/val_positive.rpl +++ b/testdata/val_positive.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_positive_nosigs.rpl b/testdata/val_positive_nosigs.rpl index e1c04d6c1311..e57836f90d02 100644 --- a/testdata/val_positive_nosigs.rpl +++ b/testdata/val_positive_nosigs.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_positive_wc.rpl b/testdata/val_positive_wc.rpl index 2fb737deb51e..4b61a8dae755 100644 --- a/testdata/val_positive_wc.rpl +++ b/testdata/val_positive_wc.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_positive_wc_nodeny.rpl b/testdata/val_positive_wc_nodeny.rpl index 4c5f31083878..6d14ae82bf11 100644 --- a/testdata/val_positive_wc_nodeny.rpl +++ b/testdata/val_positive_wc_nodeny.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_qds_oneanc.rpl b/testdata/val_qds_oneanc.rpl index 541dfeae8ecb..183611d85dda 100644 --- a/testdata/val_qds_oneanc.rpl +++ b/testdata/val_qds_oneanc.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_qds_twoanc.rpl b/testdata/val_qds_twoanc.rpl index 1b2cae15a558..8d7bd1c01f8f 100644 --- a/testdata/val_qds_twoanc.rpl +++ b/testdata/val_qds_twoanc.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_refer_unsignadd.rpl b/testdata/val_refer_unsignadd.rpl index d55332687ec9..a83998f931f5 100644 --- a/testdata/val_refer_unsignadd.rpl +++ b/testdata/val_refer_unsignadd.rpl @@ -7,6 +7,7 @@ server: access-control: 127.0.0.1 allow_snoop target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_referd.rpl b/testdata/val_referd.rpl index d532c9a00cf0..6b3d1087d99d 100644 --- a/testdata/val_referd.rpl +++ b/testdata/val_referd.rpl @@ -7,6 +7,7 @@ server: access-control: 127.0.0.1 allow_snoop target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_referglue.rpl b/testdata/val_referglue.rpl index 891e89393fe9..836f46ae920b 100644 --- a/testdata/val_referglue.rpl +++ b/testdata/val_referglue.rpl @@ -7,6 +7,7 @@ server: access-control: 127.0.0.1 allow_snoop target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_secds.rpl b/testdata/val_secds.rpl index 4c40409b7203..f7f4e97ece31 100644 --- a/testdata/val_secds.rpl +++ b/testdata/val_secds.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_secds_nosig.rpl b/testdata/val_secds_nosig.rpl index c12f934ce683..453cfa6ad496 100644 --- a/testdata/val_secds_nosig.rpl +++ b/testdata/val_secds_nosig.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_spurious_ns.rpl b/testdata/val_spurious_ns.rpl index 3aef40341ef6..3a6281ed0eef 100644 --- a/testdata/val_spurious_ns.rpl +++ b/testdata/val_spurious_ns.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_stub_noroot.rpl b/testdata/val_stub_noroot.rpl index f50041c568f6..07fb0e376e05 100644 --- a/testdata/val_stub_noroot.rpl +++ b/testdata/val_stub_noroot.rpl @@ -6,6 +6,7 @@ server: ; the dlv anchor is completely ignored, but here to test that. dlv-anchor: "dlv.isc.org. IN DNSKEY 257 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_stubds.rpl b/testdata/val_stubds.rpl index bf5f5d651b8b..7e1dfedec5f2 100644 --- a/testdata/val_stubds.rpl +++ b/testdata/val_stubds.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_ta_algo_dnskey.rpl b/testdata/val_ta_algo_dnskey.rpl index dfe608ef3bb1..9770e5af1e9e 100644 --- a/testdata/val_ta_algo_dnskey.rpl +++ b/testdata/val_ta_algo_dnskey.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_ta_algo_dnskey_dp.rpl b/testdata/val_ta_algo_dnskey_dp.rpl index 1ef14adf87a9..aa8edc4df4ad 100644 --- a/testdata/val_ta_algo_dnskey_dp.rpl +++ b/testdata/val_ta_algo_dnskey_dp.rpl @@ -7,6 +7,7 @@ server: target-fetch-policy: "0 0 0 0 0" harden-algo-downgrade: no fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_ta_algo_missing.rpl b/testdata/val_ta_algo_missing.rpl index 51dddce2b2f1..1480f0d0bc2a 100644 --- a/testdata/val_ta_algo_missing.rpl +++ b/testdata/val_ta_algo_missing.rpl @@ -8,6 +8,7 @@ server: target-fetch-policy: "0 0 0 0 0" harden-algo-downgrade: yes fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_ta_algo_missing_dp.rpl b/testdata/val_ta_algo_missing_dp.rpl index fb4a1382562b..737cbd117a46 100644 --- a/testdata/val_ta_algo_missing_dp.rpl +++ b/testdata/val_ta_algo_missing_dp.rpl @@ -8,6 +8,7 @@ server: target-fetch-policy: "0 0 0 0 0" harden-algo-downgrade: no fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_twocname.rpl b/testdata/val_twocname.rpl index 2736d917a017..6756787b9bfc 100644 --- a/testdata/val_twocname.rpl +++ b/testdata/val_twocname.rpl @@ -3,6 +3,7 @@ server: trust-anchor: "ORG. DS 21366 7 1 E6C1716CFB6BDC84E84CE1AB5510DAC69173B5B2" val-override-date: "20091116100204" fake-sha1: yes + trust-anchor-signaling: no forward-zone: name: "." diff --git a/testdata/val_unalgo_dlv.rpl b/testdata/val_unalgo_dlv.rpl index 9320ca67feda..7419ebecef69 100644 --- a/testdata/val_unalgo_dlv.rpl +++ b/testdata/val_unalgo_dlv.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_unalgo_ds.rpl b/testdata/val_unalgo_ds.rpl index 8adc049884a0..b8fc44f987d9 100644 --- a/testdata/val_unalgo_ds.rpl +++ b/testdata/val_unalgo_ds.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_unsec_cname.rpl b/testdata/val_unsec_cname.rpl index 6d4e52f8fa8b..9be8054b4bc6 100644 --- a/testdata/val_unsec_cname.rpl +++ b/testdata/val_unsec_cname.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_unsecds.rpl b/testdata/val_unsecds.rpl index e8a85eb1760a..7a19351e2a7d 100644 --- a/testdata/val_unsecds.rpl +++ b/testdata/val_unsecds.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_unsecds_negcache.rpl b/testdata/val_unsecds_negcache.rpl index 7de1775b4901..8136d3cb46fa 100644 --- a/testdata/val_unsecds_negcache.rpl +++ b/testdata/val_unsecds_negcache.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_unsecds_qtypeds.rpl b/testdata/val_unsecds_qtypeds.rpl index 5101300053a4..e4b9a2265088 100644 --- a/testdata/val_unsecds_qtypeds.rpl +++ b/testdata/val_unsecds_qtypeds.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/testdata/val_wild_pos.rpl b/testdata/val_wild_pos.rpl index 9c0c5df0f0c6..1d4357b08671 100644 --- a/testdata/val_wild_pos.rpl +++ b/testdata/val_wild_pos.rpl @@ -5,6 +5,7 @@ server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes + trust-anchor-signaling: no stub-zone: name: "." diff --git a/util/config_file.c b/util/config_file.c index 796c1a61f269..ae3b6682ebf5 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -69,9 +69,9 @@ #include #endif -/** from cfg username, after daemonise setup performed */ +/** from cfg username, after daemonize setup performed */ uid_t cfg_uid = (uid_t)-1; -/** from cfg username, after daemonise setup performed */ +/** from cfg username, after daemonize setup performed */ gid_t cfg_gid = (gid_t)-1; /** for debug allow small timeout values for fast rollovers */ int autr_permit_small_holddown = 0; @@ -101,6 +101,7 @@ config_create(void) cfg->do_udp = 1; cfg->do_tcp = 1; cfg->tcp_upstream = 0; + cfg->udp_upstream_without_downstream = 0; cfg->tcp_mss = 0; cfg->outgoing_tcp_mss = 0; cfg->ssl_service_key = NULL; @@ -207,7 +208,7 @@ config_create(void) cfg->trust_anchor_file_list = NULL; cfg->trust_anchor_list = NULL; cfg->trusted_keys_file_list = NULL; - cfg->trust_anchor_signaling = 0; + cfg->trust_anchor_signaling = 1; cfg->dlv_anchor_file = NULL; cfg->dlv_anchor_list = NULL; cfg->domain_insecure = NULL; @@ -284,6 +285,8 @@ config_create(void) cfg->dnscrypt_secret_key = NULL; cfg->dnscrypt_shared_secret_cache_size = 4*1024*1024; cfg->dnscrypt_shared_secret_cache_slabs = 4; + cfg->dnscrypt_nonce_cache_size = 4*1024*1024; + cfg->dnscrypt_nonce_cache_slabs = 4; #ifdef USE_IPSECMOD cfg->ipsecmod_enabled = 1; cfg->ipsecmod_ignore_bogus = 0; @@ -426,6 +429,8 @@ 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("udp-upstream-without-downstream:", + udp_upstream_without_downstream) else S_NUMBER_NONZERO("tcp-mss:", tcp_mss) else S_NUMBER_NONZERO("outgoing-tcp-mss:", outgoing_tcp_mss) else S_YNO("ssl-upstream:", ssl_upstream) @@ -571,6 +576,10 @@ int config_set_option(struct config_file* cfg, const char* opt, dnscrypt_shared_secret_cache_size) else S_POW2("dnscrypt-shared-secret-cache-slabs:", dnscrypt_shared_secret_cache_slabs) + else S_MEMSIZE("dnscrypt-nonce-cache-size:", + dnscrypt_nonce_cache_size) + else S_POW2("dnscrypt-nonce-cache-slabs:", + dnscrypt_nonce_cache_slabs) #endif else if(strcmp(opt, "ip-ratelimit:") == 0) { IS_NUMBER_OR_ZERO; cfg->ip_ratelimit = atoi(val); @@ -828,6 +837,7 @@ 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, "udp-upstream-without-downstream", udp_upstream_without_downstream) else O_DEC(opt, "tcp-mss", tcp_mss) else O_DEC(opt, "outgoing-tcp-mss", outgoing_tcp_mss) else O_YNO(opt, "ssl-upstream", ssl_upstream) @@ -936,6 +946,10 @@ config_get_option(struct config_file* cfg, const char* opt, dnscrypt_shared_secret_cache_size) else O_DEC(opt, "dnscrypt-shared-secret-cache-slabs", dnscrypt_shared_secret_cache_slabs) + else O_MEM(opt, "dnscrypt-nonce-cache-size", + dnscrypt_nonce_cache_size) + else O_DEC(opt, "dnscrypt-nonce-cache-slabs", + dnscrypt_nonce_cache_slabs) #endif else O_YNO(opt, "unblock-lan-zones", unblock_lan_zones) else O_YNO(opt, "insecure-lan-zones", insecure_lan_zones) diff --git a/util/config_file.h b/util/config_file.h index fdc48111e30a..5d9b2d0be15e 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -84,6 +84,8 @@ struct config_file { int do_tcp; /** tcp upstream queries (no UDP upstream queries) */ int tcp_upstream; + /** udp upstream enabled when no UDP downstream is enabled (do_udp no)*/ + int udp_upstream_without_downstream; /** maximum segment size of tcp socket which queries are answered */ int tcp_mss; /** maximum segment size of tcp socket for outgoing queries */ @@ -468,7 +470,10 @@ struct config_file { size_t dnscrypt_shared_secret_cache_size; /** number of slabs for dnscrypt shared secrets cache */ size_t dnscrypt_shared_secret_cache_slabs; - + /** memory size in bytes for dnscrypt nonces cache */ + size_t dnscrypt_nonce_cache_size; + /** number of slabs for dnscrypt nonces cache */ + size_t dnscrypt_nonce_cache_slabs; /** IPsec module */ #ifdef USE_IPSECMOD /** false to bypass the IPsec module */ @@ -494,9 +499,9 @@ struct config_file { #endif }; -/** from cfg username, after daemonise setup performed */ +/** from cfg username, after daemonize setup performed */ extern uid_t cfg_uid; -/** from cfg username, after daemonise setup performed */ +/** from cfg username, after daemonize setup performed */ extern gid_t cfg_gid; /** debug and enable small timeouts */ extern int autr_permit_small_holddown; diff --git a/util/configlexer.c b/util/configlexer.c index ee5428e8906c..93a9cc7d1379 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -363,8 +363,8 @@ static void yynoreturn yy_fatal_error (yyconst char* msg ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 234 -#define YY_END_OF_BUFFER 235 +#define YY_NUM_RULES 237 +#define YY_END_OF_BUFFER 238 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -372,259 +372,265 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[2288] = +static yyconst flex_int16_t yy_accept[2341] = { 0, - 1, 1, 216, 216, 220, 220, 224, 224, 228, 228, - 1, 1, 235, 232, 1, 214, 214, 233, 2, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 233, 216, 217, 217, 218, 233, 220, 221, 221, 222, - 233, 227, 224, 225, 225, 226, 233, 228, 229, 229, - 230, 233, 231, 215, 2, 219, 231, 233, 232, 0, - 1, 2, 2, 2, 2, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 1, 1, 219, 219, 223, 223, 227, 227, 231, 231, + 1, 1, 238, 235, 1, 217, 217, 236, 2, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 236, 219, 220, 220, 221, 236, 223, 224, 224, 225, + 236, 230, 227, 228, 228, 229, 236, 231, 232, 232, + 233, 236, 234, 218, 2, 222, 234, 236, 235, 0, + 1, 2, 2, 2, 2, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 216, 0, 220, 0, 227, 0, 224, 228, - 0, 231, 0, 2, 2, 231, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 219, 0, 223, 0, 230, 0, 227, + 231, 0, 234, 0, 2, 2, 234, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 231, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 234, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 232, 232, 232, 232, 232, 232, 232, 232, 231, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 77, 232, 232, 232, - 232, 232, 232, 8, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 234, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 77, + 235, 235, 235, 235, 235, 235, 8, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 88, 231, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 88, + 234, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 231, 232, 232, 232, 232, 232, - 232, 232, 37, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 170, 232, 14, 15, 232, - 18, 17, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 234, + 235, 235, 235, 235, 235, 235, 235, 37, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 170, 235, 14, 15, 235, 18, 17, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 156, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 3, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 231, 232, 232, 232, 212, 232, 232, 211, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 156, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 3, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 234, 235, 235, 235, + 214, 235, 235, 213, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 232, 232, 232, 232, 232, 223, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 40, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 41, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 145, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 20, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 103, - 232, 223, 232, 232, 232, 232, 232, 232, 232, 232, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 226, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 40, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 41, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 145, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 20, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 103, 235, 226, 235, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 197, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 120, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 102, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 75, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 25, 232, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 197, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 120, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 102, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 75, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 38, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 39, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 121, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 28, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 235, 235, 235, 235, 235, 25, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 38, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 39, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 121, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 28, 235, 235, 235, 235, 235, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 185, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 32, - 232, 33, 232, 232, 232, 78, 232, 79, 232, 232, - 76, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 7, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 163, 232, 232, 232, 232, 105, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 185, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 32, 235, + 33, 235, 235, 235, 78, 235, 79, 235, 235, 76, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 7, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 163, 235, 235, 235, 235, 105, 235, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 29, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 137, 232, 136, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 16, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 42, 232, 232, 232, - 232, 232, 232, 232, 144, 232, 232, 232, 232, 81, - 80, 232, 232, 232, 232, 232, 232, 232, 232, 131, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 29, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 137, 235, 136, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 16, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 42, 235, 235, + 235, 235, 235, 235, 235, 144, 235, 235, 235, 235, - 232, 232, 232, 232, 232, 232, 232, 232, 89, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 60, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 64, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 36, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 134, 135, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 6, 232, + 81, 80, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 131, 235, 235, 235, 235, 235, 235, 235, 235, + 89, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 60, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 64, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 36, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 134, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 195, 232, 232, - 213, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 26, 232, - 232, 232, 232, 232, 232, 232, 232, 127, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 149, 232, - 128, 232, 232, 161, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 27, - 232, 232, 232, 232, 84, 232, 85, 232, 83, 232, - 232, 232, 232, 232, 232, 232, 232, 100, 232, 232, + 135, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 6, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 195, 235, 235, 215, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 26, 235, 235, 235, 235, 235, 235, 235, + 235, 127, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 149, 235, 128, 235, 235, 161, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 27, 235, 235, 235, 235, 84, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 184, - 232, 232, 232, 232, 232, 232, 232, 232, 129, 232, - 232, 232, 232, 232, 132, 232, 232, 160, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 74, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 34, 232, 232, 22, 232, 232, 232, 232, 19, 232, - 110, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 49, 51, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 199, 232, + 235, 85, 235, 83, 235, 235, 235, 235, 235, 235, + 235, 235, 100, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 184, 235, 235, 235, 235, 235, + 235, 235, 235, 129, 235, 235, 235, 235, 235, 132, + 235, 235, 160, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 74, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 34, 235, 235, 22, 235, + 235, 235, 235, 19, 235, 110, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 232, 232, 171, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 86, 232, 232, 232, - 232, 232, 232, 232, 99, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 207, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 104, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 155, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 119, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 115, 232, 122, + 235, 49, 51, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 199, 235, 235, 235, 171, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 86, 235, 235, 235, 235, 235, 235, + 235, 99, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 209, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 104, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 155, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 119, - 232, 232, 232, 232, 232, 92, 232, 232, 70, 232, - 232, 232, 232, 147, 232, 232, 232, 232, 232, 162, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 176, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 118, 232, 232, 232, 232, - 232, 52, 53, 232, 232, 232, 232, 232, 35, 232, - 232, 232, 232, 232, 59, 123, 232, 138, 232, 164, - 133, 232, 232, 232, 45, 232, 125, 232, 232, 232, - 232, 232, 9, 232, 232, 232, 73, 232, 232, 232, - 232, 189, 232, 146, 232, 232, 232, 232, 232, 232, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 115, 235, 122, 235, 235, + 235, 235, 235, 92, 235, 235, 70, 235, 235, 235, + 235, 147, 235, 235, 235, 235, 235, 162, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 176, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 118, 235, 235, 235, 235, 235, + 52, 53, 235, 235, 235, 235, 235, 35, 235, 235, + 235, 235, 235, 59, 123, 235, 138, 235, 164, 133, + 235, 235, 235, 45, 235, 125, 235, 235, 235, 235, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 106, 198, 232, 232, 232, 175, 232, 232, - 232, 232, 232, 232, 232, 232, 157, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 210, 232, 124, 232, 232, 232, 44, 46, 232, 232, - 232, 232, 232, 232, 232, 72, 232, 232, 232, 232, - 187, 232, 194, 232, 232, 232, 232, 232, 151, 23, + 235, 9, 235, 235, 235, 73, 235, 235, 235, 235, + 189, 235, 146, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 106, 198, 235, 235, 235, 235, 175, 235, + 235, 235, 235, 235, 235, 235, 235, 157, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 212, 235, 124, 235, 235, 235, 44, 46, 235, - 24, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 69, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 153, 150, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 43, 232, 232, 232, 232, 232, 232, 232, 232, 101, - 13, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 205, 232, 208, 232, 232, 232, 232, 232, 232, 12, - 232, 232, 21, 232, 232, 232, 193, 232, 196, 47, - 232, 159, 232, 152, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 114, 113, 232, + 235, 235, 235, 235, 235, 235, 72, 235, 235, 235, + 235, 187, 235, 194, 235, 235, 235, 235, 235, 151, + 23, 24, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 69, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 153, 150, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 43, 235, 235, 235, 235, 235, 235, + 235, 235, 101, 13, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 207, 235, 210, 235, 235, 235, 235, + 235, 235, 12, 235, 235, 21, 235, 235, 235, 193, - 232, 232, 232, 232, 232, 232, 154, 148, 232, 232, - 200, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 54, 232, 232, 232, 188, 232, 232, 232, - 232, 232, 158, 232, 232, 232, 232, 232, 232, 232, - 232, 48, 232, 232, 232, 82, 232, 107, 232, 109, - 139, 232, 232, 232, 112, 232, 232, 165, 232, 232, - 232, 232, 232, 94, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 172, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 140, 232, + 235, 196, 47, 235, 159, 235, 152, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 114, 113, 235, 235, 235, 235, 235, 235, 235, + 154, 148, 235, 235, 235, 200, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 54, 235, 235, + 235, 188, 235, 235, 235, 235, 235, 158, 235, 235, + 235, 235, 235, 235, 235, 235, 48, 235, 235, 235, + 82, 235, 107, 235, 109, 235, 139, 235, 235, 235, + 112, 235, 235, 165, 235, 235, 235, 235, 235, 94, - 232, 186, 232, 209, 232, 232, 232, 30, 232, 232, - 232, 232, 4, 232, 232, 93, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 168, 232, 232, 232, - 232, 232, 232, 201, 232, 232, 232, 232, 232, 232, - 174, 232, 232, 143, 232, 232, 232, 232, 232, 232, - 232, 232, 57, 232, 31, 192, 232, 169, 232, 232, - 11, 232, 232, 232, 232, 232, 232, 141, 61, 232, - 232, 232, 232, 117, 232, 232, 232, 232, 232, 96, - 232, 232, 232, 232, 232, 232, 232, 232, 173, 90, - 232, 87, 232, 232, 232, 63, 67, 62, 232, 55, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 172, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 140, 235, 235, 186, 235, + 211, 235, 235, 235, 30, 235, 235, 235, 235, 4, + 235, 235, 93, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 168, 235, 235, 235, 235, 235, + 235, 235, 201, 235, 235, 235, 235, 235, 235, 174, + 235, 235, 143, 235, 235, 235, 235, 235, 235, 235, + 235, 57, 235, 31, 192, 235, 169, 235, 235, 11, + 235, 235, 235, 235, 235, 235, 141, 61, 235, 235, - 232, 232, 232, 10, 232, 232, 232, 190, 232, 232, - 232, 116, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 68, 66, - 232, 56, 206, 232, 232, 232, 130, 232, 232, 142, - 232, 232, 232, 232, 232, 108, 50, 232, 232, 202, - 232, 232, 232, 232, 232, 232, 232, 91, 65, 97, - 98, 58, 232, 191, 111, 232, 232, 232, 167, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 71, 232, 166, 232, 183, 232, 232, 232, + 235, 235, 235, 117, 235, 235, 235, 235, 235, 96, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 173, + 90, 235, 87, 235, 235, 235, 63, 67, 62, 235, + 55, 235, 235, 235, 10, 235, 235, 235, 190, 235, + 235, 235, 235, 116, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 68, 66, 235, 56, 208, 235, 235, 235, 130, + 235, 235, 142, 235, 235, 235, 235, 235, 235, 108, + 50, 235, 235, 235, 235, 202, 235, 235, 235, 235, + 235, 235, 235, 91, 65, 97, 98, 58, 235, 191, - 232, 232, 232, 232, 5, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 95, 232, 232, 232, 232, 232, - 232, 232, 126, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 179, 232, - 232, 232, 232, 232, 203, 232, 232, 232, 232, 232, - 232, 204, 232, 232, 232, 177, 232, 180, 181, 232, - 232, 232, 232, 232, 178, 182, 0 + 111, 235, 235, 235, 235, 167, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 71, 235, 166, 235, 183, + 205, 235, 235, 235, 235, 235, 235, 235, 235, 5, + 235, 235, 235, 206, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 95, 235, 235, 235, 235, 235, 235, + 235, 235, 126, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + + 235, 235, 235, 235, 235, 235, 235, 235, 216, 235, + 235, 179, 235, 235, 235, 235, 235, 203, 235, 235, + 235, 235, 235, 235, 204, 235, 235, 235, 177, 235, + 180, 181, 235, 235, 235, 235, 235, 178, 182, 0 } ; static yyconst YY_CHAR yy_ec[256] = @@ -670,523 +676,533 @@ static yyconst YY_CHAR yy_meta[67] = 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_uint16_t yy_base[2302] = +static yyconst flex_uint16_t yy_base[2355] = { 0, 0, 0, 64, 67, 70, 72, 78, 84, 89, 92, - 131, 137, 360, 306, 96, 6594, 6594, 6594, 109, 111, + 131, 137, 333, 290, 96, 6728, 6728, 6728, 109, 111, 85, 142, 180, 129, 134, 138, 183, 50, 166, 75, - 214, 204, 124, 256, 141, 248, 304, 200, 221, 250, - 305, 299, 6594, 6594, 6594, 96, 283, 6594, 6594, 6594, - 102, 276, 265, 6594, 6594, 6594, 322, 216, 6594, 6594, - 6594, 115, 212, 6594, 326, 6594, 161, 336, 186, 343, - 115, 0, 363, 0, 0, 107, 207, 159, 217, 342, - 219, 264, 243, 332, 322, 280, 260, 347, 334, 346, - 351, 277, 352, 372, 359, 367, 392, 361, 377, 401, + 214, 204, 124, 256, 141, 248, 304, 200, 258, 286, + 246, 283, 6728, 6728, 6728, 96, 240, 6728, 6728, 6728, + 102, 231, 265, 6728, 6728, 6728, 311, 221, 6728, 6728, + 6728, 115, 212, 6728, 336, 6728, 161, 343, 207, 349, + 115, 0, 353, 0, 0, 107, 216, 159, 252, 345, + 241, 242, 243, 346, 337, 284, 335, 364, 280, 340, + 357, 347, 351, 362, 371, 372, 391, 395, 381, 401, - 402, 386, 400, 413, 408, 245, 423, 407, 404, 425, - 441, 428, 449, 436, 447, 439, 452, 462, 442, 464, - 474, 294, 468, 489, 466, 481, 475, 498, 501, 491, - 495, 507, 181, 277, 177, 427, 173, 552, 207, 151, - 391, 117, 558, 562, 0, 528, 530, 389, 544, 488, - 534, 541, 548, 540, 546, 555, 575, 569, 577, 570, - 580, 624, 584, 579, 587, 589, 572, 604, 610, 599, - 605, 631, 591, 625, 629, 648, 657, 647, 637, 655, - 658, 682, 674, 669, 670, 684, 685, 692, 697, 676, - 686, 694, 687, 696, 698, 708, 709, 701, 715, 721, + 402, 388, 393, 413, 416, 418, 428, 429, 427, 430, + 445, 433, 454, 441, 464, 446, 458, 437, 468, 491, + 457, 269, 484, 479, 481, 403, 462, 485, 511, 497, + 503, 498, 512, 186, 324, 177, 217, 173, 556, 207, + 151, 379, 117, 560, 564, 0, 530, 514, 302, 544, + 551, 555, 546, 552, 561, 548, 560, 575, 572, 573, + 508, 606, 650, 579, 589, 592, 593, 587, 607, 612, + 601, 603, 634, 595, 616, 624, 662, 642, 638, 651, + 628, 656, 693, 665, 666, 679, 677, 691, 684, 692, + 694, 690, 702, 685, 704, 711, 707, 709, 719, 698, - 711, 727, 723, 735, 718, 749, 733, 758, 736, 744, - 748, 766, 750, 753, 771, 779, 775, 782, 763, 776, - 762, 783, 792, 789, 790, 805, 799, 793, 809, 798, - 796, 808, 826, 828, 836, 590, 820, 839, 841, 832, - 831, 847, 845, 834, 856, 857, 867, 851, 875, 886, - 862, 869, 864, 877, 891, 894, 881, 884, 883, 902, - 898, 917, 910, 900, 928, 911, 936, 924, 938, 921, - 930, 937, 905, 943, 957, 960, 962, 967, 935, 973, - 981, 964, 980, 983, 970, 984, 993, 994, 991, 997, - 1008, 1020, 1024, 1001, 1017, 1007, 1035, 1032, 1040, 1019, + 723, 721, 738, 726, 748, 732, 750, 737, 762, 747, + 759, 751, 768, 753, 774, 764, 783, 778, 792, 788, + 770, 786, 781, 794, 797, 799, 801, 814, 803, 808, + 819, 824, 828, 787, 813, 830, 841, 246, 826, 846, + 849, 840, 833, 851, 857, 843, 863, 858, 867, 865, + 875, 887, 869, 868, 870, 885, 899, 901, 888, 905, + 890, 902, 892, 917, 911, 916, 918, 912, 937, 913, + 931, 929, 941, 960, 537, 956, 950, 951, 965, 976, + 585, 983, 971, 980, 986, 984, 982, 989, 981, 994, + 1000, 1011, 1012, 1015, 1025, 1010, 1027, 1031, 1038, 1029, - 1030, 1041, 1066, 1056, 1111, 1059, 1062, 1078, 1054, 1057, - 1064, 1072, 1063, 1105, 1084, 1088, 1090, 1101, 1115, 1106, - 1129, 1102, 1119, 1137, 1144, 1134, 1139, 1140, 1164, 1148, - 1149, 1153, 1146, 1172, 1166, 1175, 1163, 1171, 1191, 1180, - 1178, 1199, 1195, 1182, 1193, 1209, 1219, 1212, 1205, 1227, - 1216, 1230, 1220, 1236, 1224, 1241, 1232, 1243, 1240, 1246, - 1254, 1257, 1264, 1269, 1250, 1277, 6594, 1281, 1262, 1279, - 1285, 1270, 1288, 6594, 1293, 1275, 1289, 1291, 1298, 1314, - 1309, 1316, 1304, 1306, 1325, 1340, 1315, 1327, 1317, 1336, - 1333, 1334, 1342, 1346, 1351, 1397, 1345, 1356, 1352, 1382, + 1047, 1039, 1042, 1035, 1057, 1061, 1058, 1106, 1074, 1067, + 1083, 1075, 1073, 1090, 1077, 1099, 1111, 1104, 1110, 1114, + 1124, 1123, 1129, 1054, 1126, 1131, 1145, 1084, 1135, 1147, + 1162, 1166, 1148, 1153, 1161, 1164, 1174, 1175, 1180, 1165, + 1171, 1200, 1188, 1203, 1210, 1204, 1087, 1196, 1212, 1215, + 1211, 1201, 1224, 1237, 1227, 1240, 1228, 1238, 1230, 1239, + 1257, 1249, 1251, 1256, 1265, 1270, 1267, 1252, 1274, 6728, + 1280, 1261, 1278, 1284, 1283, 1279, 6728, 1294, 1295, 1290, + 1321, 1310, 1318, 1311, 1316, 1331, 1307, 1326, 1337, 1322, + 1330, 1338, 1340, 1343, 1344, 1363, 1350, 1353, 1399, 1349, - 1377, 1361, 1390, 1369, 1392, 1384, 1388, 1395, 1409, 1407, - 1426, 1424, 1419, 1420, 1436, 6594, 1437, 1417, 1427, 1430, - 1445, 1446, 1450, 1453, 1467, 1475, 1462, 1476, 1466, 1479, - 1468, 1480, 1481, 1471, 1488, 1496, 1486, 1492, 1497, 1505, - 1516, 1518, 1525, 1500, 1517, 1509, 1526, 1529, 1530, 1531, - 1519, 1536, 1520, 1543, 1545, 1551, 1563, 1524, 1553, 1555, - 1569, 1578, 1562, 1564, 1589, 1577, 1582, 1591, 1592, 1594, - 1598, 1602, 1603, 1611, 1607, 1616, 1612, 1621, 1629, 1630, - 1626, 1618, 1635, 1642, 1641, 1645, 1648, 1647, 1666, 1654, - 1657, 1669, 1658, 1656, 1668, 1685, 1675, 1683, 1705, 1681, + 1356, 1365, 1384, 1385, 1394, 1383, 1408, 1379, 1412, 1402, + 1410, 1423, 1414, 1421, 1441, 1442, 1428, 1439, 1450, 6728, + 1449, 1396, 1445, 1440, 1455, 1448, 1460, 1463, 1464, 1468, + 1467, 1497, 1481, 1496, 1485, 1498, 1501, 1486, 1491, 1514, + 1506, 1510, 1511, 1520, 1516, 1517, 1526, 1515, 1530, 1521, + 1531, 1518, 1555, 1547, 1534, 1549, 1544, 1560, 1563, 1542, + 1572, 1559, 1569, 1567, 1583, 1587, 1579, 1574, 1578, 1591, + 1595, 1604, 1612, 1616, 1597, 1596, 1623, 1620, 1610, 1622, + 1637, 1627, 1635, 1639, 1636, 1640, 1632, 1650, 1647, 1656, + 1667, 1666, 1680, 1659, 1663, 1683, 1662, 1673, 1684, 1689, - 1664, 1697, 1684, 1704, 1700, 1701, 1698, 1702, 1716, 1712, - 1708, 1724, 1733, 1726, 1739, 1735, 1736, 1737, 1753, 1729, - 1756, 1743, 1758, 1760, 1764, 1767, 1768, 1769, 1784, 1779, - 1783, 1794, 1778, 1798, 1788, 1805, 1809, 1791, 1814, 1822, - 1826, 1818, 6594, 1810, 1833, 1824, 1834, 1830, 1825, 1851, - 1839, 1837, 1848, 1852, 1896, 6594, 1853, 6594, 6594, 1850, - 6594, 6594, 1854, 1856, 1880, 1858, 1875, 1892, 1945, 1893, - 1883, 1879, 1887, 1906, 1913, 1910, 1926, 1914, 1933, 1911, - 1948, 1950, 1956, 1953, 1940, 1962, 1961, 1968, 1986, 1969, - 1983, 1985, 1903, 1988, 1996, 2002, 2004, 1976, 2010, 2003, + 1679, 1690, 1701, 1703, 1688, 1710, 1700, 1718, 1705, 1706, + 1707, 1715, 1717, 1716, 1734, 1736, 1737, 1740, 1741, 1738, + 1739, 1759, 1765, 1751, 1761, 1766, 1763, 1775, 1764, 1773, + 1784, 1788, 1796, 1798, 1787, 1802, 1799, 1804, 1810, 1807, + 1814, 1816, 1806, 1813, 1841, 1824, 1829, 6728, 1830, 1746, + 1828, 1854, 1840, 1835, 1864, 1855, 1843, 1846, 1866, 1909, + 6728, 1845, 6728, 6728, 1857, 6728, 6728, 1869, 1877, 1885, + 1896, 1898, 1900, 1958, 1902, 1882, 1888, 1867, 1905, 1911, + 1910, 1919, 1924, 1941, 1947, 1937, 1948, 1954, 1945, 1944, + 1969, 1968, 1972, 1974, 1992, 1979, 1984, 1987, 1990, 2003, - 2005, 2008, 2012, 2022, 2014, 2017, 2015, 2018, 2039, 2042, - 2027, 2033, 6594, 2044, 2046, 2054, 2051, 2045, 2061, 2043, - 2049, 2065, 2063, 2088, 6594, 2092, 2093, 2075, 2095, 2076, - 2078, 2082, 2086, 2101, 2103, 2090, 2113, 2102, 2124, 2125, - 2135, 2116, 2122, 2130, 2150, 2151, 2143, 2129, 2152, 2149, - 2134, 2157, 2165, 2170, 2162, 2174, 2188, 2166, 2167, 2177, - 2190, 2181, 2194, 2183, 6594, 2179, 2191, 6594, 2189, 2199, - 2245, 2210, 2208, 2204, 2215, 2224, 2218, 2236, 2230, 2258, - 2235, 2255, 2237, 2265, 2264, 2260, 2257, 2275, 2267, 2295, - 2298, 156, 2325, 2291, 2305, 2294, 2297, 2311, 2314, 2307, + 1922, 2007, 1983, 2018, 2013, 2017, 2014, 2019, 2006, 2021, + 2029, 2028, 2031, 2033, 2030, 2057, 2040, 6728, 2052, 2053, + 2063, 2065, 2050, 2067, 2056, 2054, 2069, 2048, 2098, 6728, + 2083, 2076, 2081, 2099, 2086, 2091, 2092, 2095, 2097, 2112, + 2103, 2108, 2123, 2125, 2126, 2138, 2120, 2129, 2131, 2128, + 2141, 2151, 2153, 2143, 2154, 2155, 2142, 2172, 2156, 2176, + 2159, 2178, 2180, 2165, 2194, 2184, 2195, 2181, 2193, 2190, + 6728, 2186, 2200, 6728, 2199, 2204, 2250, 2215, 2229, 2220, + 2205, 2236, 2223, 2243, 2231, 2249, 2237, 2264, 2254, 2274, + 2278, 2270, 2273, 2276, 2281, 2297, 2285, 156, 2324, 2292, - 2313, 2301, 2329, 2323, 2339, 6594, 2318, 2346, 2336, 2352, - 2334, 2354, 2345, 2353, 2358, 2341, 2374, 2368, 2369, 2378, - 2370, 2373, 2379, 2384, 2389, 2407, 6594, 2394, 2400, 2385, - 2409, 2413, 2417, 2423, 2420, 2430, 2412, 2425, 6594, 2416, - 2442, 2459, 2445, 2427, 2444, 2446, 2458, 2447, 2473, 2456, - 2457, 2465, 2466, 2474, 2475, 2469, 6594, 2472, 2494, 2489, - 2498, 2502, 2496, 2509, 2497, 2499, 2493, 2504, 2524, 2522, - 2523, 6594, 2516, 2529, 2519, 2521, 2540, 2552, 2538, 2557, - 2558, 2544, 2550, 2554, 121, 2551, 2559, 2555, 2545, 6594, - 2556, 68, 2573, 2561, 2572, 2578, 2599, 2593, 2602, 2601, + 2302, 2295, 2301, 2314, 2321, 2310, 2306, 2308, 2319, 2339, + 2340, 6728, 2328, 2346, 2337, 2345, 2365, 2357, 2342, 2354, + 2359, 2364, 2379, 2366, 2377, 2373, 2367, 2383, 2381, 2389, + 2390, 2384, 6728, 2395, 2393, 2400, 2388, 2408, 2414, 2416, + 2420, 2430, 2437, 2425, 6728, 2417, 2442, 2449, 2448, 2440, + 2435, 2444, 2439, 2441, 2460, 2452, 2465, 2467, 2458, 2478, + 2479, 2477, 6728, 2485, 2480, 2487, 2495, 2494, 2490, 2499, + 2497, 2500, 2505, 2518, 2514, 2523, 2529, 6728, 2520, 2510, + 2522, 2521, 2524, 2548, 2549, 2542, 2554, 2553, 2543, 2550, + 2555, 121, 2556, 2563, 2552, 2560, 6728, 2569, 68, 2578, - 2594, 2595, 2605, 2596, 2588, 2617, 2603, 2620, 2613, 2627, - 2625, 2636, 2626, 2645, 6594, 2647, 2644, 2651, 2653, 2652, - 2638, 2672, 2657, 2668, 2685, 2673, 6594, 2659, 2689, 2688, - 2683, 2677, 2686, 2695, 2691, 2707, 2684, 2709, 2715, 2716, - 2713, 2717, 2729, 6594, 2712, 2732, 2739, 2725, 2730, 2743, - 2768, 2742, 2753, 2758, 2748, 2794, 2764, 2769, 2714, 2782, - 2774, 2784, 2787, 2795, 2788, 2798, 2814, 2819, 2821, 2763, - 2833, 2836, 2827, 2834, 2857, 2841, 164, 2826, 6594, 2843, - 2840, 2831, 2863, 2883, 2865, 2876, 2861, 2878, 2867, 2882, - 2897, 2892, 2898, 2870, 2891, 2812, 2900, 2917, 6594, 2918, + 2580, 2573, 2583, 2602, 2598, 2604, 2608, 2597, 2600, 2612, + 2594, 2599, 2616, 2619, 2628, 2632, 2635, 2624, 2631, 2633, + 2651, 6728, 2662, 2652, 2641, 2658, 2668, 2655, 2677, 2661, + 2682, 2676, 2683, 6728, 2687, 2692, 2697, 2690, 2688, 2703, + 2704, 2700, 2716, 2699, 2719, 2715, 2725, 2724, 2729, 2727, + 6728, 2730, 2739, 2733, 2738, 2745, 2743, 2774, 2754, 2761, + 2765, 2782, 2806, 2766, 2777, 2764, 2789, 2791, 2785, 2803, + 2817, 2823, 2800, 2827, 2821, 2818, 2810, 2804, 2812, 2835, + 2830, 2859, 2842, 164, 2847, 6728, 2856, 2849, 2853, 2857, + 2894, 2851, 2863, 2869, 2874, 2883, 2876, 2891, 2898, 2893, - 2924, 2907, 2920, 2910, 2931, 2927, 2912, 2935, 2941, 2944, - 2928, 2945, 2939, 2946, 2959, 2962, 2957, 6594, 2862, 2951, - 2947, 2980, 2972, 2963, 2974, 2983, 2967, 2973, 2975, 3000, - 2991, 2986, 2992, 2989, 2997, 3016, 3001, 3009, 3008, 3018, - 3022, 3014, 3024, 6594, 3020, 3057, 3031, 3038, 3041, 3044, - 3064, 3052, 3049, 3065, 3066, 3067, 3056, 3061, 3077, 3080, - 3082, 3081, 6594, 3094, 3088, 3084, 3104, 3096, 3102, 3105, - 3099, 3108, 3112, 3129, 3123, 3115, 3135, 3133, 3132, 3128, - 3147, 3158, 3159, 3156, 3163, 6594, 3166, 3165, 3161, 3153, - 3167, 3162, 3175, 3172, 3183, 3179, 3190, 3191, 3188, 3216, + 2887, 2908, 2916, 2902, 2919, 6728, 2920, 2921, 2903, 2927, + 2925, 2928, 2931, 2930, 2933, 2939, 2937, 2948, 2957, 2960, + 2940, 2943, 2967, 2964, 2963, 6728, 2979, 2982, 2975, 2984, + 2972, 2966, 2986, 2995, 2990, 2994, 2978, 3009, 3005, 2996, + 3003, 3004, 3002, 3026, 3013, 3023, 3017, 3029, 3038, 3028, + 3044, 6728, 3039, 3064, 3054, 3059, 3043, 3053, 3074, 3088, + 3070, 3073, 3078, 3075, 3071, 3084, 3081, 3086, 3105, 3094, + 3097, 6728, 3114, 3108, 3106, 3115, 3122, 3113, 3123, 3124, + 3141, 3140, 3151, 3130, 3149, 3159, 3154, 3155, 3145, 3157, + 3164, 3176, 3178, 3189, 6728, 3177, 3188, 3171, 3181, 3183, - 3224, 3193, 3202, 3204, 3206, 3217, 3200, 3209, 3229, 3242, - 3219, 3220, 3222, 3240, 3231, 3233, 3246, 3256, 3260, 3252, - 3270, 3266, 3272, 3262, 3265, 3267, 3294, 6594, 3258, 3279, - 3277, 3303, 3305, 3306, 3291, 3297, 3292, 3287, 3316, 6594, - 3299, 6594, 3320, 3327, 3334, 6594, 3331, 6594, 3341, 3329, - 6594, 3343, 3347, 3335, 3324, 3339, 3352, 3344, 3360, 3361, - 3358, 3362, 3342, 3356, 3377, 3374, 3390, 6594, 3382, 3379, - 3384, 3399, 3391, 3383, 3387, 3404, 3410, 3392, 3414, 3423, - 3426, 3409, 3437, 6594, 3419, 3435, 3425, 3432, 6594, 3421, - 3446, 3448, 3436, 3442, 3455, 3450, 3456, 3459, 3484, 3466, + 3185, 3187, 3201, 3191, 3205, 3204, 3206, 3203, 3239, 3242, + 3221, 3216, 3225, 3226, 3228, 3224, 3227, 3251, 3261, 3240, + 3255, 3256, 3260, 3249, 3237, 3265, 3269, 3278, 3277, 3291, + 3288, 3290, 3282, 3301, 3285, 3317, 6728, 3304, 3284, 3299, + 3308, 3325, 3326, 3312, 3315, 3314, 3343, 3345, 6728, 3331, + 6728, 3342, 3353, 3348, 6728, 3355, 6728, 3362, 3350, 6728, + 3361, 3367, 3356, 3340, 3372, 3370, 3374, 3363, 3385, 3382, + 3376, 3401, 3388, 3393, 3403, 3389, 3409, 6728, 3417, 3400, + 3405, 3420, 3428, 3422, 3423, 3429, 3434, 3431, 3450, 3435, + 3427, 3437, 3458, 6728, 3445, 3463, 3449, 3465, 6728, 3456, - 3462, 3461, 3486, 3471, 3477, 3497, 3498, 3482, 3489, 3483, - 3506, 3507, 3510, 3492, 3516, 3520, 3517, 3513, 3518, 3526, - 3514, 3536, 3539, 3541, 3537, 3532, 3540, 3542, 3549, 6594, - 3557, 3555, 3566, 3561, 3559, 3558, 3567, 3577, 3581, 3565, - 3589, 3594, 3584, 6594, 3599, 6594, 3585, 3605, 3609, 3612, - 3601, 3608, 3618, 3616, 3629, 3641, 3622, 3643, 3624, 3635, - 3644, 3636, 3645, 3649, 3652, 6594, 3642, 3656, 3672, 3662, - 3676, 3661, 3689, 3686, 3669, 3702, 6594, 3711, 3691, 3707, - 3713, 3705, 3716, 3714, 6594, 3699, 3726, 3715, 3721, 6594, - 6594, 3708, 3725, 3731, 3732, 3737, 3754, 3745, 3747, 6594, + 3472, 3474, 3467, 3464, 3478, 3484, 3488, 3485, 3476, 3507, + 3479, 3499, 3508, 3514, 3502, 3515, 3526, 3521, 3512, 3509, + 3523, 3537, 3533, 3552, 3535, 3546, 3556, 3554, 3545, 3541, + 3547, 3555, 3557, 3564, 3553, 3580, 3572, 3575, 3573, 3583, + 6728, 3589, 3581, 3600, 3596, 3591, 3598, 3593, 3603, 3602, + 3619, 3608, 3628, 3620, 6728, 3630, 6728, 3616, 3626, 3649, + 3648, 3633, 3653, 3638, 3647, 3643, 3657, 3664, 3582, 3659, + 3667, 3675, 3672, 3668, 3676, 3685, 6728, 3679, 3680, 3700, + 3689, 3699, 3706, 3719, 3709, 3695, 3742, 6728, 3728, 3712, + 3729, 3746, 3738, 3749, 3744, 6728, 3731, 3754, 3739, 3759, - 3739, 3742, 3759, 3768, 3770, 3771, 3758, 3755, 6594, 3764, - 3780, 3782, 3777, 3781, 3787, 3791, 3792, 3806, 3801, 3797, - 3811, 3816, 3818, 3822, 6594, 3820, 3823, 3827, 3819, 3828, - 3809, 3838, 3835, 3843, 3836, 3842, 3852, 3856, 3862, 3863, - 3846, 3859, 3875, 3881, 3876, 3865, 3880, 3877, 3886, 3882, - 3889, 3895, 3892, 3919, 3902, 6594, 3920, 3899, 3923, 3903, - 3918, 3925, 3930, 3939, 3948, 3916, 3922, 3943, 3944, 6594, - 3956, 3927, 3951, 3954, 3957, 3978, 3950, 3970, 3955, 3974, - 3969, 3984, 3973, 3980, 3997, 3979, 6594, 6594, 3999, 3983, - 4009, 4000, 4006, 4005, 3992, 4020, 4011, 4007, 6594, 4025, + 6728, 6728, 3745, 3755, 3740, 3756, 3765, 3772, 3780, 3771, + 3770, 6728, 3793, 3776, 3790, 3795, 3797, 3799, 3801, 3782, + 6728, 3791, 3808, 3811, 3809, 3807, 3818, 3820, 3821, 3845, + 3832, 3824, 3843, 3850, 3851, 3853, 6728, 3855, 3847, 3858, + 3852, 3859, 3862, 3870, 3871, 3857, 3876, 3868, 3887, 3889, + 3884, 3900, 3897, 3888, 3895, 3904, 3912, 3909, 3915, 3898, + 3913, 3921, 3929, 3917, 3943, 3945, 3952, 3947, 6728, 3956, + 3935, 3957, 3933, 3951, 3955, 3962, 3964, 3974, 3972, 3975, + 3969, 3977, 6728, 3971, 3980, 3998, 3999, 3990, 4008, 4002, + 3989, 3985, 4018, 4004, 4022, 4014, 4017, 4027, 4040, 6728, - 4033, 4019, 4036, 4049, 4054, 4051, 4048, 4046, 4038, 4040, - 4044, 4065, 4061, 4063, 4071, 4069, 4073, 6594, 4075, 4076, - 6594, 4078, 4083, 4095, 4098, 4108, 4115, 4109, 4092, 4103, - 4112, 4120, 4123, 4138, 4134, 4119, 4125, 4146, 6594, 4136, - 4139, 4142, 4124, 4160, 4135, 4161, 4155, 6594, 4165, 4170, - 4174, 4177, 4158, 4184, 4180, 4185, 4183, 4182, 6594, 4188, - 6594, 4196, 4194, 6594, 4202, 4207, 4200, 4213, 4198, 4223, - 4208, 4204, 4227, 4220, 4218, 4235, 4243, 4247, 4230, 6594, - 4255, 4234, 4249, 4250, 6594, 4253, 6594, 4257, 6594, 4245, - 4254, 4274, 4261, 4288, 4290, 4291, 4285, 6594, 4295, 4276, + 6728, 4033, 4025, 4043, 4032, 4041, 4044, 4036, 4050, 4038, + 4056, 6728, 4071, 4061, 4059, 4074, 4063, 4087, 4084, 4080, + 4083, 4073, 4075, 4097, 4101, 4078, 4089, 4112, 4102, 4114, + 6728, 4103, 4110, 6728, 4108, 4128, 4120, 4124, 4138, 4146, + 4143, 4129, 4144, 4147, 4151, 4148, 4168, 4169, 4171, 4153, + 4160, 4174, 6728, 4164, 4177, 4170, 4161, 4188, 4178, 4195, + 4180, 6728, 4190, 4201, 4210, 4211, 4194, 4217, 4212, 4219, + 4220, 4207, 6728, 4225, 6728, 4228, 4221, 6728, 4223, 4237, + 4227, 4236, 4247, 4260, 4261, 4240, 4248, 4262, 4251, 4253, + 4273, 4274, 4275, 4267, 6728, 4285, 4264, 4294, 4296, 6728, - 4297, 4299, 4283, 4294, 4301, 4315, 4310, 4317, 4324, 6594, - 4287, 4326, 4339, 4323, 4325, 4344, 4350, 4329, 6594, 4353, - 4346, 4342, 4356, 4357, 6594, 4369, 4365, 6594, 4372, 4362, - 4371, 4374, 4388, 4376, 4395, 4375, 4384, 4412, 4405, 4396, - 4406, 6594, 4399, 4402, 4419, 4420, 4413, 4415, 4417, 4425, - 4432, 4426, 4448, 4450, 4454, 4456, 4443, 4460, 4459, 4455, - 6594, 4469, 4475, 6594, 4471, 4452, 4470, 4473, 6594, 4486, - 6594, 4497, 4491, 4483, 4495, 4509, 4511, 4512, 4498, 4510, - 4516, 4513, 4528, 4519, 4522, 6594, 6594, 4529, 4544, 4525, - 4550, 4556, 4539, 4540, 4565, 4563, 4562, 4569, 6594, 4560, + 4284, 6728, 4291, 6728, 4295, 4300, 4290, 4298, 4318, 4324, + 4316, 4312, 6728, 4321, 4309, 4330, 4335, 4333, 4337, 4338, + 4340, 4342, 4346, 4353, 6728, 4343, 4362, 4366, 4357, 4358, + 4379, 4386, 4367, 6728, 4392, 4381, 4380, 4395, 4389, 6728, + 4394, 4402, 6728, 4401, 4411, 4406, 4407, 4418, 4421, 4430, + 4419, 4416, 4422, 4439, 4427, 4433, 6728, 4431, 4438, 4451, + 4454, 4446, 4449, 4475, 4467, 4478, 4462, 4482, 4484, 4481, + 4489, 4465, 4487, 4488, 4492, 6728, 4495, 4498, 6728, 4508, + 4506, 4505, 4512, 6728, 4530, 6728, 4531, 4511, 4514, 4515, + 4535, 4543, 4538, 4545, 4527, 4548, 4554, 4553, 4582, 4560, - 4553, 4571, 6594, 4554, 4577, 4576, 4578, 4583, 4589, 4592, - 4594, 4609, 4596, 4612, 4598, 4595, 6594, 4610, 4604, 4606, - 4623, 4622, 4620, 4625, 6594, 4633, 4618, 4650, 4645, 4641, - 4649, 4660, 4663, 4664, 4651, 4652, 4670, 4672, 4667, 4669, - 6594, 4678, 4675, 4680, 4691, 4686, 4704, 4687, 4709, 4694, - 4715, 4716, 4705, 4698, 6594, 4718, 4720, 4707, 4724, 4710, - 4729, 4737, 4747, 4738, 4722, 4739, 4733, 4757, 6594, 4749, - 4750, 4743, 4755, 4761, 4753, 4771, 4767, 4776, 4765, 4777, - 4780, 4793, 6594, 4785, 4796, 4781, 4798, 4788, 4808, 4812, - 4804, 4818, 4820, 4821, 4823, 4807, 4822, 6594, 4831, 6594, + 4558, 6728, 6728, 4569, 4587, 4574, 4584, 4589, 4579, 4576, + 4565, 4592, 4598, 4595, 4604, 6728, 4603, 4606, 4608, 6728, + 4611, 4615, 4605, 4622, 4618, 4625, 4630, 4641, 4640, 4633, + 4649, 4632, 4642, 6728, 4647, 4655, 4638, 4653, 4656, 4667, + 4663, 6728, 4671, 4687, 4688, 4682, 4683, 4689, 4699, 4692, + 4696, 4693, 4690, 4706, 4716, 4712, 4726, 6728, 4727, 4717, + 4718, 4709, 4740, 4741, 4723, 4746, 4729, 4749, 4751, 4743, + 4744, 6728, 4755, 4761, 4753, 4762, 4748, 4771, 4776, 4780, + 4783, 4767, 4770, 4773, 4791, 6728, 4775, 4778, 4794, 4807, + 4814, 4797, 4815, 4800, 4810, 4799, 4828, 4821, 4831, 6728, - 4832, 4842, 4847, 4854, 4840, 6594, 4846, 4856, 6594, 4859, - 4850, 4857, 4864, 6594, 4877, 4870, 4874, 4873, 4852, 6594, - 4895, 4891, 4910, 4911, 4908, 4899, 4914, 4897, 4902, 4898, - 4918, 6594, 4923, 4925, 4920, 4926, 4912, 4929, 4934, 4947, - 4937, 4955, 4935, 4959, 4945, 6594, 4950, 4962, 4973, 4961, - 4968, 6594, 6594, 4971, 4978, 4977, 4975, 4982, 6594, 4987, - 4976, 4996, 4999, 5002, 6594, 6594, 5013, 6594, 4997, 6594, - 6594, 5012, 5014, 5016, 6594, 5020, 6594, 5026, 5021, 5009, - 5005, 5028, 6594, 5018, 5038, 5030, 6594, 5042, 5036, 5040, - 5041, 6594, 5034, 6594, 5061, 5059, 5065, 5064, 5057, 5060, + 4823, 4827, 4824, 4826, 4819, 4856, 4858, 4850, 4855, 4859, + 4860, 4862, 4866, 4875, 4870, 6728, 4852, 6728, 4885, 4877, + 4886, 4899, 4889, 6728, 4888, 4897, 6728, 4898, 4901, 4904, + 4902, 6728, 4915, 4927, 4920, 4922, 4923, 6728, 4939, 4945, + 4938, 4925, 4956, 4953, 4941, 4957, 4950, 4946, 4944, 4968, + 6728, 4970, 4961, 4976, 4973, 4959, 4972, 4967, 4989, 4982, + 4999, 5003, 5001, 4994, 6728, 4995, 5005, 5018, 5006, 5013, + 6728, 6728, 5009, 5016, 5021, 5020, 5026, 6728, 5031, 5030, + 5037, 5052, 5047, 6728, 6728, 5055, 6728, 5041, 6728, 6728, + 5058, 5060, 5061, 6728, 5066, 6728, 5072, 5068, 5054, 5053, - 5067, 5073, 5075, 5076, 5068, 5063, 5078, 5084, 5092, 5102, - 5098, 5107, 5093, 5114, 5106, 5090, 5101, 5105, 5100, 5108, - 5125, 5129, 5128, 5132, 5134, 5141, 5133, 5145, 5153, 5162, - 5163, 5165, 6594, 6594, 5149, 5159, 5156, 6594, 5168, 5151, - 5160, 5171, 5190, 5180, 5183, 5178, 6594, 5203, 5195, 5193, - 5205, 5198, 5196, 5206, 5192, 5202, 5216, 5234, 5241, 5219, - 5227, 5225, 5240, 5229, 5230, 5248, 5256, 5247, 5257, 5255, - 6594, 5243, 6594, 5251, 5246, 5269, 6594, 6594, 5270, 5276, - 5265, 5280, 5273, 5281, 5294, 6594, 5284, 5297, 5302, 5292, - 6594, 5304, 6594, 5309, 5293, 5310, 5308, 5314, 6594, 6594, + 5073, 6728, 5079, 5077, 5084, 6728, 5082, 5076, 5083, 5092, + 6728, 5094, 6728, 5111, 5108, 5109, 5113, 5103, 5106, 5118, + 5122, 5124, 5126, 5119, 5125, 5128, 5136, 5142, 5130, 5147, + 5140, 5156, 5145, 5162, 5157, 5150, 5151, 5155, 5167, 5182, + 5172, 5170, 5183, 5158, 5181, 5187, 5188, 5200, 5206, 5212, + 5213, 5215, 6728, 6728, 5218, 5203, 5209, 5207, 6728, 5217, + 5223, 5227, 5231, 5243, 5235, 5238, 5258, 6728, 5257, 5254, + 5242, 5264, 5246, 5248, 5262, 5276, 5275, 5272, 5274, 5240, + 5277, 5281, 5278, 5301, 5289, 5290, 5307, 5298, 5311, 5313, + 5314, 6728, 5299, 6728, 5320, 5323, 5325, 6728, 6728, 5326, - 6594, 5315, 5311, 5317, 5318, 5329, 5332, 5342, 5331, 5340, - 6594, 5336, 5344, 5357, 5337, 5353, 5355, 5358, 5361, 5373, - 5367, 5369, 5368, 5376, 5386, 5387, 6594, 6594, 5377, 5406, - 5393, 5397, 5396, 5401, 5404, 5403, 5392, 5408, 5410, 5399, - 6594, 5418, 5417, 5423, 5427, 5437, 5438, 5450, 5443, 6594, - 6594, 5434, 5435, 5439, 5456, 5444, 5448, 5445, 5459, 5462, - 6594, 5461, 6594, 5471, 5465, 5498, 5494, 5487, 5492, 6594, - 5490, 5488, 6594, 5496, 5493, 5489, 6594, 5505, 6594, 6594, - 5502, 6594, 5510, 6594, 5515, 5511, 5509, 5537, 5541, 5542, - 5544, 5545, 5528, 5533, 5553, 5549, 5548, 6594, 6594, 5556, + 5327, 5331, 5333, 5337, 5332, 5345, 6728, 5336, 5357, 5335, + 5352, 6728, 5366, 6728, 5367, 5350, 5368, 5375, 5374, 6728, + 6728, 6728, 5382, 5359, 5372, 5378, 5384, 5376, 5386, 5392, + 5379, 5396, 6728, 5405, 5410, 5416, 5407, 5397, 5426, 5423, + 5424, 5433, 5431, 5434, 5425, 5439, 5438, 5441, 6728, 6728, + 5432, 5443, 5469, 5449, 5450, 5479, 5471, 5473, 5474, 5465, + 5476, 5481, 5477, 6728, 5482, 5488, 5472, 5501, 5509, 5510, + 5494, 5515, 6728, 6728, 5504, 5505, 5507, 5527, 5511, 5520, + 5528, 5533, 5521, 6728, 5534, 6728, 5538, 5535, 5564, 5544, + 5555, 5567, 6728, 5559, 5556, 6728, 5570, 5561, 5562, 6728, - 5527, 5555, 5558, 5538, 5562, 5559, 6594, 6594, 5573, 5581, - 6594, 5567, 5588, 5579, 5582, 5577, 5583, 5585, 5598, 5594, - 5593, 5608, 5606, 5615, 5628, 5620, 5612, 5611, 5619, 5623, - 5621, 5633, 6594, 5637, 5646, 5634, 6594, 5651, 5650, 5662, - 5660, 5658, 6594, 5648, 5669, 5670, 5672, 5656, 5691, 5675, - 5673, 6594, 5690, 5686, 5692, 6594, 5678, 6594, 5694, 6594, - 6594, 5702, 5709, 5705, 6594, 5711, 5719, 6594, 5712, 5715, - 5708, 5721, 5722, 6594, 5730, 5739, 5726, 5734, 5735, 5753, - 5741, 5750, 5738, 5760, 6594, 5745, 5754, 5770, 5761, 5771, - 5767, 5757, 5780, 5781, 5777, 5766, 5778, 5787, 6594, 5795, + 5578, 6728, 6728, 5573, 6728, 5560, 6728, 5583, 5591, 5581, + 5590, 5584, 5597, 5609, 5599, 5612, 5595, 5601, 5621, 5623, + 5625, 6728, 6728, 5632, 5608, 5627, 5626, 5618, 5630, 5637, + 6728, 6728, 5639, 5638, 5648, 6728, 5622, 5652, 5645, 5664, + 5649, 5657, 5654, 5680, 5666, 5675, 5673, 5686, 5696, 5698, + 5689, 5701, 5688, 5691, 5694, 5700, 5702, 6728, 5709, 5728, + 5716, 6728, 5711, 5730, 5739, 5735, 5732, 6728, 5724, 5745, + 5744, 5743, 5738, 5778, 5747, 5754, 6728, 5750, 5767, 5770, + 6728, 5758, 6728, 5772, 6728, 5765, 6728, 5788, 5790, 5780, + 6728, 5795, 5797, 6728, 5796, 5799, 5792, 5787, 5816, 6728, - 5810, 6594, 5790, 6594, 5812, 5797, 5815, 6594, 5818, 5801, - 5800, 5816, 6594, 5824, 5817, 6594, 5807, 5830, 5832, 5827, - 5822, 5834, 5833, 5855, 5861, 5865, 6594, 5857, 5847, 5870, - 5871, 5872, 5858, 6594, 5873, 5874, 5862, 5877, 5892, 5886, - 6594, 5887, 5888, 6594, 5890, 5906, 5898, 5913, 5895, 5916, - 5920, 5919, 6594, 5921, 6594, 6594, 5904, 6594, 5905, 5925, - 6594, 5928, 5915, 5937, 5932, 5935, 5939, 6594, 6594, 5946, - 5950, 5949, 5956, 6594, 5943, 5945, 5962, 5966, 5968, 6594, - 5971, 5955, 5976, 5973, 5970, 5990, 5983, 5994, 6594, 6594, - 5989, 6594, 6011, 6012, 6010, 6594, 6594, 6594, 6015, 6594, + 5761, 5824, 5825, 5804, 5814, 5813, 5831, 5819, 5843, 5817, + 5845, 6728, 5828, 5835, 5849, 5840, 5856, 5857, 5838, 5852, + 5865, 5863, 5859, 5875, 5869, 6728, 5878, 5882, 6728, 5870, + 6728, 5889, 5883, 5896, 6728, 5894, 5884, 5880, 5887, 6728, + 5907, 5905, 6728, 5895, 5913, 5920, 5915, 5909, 5918, 5926, + 5921, 5925, 5936, 5942, 6728, 5945, 5934, 5932, 5949, 5947, + 5960, 5940, 6728, 5966, 5968, 5956, 5965, 5961, 5962, 6728, + 5980, 5963, 6728, 5986, 5989, 5977, 5992, 5996, 5999, 6001, + 5998, 6728, 6008, 6728, 6728, 5993, 6728, 5988, 6013, 6728, + 6011, 6015, 6007, 6022, 6017, 6028, 6728, 6728, 6018, 6041, - 6019, 6026, 6016, 6594, 6022, 6027, 6030, 6594, 6028, 6025, - 6033, 6594, 6038, 6031, 6049, 6051, 6061, 6047, 6058, 6064, - 6071, 6043, 6054, 6052, 6075, 6077, 6065, 6086, 6594, 6594, - 6087, 6594, 6594, 6093, 6094, 6097, 6594, 6090, 6101, 6594, - 6103, 6096, 6104, 6091, 6110, 6594, 6594, 6098, 6109, 6594, - 6119, 6120, 6113, 6124, 6115, 6123, 6128, 6594, 6594, 6594, - 6594, 6594, 6135, 6594, 6594, 6148, 6133, 6131, 6594, 6136, - 6146, 6163, 6154, 6147, 6151, 6160, 6158, 6155, 6168, 6177, - 6180, 6192, 6197, 6199, 6202, 6195, 6196, 6181, 6194, 6207, - 6203, 6211, 6594, 6216, 6594, 6219, 6594, 6212, 6221, 6218, + 6035, 6046, 6042, 6728, 6030, 6044, 6048, 6039, 6055, 6728, + 6057, 6060, 6056, 6066, 6045, 6069, 6077, 6078, 6084, 6728, + 6728, 6080, 6728, 6081, 6097, 6098, 6728, 6728, 6728, 6101, + 6728, 6109, 2275, 6106, 6728, 6114, 6105, 6103, 6728, 6115, + 6111, 6116, 6104, 6728, 6121, 6125, 6148, 6135, 6140, 6136, + 6150, 6144, 6154, 6162, 6133, 6157, 6138, 6163, 6164, 6160, + 6170, 6728, 6728, 6173, 6728, 6728, 6174, 6188, 6192, 6728, + 6184, 6194, 6728, 6198, 6187, 6191, 6204, 6195, 6207, 6728, + 6728, 6190, 6206, 6186, 6215, 6728, 6220, 6229, 6213, 6221, + 6219, 6231, 6225, 6728, 6728, 6728, 6728, 6728, 6242, 6728, - 6223, 6227, 6222, 6232, 6594, 6228, 6248, 6255, 6234, 6243, - 6244, 6246, 6258, 6261, 6262, 6272, 6279, 6275, 6286, 6289, - 6290, 6277, 6282, 6297, 6594, 6288, 6293, 6292, 6306, 6303, - 6309, 6299, 6594, 6320, 6326, 6316, 6318, 6327, 6341, 6339, - 6322, 6345, 6338, 6349, 6359, 6356, 6363, 6355, 6373, 6377, - 6314, 6382, 6384, 6366, 6375, 6376, 6381, 6394, 6594, 6387, - 6393, 6396, 6405, 6409, 6594, 6399, 6408, 6411, 6416, 6428, - 6422, 6594, 6431, 6433, 6432, 6594, 6436, 6594, 6594, 6440, - 6434, 6443, 6446, 6447, 6594, 6594, 6594, 6502, 6509, 6516, - 6523, 6530, 83, 6537, 6544, 6551, 6558, 6565, 6572, 6579, + 6728, 6228, 6240, 6237, 6246, 6728, 6236, 6250, 6265, 6264, + 6273, 6262, 6263, 6267, 6279, 6256, 6283, 6276, 6290, 6280, + 6302, 6299, 6312, 6305, 6314, 6297, 6315, 6322, 6323, 6294, + 6320, 6325, 6330, 6333, 6329, 6728, 6336, 6728, 6340, 6728, + 6728, 6334, 6345, 6346, 6341, 6342, 6350, 6357, 6347, 6728, + 6356, 6367, 6355, 6728, 6374, 6368, 6375, 6377, 6380, 6384, + 6391, 6382, 6386, 6398, 6415, 6411, 6414, 6416, 6417, 6401, + 6429, 6425, 6431, 6728, 6418, 6426, 6432, 6435, 6434, 6436, + 6452, 6439, 6728, 6459, 6445, 6456, 6457, 6460, 6469, 6480, + 6461, 6463, 6490, 6486, 6492, 6498, 6501, 6487, 6496, 6504, - 6586 + 6503, 6507, 6510, 6517, 6520, 6519, 6534, 6521, 6728, 6522, + 6526, 6728, 6536, 6547, 6531, 6537, 6542, 6728, 6555, 6554, + 6557, 6558, 6560, 6564, 6728, 6562, 6575, 6581, 6728, 6585, + 6728, 6728, 6587, 6574, 6577, 6578, 6580, 6728, 6728, 6728, + 6636, 6643, 6650, 6657, 6664, 83, 6671, 6678, 6685, 6692, + 6699, 6706, 6713, 6720 } ; -static yyconst flex_int16_t yy_def[2302] = +static yyconst flex_int16_t yy_def[2355] = { 0, - 2287, 1, 2288, 2288, 2289, 2289, 2290, 2290, 2291, 2291, - 2292, 2292, 2287, 2293, 2287, 2287, 2287, 2287, 2294, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2295, 2287, 2287, 2287, 2295, 2296, 2287, 2287, 2287, - 2296, 2297, 2287, 2287, 2287, 2287, 2297, 2298, 2287, 2287, - 2287, 2298, 2299, 2287, 2300, 2287, 2299, 2299, 2293, 2293, - 2287, 2301, 2294, 2301, 2294, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2340, 1, 2341, 2341, 2342, 2342, 2343, 2343, 2344, 2344, + 2345, 2345, 2340, 2346, 2340, 2340, 2340, 2340, 2347, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2348, 2340, 2340, 2340, 2348, 2349, 2340, 2340, 2340, + 2349, 2350, 2340, 2340, 2340, 2340, 2350, 2351, 2340, 2340, + 2340, 2351, 2352, 2340, 2353, 2340, 2352, 2352, 2346, 2346, + 2340, 2354, 2347, 2354, 2347, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2295, 2295, 2296, 2296, 2297, 2297, 2287, 2298, - 2298, 2299, 2299, 2300, 2300, 2299, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2348, 2348, 2349, 2349, 2350, 2350, 2340, + 2351, 2351, 2352, 2352, 2353, 2353, 2352, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2299, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2352, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2299, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, - 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2352, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, + 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2287, 2299, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, + 2352, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2299, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2287, 2287, 2293, - 2287, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2352, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2340, 2346, 2340, 2340, 2346, 2340, 2340, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2299, 2293, 2293, 2293, 2287, 2293, 2293, 2287, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2352, 2346, 2346, 2346, + 2340, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, - 2293, 2299, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2352, 2346, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, - 2293, 2287, 2293, 2293, 2293, 2287, 2293, 2287, 2293, 2293, - 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2287, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, + 2340, 2346, 2346, 2346, 2340, 2346, 2340, 2346, 2346, 2340, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2340, 2346, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2287, 2293, 2287, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2287, - 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2340, 2346, 2340, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2287, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, + 2340, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, - 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, - 2287, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, - 2293, 2293, 2293, 2293, 2287, 2293, 2287, 2293, 2287, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, + 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2340, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2340, 2346, 2340, 2346, 2346, 2340, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2340, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, - 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2287, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2287, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2287, 2293, - 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2287, 2287, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, + 2346, 2340, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2340, + 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2340, 2346, + 2346, 2346, 2346, 2340, 2346, 2340, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2287, + 2346, 2340, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2340, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, - 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2287, 2293, - 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2287, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, - 2293, 2287, 2287, 2293, 2293, 2293, 2293, 2293, 2287, 2293, - 2293, 2293, 2293, 2293, 2287, 2287, 2293, 2287, 2293, 2287, - 2287, 2293, 2293, 2293, 2287, 2293, 2287, 2293, 2293, 2293, - 2293, 2293, 2287, 2293, 2293, 2293, 2287, 2293, 2293, 2293, - 2293, 2287, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2340, 2346, 2346, + 2346, 2346, 2346, 2340, 2346, 2346, 2340, 2346, 2346, 2346, + 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, + 2340, 2340, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, + 2346, 2346, 2346, 2340, 2340, 2346, 2340, 2346, 2340, 2340, + 2346, 2346, 2346, 2340, 2346, 2340, 2346, 2346, 2346, 2346, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2287, 2287, 2293, 2293, 2293, 2287, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2287, 2293, 2287, 2293, 2293, 2293, 2287, 2287, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, - 2287, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2287, 2287, + 2346, 2340, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, + 2340, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2340, 2340, 2346, 2346, 2346, 2346, 2340, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2340, 2346, 2340, 2346, 2346, 2346, 2340, 2340, 2346, - 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2287, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, - 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2287, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2287, - 2293, 2293, 2287, 2293, 2293, 2293, 2287, 2293, 2287, 2287, - 2293, 2287, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2287, 2293, + 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, + 2346, 2340, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2340, + 2340, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2340, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2340, 2340, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2340, 2346, 2340, 2346, 2346, 2346, 2346, + 2346, 2346, 2340, 2346, 2346, 2340, 2346, 2346, 2346, 2340, - 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2287, 2293, 2293, - 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2287, 2293, 2293, 2293, 2287, 2293, 2293, 2293, - 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2287, 2293, 2293, 2293, 2287, 2293, 2287, 2293, 2287, - 2287, 2293, 2293, 2293, 2287, 2293, 2293, 2287, 2293, 2293, - 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, + 2346, 2340, 2340, 2346, 2340, 2346, 2340, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2340, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2340, 2340, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, + 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, + 2340, 2346, 2340, 2346, 2340, 2346, 2340, 2346, 2346, 2346, + 2340, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2340, - 2293, 2287, 2293, 2287, 2293, 2293, 2293, 2287, 2293, 2293, - 2293, 2293, 2287, 2293, 2293, 2287, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, - 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, - 2287, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2287, 2293, 2287, 2287, 2293, 2287, 2293, 2293, - 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2287, 2293, - 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2287, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2287, - 2293, 2287, 2293, 2293, 2293, 2287, 2287, 2287, 2293, 2287, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2340, 2346, + 2340, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2340, + 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2340, + 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2340, 2346, 2340, 2340, 2346, 2340, 2346, 2346, 2340, + 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2340, 2346, 2346, - 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2287, 2293, 2293, - 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2287, - 2293, 2287, 2287, 2293, 2293, 2293, 2287, 2293, 2293, 2287, - 2293, 2293, 2293, 2293, 2293, 2287, 2287, 2293, 2293, 2287, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2287, 2287, - 2287, 2287, 2293, 2287, 2287, 2293, 2293, 2293, 2287, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2287, 2293, 2287, 2293, 2287, 2293, 2293, 2293, + 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2340, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, + 2340, 2346, 2340, 2346, 2346, 2346, 2340, 2340, 2340, 2346, + 2340, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2340, 2346, + 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2340, 2340, 2346, 2340, 2340, 2346, 2346, 2346, 2340, + 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2340, + 2340, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2340, 2340, 2340, 2340, 2340, 2346, 2340, - 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, - 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, - 2293, 2287, 2293, 2293, 2293, 2287, 2293, 2287, 2287, 2293, - 2293, 2293, 2293, 2293, 2287, 2287, 0, 2287, 2287, 2287, - 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, + 2340, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2340, 2346, 2340, + 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, + 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2287 + 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, + 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, + 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2340, 2346, + 2340, 2340, 2346, 2346, 2346, 2346, 2346, 2340, 2340, 0, + 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, + 2340, 2340, 2340, 2340 } ; -static yyconst flex_uint16_t yy_nxt[6661] = +static yyconst flex_uint16_t yy_nxt[6795] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 14, @@ -1197,732 +1213,748 @@ static yyconst flex_uint16_t yy_nxt[6661] = 39, 40, 14, 14, 14, 14, 43, 44, 45, 43, 44, 45, 48, 49, 48, 49, 50, 99, 50, 53, 54, 55, 56, 69, 18, 53, 54, 55, 56, 70, - 18, 59, 60, 61, 59, 60, 61, 71, 79, 133, - - 133, 72, 101, 46, 99, 135, 46, 143, 135, 51, - 74, 51, 74, 74, 70, 74, 71, 57, 140, 140, - 72, 74, 147, 57, 70, 79, 76, 77, 62, 101, - 922, 62, 15, 16, 17, 64, 65, 66, 15, 16, - 17, 64, 65, 66, 78, 89, 70, 91, 75, 147, - 70, 93, 67, 76, 77, 80, 143, 109, 67, 94, - 70, 92, 81, 70, 828, 90, 82, 115, 70, 83, - 68, 78, 89, 70, 91, 1021, 68, 70, 93, 67, - 70, 70, 80, 100, 109, 67, 94, 146, 92, 81, - 141, 149, 90, 82, 115, 70, 83, 84, 70, 95, - - 143, 85, 96, 70, 86, 70, 87, 88, 139, 97, - 100, 98, 138, 125, 146, 126, 136, 106, 149, 70, - 134, 107, 70, 148, 84, 70, 95, 102, 85, 96, - 127, 86, 150, 87, 88, 103, 97, 108, 98, 70, - 125, 104, 126, 70, 106, 105, 70, 128, 107, 153, - 148, 143, 129, 70, 102, 141, 70, 127, 70, 150, - 70, 116, 103, 130, 108, 117, 139, 131, 104, 155, - 187, 132, 105, 110, 128, 118, 153, 111, 119, 129, - 133, 133, 70, 112, 70, 154, 113, 70, 116, 70, - 130, 161, 117, 114, 131, 70, 155, 187, 132, 70, - - 110, 207, 118, 70, 111, 119, 69, 167, 69, 69, - 112, 69, 154, 113, 160, 138, 70, 69, 161, 70, - 114, 120, 136, 137, 121, 137, 137, 74, 137, 74, - 74, 122, 74, 70, 167, 123, 124, 142, 134, 142, - 142, 160, 142, 70, 69, 70, 69, 69, 120, 69, - 156, 121, 158, 159, 162, 69, 157, 151, 122, 2287, - 164, 70, 123, 124, 74, 145, 74, 74, 176, 74, - 152, 70, 163, 70, 166, 74, 170, 156, 165, 158, - 159, 70, 168, 157, 151, 70, 70, 164, 169, 2287, - 70, 70, 177, 171, 140, 140, 222, 152, 70, 163, - - 70, 166, 75, 170, 2287, 165, 70, 172, 178, 168, - 173, 70, 2287, 2287, 2287, 169, 70, 181, 179, 177, - 171, 182, 183, 174, 175, 70, 184, 186, 70, 185, - 135, 70, 189, 135, 172, 178, 190, 173, 180, 70, - 70, 70, 188, 70, 181, 179, 70, 70, 182, 183, - 174, 175, 70, 184, 186, 191, 185, 192, 193, 189, - 197, 2287, 70, 190, 70, 180, 194, 70, 196, 188, - 195, 198, 2287, 202, 2287, 70, 2287, 199, 70, 203, - 70, 70, 191, 200, 192, 193, 70, 197, 70, 201, - 204, 70, 208, 194, 205, 196, 211, 195, 198, 206, - - 202, 70, 209, 70, 199, 70, 203, 70, 213, 212, - 200, 224, 214, 70, 70, 217, 201, 204, 216, 208, - 70, 205, 210, 211, 219, 218, 206, 70, 70, 209, - 70, 2287, 2287, 215, 70, 213, 212, 70, 224, 214, - 70, 2287, 217, 220, 2287, 216, 70, 221, 2287, 210, - 2287, 219, 218, 137, 225, 137, 137, 228, 137, 142, - 215, 142, 142, 74, 142, 74, 74, 143, 74, 70, - 220, 223, 226, 70, 221, 227, 230, 235, 229, 70, - 70, 225, 231, 70, 228, 70, 233, 70, 232, 2287, - 234, 236, 2287, 2287, 70, 237, 2287, 244, 223, 226, - - 325, 145, 227, 230, 246, 229, 247, 248, 70, 70, - 245, 70, 238, 233, 70, 232, 70, 234, 70, 70, - 249, 255, 237, 70, 244, 251, 70, 250, 70, 70, - 70, 246, 252, 247, 248, 2287, 2287, 245, 70, 238, - 239, 2287, 256, 70, 70, 240, 257, 249, 255, 70, - 241, 2287, 251, 2287, 250, 253, 242, 243, 254, 252, - 2287, 258, 265, 70, 70, 264, 259, 239, 70, 256, - 70, 266, 240, 257, 262, 2287, 70, 241, 260, 263, - 261, 269, 253, 242, 243, 254, 70, 70, 258, 267, - 270, 272, 264, 259, 70, 276, 70, 70, 266, 274, - - 268, 262, 273, 271, 275, 260, 263, 261, 70, 70, - 2287, 277, 278, 70, 280, 70, 2287, 270, 284, 279, - 2287, 70, 276, 70, 70, 70, 70, 268, 282, 273, - 271, 70, 281, 70, 283, 70, 70, 70, 277, 278, - 70, 280, 285, 287, 288, 284, 279, 70, 70, 286, - 70, 290, 291, 289, 70, 282, 292, 70, 297, 281, - 70, 283, 70, 293, 294, 295, 70, 298, 296, 285, - 287, 288, 70, 299, 70, 70, 286, 301, 290, 291, - 289, 300, 305, 70, 302, 297, 303, 70, 70, 70, - 293, 294, 70, 310, 298, 296, 306, 70, 308, 312, - - 309, 70, 70, 311, 301, 70, 313, 314, 300, 304, - 70, 302, 315, 307, 70, 143, 320, 2287, 70, 317, - 310, 70, 70, 306, 319, 308, 316, 309, 70, 70, - 311, 70, 70, 313, 314, 70, 304, 70, 70, 318, - 307, 322, 323, 320, 70, 321, 317, 70, 70, 324, - 326, 319, 327, 316, 328, 333, 2287, 2287, 330, 70, - 329, 332, 331, 334, 337, 70, 318, 70, 322, 323, - 70, 70, 321, 70, 336, 70, 324, 326, 70, 327, - 70, 328, 333, 335, 70, 330, 70, 329, 332, 331, - 70, 337, 338, 339, 340, 70, 70, 342, 2287, 341, - - 347, 70, 343, 70, 344, 2287, 70, 353, 70, 345, - 335, 346, 2287, 348, 70, 349, 70, 367, 2287, 338, - 70, 340, 70, 70, 342, 70, 341, 347, 350, 343, - 70, 344, 351, 70, 352, 355, 345, 70, 346, 70, - 348, 70, 349, 354, 70, 360, 363, 374, 2287, 70, - 70, 365, 366, 361, 364, 350, 70, 356, 368, 351, - 70, 352, 355, 70, 2287, 357, 358, 70, 359, 70, - 354, 362, 360, 363, 70, 70, 70, 70, 365, 366, - 361, 364, 70, 372, 356, 368, 369, 371, 373, 370, - 375, 377, 357, 358, 376, 359, 70, 378, 362, 70, - - 382, 70, 380, 70, 385, 2287, 70, 379, 384, 70, - 372, 381, 70, 369, 371, 373, 370, 375, 377, 70, - 70, 376, 70, 70, 378, 386, 383, 391, 395, 380, - 70, 2287, 70, 70, 379, 384, 70, 387, 381, 389, - 70, 390, 396, 388, 2287, 392, 70, 70, 393, 397, - 394, 400, 386, 383, 391, 395, 70, 401, 70, 70, - 2287, 2287, 2287, 70, 387, 398, 389, 402, 390, 70, - 388, 70, 392, 399, 70, 393, 397, 394, 400, 70, - 70, 403, 405, 414, 401, 415, 413, 417, 418, 421, - 416, 419, 398, 143, 402, 70, 70, 404, 70, 2287, - - 399, 70, 70, 70, 420, 70, 2287, 2287, 403, 405, - 414, 70, 422, 413, 417, 418, 421, 70, 419, 424, - 425, 423, 426, 70, 404, 406, 407, 70, 427, 70, - 2287, 420, 428, 429, 431, 408, 430, 409, 410, 411, - 70, 70, 412, 432, 70, 70, 424, 425, 423, 426, - 70, 434, 406, 407, 70, 427, 2287, 437, 70, 428, - 429, 431, 408, 433, 409, 410, 411, 436, 70, 412, - 432, 435, 443, 70, 438, 439, 70, 441, 70, 70, - 440, 442, 445, 70, 437, 70, 444, 70, 70, 457, - 433, 446, 70, 448, 436, 454, 2287, 449, 435, 443, - - 2287, 453, 70, 70, 441, 70, 447, 440, 442, 445, - 70, 70, 450, 444, 70, 455, 456, 70, 446, 70, - 448, 70, 454, 451, 449, 452, 458, 459, 453, 461, - 70, 468, 70, 447, 70, 460, 2287, 462, 70, 450, - 463, 464, 455, 456, 70, 466, 2287, 465, 70, 467, - 451, 70, 452, 458, 459, 70, 461, 469, 70, 70, - 471, 472, 460, 70, 462, 470, 70, 463, 464, 70, - 473, 70, 466, 475, 465, 70, 467, 476, 474, 70, - 70, 2287, 70, 478, 469, 70, 477, 471, 472, 70, - 479, 2287, 470, 70, 480, 481, 70, 473, 490, 482, - - 475, 70, 484, 70, 476, 474, 483, 488, 70, 70, - 478, 495, 485, 477, 70, 489, 70, 479, 70, 491, - 70, 480, 481, 486, 70, 487, 482, 70, 70, 484, - 70, 492, 70, 483, 488, 493, 494, 70, 496, 485, - 497, 500, 489, 70, 501, 70, 491, 498, 70, 504, - 486, 502, 487, 70, 70, 70, 70, 2287, 492, 506, - 2287, 505, 493, 494, 70, 496, 70, 497, 500, 503, - 499, 501, 70, 70, 507, 70, 504, 515, 502, 70, - 517, 70, 508, 2287, 70, 70, 506, 516, 505, 518, - 70, 70, 520, 521, 2287, 70, 503, 499, 2287, 519, - - 70, 507, 2287, 522, 515, 524, 523, 517, 70, 508, - 509, 525, 526, 2287, 516, 510, 70, 511, 2287, 520, - 521, 70, 527, 70, 536, 512, 519, 70, 513, 70, - 522, 70, 524, 523, 70, 514, 70, 509, 525, 526, - 528, 529, 510, 530, 511, 531, 70, 533, 70, 527, - 532, 537, 512, 535, 534, 513, 70, 2287, 70, 70, - 538, 539, 514, 70, 541, 70, 70, 528, 529, 70, - 530, 540, 531, 542, 533, 70, 143, 532, 537, 543, - 535, 534, 544, 546, 70, 70, 545, 538, 539, 70, - 547, 541, 70, 2287, 548, 549, 551, 550, 540, 552, - - 542, 70, 553, 555, 558, 70, 70, 70, 556, 559, - 70, 557, 560, 545, 70, 70, 554, 547, 70, 70, - 70, 548, 549, 551, 550, 70, 552, 70, 561, 553, - 562, 70, 563, 564, 565, 70, 70, 569, 557, 70, - 566, 2287, 2287, 554, 70, 568, 567, 570, 70, 571, - 574, 2287, 573, 572, 580, 70, 70, 70, 70, 70, - 564, 565, 575, 70, 70, 70, 581, 566, 70, 70, - 70, 2287, 568, 567, 570, 70, 571, 576, 577, 573, - 572, 580, 70, 578, 70, 582, 583, 579, 585, 575, - 70, 586, 70, 581, 70, 584, 587, 589, 588, 2287, - - 2287, 70, 70, 70, 576, 577, 2287, 590, 70, 592, - 578, 593, 582, 583, 579, 585, 70, 70, 586, 600, - 596, 70, 584, 2287, 589, 588, 594, 595, 70, 591, - 70, 70, 597, 70, 590, 598, 592, 70, 593, 601, - 599, 70, 70, 604, 602, 603, 70, 596, 605, 607, - 70, 70, 609, 594, 595, 70, 591, 70, 608, 597, - 70, 606, 598, 610, 611, 70, 601, 599, 70, 70, - 604, 602, 603, 612, 70, 605, 616, 618, 613, 614, - 70, 70, 615, 619, 70, 608, 70, 70, 606, 617, - 610, 611, 621, 70, 626, 70, 70, 70, 620, 622, - - 623, 627, 2287, 70, 618, 70, 614, 70, 70, 615, - 619, 628, 624, 2287, 70, 629, 617, 625, 630, 2287, - 70, 626, 70, 70, 70, 620, 622, 623, 627, 633, - 631, 632, 635, 636, 634, 637, 70, 70, 628, 70, - 70, 70, 629, 70, 70, 630, 641, 70, 2287, 2287, - 644, 70, 646, 640, 638, 70, 633, 631, 632, 635, - 636, 634, 637, 70, 639, 70, 642, 643, 70, 645, - 2287, 648, 70, 647, 70, 70, 70, 644, 70, 646, - 640, 638, 70, 651, 652, 650, 654, 653, 2287, 649, - 2287, 639, 70, 642, 643, 70, 645, 70, 648, 70, - - 647, 655, 657, 70, 659, 661, 70, 70, 70, 656, - 651, 652, 650, 654, 653, 658, 649, 70, 70, 660, - 662, 2287, 70, 70, 664, 663, 665, 143, 655, 657, - 70, 659, 661, 70, 2287, 666, 656, 70, 668, 669, - 671, 670, 658, 667, 70, 2287, 660, 662, 70, 70, - 673, 664, 663, 70, 674, 675, 672, 70, 676, 677, - 2287, 70, 666, 70, 70, 70, 669, 678, 670, 70, - 667, 691, 70, 70, 689, 688, 70, 673, 70, 687, - 686, 674, 675, 672, 680, 679, 677, 70, 692, 70, - 70, 70, 70, 70, 678, 70, 690, 70, 691, 693, - - 2287, 689, 688, 2287, 2287, 2287, 687, 686, 2287, 703, - 701, 680, 679, 681, 70, 692, 702, 682, 70, 70, - 683, 705, 70, 690, 704, 706, 70, 684, 711, 707, - 685, 70, 70, 724, 2287, 70, 703, 701, 2287, 708, - 681, 709, 70, 702, 682, 70, 710, 683, 705, 70, - 70, 704, 70, 70, 684, 711, 707, 685, 694, 695, - 724, 696, 2287, 712, 697, 70, 708, 713, 709, 698, - 714, 716, 70, 710, 2287, 699, 700, 715, 717, 70, - 2287, 2287, 721, 729, 70, 694, 695, 70, 696, 70, - 712, 697, 70, 718, 713, 70, 698, 714, 716, 719, - - 70, 70, 699, 700, 715, 717, 720, 70, 70, 721, - 722, 723, 725, 726, 727, 70, 2287, 730, 731, 2287, - 718, 728, 70, 732, 70, 70, 719, 70, 733, 2287, - 739, 736, 734, 720, 742, 70, 737, 722, 723, 725, - 726, 70, 70, 70, 70, 731, 738, 70, 728, 70, - 732, 70, 735, 70, 70, 733, 70, 70, 736, 734, - 740, 70, 741, 737, 743, 744, 70, 745, 747, 746, - 750, 748, 70, 738, 749, 2287, 2287, 2287, 70, 735, - 751, 70, 70, 70, 70, 70, 752, 740, 70, 741, - 70, 743, 744, 70, 745, 747, 746, 750, 748, 753, - - 70, 749, 70, 754, 70, 757, 756, 751, 758, 760, - 761, 755, 759, 752, 70, 70, 762, 70, 763, 765, - 766, 70, 764, 768, 2287, 70, 753, 70, 772, 70, - 754, 70, 70, 756, 70, 758, 760, 761, 755, 759, - 70, 70, 70, 762, 767, 763, 765, 766, 769, 764, - 768, 770, 70, 771, 773, 70, 774, 775, 776, 777, - 778, 70, 2287, 70, 70, 2287, 781, 782, 70, 70, - 783, 767, 784, 70, 70, 769, 779, 2287, 770, 790, - 771, 773, 70, 774, 780, 785, 777, 778, 70, 70, - 70, 70, 786, 781, 782, 788, 70, 783, 789, 787, - - 2287, 70, 792, 779, 70, 70, 70, 791, 793, 70, - 794, 780, 785, 70, 795, 796, 70, 797, 70, 786, - 70, 798, 70, 806, 807, 789, 787, 70, 70, 143, - 70, 808, 799, 70, 791, 793, 2287, 794, 70, 2287, - 810, 795, 796, 70, 797, 811, 2287, 70, 798, 70, - 806, 807, 809, 812, 70, 2287, 813, 70, 808, 799, - 800, 816, 801, 70, 818, 814, 802, 810, 803, 70, - 815, 817, 811, 804, 70, 70, 70, 2287, 805, 809, - 812, 821, 819, 813, 70, 825, 822, 800, 816, 801, - 823, 818, 820, 802, 70, 803, 70, 70, 817, 70, - - 804, 824, 826, 70, 70, 805, 70, 2287, 821, 819, - 827, 2287, 825, 822, 70, 834, 2287, 823, 2287, 820, - 836, 837, 835, 2287, 838, 846, 2287, 840, 824, 2287, - 70, 839, 842, 70, 70, 844, 70, 70, 829, 841, - 70, 850, 834, 830, 70, 831, 70, 836, 837, 835, - 70, 838, 70, 70, 840, 845, 832, 70, 839, 842, - 843, 847, 70, 833, 70, 829, 841, 848, 70, 855, - 830, 851, 831, 70, 853, 70, 852, 849, 70, 854, - 70, 856, 845, 832, 70, 70, 2287, 843, 847, 857, - 833, 70, 70, 70, 848, 859, 855, 70, 851, 861, - - 858, 853, 860, 852, 849, 863, 854, 70, 70, 70, - 864, 862, 70, 70, 865, 868, 857, 70, 70, 875, - 866, 2287, 859, 70, 70, 2287, 861, 858, 70, 860, - 870, 867, 863, 70, 871, 2287, 869, 864, 862, 70, - 872, 873, 868, 874, 877, 2287, 70, 866, 70, 878, - 876, 70, 70, 883, 879, 70, 70, 870, 867, 70, - 882, 871, 70, 869, 70, 886, 70, 872, 873, 70, - 874, 877, 880, 885, 890, 881, 884, 876, 2287, 887, - 883, 70, 891, 70, 70, 70, 70, 882, 888, 889, - 896, 893, 894, 895, 892, 70, 70, 70, 70, 880, - - 885, 890, 881, 884, 70, 70, 887, 898, 70, 891, - 899, 70, 70, 70, 70, 888, 889, 896, 893, 894, - 895, 892, 897, 900, 902, 905, 901, 903, 70, 906, - 904, 907, 70, 70, 898, 70, 70, 70, 70, 908, - 909, 70, 912, 70, 911, 913, 910, 914, 70, 897, - 900, 902, 905, 901, 903, 70, 906, 904, 70, 915, - 70, 70, 70, 70, 2287, 916, 908, 909, 70, 912, - 918, 911, 913, 910, 917, 919, 920, 70, 921, 70, - 924, 923, 926, 70, 70, 931, 925, 927, 929, 70, - 70, 70, 916, 70, 70, 70, 70, 70, 70, 928, - - 70, 917, 919, 920, 930, 921, 932, 924, 923, 926, - 933, 70, 70, 925, 927, 929, 934, 70, 935, 940, - 936, 937, 938, 939, 2287, 944, 928, 70, 2287, 2287, - 942, 930, 70, 70, 70, 70, 941, 933, 70, 2287, - 70, 70, 70, 934, 70, 935, 940, 936, 937, 938, - 939, 943, 70, 945, 947, 946, 70, 942, 948, 70, - 952, 953, 949, 941, 70, 70, 70, 956, 957, 2287, - 954, 963, 2287, 950, 959, 70, 951, 70, 943, 955, - 945, 947, 946, 70, 70, 948, 70, 952, 953, 949, - 70, 70, 70, 958, 956, 957, 70, 954, 70, 960, - - 950, 959, 961, 951, 962, 964, 955, 70, 967, 965, - 966, 70, 70, 968, 969, 970, 70, 972, 2287, 979, - 958, 999, 70, 70, 70, 70, 960, 70, 70, 961, - 70, 962, 964, 974, 70, 967, 965, 966, 971, 973, - 968, 969, 970, 975, 972, 976, 70, 983, 70, 977, - 978, 70, 70, 70, 70, 70, 70, 982, 980, 981, - 974, 990, 2287, 2287, 70, 971, 973, 984, 70, 70, - 975, 70, 976, 987, 983, 985, 977, 978, 70, 988, - 986, 70, 70, 989, 982, 980, 981, 70, 990, 997, - 998, 1001, 70, 1010, 984, 1000, 2287, 70, 2287, 2287, - - 987, 1005, 70, 70, 1003, 1002, 988, 70, 70, 2287, - 989, 991, 1004, 70, 992, 993, 997, 998, 1001, 994, - 1010, 70, 1000, 70, 1040, 995, 70, 70, 1005, 996, - 1006, 1003, 1002, 70, 70, 1007, 1008, 70, 991, 1004, - 1011, 992, 993, 1012, 1013, 2287, 994, 1009, 2287, 1022, - 1014, 70, 995, 70, 1020, 2287, 996, 1006, 70, 1023, - 70, 1025, 1007, 1008, 2287, 70, 70, 1024, 2287, 1061, - 70, 1013, 70, 70, 1009, 70, 1022, 1014, 1015, 70, - 70, 1020, 70, 1016, 1026, 1017, 1023, 1018, 1025, 1019, - 1027, 1029, 1031, 1033, 1024, 1028, 70, 1030, 1032, 1034, - - 70, 70, 70, 2287, 70, 1015, 70, 1038, 1039, 70, - 1016, 1026, 1017, 1036, 1018, 70, 1019, 70, 1029, 1031, - 1033, 70, 70, 1035, 1030, 1032, 1034, 1041, 1037, 1042, - 70, 70, 1046, 1043, 1038, 1039, 70, 70, 1045, 70, - 1036, 1044, 1047, 1048, 1049, 1050, 70, 1051, 1054, 70, - 1035, 70, 1056, 2287, 1041, 1037, 70, 70, 1062, 70, - 1043, 1053, 1055, 70, 1063, 1045, 70, 70, 1044, 1047, - 70, 1049, 1050, 1052, 70, 1054, 1057, 1058, 70, 1056, - 70, 1059, 1060, 70, 70, 70, 70, 1064, 1053, 1055, - 70, 1063, 2287, 1065, 1066, 1068, 70, 1067, 70, 1069, - - 1052, 70, 70, 1057, 1058, 1070, 70, 1072, 1059, 1060, - 1071, 70, 70, 70, 70, 1077, 1076, 1073, 1075, 70, - 1065, 1066, 70, 1074, 1067, 70, 1069, 1078, 70, 1079, - 70, 70, 1070, 1080, 1084, 1083, 70, 1071, 1082, 70, - 70, 1086, 1077, 1076, 1073, 1075, 1081, 70, 70, 1085, - 1074, 1087, 1090, 70, 1078, 70, 1079, 70, 1091, 70, - 1080, 70, 1083, 70, 1088, 1082, 1097, 1092, 1086, 1089, - 70, 1093, 1099, 1081, 1094, 1098, 1085, 70, 1087, 1090, - 70, 1095, 1100, 70, 1096, 1091, 2287, 1102, 70, 2287, - 1101, 70, 2287, 1097, 1092, 70, 70, 1105, 1093, 1103, - - 70, 1094, 1098, 70, 70, 70, 70, 1104, 1095, 1100, - 1108, 1096, 1106, 1107, 1102, 1110, 70, 1101, 1109, 70, - 70, 70, 1112, 70, 1105, 1116, 1103, 70, 1111, 1113, - 1115, 1117, 1114, 70, 1104, 70, 1120, 1108, 70, 1106, - 1107, 70, 1110, 70, 70, 1109, 1118, 70, 1121, 1112, - 1123, 70, 1116, 1119, 70, 1111, 1113, 1115, 1117, 1114, - 1122, 1124, 70, 1120, 1125, 1126, 1127, 70, 70, 1128, - 2287, 70, 70, 1118, 70, 1121, 1129, 1123, 1130, 2287, - 1119, 1131, 1132, 1133, 2287, 1137, 70, 1122, 1124, 1135, - 2287, 1125, 70, 1134, 1136, 70, 1128, 70, 70, 1139, - - 70, 70, 70, 1129, 70, 70, 70, 1140, 1131, 1132, - 1133, 70, 1137, 2287, 70, 1138, 1135, 1141, 70, 1142, - 1134, 1136, 70, 1143, 1151, 1147, 1139, 70, 1144, 70, - 70, 1145, 70, 1148, 1140, 1149, 1146, 1150, 1152, 70, - 1153, 70, 1138, 70, 1141, 70, 1142, 1154, 70, 1155, - 1156, 1157, 1147, 1158, 2287, 70, 70, 1160, 70, 70, - 1148, 70, 1149, 70, 1150, 1152, 1161, 1153, 70, 1163, - 70, 1159, 70, 1162, 1154, 1164, 1165, 1156, 1157, 70, - 1158, 70, 1166, 1167, 1160, 70, 1170, 1169, 1168, 1177, - 1175, 70, 1171, 1161, 1184, 70, 1163, 70, 1159, 70, - - 1162, 70, 1164, 1165, 70, 70, 70, 1176, 1172, 70, - 1167, 70, 1173, 1170, 1169, 1168, 70, 1175, 70, 1171, - 1178, 1179, 1180, 1181, 1183, 1174, 70, 1182, 1185, 1186, - 70, 70, 2287, 70, 1176, 1172, 70, 1187, 70, 1173, - 1188, 1189, 70, 1190, 70, 70, 2287, 1178, 1179, 1180, - 1181, 1183, 1174, 1191, 1182, 70, 1186, 1192, 1193, 70, - 1194, 1196, 1195, 70, 1187, 1197, 70, 1188, 70, 1198, - 70, 1199, 1200, 70, 70, 1203, 1204, 1201, 70, 1205, - 70, 70, 70, 70, 1192, 1193, 70, 1194, 1196, 1195, - 1202, 70, 1197, 1206, 1209, 70, 1198, 70, 1199, 70, - - 70, 70, 1203, 1204, 1201, 1207, 1205, 1208, 1213, 1210, - 1211, 2287, 1212, 70, 2287, 1214, 70, 1202, 70, 1215, - 1206, 70, 70, 70, 1218, 1216, 70, 1217, 1219, 70, - 70, 70, 1207, 1221, 1208, 1213, 1210, 1211, 70, 1212, - 1220, 1222, 1214, 70, 1223, 1224, 1215, 1225, 70, 70, - 1227, 1218, 1216, 70, 1217, 1219, 1226, 1228, 70, 1229, - 70, 1230, 70, 1234, 70, 70, 1231, 1220, 1222, 1232, - 1233, 70, 1224, 1240, 70, 70, 70, 1227, 2287, 1241, - 1235, 70, 1242, 1226, 1228, 70, 1229, 70, 1230, 70, - 1234, 1236, 1245, 1231, 70, 70, 1232, 1233, 70, 1237, - - 70, 70, 1238, 1243, 1246, 70, 1241, 1235, 1244, 1242, - 70, 1247, 1248, 1251, 1239, 1250, 70, 1253, 1236, 1245, - 1249, 70, 70, 70, 1252, 70, 1237, 1254, 70, 1238, - 1243, 70, 1256, 1255, 1257, 1244, 70, 70, 1247, 1248, - 1261, 1239, 1250, 1258, 1265, 70, 70, 1249, 2287, 70, - 1259, 1252, 70, 70, 1254, 70, 70, 70, 1260, 70, - 1255, 1257, 1262, 1263, 1266, 70, 1264, 1261, 1268, 1270, - 1258, 70, 1267, 2287, 1273, 70, 70, 1259, 70, 70, - 70, 70, 1269, 1272, 1275, 1260, 1274, 1271, 70, 1262, - 1263, 1266, 1279, 1264, 70, 1268, 70, 70, 70, 1267, - - 70, 1273, 1278, 1276, 70, 70, 70, 1277, 1280, 1269, - 1272, 1275, 1283, 1274, 1271, 1281, 70, 1287, 1282, 1279, - 70, 1288, 1286, 70, 70, 1291, 1284, 1289, 70, 1278, - 1276, 1285, 1290, 70, 1277, 1280, 1299, 1293, 70, 1283, - 70, 2287, 1281, 1297, 70, 1282, 1292, 70, 70, 1286, - 1298, 70, 1291, 1284, 1289, 70, 2287, 70, 1285, 1290, - 1294, 70, 1295, 70, 1293, 1296, 1302, 1300, 70, 1301, - 1297, 1303, 2287, 1292, 70, 70, 1305, 1304, 1311, 1306, - 70, 70, 70, 70, 70, 1308, 1307, 1294, 70, 1295, - 1309, 70, 1296, 1302, 1300, 70, 1301, 1310, 1303, 1316, - - 70, 70, 1312, 1305, 1304, 1311, 1306, 1314, 70, 1317, - 1315, 70, 1308, 1307, 1318, 70, 1313, 1309, 1319, 1321, - 1322, 1320, 1323, 1324, 1310, 70, 1316, 2287, 70, 1312, - 70, 1326, 1325, 1327, 1314, 2287, 1329, 1315, 70, 1331, - 1328, 70, 1330, 1313, 70, 1332, 70, 70, 1320, 1323, - 70, 1339, 70, 70, 70, 70, 1333, 2287, 1326, 1325, - 70, 1336, 1334, 1329, 70, 70, 1331, 1328, 1335, 1330, - 70, 70, 1332, 1337, 1340, 1341, 70, 1338, 70, 1345, - 2287, 70, 2287, 1333, 70, 1342, 70, 1343, 1344, 1334, - 1346, 1347, 1348, 70, 70, 1335, 1350, 70, 70, 2287, - - 1337, 1340, 1341, 70, 1338, 1351, 1345, 70, 1349, 70, - 70, 1352, 1342, 1355, 1343, 1344, 70, 1346, 1347, 70, - 70, 70, 1353, 1350, 1354, 1356, 70, 1357, 1359, 1358, - 70, 70, 1351, 1360, 1361, 1349, 70, 1362, 1352, 1364, - 70, 1367, 1366, 1365, 1363, 70, 2287, 2287, 70, 1353, - 70, 1354, 1356, 1371, 1357, 70, 1358, 70, 70, 70, - 1360, 70, 70, 1372, 1362, 1369, 70, 70, 1367, 1366, - 1365, 1363, 1368, 1370, 70, 70, 1373, 70, 1378, 1375, - 1371, 70, 70, 1374, 1376, 70, 1379, 1380, 1381, 1385, - 1372, 70, 1369, 2287, 1387, 70, 1383, 1377, 70, 1368, - - 1370, 70, 70, 1373, 70, 1378, 1375, 1389, 1390, 1382, - 1374, 1376, 1384, 1379, 70, 70, 70, 1392, 1386, 70, - 70, 70, 1388, 1383, 1377, 70, 1391, 1393, 70, 1394, - 1395, 70, 2287, 1397, 70, 1390, 1382, 1398, 70, 1384, - 1396, 70, 70, 1399, 1392, 1386, 1400, 2287, 1405, 1388, - 1407, 2287, 2287, 1411, 1406, 70, 1394, 70, 70, 70, - 1397, 70, 70, 1409, 70, 1412, 70, 1396, 1410, 70, - 1399, 1416, 1401, 1402, 1403, 1405, 1408, 1413, 70, 1404, - 1411, 1406, 70, 70, 1414, 1415, 1419, 70, 1418, 70, - 70, 1425, 1412, 70, 70, 70, 70, 1421, 1416, 1401, - - 1402, 1403, 1417, 1408, 1413, 1422, 1404, 1420, 70, 70, - 1424, 1414, 70, 70, 1423, 1418, 1427, 70, 70, 70, - 1426, 1428, 70, 70, 1421, 1430, 1431, 1429, 2287, 1417, - 1432, 70, 1422, 1433, 1420, 1435, 70, 1424, 70, 70, - 1437, 1423, 1436, 1427, 70, 70, 70, 1426, 70, 1434, - 70, 1438, 1430, 1431, 1429, 1439, 1440, 1432, 70, 70, - 1433, 1441, 1435, 1442, 70, 1443, 2287, 1444, 1447, 1436, - 1445, 1446, 70, 2287, 2287, 70, 1434, 70, 1438, 70, - 1448, 2287, 1439, 70, 1451, 70, 2287, 70, 70, 1453, - 70, 1449, 1443, 70, 1444, 1447, 1452, 1445, 1446, 1458, - - 70, 1450, 70, 1456, 70, 1454, 1455, 1448, 70, 1457, - 70, 1451, 70, 1459, 70, 70, 1453, 70, 1449, 1460, - 1461, 1464, 70, 1452, 2287, 1465, 1458, 1468, 1450, 1466, - 1456, 70, 1454, 1455, 70, 1469, 1457, 70, 1462, 2287, - 1459, 1472, 70, 1463, 1467, 1470, 1460, 70, 70, 1474, - 1471, 70, 1465, 1475, 70, 1477, 1466, 1473, 70, 70, - 1476, 1479, 70, 70, 70, 1462, 1478, 1480, 1482, 1481, - 1463, 1467, 2287, 70, 70, 70, 1474, 70, 70, 1483, - 1484, 70, 1477, 1485, 1473, 70, 1486, 1476, 1479, 1487, - 1488, 1489, 2287, 1478, 70, 2287, 1481, 70, 1490, 70, - - 70, 1492, 1491, 1493, 70, 1494, 1483, 1484, 2287, 70, - 1485, 1495, 1499, 70, 2287, 1501, 70, 1488, 1496, 70, - 1503, 70, 70, 70, 70, 1490, 1497, 70, 1492, 1491, - 1493, 1498, 1494, 70, 1500, 70, 1504, 70, 1495, 70, - 1502, 70, 1501, 70, 2287, 1496, 70, 70, 1505, 1507, - 1506, 1508, 70, 1497, 1510, 2287, 1511, 70, 1498, 70, - 1509, 1500, 70, 1504, 1514, 1517, 70, 1502, 1512, 70, - 1515, 1516, 1519, 70, 70, 1505, 1507, 1506, 1508, 1513, - 1520, 1521, 70, 1511, 70, 1518, 70, 1509, 70, 70, - 1522, 1514, 70, 70, 70, 1512, 70, 1515, 1516, 1519, - - 70, 1523, 2287, 1525, 1524, 1526, 1513, 1520, 1528, 2287, - 1529, 2287, 1518, 70, 1527, 70, 1531, 1522, 1532, 1539, - 1530, 2287, 70, 2287, 70, 1533, 70, 70, 1523, 70, - 70, 1524, 1526, 70, 70, 1528, 70, 1529, 70, 1534, - 70, 1527, 1537, 1531, 1536, 1532, 1539, 1530, 1535, 70, - 1540, 1541, 1533, 1542, 70, 1538, 70, 1543, 2287, 1544, - 1548, 1546, 70, 70, 70, 70, 1534, 1545, 70, 1537, - 1547, 1536, 1549, 1550, 1555, 1535, 1551, 1540, 70, 1553, - 1542, 70, 1538, 70, 1543, 70, 1544, 1548, 1546, 70, - 1552, 1557, 70, 1559, 1545, 70, 70, 1547, 1554, 1549, - - 1550, 70, 1558, 1551, 70, 1561, 1553, 2287, 70, 1556, - 70, 70, 1560, 70, 70, 70, 1562, 1552, 1557, 1563, - 1559, 1565, 1564, 70, 1573, 1554, 1566, 70, 1568, 1558, - 1567, 1569, 1561, 1570, 70, 70, 1556, 2287, 70, 1560, - 1571, 70, 1574, 1562, 70, 70, 1575, 1572, 1565, 1564, - 1576, 70, 70, 1566, 70, 1568, 70, 1567, 70, 70, - 1570, 1577, 2287, 1578, 70, 70, 2287, 1571, 2287, 1574, - 1581, 70, 1583, 1575, 1572, 1579, 1582, 1576, 1580, 1585, - 1584, 2287, 70, 2287, 1589, 2287, 1586, 70, 1577, 70, - 1578, 70, 1587, 70, 70, 70, 1588, 1581, 70, 70, - - 1590, 1591, 1579, 1582, 1592, 1580, 1585, 1584, 70, 70, - 70, 1589, 70, 1586, 70, 1594, 1597, 1593, 1595, 1587, - 1596, 1598, 70, 1588, 1600, 70, 1602, 1590, 1591, 1601, - 70, 1592, 1599, 1603, 70, 1605, 70, 70, 1604, 1607, - 1606, 1609, 1594, 1597, 1593, 1595, 1613, 1596, 70, 70, - 70, 70, 70, 1602, 1608, 70, 1601, 1610, 70, 1599, - 1603, 70, 1614, 1616, 70, 1604, 1607, 70, 70, 1615, - 1617, 1611, 1618, 1613, 1620, 2287, 1622, 2287, 70, 70, - 1619, 1608, 1612, 70, 1610, 1623, 1621, 1624, 2287, 70, - 1616, 1625, 70, 70, 1626, 70, 1615, 1617, 1611, 70, - - 1629, 70, 70, 1622, 70, 1628, 1632, 1619, 70, 1612, - 70, 1627, 1623, 1621, 1624, 70, 70, 70, 1625, 1630, - 1631, 1626, 70, 1634, 2287, 1633, 1637, 1629, 70, 1635, - 1646, 70, 1628, 70, 70, 70, 1636, 70, 1627, 1639, - 2287, 1638, 1640, 70, 1643, 70, 1630, 1631, 70, 70, - 1634, 70, 1633, 1637, 1641, 1642, 1635, 70, 1644, 70, - 1645, 70, 70, 1636, 70, 1647, 1639, 1649, 1638, 1640, - 1648, 1643, 70, 1651, 1650, 1652, 1653, 1655, 1654, 1659, - 70, 1641, 1642, 1656, 70, 1644, 1660, 1645, 70, 70, - 70, 70, 1647, 1657, 1649, 1661, 1658, 1648, 1665, 70, - - 1651, 1650, 70, 70, 1655, 1654, 70, 1662, 70, 70, - 1656, 70, 1663, 1660, 70, 1664, 1666, 70, 1667, 70, - 1657, 1668, 1661, 1658, 1669, 70, 70, 1670, 1671, 1673, - 70, 1672, 1675, 70, 1662, 1674, 1677, 70, 1676, 1663, - 1678, 2287, 1664, 70, 70, 1667, 70, 1679, 70, 70, - 1683, 1669, 1680, 1684, 70, 70, 1673, 70, 1672, 70, - 1681, 70, 1674, 70, 1686, 1676, 1685, 1678, 70, 1687, - 1690, 1691, 70, 1692, 1679, 1682, 70, 70, 70, 1680, - 1684, 1688, 70, 1694, 1693, 1689, 70, 1681, 70, 70, - 1698, 1686, 70, 1685, 70, 1696, 70, 1690, 1691, 1695, - - 70, 1699, 1682, 1697, 70, 2287, 70, 1700, 1688, 1701, - 70, 1693, 1689, 1702, 1713, 70, 70, 1698, 1703, 70, - 70, 1705, 1696, 1704, 70, 1706, 1695, 70, 1699, 1707, - 1697, 1708, 70, 2287, 1700, 70, 1701, 70, 1714, 1709, - 1702, 1710, 1711, 70, 2287, 1703, 70, 70, 1705, 1712, - 1704, 70, 1706, 1716, 1718, 1717, 1707, 70, 1708, 70, - 70, 70, 70, 1715, 1733, 1714, 1709, 1719, 1710, 1711, - 70, 70, 1721, 1723, 1722, 1720, 1712, 1724, 1726, 70, - 1716, 70, 1717, 1725, 1727, 70, 70, 1730, 1728, 70, - 1715, 70, 1729, 70, 1719, 70, 70, 1732, 70, 1721, - - 1723, 1722, 1720, 70, 1724, 1726, 1731, 1734, 1735, 70, - 1725, 1727, 70, 70, 1730, 1728, 70, 1736, 1737, 1729, - 1738, 1741, 2287, 2287, 1732, 1739, 2287, 1740, 1742, 1743, - 70, 1744, 1747, 1731, 70, 1735, 70, 70, 70, 1745, - 1746, 70, 1755, 1748, 1749, 2287, 2287, 70, 1741, 70, - 70, 70, 1739, 70, 1740, 1742, 1743, 70, 1744, 70, - 1751, 1750, 70, 1752, 70, 70, 1745, 1746, 70, 1753, - 1748, 1749, 1754, 70, 70, 1757, 70, 1756, 1758, 1759, - 1760, 1761, 1762, 1769, 70, 2287, 70, 1751, 1750, 70, - 1752, 1764, 1765, 2287, 70, 1767, 1753, 1763, 70, 1754, - - 70, 70, 1757, 1768, 1756, 1758, 1759, 70, 1761, 1762, - 70, 1771, 70, 1766, 70, 70, 70, 70, 1764, 1765, - 1770, 70, 1767, 1772, 1763, 1773, 70, 1774, 1777, 1775, - 1768, 1776, 1778, 1779, 1780, 70, 70, 1781, 70, 1782, - 1766, 70, 1786, 1788, 70, 1783, 1791, 1770, 70, 1784, - 1772, 70, 70, 70, 1774, 70, 1775, 70, 1776, 70, - 70, 1780, 1785, 1787, 1781, 70, 1782, 70, 1790, 70, - 1789, 1793, 1783, 70, 1792, 70, 1784, 70, 1795, 70, - 70, 70, 1794, 1796, 1798, 1799, 1797, 1800, 1801, 1785, - 1787, 1804, 1802, 1803, 2287, 1790, 70, 1789, 70, 70, - - 70, 1792, 70, 70, 70, 1795, 70, 70, 1805, 1794, - 1796, 1798, 70, 1797, 70, 70, 1806, 70, 1804, 1802, - 1803, 1807, 1808, 70, 1809, 1810, 1811, 1812, 1813, 70, - 1815, 70, 70, 1814, 1817, 1805, 1816, 70, 1818, 70, - 70, 70, 2287, 1806, 70, 70, 70, 70, 1807, 1808, - 1819, 1809, 1810, 70, 1812, 1813, 1823, 1815, 1820, 1824, - 1814, 1817, 1825, 1816, 70, 1818, 1821, 70, 70, 1822, - 1826, 70, 70, 70, 1827, 1828, 2287, 1819, 1829, 1830, - 70, 1834, 1831, 1823, 70, 1820, 1824, 1832, 70, 1825, - 70, 1840, 70, 1821, 1835, 70, 1822, 1826, 70, 70, - - 1833, 70, 70, 1836, 70, 1829, 1830, 70, 1834, 1831, - 70, 1837, 1838, 1839, 1832, 1841, 1842, 70, 1840, 70, - 1848, 1835, 70, 1843, 1844, 1845, 1846, 1833, 1850, 70, - 1836, 70, 70, 1849, 70, 70, 1847, 70, 1837, 1838, - 1839, 70, 70, 1842, 70, 70, 1851, 1848, 1852, 1853, - 1843, 1844, 1845, 1846, 1854, 70, 1855, 1856, 70, 1861, - 1849, 1857, 1858, 1847, 70, 1859, 70, 1863, 70, 70, - 1860, 1862, 1865, 70, 1864, 2287, 1853, 1870, 1866, 70, - 70, 1854, 70, 1855, 1856, 70, 70, 70, 1857, 1858, - 70, 1869, 1859, 1873, 70, 70, 70, 1860, 1862, 1865, - - 1867, 1864, 1868, 1872, 70, 1866, 2287, 1871, 70, 70, - 1874, 1875, 70, 1876, 1877, 70, 1879, 1878, 1869, 70, - 70, 1880, 1882, 70, 1881, 1883, 1884, 1867, 1885, 1868, - 1872, 70, 70, 70, 1871, 2287, 70, 1874, 1875, 1888, - 1876, 70, 1887, 70, 1878, 1886, 1889, 70, 70, 70, - 70, 1881, 1883, 70, 70, 1885, 70, 70, 1890, 1891, - 1893, 1895, 1892, 1894, 1897, 1898, 1888, 1899, 70, 1887, - 70, 70, 1886, 1889, 1896, 70, 70, 1900, 1901, 70, - 1902, 70, 1904, 70, 1903, 1890, 1891, 1893, 1895, 1892, - 1894, 1897, 70, 1906, 70, 1905, 70, 70, 1907, 1908, - - 70, 1896, 1909, 1914, 1900, 1901, 70, 70, 70, 1904, - 1912, 1903, 70, 1910, 1913, 70, 70, 1915, 1911, 1918, - 1906, 1916, 1905, 1921, 1917, 70, 70, 1920, 1919, 1909, - 2287, 70, 70, 1922, 1923, 70, 70, 1912, 70, 2287, - 70, 1913, 70, 70, 1915, 70, 1918, 70, 1916, 70, - 1921, 1917, 1925, 1924, 1920, 1919, 70, 70, 1926, 1927, - 1922, 1923, 70, 1928, 1929, 1930, 70, 1931, 1933, 1935, - 1932, 1937, 1936, 70, 70, 1934, 70, 70, 70, 1925, - 1924, 1941, 70, 70, 70, 1926, 1927, 70, 1939, 70, - 1928, 1929, 1930, 1938, 1931, 70, 1935, 1932, 70, 1936, - - 70, 70, 1934, 1940, 70, 1942, 1943, 1944, 1941, 1945, - 70, 1946, 1948, 1947, 1952, 1939, 1950, 2287, 1951, 1949, - 1938, 1956, 2287, 2287, 1955, 2287, 70, 70, 70, 70, - 1940, 70, 70, 70, 1944, 70, 1945, 70, 1946, 1948, - 1947, 70, 1953, 1950, 70, 1951, 1949, 1954, 70, 70, - 70, 1955, 1957, 1958, 70, 1959, 1960, 1961, 1962, 1963, - 1964, 1965, 1969, 1967, 1966, 1971, 70, 70, 1968, 1953, - 2287, 1974, 70, 1970, 1954, 1972, 70, 70, 1973, 1957, - 70, 70, 1959, 70, 70, 1962, 1963, 70, 70, 1969, - 1975, 1966, 70, 2287, 70, 70, 1976, 70, 70, 1981, - - 1970, 70, 1972, 1978, 1977, 1973, 70, 1982, 1979, 1980, - 1985, 1984, 70, 1987, 2287, 1983, 70, 1975, 70, 1989, - 70, 70, 70, 1976, 70, 1986, 1981, 70, 1990, 1993, - 1978, 1977, 70, 70, 1982, 1979, 1980, 70, 1984, 1988, - 1987, 1991, 1983, 1994, 1996, 70, 1989, 70, 1992, 1999, - 70, 70, 1986, 1997, 70, 1990, 1993, 1995, 70, 70, - 70, 2000, 70, 2002, 2001, 1998, 1988, 70, 1991, 2003, - 1994, 1996, 70, 70, 2004, 1992, 70, 2005, 2007, 2006, - 1997, 2008, 2287, 2011, 1995, 70, 2009, 70, 2000, 70, - 70, 2001, 1998, 2010, 2015, 70, 2003, 70, 2012, 70, - - 2014, 70, 2016, 2013, 2005, 2007, 2006, 2017, 70, 70, - 2011, 70, 70, 2009, 70, 2019, 2018, 70, 2020, 2021, - 2010, 2015, 2022, 2287, 2027, 70, 2023, 2014, 2024, 70, - 70, 70, 2025, 70, 2017, 2026, 2028, 2032, 2034, 2031, - 2029, 70, 2019, 2018, 70, 2020, 2021, 70, 70, 2022, - 70, 70, 2030, 2023, 70, 2024, 2033, 2039, 70, 2025, - 70, 70, 2026, 2028, 2035, 70, 2031, 2029, 2036, 70, - 2037, 2038, 2041, 70, 70, 2040, 2042, 70, 70, 2030, - 70, 2043, 2044, 2033, 70, 2048, 2045, 2046, 2047, 70, - 2053, 2035, 70, 70, 2051, 2036, 70, 2037, 2038, 70, - - 70, 2050, 2040, 2042, 2052, 70, 70, 2055, 2043, 70, - 70, 2049, 2048, 2045, 2046, 2047, 70, 70, 2054, 70, - 70, 2051, 2056, 2057, 2058, 2059, 70, 2287, 2050, 70, - 2061, 2052, 2060, 2062, 70, 2063, 70, 2065, 2049, 70, - 70, 2067, 2068, 2066, 2069, 2054, 70, 2064, 2070, 70, - 2057, 70, 2059, 2071, 70, 70, 70, 70, 2072, 2060, - 2062, 70, 2063, 70, 2065, 2073, 70, 2074, 2067, 70, - 2066, 70, 70, 70, 2064, 2070, 2075, 2079, 2076, 2078, - 2071, 2077, 2287, 2080, 2086, 2072, 70, 2081, 2082, 2287, - 2083, 2084, 2073, 2085, 70, 2287, 70, 70, 2089, 2090, - - 70, 70, 2092, 2075, 70, 2076, 2078, 2096, 2077, 70, - 70, 70, 70, 70, 2081, 2082, 70, 2083, 2084, 2091, - 2085, 2087, 2088, 2093, 2094, 70, 70, 70, 2097, 70, - 2095, 70, 2098, 2100, 70, 2101, 2099, 70, 2103, 2102, - 2104, 2105, 2287, 70, 70, 70, 2091, 2108, 2087, 2088, - 2093, 2094, 70, 2107, 70, 70, 2109, 2095, 70, 70, - 70, 2112, 2101, 2099, 70, 2103, 2102, 70, 2105, 2106, - 2111, 70, 2110, 2113, 70, 2114, 70, 2115, 70, 2116, - 2107, 2287, 70, 2109, 70, 70, 2118, 2120, 70, 70, - 2117, 2119, 2287, 2287, 70, 70, 2106, 2111, 2123, 2110, - - 2113, 70, 2114, 2122, 2115, 70, 2116, 70, 2121, 70, - 70, 2127, 70, 2118, 2120, 70, 2126, 2117, 2119, 2124, - 2125, 2128, 70, 2129, 2130, 2123, 2131, 2132, 70, 70, - 2122, 2133, 2136, 70, 2137, 2121, 2134, 2135, 2127, 2287, - 2140, 2287, 2287, 2126, 2141, 2287, 2124, 2125, 2128, 70, - 70, 70, 2144, 2131, 70, 70, 2139, 2138, 70, 2136, - 2142, 70, 2145, 2146, 70, 70, 70, 70, 2143, 70, - 70, 2141, 70, 2147, 2148, 2149, 2150, 70, 2151, 2144, - 2152, 2153, 70, 2139, 2138, 2154, 70, 2142, 70, 2145, - 70, 70, 2155, 70, 2156, 2143, 2157, 70, 2158, 2159, - - 70, 2148, 2149, 70, 70, 2160, 2161, 2152, 2153, 2162, - 70, 2163, 2154, 2164, 70, 2165, 70, 2167, 2168, 2155, - 2166, 2156, 2169, 2157, 2171, 70, 70, 2173, 2170, 70, - 70, 2287, 70, 70, 2172, 70, 70, 70, 2163, 2174, - 70, 2175, 70, 70, 2167, 2168, 2176, 2166, 70, 70, - 2179, 2171, 70, 2177, 70, 2170, 2178, 2182, 70, 70, - 2287, 2172, 70, 70, 2180, 2181, 2174, 70, 2175, 2184, - 70, 2183, 70, 2176, 70, 70, 2185, 2179, 2187, 2186, - 2177, 2188, 2191, 2178, 2182, 70, 70, 70, 2189, 2193, - 70, 2180, 2181, 70, 70, 2190, 2184, 70, 2183, 70, - - 2192, 2194, 70, 2185, 2195, 2187, 2186, 70, 2188, 2191, - 2196, 2197, 2199, 2200, 2203, 2189, 70, 2198, 2201, 70, - 70, 2202, 2190, 2205, 2287, 2210, 2287, 2192, 2194, 2204, - 2211, 70, 2208, 70, 70, 70, 70, 2196, 70, 2199, - 2200, 70, 70, 2206, 2198, 2201, 70, 2213, 2202, 2207, - 70, 70, 2209, 2212, 2215, 70, 2204, 70, 70, 2208, - 70, 70, 70, 2214, 2216, 2218, 70, 70, 2219, 2220, - 2206, 70, 2217, 70, 2213, 2222, 2207, 2221, 2223, 2209, - 2212, 2215, 70, 70, 2225, 70, 2226, 70, 2227, 2232, - 2214, 2216, 2218, 2224, 70, 2219, 2220, 70, 2287, 2217, - - 70, 70, 2222, 2228, 2221, 2223, 2229, 2230, 2231, 2233, - 2238, 70, 2235, 2287, 70, 2227, 70, 2287, 70, 2234, - 2224, 70, 2287, 2236, 2240, 70, 2259, 70, 70, 70, - 2228, 70, 70, 2229, 2230, 2231, 70, 2237, 70, 2235, - 2239, 2241, 70, 2243, 2242, 70, 2234, 2244, 70, 2245, - 2236, 2240, 2246, 70, 2247, 70, 2248, 70, 2250, 70, - 2249, 70, 2252, 2287, 2237, 70, 70, 2239, 2241, 2251, - 2243, 2242, 2253, 2254, 2244, 2287, 2245, 70, 70, 2246, - 70, 2247, 2255, 2248, 70, 2250, 2256, 2249, 70, 2252, - 2257, 2258, 2263, 2265, 70, 70, 2251, 2262, 70, 2253, - - 2254, 2260, 70, 2261, 2267, 70, 2287, 2264, 2287, 2255, - 2268, 2272, 70, 2256, 70, 70, 70, 2257, 2258, 2263, - 70, 70, 2271, 70, 2262, 2266, 70, 2269, 2260, 2275, - 2261, 2267, 70, 70, 2264, 70, 2270, 2268, 70, 2273, - 2276, 2277, 2274, 2278, 70, 2279, 2287, 70, 70, 2271, - 70, 2280, 2266, 2281, 2269, 70, 2275, 2282, 2285, 2286, - 2287, 70, 2287, 2270, 2287, 2283, 2273, 70, 2277, 2274, - 70, 70, 70, 70, 2284, 70, 2287, 2287, 2280, 70, - 2281, 2287, 70, 2287, 2282, 70, 70, 2287, 2287, 2287, - 2287, 2287, 2283, 2287, 2287, 2287, 2287, 2287, 2287, 2287, - - 2287, 2284, 42, 42, 42, 42, 42, 42, 42, 47, - 47, 47, 47, 47, 47, 47, 52, 52, 52, 52, - 52, 52, 52, 58, 58, 58, 58, 58, 58, 58, - 63, 63, 63, 63, 63, 63, 63, 73, 73, 2287, - 73, 73, 73, 73, 133, 133, 2287, 2287, 2287, 133, - 133, 135, 135, 2287, 2287, 135, 2287, 135, 137, 2287, - 2287, 2287, 2287, 2287, 137, 140, 140, 2287, 2287, 2287, - 140, 140, 142, 2287, 2287, 2287, 2287, 2287, 142, 144, - 144, 2287, 144, 144, 144, 144, 74, 74, 2287, 74, - 74, 74, 74, 13, 2287, 2287, 2287, 2287, 2287, 2287, - - 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, - 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, - 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, - 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, - 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, - 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287 + 18, 59, 60, 61, 59, 60, 61, 71, 79, 134, + + 134, 72, 101, 46, 99, 136, 46, 144, 136, 51, + 74, 51, 74, 74, 70, 74, 71, 57, 141, 141, + 72, 74, 148, 57, 70, 79, 76, 77, 62, 101, + 930, 62, 15, 16, 17, 64, 65, 66, 15, 16, + 17, 64, 65, 66, 78, 89, 70, 91, 75, 148, + 70, 93, 67, 76, 77, 80, 144, 109, 67, 94, + 70, 92, 81, 70, 835, 90, 82, 115, 70, 83, + 68, 78, 89, 70, 91, 1030, 68, 70, 93, 67, + 70, 70, 80, 100, 109, 67, 94, 147, 92, 81, + 142, 150, 90, 82, 115, 70, 83, 84, 70, 95, + + 144, 85, 96, 70, 86, 70, 87, 88, 140, 97, + 100, 98, 139, 125, 147, 126, 137, 106, 150, 70, + 136, 107, 70, 136, 84, 135, 95, 102, 85, 96, + 127, 86, 149, 87, 88, 103, 97, 108, 98, 70, + 125, 104, 126, 70, 106, 105, 70, 69, 107, 69, + 69, 144, 69, 70, 102, 70, 328, 127, 69, 149, + 142, 116, 103, 155, 108, 117, 140, 151, 104, 156, + 139, 154, 105, 110, 128, 118, 208, 111, 119, 137, + 70, 70, 70, 112, 129, 70, 113, 70, 116, 130, + 155, 70, 117, 114, 151, 70, 156, 70, 154, 131, + + 110, 128, 118, 132, 111, 119, 165, 133, 70, 224, + 112, 129, 138, 113, 138, 138, 130, 138, 161, 70, + 114, 120, 135, 70, 121, 70, 131, 134, 134, 70, + 132, 122, 2340, 165, 133, 123, 124, 74, 2340, 74, + 74, 70, 74, 70, 143, 161, 143, 143, 120, 143, + 69, 121, 69, 69, 74, 69, 74, 74, 122, 74, + 152, 69, 123, 124, 157, 74, 162, 159, 160, 2340, + 158, 163, 166, 153, 70, 146, 70, 168, 170, 70, + 167, 169, 141, 141, 70, 70, 70, 152, 171, 164, + 70, 157, 75, 162, 159, 160, 70, 158, 172, 166, + + 153, 70, 177, 70, 168, 170, 173, 167, 169, 174, + 70, 70, 179, 2340, 2340, 171, 164, 182, 180, 185, + 70, 183, 175, 176, 184, 172, 178, 70, 2340, 186, + 70, 213, 70, 173, 70, 187, 174, 2340, 181, 179, + 70, 70, 70, 188, 182, 180, 185, 189, 183, 175, + 176, 184, 70, 178, 190, 70, 186, 70, 213, 191, + 192, 193, 187, 194, 202, 181, 70, 70, 70, 70, + 188, 195, 70, 197, 189, 196, 70, 198, 199, 2340, + 70, 190, 207, 200, 70, 70, 191, 192, 193, 201, + 194, 202, 210, 70, 2340, 214, 70, 70, 195, 203, + + 197, 70, 196, 70, 198, 199, 204, 70, 209, 207, + 200, 212, 211, 215, 218, 237, 201, 205, 70, 210, + 70, 206, 214, 70, 70, 216, 203, 219, 220, 221, + 70, 223, 2340, 204, 2340, 209, 70, 70, 212, 211, + 215, 218, 70, 2340, 205, 222, 217, 70, 206, 370, + 70, 70, 216, 70, 219, 220, 221, 138, 223, 138, + 138, 143, 138, 143, 143, 74, 143, 74, 74, 144, + 74, 225, 222, 217, 226, 227, 70, 228, 230, 229, + 231, 232, 233, 70, 2340, 70, 236, 70, 234, 235, + 70, 70, 246, 2340, 70, 2340, 2340, 377, 225, 70, + + 70, 226, 227, 146, 228, 230, 229, 231, 232, 248, + 249, 70, 70, 236, 70, 234, 235, 238, 70, 246, + 247, 239, 250, 251, 70, 257, 70, 253, 70, 252, + 254, 70, 70, 258, 70, 267, 248, 249, 240, 2340, + 70, 259, 70, 2340, 2340, 70, 70, 247, 239, 250, + 251, 70, 257, 2340, 253, 70, 252, 254, 255, 264, + 258, 256, 2340, 70, 2340, 240, 241, 70, 259, 268, + 265, 242, 271, 70, 2340, 260, 243, 70, 2340, 266, + 261, 70, 244, 245, 274, 255, 264, 272, 256, 70, + 70, 276, 262, 241, 263, 70, 268, 265, 242, 277, + + 269, 70, 260, 243, 70, 70, 266, 261, 275, 244, + 245, 270, 273, 278, 272, 279, 70, 281, 70, 262, + 280, 263, 282, 70, 70, 287, 2340, 284, 2340, 70, + 70, 70, 70, 70, 285, 275, 286, 70, 270, 273, + 278, 70, 279, 70, 281, 283, 70, 280, 70, 282, + 70, 288, 287, 289, 284, 290, 291, 294, 70, 2340, + 70, 285, 70, 286, 292, 70, 293, 295, 296, 297, + 300, 70, 283, 299, 2340, 301, 70, 70, 288, 298, + 289, 303, 290, 291, 302, 306, 70, 70, 304, 70, + 70, 292, 70, 293, 295, 296, 305, 300, 70, 308, + + 299, 70, 309, 70, 315, 311, 298, 70, 307, 70, + 312, 302, 313, 70, 314, 304, 316, 70, 317, 310, + 70, 318, 70, 305, 324, 144, 70, 70, 325, 309, + 319, 70, 311, 70, 320, 307, 70, 312, 70, 313, + 70, 314, 70, 316, 326, 317, 310, 70, 323, 321, + 322, 324, 70, 70, 327, 325, 329, 319, 70, 330, + 333, 320, 331, 70, 336, 70, 334, 70, 332, 70, + 337, 326, 70, 335, 339, 323, 321, 322, 340, 70, + 70, 327, 70, 329, 338, 70, 330, 333, 70, 331, + 70, 336, 341, 334, 342, 332, 70, 70, 344, 2340, + + 335, 343, 70, 345, 70, 340, 70, 70, 70, 70, + 346, 338, 347, 2340, 70, 352, 348, 2340, 349, 341, + 351, 350, 353, 356, 70, 344, 70, 70, 343, 70, + 345, 70, 354, 357, 363, 355, 358, 346, 70, 347, + 70, 70, 352, 348, 70, 349, 364, 351, 350, 353, + 70, 70, 70, 2340, 366, 70, 70, 70, 359, 354, + 357, 363, 355, 358, 365, 367, 360, 361, 70, 362, + 70, 371, 2340, 364, 368, 369, 70, 2340, 374, 372, + 70, 366, 373, 2340, 379, 359, 375, 2340, 385, 70, + 70, 365, 367, 360, 361, 70, 362, 376, 371, 70, + + 378, 368, 369, 381, 70, 374, 372, 380, 382, 373, + 70, 379, 2340, 375, 383, 70, 384, 387, 388, 70, + 70, 70, 70, 70, 376, 70, 386, 378, 70, 389, + 381, 2340, 390, 70, 380, 382, 394, 2340, 391, 70, + 392, 383, 393, 384, 387, 399, 400, 2340, 2340, 70, + 70, 70, 398, 386, 70, 395, 389, 2340, 396, 390, + 397, 434, 405, 394, 70, 391, 70, 392, 70, 393, + 70, 403, 401, 400, 70, 404, 407, 70, 70, 398, + 402, 70, 395, 406, 409, 396, 70, 397, 418, 405, + 419, 438, 408, 70, 461, 420, 70, 70, 403, 401, + + 70, 417, 404, 407, 422, 2340, 70, 402, 421, 424, + 406, 409, 70, 70, 144, 418, 70, 423, 426, 408, + 410, 411, 70, 70, 2340, 425, 70, 427, 417, 70, + 412, 422, 413, 414, 415, 421, 424, 416, 70, 428, + 432, 2340, 429, 70, 423, 70, 430, 410, 411, 70, + 70, 431, 425, 70, 427, 436, 433, 412, 435, 413, + 414, 415, 70, 70, 416, 70, 428, 432, 70, 429, + 70, 437, 439, 430, 70, 440, 442, 443, 431, 441, + 444, 445, 436, 433, 70, 435, 70, 70, 448, 446, + 447, 449, 70, 2340, 2340, 452, 450, 453, 437, 439, + + 70, 70, 440, 70, 70, 70, 441, 444, 445, 457, + 70, 451, 2340, 70, 70, 448, 446, 447, 449, 70, + 458, 454, 452, 450, 453, 460, 459, 70, 465, 462, + 463, 464, 455, 466, 456, 70, 457, 467, 451, 70, + 70, 471, 70, 70, 469, 472, 473, 458, 454, 70, + 70, 70, 460, 459, 70, 465, 462, 463, 464, 455, + 466, 456, 468, 70, 467, 470, 70, 70, 471, 70, + 476, 469, 474, 473, 475, 477, 70, 70, 70, 70, + 478, 479, 2340, 480, 481, 482, 2340, 483, 70, 468, + 70, 70, 470, 484, 485, 70, 70, 476, 486, 474, + + 70, 475, 477, 489, 70, 487, 70, 478, 479, 70, + 480, 481, 482, 70, 483, 488, 493, 70, 70, 70, + 484, 485, 70, 70, 490, 486, 491, 492, 494, 70, + 489, 495, 487, 70, 70, 496, 498, 497, 499, 500, + 2340, 501, 488, 493, 502, 2340, 70, 505, 504, 70, + 70, 490, 2340, 491, 492, 70, 2340, 70, 495, 508, + 70, 70, 496, 498, 497, 70, 500, 503, 501, 70, + 70, 509, 506, 507, 505, 504, 70, 70, 511, 70, + 510, 519, 70, 70, 512, 2340, 508, 520, 70, 70, + 2340, 522, 70, 521, 503, 70, 2340, 2340, 509, 506, + + 507, 523, 70, 541, 70, 511, 2340, 510, 519, 525, + 2340, 512, 513, 524, 520, 526, 528, 514, 70, 515, + 521, 527, 70, 70, 70, 529, 2340, 516, 523, 530, + 517, 2340, 2340, 70, 531, 70, 525, 518, 70, 513, + 524, 70, 526, 528, 514, 533, 515, 70, 527, 70, + 532, 70, 529, 70, 516, 534, 530, 517, 535, 537, + 70, 531, 70, 536, 518, 540, 538, 70, 539, 542, + 543, 544, 533, 545, 546, 549, 548, 532, 70, 70, + 70, 70, 534, 547, 70, 535, 537, 70, 144, 70, + 536, 550, 540, 538, 70, 539, 542, 543, 544, 70, + + 545, 546, 70, 70, 551, 552, 70, 70, 2340, 2340, + 547, 553, 554, 2340, 557, 555, 556, 558, 550, 559, + 70, 560, 563, 564, 70, 70, 561, 565, 566, 567, + 70, 562, 552, 568, 573, 70, 70, 70, 553, 554, + 70, 557, 555, 556, 558, 70, 559, 570, 569, 70, + 70, 572, 571, 70, 70, 70, 70, 70, 562, 70, + 70, 573, 574, 575, 576, 70, 577, 579, 581, 70, + 70, 2340, 2340, 70, 570, 569, 578, 2340, 572, 571, + 580, 70, 586, 70, 2340, 592, 70, 582, 70, 585, + 575, 576, 583, 577, 70, 581, 584, 587, 70, 70, + + 588, 591, 70, 578, 589, 590, 70, 580, 70, 586, + 594, 70, 593, 70, 582, 2340, 585, 70, 70, 583, + 595, 600, 70, 584, 587, 599, 70, 588, 591, 597, + 70, 589, 590, 598, 70, 70, 70, 594, 603, 593, + 601, 602, 596, 70, 605, 606, 604, 595, 600, 70, + 607, 70, 599, 609, 608, 70, 597, 612, 611, 70, + 598, 70, 70, 614, 613, 603, 70, 601, 602, 596, + 610, 70, 606, 604, 70, 70, 70, 607, 70, 70, + 609, 608, 615, 616, 619, 611, 70, 617, 620, 70, + 621, 613, 618, 622, 623, 70, 626, 610, 70, 624, + + 2340, 70, 70, 627, 2340, 70, 70, 628, 629, 615, + 616, 619, 70, 630, 625, 620, 631, 2340, 70, 70, + 622, 623, 70, 70, 633, 632, 624, 70, 70, 70, + 627, 634, 635, 640, 628, 636, 637, 641, 638, 70, + 70, 625, 70, 631, 70, 70, 70, 639, 646, 70, + 2340, 633, 632, 677, 70, 70, 70, 70, 634, 635, + 640, 642, 636, 637, 641, 638, 643, 645, 644, 647, + 648, 2340, 649, 70, 639, 70, 70, 70, 70, 70, + 70, 650, 651, 653, 652, 70, 2340, 2340, 642, 656, + 70, 654, 657, 643, 645, 644, 647, 648, 70, 649, + + 70, 658, 70, 70, 70, 70, 655, 659, 650, 651, + 653, 652, 70, 660, 70, 661, 656, 662, 654, 657, + 664, 663, 2340, 70, 667, 671, 70, 70, 658, 668, + 665, 666, 669, 655, 659, 70, 674, 70, 70, 670, + 660, 70, 661, 70, 662, 70, 144, 664, 663, 70, + 675, 667, 70, 70, 672, 70, 668, 665, 666, 669, + 678, 676, 673, 70, 680, 681, 670, 70, 70, 70, + 679, 682, 692, 684, 70, 683, 2340, 675, 2340, 70, + 70, 672, 70, 685, 70, 70, 693, 678, 676, 673, + 694, 680, 681, 70, 70, 695, 70, 679, 686, 692, + + 684, 696, 683, 70, 710, 70, 70, 699, 70, 697, + 685, 698, 2340, 693, 2340, 708, 70, 694, 709, 707, + 711, 70, 695, 712, 70, 686, 687, 70, 696, 713, + 688, 710, 714, 689, 733, 70, 697, 70, 698, 70, + 690, 70, 708, 691, 70, 709, 707, 711, 70, 70, + 70, 715, 718, 687, 716, 2340, 713, 688, 70, 714, + 689, 70, 2340, 70, 717, 719, 2340, 690, 720, 721, + 691, 700, 701, 2340, 702, 722, 70, 703, 715, 718, + 70, 716, 704, 70, 70, 723, 70, 70, 705, 706, + 735, 717, 719, 70, 726, 720, 721, 70, 700, 701, + + 724, 702, 722, 725, 703, 727, 728, 70, 70, 704, + 729, 70, 723, 70, 731, 705, 706, 730, 70, 2340, + 732, 726, 70, 70, 734, 736, 70, 724, 737, 70, + 725, 70, 727, 728, 739, 738, 741, 729, 742, 740, + 2340, 731, 70, 745, 730, 70, 70, 732, 743, 2340, + 747, 734, 70, 70, 746, 737, 70, 70, 70, 744, + 70, 739, 738, 741, 748, 742, 740, 70, 70, 70, + 70, 749, 70, 750, 751, 743, 754, 747, 752, 70, + 755, 746, 753, 756, 759, 757, 744, 70, 763, 70, + 758, 70, 70, 70, 2340, 70, 70, 762, 749, 2340, + + 750, 751, 70, 754, 70, 752, 70, 755, 70, 753, + 756, 759, 757, 760, 764, 70, 765, 758, 770, 766, + 70, 761, 70, 767, 762, 70, 768, 769, 771, 2340, + 70, 70, 778, 772, 70, 781, 70, 70, 70, 773, + 760, 764, 70, 765, 774, 770, 766, 70, 761, 775, + 767, 70, 776, 768, 769, 771, 777, 780, 783, 70, + 772, 779, 70, 791, 70, 70, 773, 70, 70, 784, + 70, 774, 788, 782, 785, 789, 775, 70, 786, 776, + 70, 70, 70, 777, 780, 790, 787, 795, 779, 793, + 70, 792, 70, 70, 70, 70, 784, 796, 70, 788, + + 782, 785, 789, 794, 70, 786, 797, 799, 800, 801, + 2340, 70, 790, 787, 798, 70, 793, 70, 792, 70, + 70, 802, 803, 70, 796, 70, 804, 2340, 813, 70, + 794, 805, 70, 70, 144, 800, 801, 806, 70, 70, + 2340, 798, 816, 70, 70, 814, 2340, 815, 802, 803, + 818, 2340, 817, 804, 70, 813, 821, 820, 805, 70, + 819, 822, 70, 823, 806, 807, 2340, 808, 70, 816, + 70, 809, 814, 810, 815, 70, 70, 818, 811, 817, + 824, 825, 70, 812, 820, 2167, 2168, 819, 70, 70, + 823, 826, 807, 70, 808, 828, 829, 834, 809, 832, + + 810, 827, 831, 70, 833, 811, 830, 824, 825, 70, + 812, 2340, 70, 70, 70, 70, 841, 70, 826, 842, + 70, 843, 828, 829, 70, 844, 832, 845, 827, 831, + 847, 70, 848, 830, 70, 853, 70, 836, 846, 849, + 70, 70, 837, 841, 838, 70, 842, 70, 843, 70, + 850, 851, 844, 70, 845, 839, 852, 847, 70, 848, + 70, 854, 840, 70, 836, 846, 849, 70, 855, 837, + 856, 838, 857, 859, 858, 860, 70, 850, 70, 70, + 861, 70, 839, 852, 70, 70, 863, 864, 854, 840, + 866, 872, 862, 70, 2340, 855, 70, 856, 70, 867, + + 859, 858, 860, 70, 70, 70, 70, 861, 865, 868, + 870, 871, 70, 869, 864, 876, 70, 866, 70, 862, + 70, 873, 70, 70, 874, 877, 867, 70, 70, 70, + 875, 878, 70, 879, 70, 865, 868, 870, 871, 70, + 869, 880, 876, 881, 882, 884, 893, 70, 873, 885, + 883, 874, 877, 70, 886, 70, 70, 875, 878, 70, + 879, 2340, 887, 889, 70, 888, 890, 891, 880, 70, + 881, 892, 884, 894, 70, 895, 70, 883, 70, 70, + 70, 70, 897, 70, 898, 896, 899, 70, 70, 887, + 889, 70, 888, 890, 891, 900, 901, 70, 892, 70, + + 894, 902, 895, 903, 70, 905, 70, 906, 904, 897, + 2340, 898, 896, 899, 909, 907, 70, 70, 70, 70, + 908, 914, 900, 901, 70, 918, 70, 910, 902, 70, + 903, 911, 905, 70, 70, 904, 70, 912, 70, 70, + 915, 909, 907, 913, 70, 919, 916, 908, 921, 70, + 917, 920, 918, 70, 910, 922, 923, 70, 911, 70, + 70, 70, 70, 70, 912, 926, 2340, 915, 70, 924, + 913, 925, 919, 916, 927, 921, 928, 917, 920, 929, + 2340, 70, 70, 933, 932, 2340, 931, 70, 70, 70, + 939, 70, 70, 70, 70, 70, 924, 934, 925, 70, + + 935, 927, 70, 928, 936, 938, 929, 937, 70, 940, + 933, 932, 70, 931, 2340, 941, 2340, 70, 942, 70, + 2340, 947, 70, 944, 934, 943, 945, 935, 2340, 946, + 948, 936, 938, 70, 937, 949, 70, 70, 70, 70, + 2340, 70, 941, 70, 952, 942, 950, 70, 947, 955, + 944, 70, 943, 945, 954, 70, 946, 948, 70, 951, + 963, 953, 949, 70, 2340, 956, 2340, 70, 957, 962, + 70, 70, 70, 950, 70, 961, 955, 958, 968, 959, + 70, 954, 960, 965, 964, 966, 951, 963, 953, 2340, + 70, 70, 956, 970, 70, 957, 962, 70, 967, 972, + + 70, 70, 961, 2340, 958, 968, 959, 70, 973, 960, + 965, 964, 966, 969, 971, 70, 70, 975, 974, 976, + 970, 70, 70, 978, 979, 967, 70, 70, 2340, 70, + 977, 70, 981, 983, 2340, 973, 70, 988, 70, 70, + 969, 971, 70, 70, 975, 974, 976, 980, 987, 982, + 978, 979, 984, 990, 70, 70, 985, 977, 70, 981, + 983, 986, 992, 70, 70, 989, 70, 993, 70, 70, + 991, 1008, 70, 2340, 980, 987, 982, 70, 70, 984, + 990, 994, 70, 985, 70, 996, 995, 997, 986, 992, + 998, 1006, 989, 70, 993, 999, 2340, 991, 1007, 2340, + + 70, 2340, 1009, 70, 70, 70, 1011, 2340, 1010, 2340, + 2340, 1020, 996, 70, 997, 2340, 70, 998, 1006, 1021, + 1012, 70, 999, 1000, 70, 1007, 1001, 1002, 70, 1009, + 70, 1003, 1015, 1011, 1013, 1010, 1014, 1004, 1017, 70, + 1019, 1005, 70, 70, 1018, 70, 1023, 1012, 1016, 70, + 1000, 70, 1022, 1001, 1002, 1029, 70, 70, 1003, 1015, + 70, 1013, 70, 1014, 1004, 1017, 70, 1019, 1005, 70, + 1031, 1018, 1032, 1023, 70, 1016, 1033, 1038, 1035, 1022, + 1024, 70, 1029, 1034, 1039, 1025, 70, 1026, 70, 1027, + 70, 1028, 70, 1043, 1041, 70, 70, 1031, 70, 1032, + + 1040, 1036, 70, 1033, 1038, 1035, 1037, 1024, 70, 1042, + 1034, 1039, 1025, 70, 1026, 70, 1027, 1044, 1028, 1045, + 1043, 1041, 70, 1046, 1047, 1048, 70, 1040, 1049, 1050, + 70, 1051, 70, 70, 1054, 1052, 1042, 70, 1053, 1055, + 1057, 70, 70, 2340, 1044, 1060, 1045, 70, 1058, 2340, + 1046, 1047, 1048, 1066, 1062, 70, 1050, 1056, 70, 70, + 70, 1054, 1052, 1059, 70, 1053, 70, 70, 1063, 70, + 70, 1061, 70, 1067, 1064, 1058, 70, 1065, 70, 70, + 1066, 1062, 70, 1069, 1056, 1068, 1071, 70, 1070, 1072, + 1059, 1074, 1073, 1075, 2340, 1063, 70, 1076, 1061, 70, + + 1067, 1064, 70, 70, 1065, 70, 70, 1078, 2340, 1077, + 1069, 70, 1068, 1081, 70, 1070, 1082, 70, 70, 1073, + 1075, 70, 1079, 70, 1076, 70, 1080, 1086, 1085, 70, + 1087, 1083, 1088, 70, 70, 70, 1077, 1084, 2340, 1089, + 1081, 70, 70, 70, 70, 1090, 1093, 1092, 70, 1079, + 1094, 2340, 70, 1080, 1086, 1085, 70, 1087, 1083, 1088, + 1091, 1096, 70, 1095, 1084, 70, 1089, 70, 70, 1102, + 1097, 1098, 1090, 1093, 1092, 1100, 1099, 70, 70, 1101, + 1103, 2340, 70, 70, 1108, 1110, 2340, 1091, 1096, 2340, + 1095, 1111, 70, 70, 1112, 2340, 1102, 1097, 70, 1109, + + 2340, 1104, 1100, 70, 1105, 1106, 1101, 1103, 1107, 70, + 70, 1108, 70, 70, 70, 1113, 1115, 70, 1111, 1114, + 70, 1112, 1116, 70, 1117, 70, 1109, 70, 1104, 1118, + 1119, 1105, 1106, 70, 2340, 1107, 70, 1121, 1120, 1122, + 1124, 2340, 1113, 1115, 70, 70, 1114, 70, 1123, 1116, + 1125, 1117, 70, 70, 70, 1126, 1118, 1119, 1127, 1128, + 1130, 70, 70, 70, 1121, 1120, 1122, 1124, 1129, 70, + 1131, 1137, 1132, 1134, 1136, 1123, 2340, 1125, 1135, 70, + 70, 1133, 1126, 1138, 70, 1127, 1128, 1130, 70, 1141, + 70, 1139, 1143, 70, 70, 1129, 70, 1131, 70, 1132, + + 1134, 1136, 1140, 70, 1142, 1135, 1147, 2340, 1133, 1145, + 70, 1144, 1146, 2340, 1148, 70, 70, 70, 1139, 1143, + 70, 1151, 70, 1149, 70, 1150, 70, 70, 70, 1140, + 70, 1142, 1152, 1147, 1153, 1162, 1145, 2340, 1144, 1146, + 70, 1148, 70, 70, 70, 70, 1154, 1159, 1151, 1156, + 1149, 1155, 1150, 1158, 1157, 70, 1160, 1161, 1164, 1152, + 70, 1153, 1163, 70, 70, 70, 70, 70, 1166, 1165, + 1172, 1167, 2340, 2340, 1159, 1171, 70, 2340, 70, 70, + 1158, 70, 1174, 1160, 1161, 1164, 1168, 1169, 70, 1163, + 70, 1170, 1173, 1175, 70, 70, 1165, 1172, 1167, 70, + + 70, 1176, 1171, 1177, 70, 1178, 1179, 1180, 70, 1174, + 1182, 1188, 1187, 1168, 1169, 2340, 70, 70, 1170, 1173, + 1175, 70, 1181, 70, 70, 1189, 2340, 70, 1176, 70, + 70, 1183, 1178, 1179, 1180, 1184, 1186, 1182, 70, 1187, + 70, 1190, 1191, 70, 1192, 1193, 1194, 70, 1185, 1181, + 1195, 70, 1189, 70, 70, 1200, 70, 1196, 1183, 1198, + 2340, 1197, 1184, 1186, 70, 70, 1199, 1201, 1190, 1191, + 70, 1192, 1193, 1194, 1202, 1185, 1204, 1207, 1203, 70, + 1205, 70, 70, 1206, 70, 1208, 1198, 70, 1197, 70, + 1211, 1210, 70, 1199, 70, 70, 1209, 1212, 1213, 2340, + + 70, 70, 70, 1204, 1207, 1203, 70, 1205, 1214, 70, + 1206, 70, 1208, 70, 1215, 70, 1217, 1211, 1210, 1218, + 1219, 70, 1216, 1209, 70, 1213, 1220, 70, 70, 1221, + 1222, 1223, 70, 1224, 1233, 1214, 2340, 2340, 2340, 70, + 70, 1215, 70, 1217, 70, 1225, 1218, 1219, 70, 1216, + 1228, 1229, 1232, 1220, 1226, 1227, 70, 1222, 1223, 70, + 1224, 70, 70, 1230, 1231, 1235, 70, 70, 70, 1234, + 70, 1236, 1225, 70, 70, 1237, 70, 1228, 1229, 1232, + 1238, 1226, 1227, 1239, 70, 1241, 1253, 1242, 70, 70, + 1230, 1231, 1240, 1243, 1244, 70, 1234, 70, 1236, 1246, + + 2340, 1247, 70, 70, 70, 1245, 70, 1238, 1249, 1248, + 1239, 70, 1241, 70, 1242, 70, 1254, 70, 70, 1240, + 1243, 1244, 1250, 70, 70, 1251, 1246, 70, 1247, 1255, + 1258, 1256, 1245, 1259, 1260, 1249, 1248, 1252, 70, 1257, + 1262, 70, 1261, 1254, 1264, 2340, 70, 70, 70, 1250, + 1265, 70, 1251, 70, 70, 1263, 1255, 1258, 1256, 1266, + 70, 1260, 70, 1268, 1252, 70, 1257, 1262, 1269, 1261, + 1267, 1270, 70, 1272, 70, 1271, 70, 1265, 1277, 1273, + 70, 1274, 1263, 1275, 70, 70, 70, 1278, 1276, 1311, + 1268, 70, 70, 70, 70, 70, 70, 1267, 1270, 1281, + + 1272, 1283, 1271, 70, 1279, 1277, 1273, 1280, 1274, 1286, + 1275, 70, 70, 1284, 70, 1276, 1282, 1285, 1287, 70, + 70, 70, 70, 1291, 1288, 2340, 1281, 1293, 70, 1289, + 70, 1279, 70, 1290, 1280, 70, 1286, 70, 1300, 70, + 1284, 70, 70, 1282, 1285, 1287, 1292, 70, 1296, 1294, + 1291, 1288, 1295, 1299, 1293, 70, 1289, 1297, 70, 70, + 1290, 1301, 1298, 1302, 1303, 70, 1305, 70, 1306, 70, + 1304, 1312, 70, 1292, 1307, 1296, 1294, 70, 1308, 1295, + 1299, 1309, 70, 2340, 1297, 1310, 70, 70, 70, 1298, + 1302, 1303, 70, 1305, 1316, 1306, 70, 1304, 70, 1313, + + 1314, 1307, 1315, 70, 1317, 1308, 70, 70, 1309, 1318, + 1320, 70, 1310, 1321, 70, 70, 1319, 1322, 70, 70, + 1323, 1316, 2340, 1324, 70, 1329, 1313, 1314, 70, 1315, + 1327, 1317, 1325, 1328, 70, 1332, 1318, 1320, 70, 70, + 1321, 1334, 1333, 1319, 1322, 70, 1326, 1323, 70, 1330, + 1324, 70, 1329, 1335, 1331, 1336, 1337, 1327, 70, 1325, + 1328, 1340, 1338, 1339, 1341, 1346, 2340, 70, 70, 1333, + 70, 2340, 2340, 1326, 1342, 1345, 1344, 70, 70, 70, + 1343, 70, 1336, 70, 70, 70, 1347, 1350, 70, 1338, + 1339, 1341, 1346, 70, 70, 70, 1348, 1349, 70, 1351, + + 1352, 1342, 1345, 1344, 70, 1353, 1355, 1343, 1354, 70, + 70, 70, 1356, 1347, 1357, 70, 1358, 1360, 1361, 70, + 1362, 70, 1359, 1348, 1349, 2340, 1351, 1352, 1364, 70, + 70, 1365, 70, 1355, 70, 1354, 70, 1363, 70, 1356, + 70, 1357, 1366, 1358, 1360, 1361, 70, 70, 70, 1359, + 70, 1367, 1369, 1368, 1371, 1364, 1370, 70, 1365, 70, + 70, 1372, 1373, 70, 1363, 1375, 1374, 2340, 1377, 1366, + 1378, 70, 1376, 1380, 2340, 2340, 1379, 1381, 1367, 2340, + 1368, 1371, 70, 1370, 70, 1386, 70, 1384, 1372, 70, + 70, 70, 70, 1374, 70, 1377, 70, 70, 70, 1376, + + 1380, 70, 1382, 1379, 1381, 1383, 1385, 70, 1387, 70, + 70, 1389, 1386, 1388, 1384, 70, 1395, 1390, 1391, 1396, + 1393, 2340, 1394, 70, 2340, 1400, 70, 70, 70, 1382, + 1399, 1392, 1383, 1385, 70, 1387, 70, 70, 1389, 70, + 1388, 1402, 1397, 70, 1390, 1391, 1398, 1393, 70, 1394, + 1403, 70, 70, 1401, 70, 1404, 70, 1399, 1392, 1406, + 70, 1405, 1407, 1408, 1410, 1409, 1412, 1413, 70, 1397, + 1411, 1415, 70, 1398, 70, 1414, 1422, 1403, 1424, 2340, + 1401, 2340, 70, 1425, 70, 2340, 70, 2340, 1405, 1407, + 70, 70, 1409, 1412, 70, 70, 70, 1411, 1416, 1417, + + 1418, 70, 1414, 70, 1420, 1419, 1426, 1421, 70, 1423, + 70, 70, 1427, 70, 70, 1430, 70, 1429, 1433, 70, + 2340, 1432, 1428, 1431, 70, 1416, 1417, 1418, 70, 70, + 1434, 1420, 1419, 1426, 1421, 1436, 1423, 70, 70, 1427, + 1439, 70, 1435, 70, 1429, 1433, 1437, 70, 1432, 1428, + 1431, 1438, 1440, 70, 1441, 1443, 70, 70, 1442, 1444, + 1445, 70, 1436, 1448, 70, 1446, 70, 1439, 1452, 1435, + 1455, 70, 70, 1437, 1447, 70, 1449, 70, 1438, 70, + 70, 1441, 70, 70, 1450, 1442, 1444, 1445, 1451, 70, + 1448, 1453, 1446, 1454, 1456, 70, 1457, 1458, 70, 2340, + + 70, 1447, 70, 1449, 1459, 1460, 1461, 2340, 1464, 2340, + 70, 1450, 70, 70, 70, 1451, 1463, 70, 1453, 70, + 1454, 1462, 70, 70, 1458, 1466, 70, 1465, 70, 1467, + 1468, 1459, 1460, 1461, 1470, 1464, 70, 1471, 1474, 1472, + 70, 70, 70, 1463, 1473, 1475, 1469, 70, 1462, 70, + 1476, 70, 1466, 70, 1465, 1479, 1467, 1468, 1483, 70, + 1484, 1470, 1480, 70, 1471, 1474, 1472, 70, 70, 1477, + 1481, 1473, 1475, 1469, 1478, 1485, 1487, 70, 1488, 1482, + 1486, 1491, 70, 70, 1490, 70, 70, 70, 1492, 1480, + 70, 1489, 70, 1493, 1494, 1496, 1477, 1481, 1495, 70, + + 70, 1478, 1498, 70, 1499, 1500, 1482, 70, 70, 70, + 70, 1490, 1497, 70, 1501, 1492, 70, 70, 1489, 70, + 1493, 1494, 1502, 1503, 1505, 1495, 1504, 70, 1509, 70, + 1506, 1499, 1500, 70, 70, 2340, 1507, 2340, 1508, 1497, + 70, 1501, 1510, 1511, 1515, 1512, 70, 1513, 1516, 70, + 70, 70, 1520, 1504, 2340, 1509, 70, 1506, 70, 70, + 70, 1514, 70, 1507, 70, 1508, 70, 70, 1517, 1510, + 1511, 1515, 1512, 2340, 1513, 70, 70, 1518, 1519, 70, + 1521, 1523, 1527, 1522, 1524, 2340, 70, 70, 1514, 1525, + 70, 1526, 70, 1528, 1531, 1517, 1534, 1538, 1529, 70, + + 70, 70, 2340, 70, 1518, 1519, 70, 1521, 1523, 1530, + 1522, 1524, 70, 70, 70, 1532, 1525, 1533, 1526, 1535, + 1528, 1531, 1536, 70, 70, 1529, 1537, 1539, 1542, 70, + 70, 1540, 1543, 70, 70, 70, 1530, 70, 1541, 70, + 1544, 1545, 1532, 1546, 1533, 2340, 1535, 2340, 70, 1536, + 2340, 70, 2340, 1537, 1539, 70, 1547, 70, 1540, 1543, + 70, 1549, 1550, 70, 1551, 1541, 1548, 1544, 1545, 70, + 1546, 1554, 70, 1553, 70, 1556, 70, 70, 1558, 70, + 1552, 70, 70, 1547, 1555, 70, 1557, 1559, 1549, 1550, + 1560, 1551, 70, 1548, 1561, 1565, 70, 70, 1554, 1563, + + 1553, 70, 1556, 1562, 2340, 70, 70, 1552, 1568, 1564, + 1566, 1555, 1567, 1557, 1559, 1569, 1570, 1560, 70, 70, + 70, 1561, 1565, 1572, 1574, 70, 1563, 1571, 70, 1580, + 1562, 70, 1575, 70, 70, 1568, 1564, 1566, 1576, 1567, + 70, 70, 1569, 1570, 1573, 70, 70, 1577, 1579, 1578, + 70, 1574, 1582, 1583, 1571, 70, 1581, 70, 70, 1575, + 70, 70, 1584, 1586, 1585, 1576, 70, 1587, 2340, 70, + 70, 1573, 70, 1588, 1577, 1579, 1578, 70, 70, 1582, + 1583, 1589, 1590, 1581, 1591, 70, 1593, 2340, 70, 1584, + 70, 1585, 1592, 70, 1587, 1594, 2340, 1595, 1599, 1600, + + 1588, 70, 1596, 1598, 70, 1597, 70, 2340, 1589, 1601, + 2340, 1591, 1603, 1593, 70, 1604, 1602, 70, 2340, 1592, + 70, 70, 1594, 70, 1595, 1599, 70, 70, 70, 1596, + 1598, 70, 1597, 1605, 70, 1607, 1601, 70, 1606, 1603, + 1608, 1613, 1604, 1602, 70, 70, 1612, 70, 1609, 1611, + 70, 70, 1614, 70, 70, 1616, 1615, 1618, 1619, 1617, + 1605, 1610, 1607, 2340, 1620, 1606, 70, 1608, 1613, 70, + 70, 1621, 1636, 1612, 70, 1609, 1611, 70, 1622, 1614, + 1625, 1627, 70, 1615, 70, 1619, 1617, 70, 1610, 1623, + 1626, 1620, 70, 70, 1624, 1631, 1632, 70, 1621, 70, + + 1628, 2340, 1633, 1634, 70, 1622, 1635, 1625, 70, 1637, + 1638, 1640, 1639, 70, 1629, 70, 2340, 1626, 70, 1641, + 2340, 70, 1631, 70, 1643, 1630, 70, 1628, 70, 1633, + 1634, 70, 1645, 1635, 70, 1648, 1637, 70, 1642, 1639, + 1646, 1629, 70, 70, 70, 70, 1641, 70, 1644, 1647, + 70, 1643, 1630, 1651, 70, 1649, 1652, 70, 1650, 1645, + 1653, 70, 1648, 2340, 70, 1642, 1654, 1646, 2340, 70, + 1655, 70, 70, 1656, 1659, 1644, 1647, 70, 1657, 70, + 70, 70, 1649, 1652, 1660, 1650, 70, 1653, 70, 1661, + 1658, 1662, 70, 1654, 70, 70, 1663, 1655, 1664, 1665, + + 1656, 1659, 70, 1666, 1671, 1657, 70, 1667, 1672, 1668, + 70, 1660, 1670, 2340, 1669, 1674, 1661, 1658, 1662, 1675, + 1673, 70, 70, 1663, 1678, 1664, 70, 70, 70, 70, + 1666, 70, 70, 1683, 1667, 70, 1668, 1676, 70, 1670, + 1677, 1669, 1674, 1679, 1680, 70, 1675, 1673, 70, 1681, + 1682, 70, 1684, 1685, 1686, 70, 70, 70, 1687, 1688, + 1683, 1689, 70, 1690, 1676, 70, 70, 1677, 70, 1691, + 1679, 1680, 1693, 1694, 1696, 1692, 1681, 1682, 1697, 70, + 70, 1686, 70, 70, 1695, 70, 1688, 70, 70, 1698, + 70, 1699, 70, 1700, 70, 1702, 1691, 1704, 1703, 1693, + + 70, 70, 1692, 1706, 1705, 1697, 70, 1707, 1701, 70, + 70, 1695, 70, 1708, 70, 70, 1698, 70, 1699, 70, + 1700, 1709, 70, 1710, 1704, 1703, 1711, 1713, 1712, 1715, + 70, 1705, 1714, 70, 1707, 1701, 70, 1716, 70, 70, + 1708, 1717, 1718, 2340, 1721, 1719, 70, 1720, 1709, 70, + 1710, 1723, 1724, 70, 70, 1712, 1715, 2340, 70, 1714, + 70, 1722, 70, 70, 1716, 70, 70, 70, 1717, 1718, + 70, 1721, 1719, 1725, 1720, 1726, 1728, 1727, 1723, 1724, + 1729, 1730, 1733, 1731, 1735, 2340, 1734, 2340, 1722, 70, + 1737, 70, 1732, 1738, 70, 70, 2340, 70, 70, 70, + + 1725, 70, 1726, 1728, 1727, 70, 1736, 1729, 1730, 70, + 1731, 1735, 1739, 1734, 70, 1743, 70, 1737, 1744, 1732, + 1740, 1741, 1745, 1742, 70, 70, 1748, 70, 70, 1746, + 1749, 1747, 1757, 1736, 2340, 1753, 70, 70, 70, 1739, + 70, 70, 1743, 70, 1750, 1744, 1752, 1740, 1741, 1745, + 1742, 1754, 1751, 1748, 70, 1756, 1746, 1749, 1747, 70, + 1755, 70, 70, 1758, 70, 1759, 70, 1760, 2340, 2340, + 1761, 1750, 1763, 1752, 1762, 1764, 1767, 70, 70, 1751, + 70, 1765, 1756, 70, 70, 70, 1766, 1755, 1768, 70, + 1769, 1770, 70, 1772, 1760, 70, 70, 1761, 70, 1763, + + 70, 1762, 1764, 1767, 1771, 1773, 70, 70, 1765, 70, + 1776, 70, 70, 1766, 1774, 70, 1775, 1769, 1770, 1777, + 1772, 70, 1780, 1779, 1778, 1781, 1782, 1783, 70, 1785, + 2340, 1771, 1773, 70, 70, 1784, 1786, 1790, 70, 1788, + 70, 1774, 70, 1775, 70, 70, 1777, 1789, 70, 1780, + 1779, 1778, 70, 1782, 1783, 70, 1785, 70, 1787, 70, + 70, 1791, 1784, 1786, 1792, 70, 1788, 1794, 1793, 70, + 70, 1795, 2340, 1798, 1789, 1796, 70, 1797, 1799, 1800, + 70, 1801, 1802, 1809, 2340, 1787, 70, 1803, 1791, 2340, + 1804, 70, 70, 70, 70, 1793, 1807, 70, 1795, 70, + + 70, 1806, 1796, 1808, 1797, 70, 1812, 70, 1801, 1802, + 1805, 70, 70, 1810, 1803, 70, 70, 1804, 70, 1811, + 1814, 70, 70, 70, 1813, 2340, 1815, 1816, 1806, 1817, + 1808, 70, 1818, 70, 1820, 1819, 1821, 1805, 1822, 2340, + 1810, 1825, 70, 1823, 2340, 70, 1811, 70, 70, 1828, + 70, 1813, 70, 1815, 1816, 1824, 1817, 70, 70, 1818, + 1826, 70, 1819, 70, 70, 70, 1827, 70, 1825, 70, + 1823, 1829, 1830, 1831, 1833, 70, 1828, 1832, 1834, 70, + 1837, 70, 1824, 1836, 70, 1840, 70, 1826, 1835, 70, + 70, 1841, 1843, 1827, 70, 70, 70, 70, 1829, 1830, + + 1831, 70, 1845, 1838, 1832, 1834, 70, 1837, 1839, 70, + 1836, 70, 1840, 1842, 1846, 1835, 1844, 1847, 1841, 1843, + 70, 70, 70, 1848, 1849, 1850, 70, 70, 1851, 1845, + 1838, 1852, 1854, 1853, 2340, 1839, 2340, 2340, 1855, 70, + 1842, 1846, 70, 1844, 1847, 70, 70, 1875, 70, 1856, + 1848, 70, 70, 1857, 70, 1851, 70, 70, 1852, 1854, + 1853, 1858, 70, 1859, 1860, 1855, 70, 1861, 1862, 1864, + 70, 1863, 1866, 1868, 70, 1865, 1856, 70, 1869, 70, + 1857, 70, 70, 1867, 1873, 70, 1874, 70, 1858, 2340, + 1859, 1860, 1870, 70, 1861, 1862, 70, 70, 1863, 1866, + + 1868, 70, 1865, 70, 1871, 1869, 1872, 1876, 1877, 1878, + 1867, 70, 1883, 70, 70, 70, 70, 70, 1879, 1870, + 70, 1880, 1881, 1884, 1882, 2340, 1886, 1885, 70, 70, + 1887, 1871, 2340, 1872, 1876, 1877, 1878, 70, 70, 1883, + 70, 1888, 1892, 1893, 1896, 1879, 70, 1900, 1880, 1881, + 70, 1882, 70, 70, 1885, 1889, 1890, 1887, 1891, 70, + 1894, 1897, 70, 1898, 70, 70, 70, 1895, 1888, 1892, + 70, 70, 70, 1899, 70, 70, 70, 1901, 1902, 1903, + 1905, 1904, 1889, 1890, 70, 1891, 1907, 1894, 1897, 70, + 1898, 70, 1906, 1909, 1895, 1908, 70, 1910, 70, 1911, + + 1899, 1912, 1913, 1914, 1901, 70, 70, 70, 1904, 1922, + 1916, 70, 1915, 70, 70, 70, 1917, 70, 70, 1906, + 1909, 70, 1908, 70, 1910, 70, 1911, 1919, 1912, 1913, + 1914, 70, 1918, 1920, 1921, 70, 70, 1916, 1923, 1915, + 1926, 1925, 1924, 1917, 70, 2340, 70, 1928, 1927, 70, + 1931, 2340, 1929, 1932, 1919, 70, 1930, 1933, 1934, 1918, + 1920, 1921, 70, 70, 70, 70, 1937, 1938, 1925, 1924, + 70, 70, 70, 70, 1928, 1927, 1935, 70, 70, 1929, + 70, 1936, 70, 1930, 1933, 1934, 1939, 1940, 70, 70, + 1941, 2340, 1943, 1937, 1938, 1942, 1944, 1947, 1945, 2340, + + 2340, 1946, 1949, 2340, 70, 1948, 2340, 1953, 70, 2340, + 70, 70, 70, 70, 1940, 70, 70, 1941, 70, 1943, + 70, 70, 1942, 1944, 1947, 1945, 1950, 70, 1946, 1949, + 1951, 1952, 1948, 70, 1953, 1955, 1954, 1956, 1957, 1958, + 70, 1960, 1959, 70, 70, 1962, 70, 2340, 70, 70, + 70, 1966, 1963, 1950, 70, 1961, 1968, 1951, 1952, 70, + 70, 1964, 1955, 1954, 1956, 1957, 70, 70, 1960, 1959, + 1965, 1967, 70, 70, 70, 1969, 2340, 70, 1966, 1963, + 1971, 1972, 1961, 70, 1970, 1977, 1973, 1974, 1964, 1975, + 2340, 1976, 1978, 1981, 70, 70, 1983, 1965, 70, 70, + + 70, 70, 1969, 70, 1980, 1982, 70, 1971, 1972, 70, + 1984, 1970, 70, 1973, 1974, 1979, 1975, 70, 1976, 1978, + 70, 1985, 70, 70, 1987, 1988, 1986, 1989, 1990, 70, + 70, 1980, 1982, 1997, 70, 1991, 70, 1984, 70, 1993, + 70, 1992, 1979, 1995, 1994, 1996, 1999, 70, 70, 2000, + 2340, 70, 1988, 1986, 1989, 1998, 2001, 70, 2002, 2004, + 70, 70, 70, 2003, 70, 70, 70, 2005, 1992, 70, + 1995, 70, 1996, 1999, 2006, 2007, 70, 70, 70, 2009, + 2011, 2008, 1998, 2001, 70, 2002, 2004, 70, 70, 2010, + 2003, 70, 2012, 70, 2005, 2014, 70, 2013, 2340, 2016, + + 2340, 2006, 2007, 70, 2015, 70, 2009, 2011, 2008, 2017, + 2340, 2018, 70, 2340, 70, 2023, 2010, 2019, 2020, 70, + 2021, 2026, 2014, 2029, 2013, 70, 2016, 70, 70, 2022, + 70, 2015, 2024, 70, 2025, 70, 2017, 70, 2018, 70, + 70, 70, 2023, 2027, 2019, 2020, 2028, 2021, 70, 2030, + 70, 2031, 2032, 2033, 2034, 70, 2022, 2035, 2340, 2024, + 2036, 2025, 2043, 70, 2037, 2038, 2340, 70, 2060, 70, + 2027, 70, 2041, 2028, 70, 2042, 2030, 70, 70, 2032, + 2033, 2034, 70, 70, 70, 2039, 70, 2036, 2044, 70, + 2040, 2037, 2038, 70, 2045, 2046, 2047, 70, 2048, 2041, + + 70, 2051, 2042, 2050, 70, 2049, 70, 2340, 2055, 70, + 2053, 70, 2052, 2054, 2340, 2044, 2063, 70, 2058, 70, + 2056, 2045, 2046, 2047, 2057, 2048, 70, 70, 2051, 70, + 2050, 70, 2049, 2059, 70, 70, 70, 2053, 70, 2052, + 2054, 2061, 2062, 70, 2064, 2058, 2065, 2056, 2066, 2067, + 2068, 2057, 70, 70, 2069, 70, 70, 2070, 70, 2071, + 2059, 2073, 2072, 70, 70, 2074, 2077, 70, 2061, 2062, + 70, 2064, 2075, 2065, 70, 2066, 2067, 70, 2076, 70, + 2080, 2069, 70, 2078, 70, 2079, 2071, 2082, 70, 2072, + 2084, 70, 2074, 2077, 2085, 70, 70, 2081, 70, 2075, + + 2083, 2087, 70, 2086, 70, 2076, 2090, 2080, 70, 70, + 2078, 2088, 2079, 2089, 70, 2092, 2091, 70, 2093, 70, + 2094, 70, 70, 70, 2081, 2097, 70, 2083, 70, 2096, + 2086, 2095, 2098, 70, 70, 70, 2099, 2104, 2088, 2109, + 2089, 2100, 2092, 2091, 70, 2093, 70, 2094, 70, 2101, + 2102, 2105, 70, 2103, 70, 2106, 2096, 70, 2095, 70, + 70, 2110, 2111, 2099, 70, 70, 2108, 2112, 2100, 2107, + 2113, 70, 2117, 70, 2120, 70, 2101, 2102, 2105, 70, + 2103, 70, 2106, 2114, 70, 2115, 70, 2116, 70, 2111, + 2118, 2119, 2121, 2108, 2122, 70, 2107, 2113, 2123, 70, + + 70, 70, 70, 2125, 70, 70, 2124, 70, 2127, 2126, + 2114, 2128, 2115, 2129, 2116, 2130, 70, 2118, 2119, 70, + 2131, 2122, 2133, 2135, 2132, 70, 2134, 70, 70, 2139, + 2125, 70, 70, 2124, 2340, 70, 2126, 70, 70, 2137, + 70, 2136, 2130, 2138, 2141, 2140, 70, 70, 2142, 2133, + 70, 2132, 70, 2134, 70, 2143, 70, 70, 2144, 2145, + 2340, 70, 2146, 2149, 2340, 2148, 2137, 70, 2136, 70, + 2138, 2141, 2140, 2150, 70, 2155, 2147, 2151, 70, 2340, + 70, 70, 2143, 70, 70, 70, 2145, 70, 2153, 2146, + 2149, 2152, 2148, 2162, 70, 70, 70, 2156, 2154, 70, + + 2150, 2160, 2155, 2147, 2151, 70, 2157, 2158, 70, 2163, + 2340, 2159, 2161, 2165, 2164, 2153, 70, 70, 2152, 70, + 70, 2166, 2169, 70, 2156, 2154, 2170, 2173, 2160, 2172, + 2174, 2176, 2175, 2157, 2158, 2171, 70, 70, 2159, 2161, + 70, 2164, 70, 70, 70, 70, 2178, 2180, 70, 2169, + 70, 2177, 2181, 70, 70, 70, 2172, 2174, 2176, 2175, + 70, 2179, 2171, 2182, 70, 2184, 2186, 2183, 2185, 2187, + 2188, 2190, 70, 2178, 70, 70, 2340, 70, 2177, 70, + 2191, 2192, 2194, 70, 2189, 2195, 2196, 70, 2179, 70, + 2182, 2193, 2184, 70, 2183, 2185, 70, 2188, 2190, 70, + + 2197, 70, 70, 70, 2198, 2199, 2200, 2191, 2192, 70, + 2201, 2189, 70, 70, 2202, 2203, 2340, 2204, 2193, 2206, + 2207, 2208, 2205, 70, 2209, 70, 70, 70, 2210, 70, + 70, 70, 2199, 70, 70, 2211, 2212, 70, 2214, 2213, + 2340, 2202, 2203, 70, 2204, 70, 70, 2207, 2208, 2205, + 2215, 2209, 70, 2217, 70, 2210, 2220, 2218, 70, 70, + 70, 2216, 2211, 2219, 70, 2214, 2213, 70, 70, 2221, + 70, 2223, 2222, 2224, 2340, 70, 70, 2215, 2226, 70, + 2217, 70, 2225, 2220, 2218, 70, 2227, 2228, 2216, 70, + 2219, 2340, 2236, 2232, 2229, 70, 2221, 2230, 2223, 2222, + + 2224, 70, 70, 70, 70, 2226, 70, 2231, 2234, 2225, + 2233, 2238, 70, 2227, 2228, 70, 2235, 2240, 70, 70, + 2232, 2229, 70, 2237, 2230, 2239, 2241, 2340, 2242, 70, + 2243, 2246, 2248, 70, 2231, 2234, 70, 2233, 70, 2244, + 2245, 70, 2340, 2235, 70, 2250, 2254, 2247, 2257, 2258, + 2237, 70, 2239, 70, 70, 2242, 2249, 2243, 2246, 70, + 2251, 70, 70, 2252, 70, 2255, 2244, 2245, 70, 70, + 2253, 2264, 70, 70, 2247, 70, 2259, 2256, 2261, 70, + 70, 70, 2260, 2249, 70, 70, 70, 2251, 2262, 70, + 2252, 2265, 2255, 2263, 70, 70, 70, 2253, 2264, 2266, + + 2267, 2270, 2268, 2259, 2256, 2261, 70, 70, 2271, 2260, + 2274, 2269, 2272, 70, 70, 2262, 70, 2273, 2265, 70, + 2263, 70, 2275, 70, 2276, 70, 2266, 2267, 2270, 2268, + 70, 2277, 2280, 2278, 2279, 2271, 2281, 70, 2269, 2272, + 70, 2288, 2282, 2283, 2273, 2285, 2340, 2340, 2340, 2284, + 70, 2276, 2291, 70, 70, 70, 70, 70, 2277, 2280, + 2278, 2279, 2294, 2286, 70, 70, 2287, 2289, 70, 2282, + 70, 70, 2285, 70, 70, 70, 2284, 2290, 70, 2291, + 2292, 2340, 2298, 2293, 70, 2297, 2300, 2295, 2296, 2294, + 2286, 70, 2340, 2287, 2289, 70, 70, 2299, 70, 70, + + 70, 2301, 70, 2302, 2290, 2304, 2307, 2292, 70, 2298, + 2293, 2305, 2297, 2300, 2295, 2296, 2309, 2303, 2306, 70, + 2310, 2311, 2312, 2340, 2299, 70, 70, 2308, 2301, 70, + 2302, 70, 2304, 2307, 2318, 70, 2313, 70, 2305, 2314, + 70, 2340, 70, 70, 2303, 2306, 70, 2310, 2311, 70, + 2315, 2316, 2317, 2320, 2308, 2324, 70, 2319, 70, 70, + 70, 70, 2322, 2313, 2321, 70, 2314, 2325, 2323, 2340, + 70, 2328, 2329, 70, 2331, 70, 70, 2315, 2316, 2317, + 2320, 70, 2324, 2330, 2319, 2326, 70, 2332, 2327, 2322, + 2338, 2321, 2339, 70, 70, 2323, 70, 70, 2328, 70, + + 2333, 70, 2334, 70, 2335, 2336, 2340, 2340, 2337, 2340, + 2330, 2340, 2326, 70, 70, 2327, 70, 70, 2340, 70, + 70, 2340, 2340, 2340, 70, 2340, 70, 2333, 2340, 2334, + 2340, 2335, 2336, 2340, 2340, 2337, 42, 42, 42, 42, + 42, 42, 42, 47, 47, 47, 47, 47, 47, 47, + 52, 52, 52, 52, 52, 52, 52, 58, 58, 58, + 58, 58, 58, 58, 63, 63, 63, 63, 63, 63, + 63, 73, 73, 2340, 73, 73, 73, 73, 134, 134, + 2340, 2340, 2340, 134, 134, 136, 136, 2340, 2340, 136, + 2340, 136, 138, 2340, 2340, 2340, 2340, 2340, 138, 141, + + 141, 2340, 2340, 2340, 141, 141, 143, 2340, 2340, 2340, + 2340, 2340, 143, 145, 145, 2340, 145, 145, 145, 145, + 74, 74, 2340, 74, 74, 74, 74, 13, 2340, 2340, + 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, + 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, + 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, + 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, + 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, + 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, + 2340, 2340, 2340, 2340 + } ; -static yyconst flex_int16_t yy_chk[6661] = +static yyconst flex_int16_t yy_chk[6795] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1932,730 +1964,746 @@ static yyconst flex_int16_t yy_chk[6661] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 5, 28, 6, 7, - 7, 7, 7, 2293, 7, 8, 8, 8, 8, 28, + 7, 7, 7, 2346, 7, 8, 8, 8, 8, 28, 8, 9, 9, 9, 10, 10, 10, 15, 21, 46, - 46, 15, 30, 3, 28, 51, 4, 792, 51, 5, + 46, 15, 30, 3, 28, 51, 4, 799, 51, 5, 19, 6, 19, 19, 30, 19, 71, 7, 62, 62, 71, 19, 76, 8, 21, 21, 20, 20, 9, 30, - 785, 10, 11, 11, 11, 11, 11, 11, 12, 12, + 792, 10, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 20, 24, 76, 25, 19, 76, - 20, 26, 11, 20, 20, 22, 142, 33, 12, 26, - 785, 25, 22, 33, 692, 24, 22, 35, 24, 22, - 11, 20, 24, 25, 25, 877, 12, 26, 26, 11, + 20, 26, 11, 20, 20, 22, 143, 33, 12, 26, + 792, 25, 22, 33, 698, 24, 22, 35, 24, 22, + 11, 20, 24, 25, 25, 884, 12, 26, 26, 11, 35, 22, 22, 29, 33, 12, 26, 67, 25, 22, - 140, 78, 24, 22, 35, 692, 22, 23, 78, 27, - - 67, 23, 27, 877, 23, 29, 23, 23, 139, 27, - 29, 27, 137, 38, 67, 38, 135, 32, 78, 23, - 133, 32, 27, 77, 23, 69, 27, 31, 23, 27, - 38, 23, 79, 23, 23, 31, 27, 32, 27, 38, - 38, 31, 38, 32, 32, 31, 77, 39, 32, 81, - 77, 63, 39, 31, 31, 58, 79, 38, 81, 79, - 39, 36, 31, 40, 32, 36, 53, 40, 31, 83, - 106, 40, 31, 34, 39, 36, 81, 34, 36, 39, - 134, 134, 83, 34, 106, 82, 34, 36, 36, 40, - 40, 87, 36, 34, 40, 34, 83, 106, 40, 87, - - 34, 122, 36, 82, 34, 36, 41, 92, 41, 41, - 34, 41, 82, 34, 86, 52, 92, 41, 87, 86, - 34, 37, 47, 57, 37, 57, 57, 65, 57, 65, - 65, 37, 65, 122, 92, 37, 37, 68, 42, 68, - 68, 86, 68, 37, 70, 14, 70, 70, 37, 70, - 84, 37, 85, 85, 88, 70, 84, 80, 37, 13, - 89, 85, 37, 37, 73, 65, 73, 73, 98, 73, - 80, 84, 88, 89, 91, 73, 95, 84, 90, 85, - 85, 80, 93, 84, 80, 90, 88, 89, 94, 0, - 91, 93, 98, 96, 141, 141, 148, 80, 95, 88, - - 98, 91, 73, 95, 0, 90, 96, 97, 99, 93, - 97, 94, 0, 0, 0, 94, 99, 101, 100, 98, - 96, 101, 102, 97, 97, 102, 103, 105, 148, 104, - 136, 97, 108, 136, 97, 99, 109, 97, 100, 103, - 100, 101, 107, 109, 101, 100, 108, 105, 101, 102, - 97, 97, 104, 103, 105, 110, 104, 111, 112, 108, - 115, 0, 107, 109, 110, 100, 113, 112, 114, 107, - 113, 116, 0, 119, 0, 114, 0, 117, 116, 120, - 111, 119, 110, 117, 111, 112, 115, 115, 113, 118, - 120, 117, 123, 113, 120, 114, 125, 113, 116, 121, - - 119, 118, 124, 120, 117, 125, 120, 123, 127, 126, - 117, 150, 128, 121, 127, 130, 118, 120, 129, 123, - 126, 120, 124, 125, 132, 131, 121, 150, 124, 124, - 130, 0, 0, 128, 131, 127, 126, 128, 150, 128, - 129, 0, 130, 146, 0, 129, 132, 147, 0, 124, - 0, 132, 131, 138, 151, 138, 138, 154, 138, 143, - 128, 143, 143, 144, 143, 144, 144, 146, 144, 147, - 146, 149, 152, 151, 147, 153, 156, 160, 155, 154, - 152, 151, 157, 149, 154, 155, 158, 153, 157, 0, - 159, 161, 0, 0, 156, 161, 0, 163, 149, 152, - - 236, 144, 153, 156, 165, 155, 166, 167, 158, 160, - 164, 167, 161, 158, 157, 157, 159, 159, 164, 161, - 168, 173, 161, 163, 163, 170, 165, 169, 166, 236, - 173, 165, 171, 166, 167, 0, 0, 164, 170, 161, - 162, 0, 174, 168, 171, 162, 175, 168, 173, 169, - 162, 0, 170, 0, 169, 172, 162, 162, 172, 171, - 0, 176, 180, 162, 174, 179, 176, 162, 175, 174, - 172, 181, 162, 175, 177, 0, 179, 162, 176, 178, - 176, 183, 172, 162, 162, 172, 178, 176, 176, 182, - 184, 186, 179, 176, 180, 190, 177, 181, 181, 188, - - 182, 177, 187, 185, 189, 176, 178, 176, 184, 185, - 0, 191, 192, 183, 194, 190, 0, 184, 198, 193, - 0, 182, 190, 186, 187, 191, 193, 182, 196, 187, - 185, 188, 195, 192, 197, 194, 189, 195, 191, 192, - 198, 194, 199, 201, 202, 198, 193, 196, 197, 200, - 201, 204, 205, 203, 199, 196, 206, 205, 210, 195, - 200, 197, 203, 207, 207, 208, 202, 211, 209, 199, - 201, 202, 207, 212, 204, 209, 200, 214, 204, 205, - 203, 213, 217, 210, 215, 210, 216, 211, 206, 213, - 207, 207, 214, 221, 211, 209, 218, 208, 219, 223, - - 220, 221, 219, 222, 214, 212, 224, 225, 213, 216, - 215, 215, 226, 218, 217, 220, 231, 0, 216, 228, - 221, 218, 222, 218, 230, 219, 227, 220, 224, 225, - 222, 223, 228, 224, 225, 231, 216, 230, 227, 229, - 218, 233, 234, 231, 226, 232, 228, 232, 229, 235, - 237, 230, 238, 227, 239, 244, 0, 0, 241, 237, - 240, 243, 242, 245, 248, 233, 229, 234, 233, 234, - 241, 240, 232, 244, 247, 235, 235, 237, 238, 238, - 239, 239, 244, 246, 243, 241, 242, 240, 243, 242, - 248, 248, 249, 250, 251, 245, 246, 253, 0, 252, - - 258, 251, 254, 253, 255, 0, 247, 264, 252, 256, - 246, 257, 0, 259, 249, 260, 254, 273, 0, 249, - 257, 251, 259, 258, 253, 250, 252, 258, 261, 254, - 255, 255, 262, 256, 263, 266, 256, 261, 257, 264, - 259, 260, 260, 265, 273, 268, 270, 279, 0, 263, - 266, 272, 272, 269, 271, 261, 262, 267, 274, 262, - 270, 263, 266, 268, 0, 267, 267, 265, 267, 271, - 265, 269, 268, 270, 279, 267, 272, 269, 272, 272, - 269, 271, 274, 277, 267, 274, 275, 276, 278, 275, - 280, 282, 267, 267, 281, 267, 275, 283, 269, 276, - - 287, 277, 285, 282, 290, 0, 278, 284, 289, 285, - 277, 286, 280, 275, 276, 278, 275, 280, 282, 283, - 281, 281, 284, 286, 283, 291, 288, 294, 296, 285, - 289, 0, 287, 288, 284, 289, 290, 292, 286, 293, - 294, 293, 297, 292, 0, 295, 296, 291, 295, 298, - 295, 300, 291, 288, 294, 296, 295, 301, 300, 292, - 0, 0, 0, 293, 292, 299, 293, 302, 293, 301, - 292, 298, 295, 299, 297, 295, 298, 295, 300, 299, - 302, 303, 304, 307, 301, 308, 306, 309, 310, 313, - 308, 311, 299, 309, 302, 304, 310, 303, 306, 0, - - 299, 307, 313, 311, 312, 303, 0, 0, 303, 304, - 307, 312, 314, 306, 309, 310, 313, 308, 311, 315, - 316, 314, 317, 315, 303, 305, 305, 316, 318, 317, - 0, 312, 319, 320, 322, 305, 321, 305, 305, 305, - 318, 322, 305, 323, 314, 320, 315, 316, 314, 317, - 305, 325, 305, 305, 319, 318, 0, 328, 323, 319, - 320, 322, 305, 324, 305, 305, 305, 327, 321, 305, - 323, 326, 333, 326, 329, 329, 324, 331, 327, 328, - 330, 332, 335, 325, 328, 333, 334, 330, 331, 344, - 324, 336, 332, 337, 327, 341, 0, 338, 326, 333, - - 0, 340, 337, 329, 331, 335, 336, 330, 332, 335, - 338, 334, 339, 334, 336, 342, 343, 341, 336, 340, - 337, 344, 341, 339, 338, 339, 345, 346, 340, 348, - 339, 355, 345, 336, 343, 347, 0, 349, 342, 339, - 350, 351, 342, 343, 349, 353, 0, 352, 346, 354, - 339, 348, 339, 345, 346, 351, 348, 356, 347, 353, - 358, 359, 347, 355, 349, 357, 350, 350, 351, 352, - 360, 357, 353, 362, 352, 354, 354, 363, 361, 359, - 356, 0, 358, 365, 356, 360, 364, 358, 359, 365, - 366, 0, 357, 361, 368, 369, 362, 360, 378, 370, - - 362, 369, 372, 363, 363, 361, 371, 376, 364, 372, - 365, 383, 373, 364, 376, 377, 366, 366, 370, 379, - 368, 368, 369, 375, 371, 375, 370, 373, 377, 372, - 378, 380, 375, 371, 376, 381, 382, 379, 384, 373, - 385, 387, 377, 383, 388, 384, 379, 386, 381, 391, - 375, 389, 375, 380, 387, 382, 389, 0, 380, 393, - 0, 392, 381, 382, 385, 384, 388, 385, 387, 390, - 386, 388, 391, 392, 394, 390, 391, 397, 389, 386, - 399, 393, 395, 0, 397, 394, 393, 398, 392, 400, - 395, 399, 401, 402, 0, 398, 390, 386, 0, 400, - - 402, 394, 0, 403, 397, 405, 404, 399, 404, 395, - 396, 406, 407, 0, 398, 396, 401, 396, 0, 401, - 402, 400, 408, 406, 418, 396, 400, 407, 396, 403, - 403, 405, 405, 404, 408, 396, 396, 396, 406, 407, - 409, 410, 396, 411, 396, 412, 410, 414, 409, 408, - 413, 419, 396, 417, 415, 396, 418, 0, 413, 414, - 420, 421, 396, 412, 423, 411, 419, 409, 410, 420, - 411, 422, 412, 424, 414, 415, 417, 413, 419, 425, - 417, 415, 426, 428, 421, 422, 427, 420, 421, 423, - 429, 423, 424, 0, 430, 431, 433, 432, 422, 434, - - 424, 427, 434, 436, 438, 429, 425, 431, 436, 439, - 434, 437, 440, 427, 426, 428, 435, 429, 430, 432, - 433, 430, 431, 433, 432, 437, 434, 435, 441, 434, - 442, 438, 443, 444, 445, 436, 439, 449, 437, 444, - 446, 0, 0, 435, 440, 448, 447, 450, 446, 451, - 454, 0, 453, 452, 458, 441, 445, 442, 451, 453, - 444, 445, 455, 458, 443, 447, 459, 446, 448, 449, - 450, 0, 448, 447, 450, 452, 451, 456, 457, 453, - 452, 458, 454, 457, 455, 460, 461, 457, 463, 455, - 456, 464, 459, 459, 460, 462, 465, 467, 466, 0, - - 0, 463, 457, 464, 456, 457, 0, 468, 461, 469, - 457, 470, 460, 461, 457, 463, 466, 462, 464, 477, - 473, 467, 462, 0, 467, 466, 471, 472, 465, 468, - 468, 469, 474, 470, 468, 475, 469, 471, 470, 478, - 476, 472, 473, 481, 479, 480, 475, 473, 482, 484, - 474, 477, 486, 471, 472, 476, 468, 482, 485, 474, - 478, 483, 475, 487, 488, 481, 478, 476, 479, 480, - 481, 479, 480, 489, 483, 482, 492, 494, 489, 490, - 485, 484, 491, 495, 486, 485, 488, 487, 483, 493, - 487, 488, 496, 490, 500, 494, 491, 493, 495, 497, - - 498, 501, 0, 501, 494, 489, 490, 495, 492, 491, - 495, 502, 499, 0, 497, 503, 493, 499, 504, 0, - 500, 500, 498, 503, 496, 495, 497, 498, 501, 507, - 505, 506, 509, 510, 508, 511, 502, 507, 502, 505, - 506, 508, 503, 504, 499, 504, 515, 511, 0, 0, - 518, 510, 520, 514, 512, 509, 507, 505, 506, 509, - 510, 508, 511, 512, 513, 514, 516, 517, 520, 519, - 0, 522, 513, 521, 516, 517, 518, 518, 515, 520, - 514, 512, 522, 525, 526, 524, 528, 527, 0, 523, - 0, 513, 519, 516, 517, 521, 519, 523, 522, 524, - - 521, 529, 531, 525, 533, 535, 526, 527, 528, 530, - 525, 526, 524, 528, 527, 532, 523, 533, 530, 534, - 536, 0, 531, 529, 538, 537, 539, 535, 529, 531, - 538, 533, 535, 532, 0, 540, 530, 534, 541, 542, - 545, 544, 532, 540, 536, 0, 534, 536, 537, 544, - 547, 538, 537, 539, 548, 549, 546, 542, 550, 551, - 0, 540, 540, 546, 549, 541, 542, 552, 544, 548, - 540, 566, 545, 547, 564, 563, 552, 547, 551, 560, - 557, 548, 549, 546, 554, 553, 551, 553, 567, 560, - 550, 554, 557, 563, 552, 564, 565, 566, 566, 568, - - 0, 564, 563, 0, 0, 0, 560, 557, 0, 572, - 570, 554, 553, 555, 567, 567, 571, 555, 572, 565, - 555, 574, 571, 565, 573, 575, 573, 555, 580, 576, - 555, 568, 570, 593, 0, 555, 572, 570, 0, 577, - 555, 578, 593, 571, 555, 574, 579, 555, 574, 576, - 580, 573, 575, 578, 555, 580, 576, 555, 569, 569, - 593, 569, 0, 581, 569, 577, 577, 582, 578, 569, - 583, 585, 579, 579, 0, 569, 569, 584, 586, 585, - 0, 0, 590, 598, 569, 569, 569, 581, 569, 582, - 581, 569, 584, 587, 582, 583, 569, 583, 585, 588, - - 587, 586, 569, 569, 584, 586, 589, 588, 590, 590, - 591, 592, 594, 595, 596, 598, 0, 599, 600, 0, - 587, 597, 591, 601, 592, 589, 588, 594, 602, 0, - 608, 605, 603, 589, 611, 595, 606, 591, 592, 594, - 595, 596, 600, 597, 601, 600, 607, 602, 597, 599, - 601, 603, 604, 605, 607, 602, 606, 608, 605, 603, - 609, 604, 610, 606, 612, 614, 611, 615, 617, 616, - 620, 618, 612, 607, 619, 0, 0, 0, 609, 604, - 621, 610, 620, 614, 618, 615, 622, 609, 621, 610, - 617, 612, 614, 616, 615, 617, 616, 620, 618, 623, - - 619, 619, 623, 624, 622, 627, 626, 621, 628, 630, - 631, 624, 629, 622, 628, 630, 632, 631, 633, 635, - 636, 632, 634, 638, 0, 633, 623, 624, 642, 636, - 624, 626, 627, 626, 629, 628, 630, 631, 624, 629, - 634, 638, 635, 632, 637, 633, 635, 636, 639, 634, - 638, 640, 637, 641, 643, 642, 644, 645, 646, 647, - 648, 643, 0, 639, 640, 0, 650, 651, 648, 644, - 652, 637, 653, 651, 641, 639, 649, 0, 640, 659, - 641, 643, 647, 644, 649, 654, 647, 648, 650, 645, - 646, 649, 655, 650, 651, 657, 652, 652, 658, 656, - - 0, 655, 661, 649, 653, 658, 659, 660, 662, 654, - 663, 649, 654, 656, 664, 666, 660, 667, 666, 655, - 662, 669, 664, 672, 673, 658, 656, 657, 669, 661, - 667, 674, 670, 663, 660, 662, 0, 663, 670, 0, - 676, 664, 666, 674, 667, 677, 0, 673, 669, 672, - 672, 673, 675, 678, 675, 0, 679, 677, 674, 670, - 671, 681, 671, 676, 683, 680, 671, 676, 671, 679, - 680, 682, 677, 671, 681, 678, 683, 0, 671, 675, - 678, 685, 684, 679, 671, 689, 686, 671, 681, 671, - 687, 683, 684, 671, 682, 671, 687, 680, 682, 686, - - 671, 688, 690, 685, 684, 671, 689, 0, 685, 684, - 691, 0, 689, 686, 688, 694, 0, 687, 0, 684, - 696, 697, 695, 0, 698, 707, 0, 700, 688, 0, - 694, 699, 702, 696, 690, 704, 697, 691, 693, 701, - 702, 711, 694, 693, 695, 693, 700, 696, 697, 695, - 698, 698, 701, 699, 700, 705, 693, 707, 699, 702, - 703, 708, 704, 693, 693, 693, 701, 709, 703, 716, - 693, 712, 693, 711, 714, 709, 713, 710, 705, 715, - 716, 717, 705, 693, 713, 708, 0, 703, 708, 718, - 693, 710, 714, 712, 709, 720, 716, 715, 712, 722, - - 719, 714, 721, 713, 710, 724, 715, 718, 719, 721, - 725, 723, 722, 717, 726, 730, 718, 720, 723, 737, - 728, 0, 720, 724, 730, 0, 722, 719, 725, 721, - 732, 729, 724, 728, 733, 0, 731, 725, 723, 729, - 734, 735, 730, 736, 740, 0, 726, 728, 731, 741, - 738, 737, 732, 744, 741, 740, 733, 732, 729, 735, - 743, 733, 734, 731, 738, 747, 744, 734, 735, 736, - 736, 740, 742, 746, 751, 742, 745, 738, 0, 748, - 744, 741, 752, 745, 743, 746, 748, 743, 749, 750, - 758, 754, 755, 756, 753, 750, 751, 747, 742, 742, - - 746, 751, 742, 745, 752, 753, 748, 760, 756, 752, - 761, 758, 749, 754, 755, 749, 750, 758, 754, 755, - 756, 753, 759, 762, 764, 767, 763, 765, 760, 768, - 766, 769, 767, 759, 760, 763, 765, 761, 766, 770, - 771, 762, 775, 768, 774, 776, 773, 777, 764, 759, - 762, 764, 767, 763, 765, 773, 768, 766, 775, 778, - 776, 770, 771, 769, 0, 779, 770, 771, 774, 775, - 781, 774, 776, 773, 780, 782, 783, 779, 784, 777, - 787, 786, 789, 782, 789, 796, 788, 791, 794, 783, - 786, 778, 779, 784, 788, 791, 780, 781, 787, 793, - - 794, 780, 782, 783, 795, 784, 797, 787, 786, 789, - 798, 795, 793, 788, 791, 794, 799, 796, 800, 805, - 801, 802, 803, 804, 0, 809, 793, 805, 0, 0, - 807, 795, 798, 801, 802, 804, 806, 798, 797, 0, - 800, 799, 807, 799, 803, 800, 805, 801, 802, 803, - 804, 808, 809, 810, 812, 811, 806, 807, 813, 808, - 816, 817, 814, 806, 811, 813, 810, 820, 821, 0, - 818, 828, 0, 814, 823, 812, 814, 821, 808, 819, - 810, 812, 811, 817, 814, 813, 816, 816, 817, 814, - 818, 820, 819, 822, 820, 821, 823, 818, 828, 824, - - 814, 823, 825, 814, 826, 829, 819, 824, 832, 830, - 831, 822, 826, 833, 834, 835, 832, 837, 0, 845, - 822, 859, 831, 837, 825, 833, 824, 830, 829, 825, - 835, 826, 829, 839, 834, 832, 830, 831, 836, 838, - 833, 834, 835, 840, 837, 841, 836, 849, 838, 842, - 843, 845, 841, 859, 839, 840, 842, 848, 846, 847, - 839, 855, 0, 0, 848, 836, 838, 850, 843, 849, - 840, 846, 841, 852, 849, 851, 842, 843, 847, 853, - 851, 852, 850, 854, 848, 846, 847, 855, 855, 857, - 858, 861, 853, 870, 850, 860, 0, 854, 0, 0, - - 852, 865, 870, 857, 863, 862, 853, 851, 858, 0, - 854, 856, 864, 861, 856, 856, 857, 858, 861, 856, - 870, 860, 860, 862, 896, 856, 863, 865, 865, 856, - 866, 863, 862, 856, 864, 867, 868, 866, 856, 864, - 871, 856, 856, 872, 873, 0, 856, 869, 0, 878, - 874, 896, 856, 867, 876, 0, 856, 866, 868, 880, - 869, 882, 867, 868, 0, 878, 873, 881, 0, 919, - 882, 873, 871, 874, 869, 872, 878, 874, 875, 881, - 876, 876, 880, 875, 883, 875, 880, 875, 882, 875, - 884, 885, 887, 889, 881, 884, 875, 886, 888, 890, - - 887, 919, 883, 0, 885, 875, 889, 894, 895, 894, - 875, 883, 875, 892, 875, 886, 875, 888, 885, 887, - 889, 890, 884, 891, 886, 888, 890, 897, 893, 898, - 895, 892, 903, 900, 894, 895, 891, 893, 902, 897, - 892, 901, 904, 905, 906, 907, 902, 908, 911, 904, - 891, 907, 913, 0, 897, 893, 898, 900, 920, 903, - 900, 910, 912, 901, 921, 902, 906, 911, 901, 904, - 905, 906, 907, 909, 908, 911, 914, 915, 913, 913, - 909, 916, 917, 910, 912, 914, 921, 922, 910, 912, - 920, 921, 0, 923, 924, 926, 917, 925, 915, 927, - - 909, 916, 924, 914, 915, 928, 927, 930, 916, 917, - 929, 923, 928, 925, 929, 934, 933, 931, 932, 922, - 923, 924, 926, 931, 925, 932, 927, 935, 934, 936, - 931, 933, 928, 937, 941, 940, 935, 929, 939, 930, - 937, 943, 934, 933, 931, 932, 938, 939, 938, 942, - 931, 945, 947, 942, 935, 936, 936, 940, 948, 945, - 937, 941, 940, 943, 946, 939, 952, 949, 943, 946, - 947, 950, 954, 938, 950, 953, 942, 948, 945, 947, - 949, 951, 955, 950, 951, 948, 0, 957, 953, 0, - 956, 952, 0, 952, 949, 957, 946, 960, 950, 958, - - 958, 950, 953, 951, 954, 955, 956, 959, 951, 955, - 964, 951, 961, 962, 957, 966, 959, 956, 965, 960, - 962, 961, 968, 966, 960, 972, 958, 965, 967, 969, - 971, 973, 970, 964, 959, 968, 976, 964, 971, 961, - 962, 969, 966, 967, 970, 965, 974, 972, 977, 968, - 979, 973, 972, 975, 976, 967, 969, 971, 973, 970, - 978, 980, 975, 976, 981, 982, 983, 980, 974, 984, - 0, 979, 978, 974, 977, 977, 985, 979, 987, 0, - 975, 988, 989, 990, 0, 994, 981, 978, 980, 992, - 0, 981, 990, 991, 993, 984, 984, 982, 983, 996, - - 989, 992, 985, 985, 988, 987, 991, 997, 988, 989, - 990, 994, 994, 0, 993, 995, 992, 998, 996, 999, - 991, 993, 995, 1000, 1006, 1002, 996, 999, 1000, 997, - 998, 1001, 1002, 1003, 997, 1004, 1001, 1005, 1007, 1007, - 1008, 1003, 995, 1004, 998, 1005, 999, 1009, 1008, 1010, - 1011, 1012, 1002, 1013, 0, 1000, 1006, 1015, 1011, 1012, - 1003, 1013, 1004, 1001, 1005, 1007, 1016, 1008, 1009, 1018, - 1015, 1014, 1016, 1017, 1009, 1019, 1020, 1011, 1012, 1014, - 1013, 1010, 1021, 1022, 1015, 1017, 1025, 1024, 1023, 1031, - 1029, 1020, 1026, 1016, 1038, 1018, 1018, 1029, 1014, 1019, - - 1017, 1024, 1019, 1020, 1025, 1022, 1026, 1030, 1027, 1021, - 1022, 1023, 1027, 1025, 1024, 1023, 1031, 1029, 1030, 1026, - 1032, 1033, 1034, 1035, 1037, 1027, 1038, 1036, 1039, 1041, - 1035, 1037, 0, 1027, 1030, 1027, 1036, 1043, 1041, 1027, - 1044, 1045, 1032, 1047, 1033, 1034, 0, 1032, 1033, 1034, - 1035, 1037, 1027, 1049, 1036, 1039, 1041, 1050, 1052, 1043, - 1053, 1055, 1054, 1055, 1043, 1056, 1044, 1044, 1050, 1057, - 1047, 1058, 1059, 1045, 1054, 1062, 1063, 1060, 1056, 1064, - 1049, 1063, 1052, 1058, 1050, 1052, 1053, 1053, 1055, 1054, - 1061, 1057, 1056, 1065, 1069, 1064, 1057, 1061, 1058, 1059, - - 1060, 1062, 1062, 1063, 1060, 1066, 1064, 1067, 1073, 1070, - 1071, 0, 1072, 1066, 0, 1074, 1065, 1061, 1070, 1075, - 1065, 1069, 1074, 1071, 1078, 1076, 1075, 1077, 1079, 1067, - 1073, 1078, 1066, 1081, 1067, 1073, 1070, 1071, 1072, 1072, - 1080, 1082, 1074, 1076, 1083, 1085, 1075, 1086, 1082, 1077, - 1088, 1078, 1076, 1079, 1077, 1079, 1087, 1090, 1085, 1091, - 1090, 1092, 1080, 1096, 1087, 1081, 1093, 1080, 1082, 1094, - 1095, 1088, 1085, 1100, 1086, 1093, 1083, 1088, 0, 1101, - 1097, 1094, 1102, 1087, 1090, 1091, 1091, 1092, 1092, 1096, - 1096, 1098, 1105, 1093, 1095, 1097, 1094, 1095, 1098, 1099, - - 1102, 1101, 1099, 1103, 1106, 1100, 1101, 1097, 1104, 1102, - 1104, 1107, 1108, 1111, 1099, 1110, 1105, 1113, 1098, 1105, - 1109, 1108, 1110, 1099, 1112, 1103, 1099, 1114, 1109, 1099, - 1103, 1114, 1116, 1115, 1117, 1104, 1106, 1107, 1107, 1108, - 1121, 1099, 1110, 1118, 1125, 1111, 1112, 1109, 0, 1113, - 1119, 1112, 1118, 1121, 1114, 1115, 1117, 1119, 1120, 1116, - 1115, 1117, 1122, 1123, 1126, 1120, 1124, 1121, 1128, 1131, - 1118, 1126, 1127, 0, 1134, 1122, 1125, 1119, 1123, 1127, - 1124, 1128, 1129, 1133, 1136, 1120, 1135, 1132, 1129, 1122, - 1123, 1126, 1140, 1124, 1132, 1128, 1131, 1136, 1135, 1127, - - 1134, 1134, 1139, 1137, 1140, 1133, 1137, 1138, 1141, 1129, - 1133, 1136, 1143, 1135, 1132, 1142, 1138, 1148, 1142, 1140, - 1139, 1149, 1147, 1143, 1147, 1152, 1145, 1150, 1141, 1139, - 1137, 1145, 1151, 1142, 1138, 1141, 1159, 1154, 1145, 1143, - 1151, 0, 1142, 1157, 1148, 1142, 1153, 1152, 1149, 1147, - 1158, 1150, 1152, 1145, 1150, 1154, 0, 1153, 1145, 1151, - 1155, 1157, 1156, 1159, 1154, 1156, 1162, 1160, 1155, 1161, - 1157, 1163, 0, 1153, 1160, 1162, 1165, 1164, 1172, 1167, - 1156, 1167, 1158, 1161, 1163, 1169, 1168, 1155, 1164, 1156, - 1170, 1165, 1156, 1162, 1160, 1168, 1161, 1171, 1163, 1175, - - 1172, 1170, 1173, 1165, 1164, 1172, 1167, 1174, 1175, 1176, - 1174, 1169, 1169, 1168, 1176, 1171, 1173, 1170, 1178, 1180, - 1181, 1179, 1182, 1183, 1171, 1174, 1175, 0, 1173, 1173, - 1179, 1186, 1184, 1187, 1174, 0, 1189, 1174, 1186, 1192, - 1188, 1176, 1189, 1173, 1182, 1193, 1180, 1192, 1179, 1182, - 1178, 1201, 1181, 1184, 1188, 1183, 1194, 0, 1186, 1184, - 1189, 1197, 1195, 1189, 1193, 1187, 1192, 1188, 1196, 1189, - 1194, 1195, 1193, 1198, 1202, 1203, 1196, 1199, 1201, 1207, - 0, 1202, 0, 1194, 1198, 1204, 1199, 1205, 1206, 1195, - 1208, 1210, 1211, 1197, 1208, 1196, 1213, 1207, 1203, 0, - - 1198, 1202, 1203, 1210, 1199, 1214, 1207, 1204, 1212, 1205, - 1206, 1215, 1204, 1218, 1205, 1206, 1213, 1208, 1210, 1211, - 1214, 1212, 1216, 1213, 1217, 1219, 1215, 1220, 1222, 1221, - 1216, 1217, 1214, 1223, 1224, 1212, 1220, 1226, 1215, 1228, - 1219, 1231, 1230, 1229, 1227, 1218, 0, 0, 1231, 1216, - 1221, 1217, 1219, 1235, 1220, 1222, 1221, 1223, 1229, 1226, - 1223, 1224, 1227, 1236, 1226, 1233, 1228, 1230, 1231, 1230, - 1229, 1227, 1232, 1234, 1233, 1235, 1237, 1232, 1241, 1239, - 1235, 1236, 1234, 1238, 1240, 1241, 1242, 1243, 1244, 1248, - 1236, 1237, 1233, 0, 1250, 1238, 1246, 1240, 1242, 1232, - - 1234, 1239, 1240, 1237, 1246, 1241, 1239, 1252, 1253, 1245, - 1238, 1240, 1247, 1242, 1243, 1245, 1248, 1255, 1249, 1247, - 1244, 1250, 1251, 1246, 1240, 1249, 1254, 1257, 1251, 1258, - 1259, 1253, 0, 1261, 1252, 1253, 1245, 1262, 1258, 1247, - 1260, 1255, 1260, 1263, 1255, 1249, 1264, 0, 1266, 1251, - 1268, 0, 0, 1272, 1267, 1266, 1258, 1261, 1254, 1257, - 1261, 1267, 1259, 1271, 1262, 1273, 1272, 1260, 1271, 1263, - 1263, 1277, 1265, 1265, 1265, 1266, 1269, 1274, 1264, 1265, - 1272, 1267, 1268, 1269, 1275, 1276, 1280, 1265, 1279, 1277, - 1273, 1286, 1273, 1274, 1279, 1271, 1275, 1282, 1277, 1265, - - 1265, 1265, 1278, 1269, 1274, 1283, 1265, 1281, 1281, 1278, - 1285, 1275, 1283, 1280, 1284, 1279, 1290, 1276, 1286, 1284, - 1289, 1291, 1290, 1282, 1282, 1293, 1294, 1292, 0, 1278, - 1295, 1295, 1283, 1296, 1281, 1298, 1285, 1285, 1289, 1292, - 1301, 1284, 1300, 1290, 1294, 1293, 1298, 1289, 1291, 1297, - 1297, 1302, 1293, 1294, 1292, 1303, 1304, 1295, 1302, 1296, - 1296, 1305, 1298, 1306, 1300, 1307, 0, 1308, 1311, 1300, - 1309, 1310, 1301, 0, 0, 1303, 1297, 1309, 1302, 1310, - 1312, 0, 1303, 1311, 1315, 1308, 0, 1307, 1304, 1317, - 1306, 1313, 1307, 1305, 1308, 1311, 1316, 1309, 1310, 1323, - - 1313, 1314, 1314, 1320, 1312, 1317, 1319, 1312, 1316, 1322, - 1315, 1315, 1317, 1324, 1319, 1320, 1317, 1322, 1313, 1325, - 1326, 1328, 1323, 1316, 0, 1329, 1323, 1332, 1314, 1330, - 1320, 1329, 1317, 1319, 1324, 1333, 1322, 1325, 1327, 0, - 1324, 1335, 1330, 1327, 1331, 1334, 1325, 1326, 1328, 1337, - 1334, 1331, 1329, 1338, 1327, 1341, 1330, 1336, 1336, 1332, - 1340, 1343, 1333, 1343, 1337, 1327, 1342, 1344, 1346, 1345, - 1327, 1331, 0, 1335, 1345, 1340, 1337, 1334, 1341, 1347, - 1349, 1342, 1341, 1350, 1336, 1338, 1351, 1340, 1343, 1352, - 1353, 1354, 0, 1342, 1347, 0, 1345, 1353, 1355, 1344, - - 1346, 1357, 1356, 1358, 1349, 1360, 1347, 1349, 0, 1350, - 1350, 1362, 1367, 1351, 0, 1369, 1352, 1353, 1363, 1355, - 1371, 1358, 1357, 1354, 1356, 1355, 1365, 1360, 1357, 1356, - 1358, 1366, 1360, 1363, 1368, 1362, 1372, 1369, 1362, 1367, - 1370, 1365, 1369, 1372, 0, 1363, 1366, 1371, 1373, 1375, - 1374, 1376, 1368, 1365, 1378, 0, 1379, 1375, 1366, 1374, - 1377, 1368, 1370, 1372, 1382, 1386, 1373, 1370, 1381, 1379, - 1383, 1384, 1390, 1382, 1376, 1373, 1375, 1374, 1376, 1381, - 1391, 1392, 1377, 1379, 1390, 1388, 1378, 1377, 1383, 1384, - 1393, 1382, 1386, 1391, 1381, 1381, 1388, 1383, 1384, 1390, - - 1393, 1394, 0, 1396, 1395, 1397, 1381, 1391, 1400, 0, - 1401, 0, 1388, 1392, 1399, 1400, 1403, 1393, 1404, 1411, - 1402, 0, 1403, 0, 1397, 1405, 1411, 1394, 1394, 1395, - 1396, 1395, 1397, 1404, 1399, 1400, 1401, 1401, 1402, 1406, - 1405, 1399, 1409, 1403, 1408, 1404, 1411, 1402, 1407, 1407, - 1412, 1413, 1405, 1414, 1406, 1409, 1408, 1415, 0, 1416, - 1421, 1418, 1414, 1409, 1415, 1412, 1406, 1417, 1418, 1409, - 1420, 1408, 1422, 1423, 1430, 1407, 1424, 1412, 1413, 1427, - 1414, 1422, 1409, 1416, 1415, 1421, 1416, 1421, 1418, 1417, - 1426, 1432, 1420, 1434, 1417, 1423, 1424, 1420, 1429, 1422, - - 1423, 1430, 1433, 1424, 1427, 1436, 1427, 0, 1426, 1431, - 1431, 1429, 1435, 1432, 1436, 1434, 1437, 1426, 1432, 1438, - 1434, 1440, 1439, 1437, 1449, 1429, 1441, 1433, 1444, 1433, - 1443, 1445, 1436, 1446, 1435, 1440, 1431, 0, 1443, 1435, - 1447, 1444, 1450, 1437, 1439, 1441, 1451, 1448, 1440, 1439, - 1452, 1438, 1447, 1441, 1448, 1444, 1449, 1443, 1445, 1446, - 1446, 1453, 0, 1454, 1450, 1452, 0, 1447, 0, 1450, - 1456, 1451, 1458, 1451, 1448, 1455, 1457, 1452, 1455, 1460, - 1459, 0, 1457, 0, 1466, 0, 1462, 1453, 1453, 1454, - 1454, 1466, 1463, 1455, 1460, 1456, 1465, 1456, 1459, 1458, - - 1467, 1468, 1455, 1457, 1470, 1455, 1460, 1459, 1462, 1467, - 1465, 1466, 1468, 1462, 1463, 1472, 1475, 1470, 1473, 1463, - 1474, 1476, 1474, 1465, 1478, 1470, 1480, 1467, 1468, 1479, - 1473, 1470, 1477, 1481, 1475, 1483, 1472, 1479, 1482, 1484, - 1483, 1488, 1472, 1475, 1470, 1473, 1490, 1474, 1476, 1480, - 1477, 1478, 1482, 1480, 1485, 1481, 1479, 1489, 1484, 1477, - 1481, 1485, 1491, 1493, 1490, 1482, 1484, 1483, 1488, 1492, - 1494, 1489, 1495, 1490, 1497, 0, 1500, 0, 1493, 1494, - 1496, 1485, 1489, 1489, 1489, 1501, 1498, 1502, 0, 1491, - 1493, 1504, 1501, 1504, 1505, 1492, 1492, 1494, 1489, 1500, - - 1508, 1497, 1496, 1500, 1495, 1507, 1511, 1496, 1498, 1489, - 1502, 1506, 1501, 1498, 1502, 1506, 1505, 1507, 1504, 1509, - 1510, 1505, 1508, 1513, 0, 1512, 1516, 1508, 1509, 1514, - 1527, 1510, 1507, 1511, 1516, 1513, 1515, 1515, 1506, 1519, - 0, 1518, 1520, 1519, 1523, 1520, 1509, 1510, 1512, 1518, - 1513, 1514, 1512, 1516, 1521, 1522, 1514, 1527, 1524, 1523, - 1526, 1522, 1521, 1515, 1524, 1528, 1519, 1530, 1518, 1520, - 1529, 1523, 1526, 1532, 1531, 1533, 1534, 1536, 1535, 1539, - 1530, 1521, 1522, 1537, 1529, 1524, 1540, 1526, 1531, 1528, - 1535, 1536, 1528, 1538, 1530, 1542, 1538, 1529, 1546, 1532, - - 1532, 1531, 1533, 1534, 1536, 1535, 1539, 1543, 1540, 1537, - 1537, 1538, 1544, 1540, 1543, 1545, 1547, 1542, 1548, 1544, - 1538, 1549, 1542, 1538, 1550, 1546, 1548, 1551, 1552, 1554, - 1545, 1553, 1557, 1550, 1543, 1556, 1559, 1554, 1558, 1544, - 1560, 0, 1545, 1547, 1553, 1548, 1558, 1561, 1549, 1560, - 1564, 1550, 1562, 1565, 1551, 1552, 1554, 1556, 1553, 1557, - 1563, 1565, 1556, 1559, 1567, 1558, 1566, 1560, 1561, 1568, - 1572, 1573, 1567, 1574, 1561, 1563, 1562, 1564, 1566, 1562, - 1565, 1570, 1572, 1576, 1575, 1571, 1563, 1563, 1570, 1571, - 1580, 1567, 1575, 1566, 1573, 1578, 1568, 1572, 1573, 1577, - - 1574, 1581, 1563, 1579, 1579, 0, 1577, 1582, 1570, 1584, - 1576, 1575, 1571, 1585, 1596, 1578, 1580, 1580, 1586, 1581, - 1586, 1588, 1578, 1587, 1584, 1589, 1577, 1588, 1581, 1590, - 1579, 1591, 1582, 0, 1582, 1585, 1584, 1587, 1597, 1592, - 1585, 1593, 1594, 1591, 0, 1586, 1596, 1589, 1588, 1595, - 1587, 1590, 1589, 1601, 1603, 1602, 1590, 1592, 1591, 1593, - 1594, 1597, 1595, 1599, 1619, 1597, 1592, 1604, 1593, 1594, - 1599, 1601, 1605, 1607, 1605, 1604, 1595, 1608, 1611, 1605, - 1601, 1602, 1602, 1610, 1612, 1607, 1603, 1616, 1613, 1611, - 1599, 1619, 1615, 1604, 1604, 1608, 1612, 1618, 1610, 1605, - - 1607, 1605, 1604, 1613, 1608, 1611, 1617, 1621, 1622, 1616, - 1610, 1612, 1618, 1617, 1616, 1613, 1615, 1623, 1624, 1615, - 1625, 1628, 0, 0, 1618, 1626, 0, 1627, 1629, 1630, - 1622, 1631, 1635, 1617, 1621, 1622, 1628, 1630, 1626, 1633, - 1634, 1629, 1643, 1636, 1637, 0, 0, 1625, 1628, 1623, - 1624, 1637, 1626, 1627, 1627, 1629, 1630, 1631, 1631, 1635, - 1639, 1638, 1633, 1640, 1634, 1636, 1633, 1634, 1638, 1641, - 1636, 1637, 1642, 1639, 1643, 1645, 1641, 1644, 1647, 1648, - 1649, 1650, 1651, 1661, 1645, 0, 1640, 1639, 1638, 1647, - 1640, 1655, 1656, 0, 1642, 1658, 1641, 1654, 1644, 1642, - - 1650, 1648, 1645, 1660, 1644, 1647, 1648, 1651, 1650, 1651, - 1654, 1663, 1649, 1657, 1657, 1661, 1656, 1655, 1655, 1656, - 1662, 1658, 1658, 1664, 1654, 1667, 1660, 1669, 1674, 1672, - 1660, 1673, 1676, 1678, 1679, 1662, 1669, 1680, 1663, 1681, - 1657, 1664, 1686, 1689, 1681, 1682, 1693, 1662, 1680, 1684, - 1664, 1672, 1667, 1673, 1669, 1674, 1672, 1684, 1673, 1676, - 1679, 1679, 1685, 1688, 1680, 1678, 1681, 1682, 1691, 1686, - 1690, 1696, 1682, 1693, 1695, 1689, 1684, 1685, 1698, 1690, - 1691, 1688, 1697, 1699, 1701, 1702, 1700, 1703, 1704, 1685, - 1688, 1707, 1705, 1706, 0, 1691, 1699, 1690, 1696, 1700, - - 1695, 1695, 1706, 1698, 1697, 1698, 1701, 1705, 1708, 1697, - 1699, 1701, 1702, 1700, 1703, 1704, 1709, 1707, 1707, 1705, - 1706, 1710, 1711, 1708, 1712, 1713, 1714, 1715, 1716, 1716, - 1718, 1709, 1713, 1717, 1720, 1708, 1719, 1711, 1721, 1719, - 1717, 1710, 0, 1709, 1718, 1715, 1712, 1720, 1710, 1711, - 1722, 1712, 1713, 1714, 1715, 1716, 1726, 1718, 1723, 1727, - 1717, 1720, 1728, 1719, 1721, 1721, 1724, 1723, 1722, 1725, - 1729, 1724, 1727, 1725, 1730, 1731, 0, 1722, 1732, 1735, - 1726, 1740, 1736, 1726, 1728, 1723, 1727, 1737, 1735, 1728, - 1740, 1746, 1729, 1724, 1741, 1737, 1725, 1729, 1736, 1741, - - 1739, 1730, 1731, 1742, 1732, 1732, 1735, 1739, 1740, 1736, - 1742, 1743, 1744, 1745, 1737, 1748, 1749, 1746, 1746, 1744, - 1755, 1741, 1745, 1750, 1751, 1752, 1753, 1739, 1757, 1743, - 1742, 1755, 1750, 1756, 1749, 1753, 1754, 1752, 1743, 1744, - 1745, 1756, 1748, 1749, 1751, 1754, 1758, 1755, 1759, 1760, - 1750, 1751, 1752, 1753, 1761, 1757, 1762, 1763, 1760, 1768, - 1756, 1764, 1765, 1754, 1762, 1766, 1761, 1770, 1764, 1765, - 1767, 1769, 1774, 1758, 1772, 0, 1760, 1781, 1775, 1763, - 1759, 1761, 1772, 1762, 1763, 1775, 1768, 1766, 1764, 1765, - 1774, 1780, 1766, 1784, 1770, 1767, 1769, 1767, 1769, 1774, - - 1776, 1772, 1779, 1783, 1781, 1775, 0, 1782, 1776, 1779, - 1785, 1787, 1783, 1788, 1789, 1780, 1792, 1790, 1780, 1782, - 1784, 1794, 1796, 1787, 1795, 1797, 1798, 1776, 1802, 1779, - 1783, 1790, 1795, 1785, 1782, 0, 1788, 1785, 1787, 1805, - 1788, 1789, 1804, 1792, 1790, 1803, 1806, 1797, 1794, 1796, - 1803, 1795, 1797, 1798, 1802, 1802, 1804, 1805, 1807, 1808, - 1810, 1813, 1809, 1812, 1815, 1816, 1805, 1817, 1806, 1804, - 1809, 1807, 1803, 1806, 1814, 1812, 1815, 1818, 1819, 1810, - 1820, 1808, 1822, 1813, 1821, 1807, 1808, 1810, 1813, 1809, - 1812, 1815, 1816, 1824, 1817, 1823, 1814, 1818, 1825, 1826, - - 1819, 1814, 1829, 1833, 1818, 1819, 1821, 1823, 1822, 1822, - 1831, 1821, 1820, 1830, 1832, 1824, 1829, 1834, 1830, 1837, - 1824, 1835, 1823, 1840, 1836, 1825, 1826, 1839, 1838, 1829, - 0, 1837, 1831, 1842, 1843, 1833, 1832, 1831, 1840, 0, - 1834, 1832, 1836, 1835, 1834, 1830, 1837, 1838, 1835, 1839, - 1840, 1836, 1845, 1844, 1839, 1838, 1843, 1842, 1846, 1847, - 1842, 1843, 1844, 1848, 1849, 1852, 1845, 1853, 1855, 1857, - 1854, 1859, 1858, 1852, 1853, 1856, 1846, 1847, 1854, 1845, - 1844, 1865, 1849, 1856, 1858, 1846, 1847, 1857, 1862, 1848, - 1848, 1849, 1852, 1860, 1853, 1855, 1857, 1854, 1859, 1858, - - 1862, 1860, 1856, 1864, 1865, 1866, 1867, 1868, 1865, 1869, - 1864, 1871, 1874, 1872, 1881, 1862, 1876, 0, 1878, 1875, - 1860, 1887, 0, 0, 1886, 0, 1868, 1872, 1876, 1871, - 1864, 1869, 1875, 1867, 1868, 1874, 1869, 1866, 1871, 1874, - 1872, 1881, 1883, 1876, 1878, 1878, 1875, 1885, 1887, 1883, - 1886, 1886, 1888, 1889, 1885, 1890, 1891, 1892, 1893, 1894, - 1895, 1896, 1901, 1900, 1897, 1903, 1901, 1893, 1900, 1883, - 0, 1906, 1894, 1902, 1885, 1904, 1888, 1904, 1905, 1888, - 1889, 1890, 1890, 1891, 1892, 1893, 1894, 1897, 1896, 1901, - 1909, 1897, 1895, 0, 1902, 1900, 1910, 1903, 1906, 1915, - - 1902, 1905, 1904, 1913, 1912, 1905, 1912, 1916, 1914, 1914, - 1919, 1918, 1909, 1921, 0, 1917, 1916, 1909, 1914, 1923, - 1910, 1915, 1917, 1910, 1918, 1920, 1915, 1913, 1924, 1927, - 1913, 1912, 1921, 1920, 1916, 1914, 1914, 1919, 1918, 1922, - 1921, 1925, 1917, 1928, 1930, 1923, 1923, 1922, 1926, 1934, - 1928, 1927, 1920, 1931, 1924, 1924, 1927, 1929, 1929, 1926, - 1931, 1935, 1930, 1938, 1936, 1932, 1922, 1925, 1925, 1939, - 1928, 1930, 1932, 1936, 1940, 1926, 1934, 1941, 1944, 1942, - 1931, 1945, 0, 1948, 1929, 1935, 1946, 1944, 1935, 1939, - 1938, 1936, 1932, 1947, 1951, 1948, 1939, 1942, 1949, 1941, - - 1950, 1940, 1953, 1949, 1941, 1944, 1942, 1954, 1945, 1946, - 1948, 1947, 1951, 1946, 1950, 1957, 1955, 1957, 1959, 1962, - 1947, 1951, 1963, 0, 1969, 1954, 1964, 1950, 1966, 1953, - 1949, 1955, 1967, 1959, 1954, 1967, 1970, 1975, 1977, 1973, - 1971, 1962, 1957, 1955, 1964, 1959, 1962, 1971, 1963, 1963, - 1966, 1969, 1972, 1964, 1970, 1966, 1976, 1982, 1967, 1967, - 1972, 1973, 1967, 1970, 1978, 1977, 1973, 1971, 1979, 1975, - 1980, 1981, 1984, 1978, 1979, 1983, 1986, 1983, 1976, 1972, - 1981, 1987, 1988, 1976, 1986, 1992, 1989, 1990, 1991, 1982, - 1997, 1978, 1980, 1987, 1995, 1979, 1992, 1980, 1981, 1984, - - 1989, 1994, 1983, 1986, 1996, 1996, 1991, 2000, 1987, 1988, - 1990, 1993, 1992, 1989, 1990, 1991, 1995, 1997, 1998, 1993, - 1994, 1995, 2001, 2003, 2005, 2006, 1998, 0, 1994, 2003, - 2009, 1996, 2007, 2010, 2000, 2011, 2006, 2014, 1993, 2011, - 2010, 2017, 2018, 2015, 2019, 1998, 2017, 2012, 2020, 2001, - 2003, 2005, 2006, 2021, 2007, 2012, 2015, 2009, 2022, 2007, - 2010, 2021, 2011, 2014, 2014, 2023, 2020, 2024, 2017, 2018, - 2015, 2019, 2023, 2022, 2012, 2020, 2025, 2030, 2026, 2029, - 2021, 2028, 0, 2031, 2038, 2022, 2029, 2032, 2033, 0, - 2035, 2036, 2023, 2037, 2024, 0, 2028, 2033, 2040, 2042, - - 2025, 2037, 2045, 2025, 2026, 2026, 2029, 2049, 2028, 2030, - 2031, 2032, 2035, 2036, 2032, 2033, 2038, 2035, 2036, 2043, - 2037, 2039, 2039, 2046, 2047, 2040, 2042, 2043, 2050, 2045, - 2048, 2039, 2051, 2054, 2049, 2057, 2052, 2047, 2060, 2059, - 2062, 2063, 0, 2057, 2059, 2046, 2043, 2066, 2039, 2039, - 2046, 2047, 2048, 2065, 2063, 2050, 2067, 2048, 2052, 2051, - 2054, 2072, 2057, 2052, 2060, 2060, 2059, 2062, 2063, 2064, - 2071, 2065, 2070, 2073, 2066, 2075, 2064, 2076, 2067, 2077, - 2065, 0, 2075, 2067, 2076, 2070, 2079, 2082, 2072, 2071, - 2078, 2081, 0, 0, 2082, 2073, 2064, 2071, 2085, 2070, - - 2073, 2077, 2075, 2084, 2076, 2078, 2077, 2079, 2083, 2085, - 2081, 2088, 2084, 2079, 2082, 2083, 2087, 2078, 2081, 2086, - 2086, 2091, 2087, 2093, 2094, 2085, 2095, 2099, 2091, 2086, - 2084, 2101, 2103, 2088, 2105, 2083, 2102, 2102, 2088, 0, - 2109, 0, 0, 2087, 2110, 0, 2086, 2086, 2091, 2095, - 2093, 2094, 2114, 2095, 2099, 2103, 2107, 2106, 2101, 2103, - 2111, 2105, 2115, 2116, 2110, 2102, 2106, 2109, 2113, 2107, - 2114, 2110, 2111, 2117, 2118, 2119, 2120, 2113, 2121, 2114, - 2122, 2123, 2122, 2107, 2106, 2124, 2118, 2111, 2115, 2115, - 2116, 2124, 2125, 2123, 2126, 2113, 2127, 2119, 2128, 2131, - - 2117, 2118, 2119, 2120, 2127, 2134, 2135, 2122, 2123, 2136, - 2121, 2138, 2124, 2139, 2125, 2141, 2126, 2143, 2144, 2125, - 2142, 2126, 2145, 2127, 2149, 2128, 2131, 2152, 2148, 2138, - 2144, 0, 2134, 2135, 2151, 2142, 2136, 2148, 2138, 2153, - 2139, 2154, 2141, 2143, 2143, 2144, 2155, 2142, 2149, 2145, - 2163, 2149, 2153, 2156, 2155, 2148, 2157, 2168, 2151, 2152, - 0, 2151, 2156, 2154, 2166, 2167, 2153, 2157, 2154, 2171, - 2168, 2170, 2167, 2155, 2163, 2170, 2172, 2163, 2174, 2173, - 2156, 2175, 2178, 2157, 2168, 2171, 2174, 2166, 2176, 2180, - 2175, 2166, 2167, 2173, 2178, 2177, 2171, 2177, 2170, 2176, - - 2179, 2181, 2172, 2172, 2182, 2174, 2173, 2179, 2175, 2178, - 2183, 2184, 2186, 2187, 2190, 2176, 2180, 2185, 2188, 2181, - 2188, 2189, 2177, 2192, 0, 2200, 0, 2179, 2181, 2191, - 2201, 2182, 2198, 2189, 2186, 2187, 2183, 2183, 2184, 2186, - 2187, 2185, 2191, 2194, 2185, 2188, 2190, 2203, 2189, 2196, - 2192, 2198, 2199, 2202, 2206, 2194, 2191, 2200, 2196, 2198, - 2199, 2203, 2201, 2204, 2207, 2209, 2202, 2206, 2210, 2211, - 2194, 2204, 2208, 2209, 2203, 2213, 2196, 2212, 2214, 2199, - 2202, 2206, 2210, 2211, 2216, 2212, 2217, 2207, 2218, 2223, - 2204, 2207, 2209, 2215, 2208, 2210, 2211, 2213, 0, 2208, - - 2214, 2215, 2213, 2219, 2212, 2214, 2220, 2221, 2222, 2224, - 2230, 2216, 2227, 0, 2218, 2218, 2222, 0, 2217, 2226, - 2215, 2223, 0, 2228, 2232, 2219, 2251, 2226, 2220, 2221, - 2219, 2228, 2227, 2220, 2221, 2222, 2224, 2229, 2232, 2227, - 2231, 2234, 2230, 2235, 2234, 2229, 2226, 2236, 2231, 2237, - 2228, 2232, 2238, 2251, 2239, 2236, 2240, 2237, 2242, 2234, - 2241, 2241, 2244, 0, 2229, 2235, 2238, 2231, 2234, 2243, - 2235, 2234, 2245, 2246, 2236, 0, 2237, 2243, 2240, 2238, - 2239, 2239, 2247, 2240, 2242, 2242, 2248, 2241, 2244, 2244, - 2249, 2250, 2255, 2257, 2248, 2246, 2243, 2254, 2245, 2245, - - 2246, 2252, 2247, 2253, 2260, 2254, 0, 2256, 0, 2247, - 2261, 2266, 2249, 2248, 2255, 2256, 2250, 2249, 2250, 2255, - 2257, 2252, 2264, 2253, 2254, 2258, 2260, 2262, 2252, 2269, - 2253, 2260, 2261, 2258, 2256, 2262, 2263, 2261, 2266, 2267, - 2270, 2271, 2268, 2273, 2263, 2274, 0, 2267, 2264, 2264, - 2268, 2275, 2258, 2277, 2262, 2269, 2269, 2280, 2283, 2284, - 0, 2271, 0, 2263, 0, 2281, 2267, 2270, 2271, 2268, - 2273, 2275, 2274, 2281, 2282, 2277, 0, 0, 2275, 2280, - 2277, 0, 2282, 0, 2280, 2283, 2284, 0, 0, 0, - 0, 0, 2281, 0, 0, 0, 0, 0, 0, 0, - - 0, 2282, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2289, - 2289, 2289, 2289, 2289, 2289, 2289, 2290, 2290, 2290, 2290, - 2290, 2290, 2290, 2291, 2291, 2291, 2291, 2291, 2291, 2291, - 2292, 2292, 2292, 2292, 2292, 2292, 2292, 2294, 2294, 0, - 2294, 2294, 2294, 2294, 2295, 2295, 0, 0, 0, 2295, - 2295, 2296, 2296, 0, 0, 2296, 0, 2296, 2297, 0, - 0, 0, 0, 0, 2297, 2298, 2298, 0, 0, 0, - 2298, 2298, 2299, 0, 0, 0, 0, 0, 2299, 2300, - 2300, 0, 2300, 2300, 2300, 2300, 2301, 2301, 0, 2301, - 2301, 2301, 2301, 2287, 2287, 2287, 2287, 2287, 2287, 2287, - - 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, - 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, - 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, - 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, - 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, - 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287 + 141, 78, 24, 22, 35, 698, 22, 23, 78, 27, + + 67, 23, 27, 884, 23, 29, 23, 23, 140, 27, + 29, 27, 138, 38, 67, 38, 136, 32, 78, 23, + 137, 32, 27, 137, 23, 134, 27, 31, 23, 27, + 38, 23, 77, 23, 23, 31, 27, 32, 27, 38, + 38, 31, 38, 32, 32, 31, 69, 41, 32, 41, + 41, 63, 41, 31, 31, 77, 238, 38, 41, 77, + 58, 36, 31, 82, 32, 36, 53, 79, 31, 83, + 52, 81, 31, 34, 39, 36, 122, 34, 36, 47, + 81, 82, 83, 34, 39, 238, 34, 36, 36, 39, + 82, 79, 36, 34, 79, 34, 83, 39, 81, 40, + + 34, 39, 36, 40, 34, 36, 89, 40, 122, 149, + 34, 39, 57, 34, 57, 57, 39, 57, 86, 89, + 34, 37, 42, 86, 37, 40, 40, 135, 135, 14, + 40, 37, 13, 89, 40, 37, 37, 65, 0, 65, + 65, 149, 65, 37, 68, 86, 68, 68, 37, 68, + 70, 37, 70, 70, 73, 70, 73, 73, 37, 73, + 80, 70, 37, 37, 84, 73, 87, 85, 85, 0, + 84, 88, 90, 80, 87, 65, 85, 92, 94, 90, + 91, 93, 142, 142, 80, 84, 92, 80, 95, 88, + 93, 84, 73, 87, 85, 85, 91, 84, 96, 90, + + 80, 94, 98, 88, 92, 94, 97, 91, 93, 97, + 95, 96, 99, 0, 0, 95, 88, 101, 100, 103, + 99, 101, 97, 97, 102, 96, 98, 102, 0, 104, + 97, 126, 103, 97, 98, 105, 97, 0, 100, 99, + 100, 101, 126, 106, 101, 100, 103, 107, 101, 97, + 97, 102, 104, 98, 108, 105, 104, 106, 126, 109, + 110, 111, 105, 112, 118, 100, 109, 107, 108, 110, + 106, 113, 112, 114, 107, 113, 118, 115, 116, 0, + 114, 108, 121, 117, 111, 116, 109, 110, 111, 117, + 112, 118, 124, 113, 0, 127, 121, 117, 113, 119, + + 114, 127, 113, 115, 115, 116, 120, 119, 123, 121, + 117, 125, 124, 128, 130, 161, 117, 120, 124, 124, + 125, 120, 127, 123, 128, 129, 119, 131, 132, 133, + 120, 148, 0, 120, 0, 123, 130, 132, 125, 124, + 128, 130, 131, 0, 120, 147, 129, 161, 120, 275, + 129, 133, 129, 148, 131, 132, 133, 139, 148, 139, + 139, 144, 139, 144, 144, 145, 144, 145, 145, 147, + 145, 150, 147, 129, 151, 152, 275, 153, 155, 154, + 156, 157, 158, 150, 0, 153, 160, 156, 158, 159, + 151, 154, 164, 0, 152, 0, 0, 281, 150, 157, + + 155, 151, 152, 145, 153, 155, 154, 156, 157, 166, + 167, 159, 160, 160, 158, 158, 159, 162, 164, 164, + 165, 162, 168, 169, 281, 174, 168, 171, 165, 170, + 172, 166, 167, 175, 174, 181, 166, 167, 162, 0, + 171, 176, 172, 0, 0, 162, 169, 165, 162, 168, + 169, 170, 174, 0, 171, 175, 170, 172, 173, 178, + 175, 173, 0, 176, 0, 162, 163, 181, 176, 182, + 179, 163, 184, 173, 0, 177, 163, 179, 0, 180, + 177, 178, 163, 163, 187, 173, 178, 185, 173, 163, + 180, 189, 177, 163, 177, 182, 182, 179, 163, 190, + + 183, 177, 177, 163, 184, 185, 180, 177, 188, 163, + 163, 183, 186, 191, 185, 192, 187, 194, 186, 177, + 193, 177, 195, 189, 194, 200, 0, 197, 0, 192, + 188, 190, 183, 191, 198, 188, 199, 200, 183, 186, + 191, 193, 192, 195, 194, 196, 197, 193, 198, 195, + 196, 201, 200, 202, 197, 203, 204, 207, 199, 0, + 202, 198, 201, 199, 205, 204, 206, 208, 208, 209, + 212, 206, 196, 211, 0, 213, 208, 203, 201, 210, + 202, 215, 203, 204, 214, 218, 210, 205, 216, 207, + 212, 205, 214, 206, 208, 208, 217, 212, 211, 219, + + 211, 209, 220, 216, 225, 221, 210, 213, 218, 221, + 222, 214, 223, 215, 224, 216, 226, 218, 227, 220, + 223, 228, 217, 217, 234, 222, 234, 220, 235, 220, + 229, 219, 221, 224, 230, 218, 225, 222, 226, 223, + 227, 224, 229, 226, 236, 227, 220, 230, 233, 231, + 232, 234, 235, 228, 237, 235, 239, 229, 231, 240, + 243, 230, 241, 232, 246, 239, 244, 233, 242, 236, + 247, 236, 243, 245, 249, 233, 231, 232, 250, 242, + 237, 237, 246, 239, 248, 240, 240, 243, 241, 241, + 244, 246, 251, 244, 252, 242, 245, 248, 254, 0, + + 245, 253, 247, 255, 250, 250, 249, 254, 253, 255, + 256, 248, 257, 0, 251, 262, 258, 0, 259, 251, + 261, 260, 263, 266, 256, 254, 252, 259, 253, 261, + 255, 263, 264, 267, 270, 265, 268, 256, 257, 257, + 258, 262, 262, 258, 260, 259, 271, 261, 260, 263, + 265, 268, 270, 0, 272, 266, 264, 267, 269, 264, + 267, 270, 265, 268, 271, 273, 269, 269, 272, 269, + 271, 276, 0, 271, 274, 274, 269, 0, 278, 277, + 273, 272, 277, 0, 283, 269, 279, 0, 289, 277, + 278, 271, 273, 269, 269, 276, 269, 280, 276, 274, + + 282, 274, 274, 285, 279, 278, 277, 284, 286, 277, + 283, 283, 0, 279, 287, 280, 288, 291, 292, 284, + 289, 287, 282, 286, 280, 285, 290, 282, 288, 293, + 285, 0, 294, 290, 284, 286, 296, 0, 294, 291, + 295, 287, 295, 288, 291, 299, 300, 0, 0, 296, + 292, 293, 298, 290, 294, 297, 293, 0, 297, 294, + 297, 324, 304, 296, 295, 294, 297, 295, 300, 295, + 298, 302, 301, 300, 304, 303, 306, 299, 302, 298, + 301, 303, 297, 305, 307, 297, 301, 297, 310, 304, + 311, 328, 306, 324, 347, 311, 305, 307, 302, 301, + + 306, 309, 303, 306, 313, 0, 310, 301, 312, 315, + 305, 307, 313, 309, 312, 310, 315, 314, 317, 306, + 308, 308, 311, 328, 0, 316, 347, 317, 309, 314, + 308, 313, 308, 308, 308, 312, 315, 308, 316, 318, + 322, 0, 319, 318, 314, 308, 320, 308, 308, 319, + 317, 321, 316, 320, 317, 326, 323, 308, 325, 308, + 308, 308, 322, 321, 308, 325, 318, 322, 323, 319, + 326, 327, 329, 320, 329, 330, 332, 332, 321, 331, + 333, 334, 326, 323, 327, 325, 330, 333, 337, 335, + 336, 338, 334, 0, 0, 340, 339, 341, 327, 329, + + 335, 331, 330, 336, 340, 332, 331, 333, 334, 343, + 341, 339, 0, 337, 338, 337, 335, 336, 338, 339, + 344, 342, 340, 339, 341, 346, 345, 343, 351, 348, + 349, 350, 342, 352, 342, 348, 343, 353, 339, 342, + 352, 357, 344, 346, 355, 358, 359, 344, 342, 345, + 351, 349, 346, 345, 350, 351, 348, 349, 350, 342, + 352, 342, 354, 353, 353, 356, 355, 357, 357, 359, + 362, 355, 360, 359, 361, 363, 354, 358, 360, 356, + 364, 365, 0, 366, 367, 368, 0, 369, 362, 354, + 363, 368, 356, 371, 372, 364, 361, 362, 373, 360, + + 372, 361, 363, 376, 365, 374, 367, 364, 365, 366, + 366, 367, 368, 369, 369, 375, 380, 373, 376, 371, + 371, 372, 375, 374, 378, 373, 378, 379, 381, 380, + 376, 382, 374, 378, 379, 383, 385, 384, 386, 387, + 0, 388, 375, 380, 389, 0, 387, 391, 390, 382, + 384, 378, 0, 378, 379, 385, 0, 383, 382, 394, + 381, 390, 383, 385, 384, 388, 387, 389, 388, 391, + 386, 395, 392, 393, 391, 390, 389, 392, 397, 393, + 396, 400, 394, 395, 398, 0, 394, 401, 400, 397, + 0, 403, 398, 402, 389, 401, 0, 0, 395, 392, + + 393, 403, 396, 422, 402, 397, 0, 396, 400, 405, + 0, 398, 399, 404, 401, 406, 408, 399, 408, 399, + 402, 407, 406, 403, 404, 409, 0, 399, 403, 410, + 399, 0, 0, 405, 411, 422, 405, 399, 399, 399, + 404, 410, 406, 408, 399, 413, 399, 407, 407, 411, + 412, 409, 409, 413, 399, 414, 410, 399, 415, 417, + 414, 411, 412, 416, 399, 421, 418, 417, 419, 423, + 424, 425, 413, 426, 427, 430, 429, 412, 418, 424, + 415, 416, 414, 428, 423, 415, 417, 426, 421, 419, + 416, 431, 421, 418, 425, 419, 423, 424, 425, 427, + + 426, 427, 428, 429, 432, 433, 431, 430, 0, 0, + 428, 434, 435, 0, 438, 436, 437, 438, 431, 439, + 433, 440, 442, 443, 435, 438, 440, 444, 445, 446, + 439, 441, 433, 447, 452, 434, 432, 436, 434, 435, + 437, 438, 436, 437, 438, 441, 439, 449, 448, 442, + 443, 451, 450, 440, 448, 445, 446, 452, 441, 444, + 450, 452, 453, 454, 455, 447, 456, 458, 460, 449, + 451, 0, 0, 455, 449, 448, 457, 0, 451, 450, + 459, 460, 463, 457, 0, 469, 454, 461, 456, 462, + 454, 455, 461, 456, 453, 460, 461, 464, 462, 458, + + 465, 468, 459, 457, 466, 467, 464, 459, 463, 463, + 471, 461, 470, 468, 461, 0, 462, 469, 467, 461, + 472, 476, 465, 461, 464, 475, 466, 465, 468, 473, + 470, 466, 467, 474, 471, 476, 475, 471, 479, 470, + 477, 478, 472, 472, 481, 482, 480, 472, 476, 479, + 483, 473, 475, 485, 484, 474, 473, 488, 487, 478, + 474, 480, 477, 490, 489, 479, 482, 477, 478, 472, + 486, 487, 482, 480, 483, 485, 481, 483, 484, 486, + 485, 484, 491, 492, 494, 487, 489, 493, 495, 488, + 496, 489, 493, 497, 498, 490, 500, 486, 494, 499, + + 0, 497, 495, 501, 0, 492, 491, 502, 503, 491, + 492, 494, 498, 503, 499, 495, 504, 0, 501, 493, + 497, 498, 496, 499, 506, 505, 499, 505, 500, 502, + 501, 507, 508, 513, 502, 509, 510, 514, 511, 507, + 503, 499, 504, 504, 509, 510, 511, 512, 519, 506, + 0, 506, 505, 550, 512, 514, 513, 508, 507, 508, + 513, 515, 509, 510, 514, 511, 516, 518, 517, 520, + 521, 0, 522, 515, 512, 516, 517, 520, 521, 518, + 519, 523, 524, 526, 525, 550, 0, 0, 515, 529, + 524, 527, 530, 516, 518, 517, 520, 521, 522, 522, + + 525, 531, 527, 529, 523, 526, 528, 532, 523, 524, + 526, 525, 530, 533, 528, 534, 529, 535, 527, 530, + 537, 536, 0, 531, 540, 544, 535, 532, 531, 541, + 538, 539, 542, 528, 532, 533, 546, 534, 537, 543, + 533, 536, 534, 538, 535, 543, 540, 537, 536, 539, + 547, 540, 544, 541, 545, 542, 541, 538, 539, 542, + 551, 549, 545, 546, 553, 554, 543, 551, 547, 549, + 552, 555, 562, 557, 554, 556, 0, 547, 0, 553, + 545, 545, 557, 558, 562, 558, 565, 551, 549, 545, + 568, 553, 554, 552, 556, 569, 565, 552, 559, 562, + + 557, 570, 556, 555, 578, 559, 578, 573, 568, 571, + 558, 572, 0, 565, 0, 576, 569, 568, 577, 575, + 579, 576, 569, 580, 570, 559, 560, 577, 570, 581, + 560, 578, 582, 560, 601, 571, 571, 572, 572, 573, + 560, 575, 576, 560, 579, 577, 575, 579, 560, 581, + 580, 583, 586, 560, 584, 0, 581, 560, 582, 582, + 560, 601, 0, 583, 585, 587, 0, 560, 588, 589, + 560, 574, 574, 0, 574, 590, 586, 574, 583, 586, + 584, 584, 574, 590, 589, 591, 585, 587, 574, 574, + 603, 585, 587, 588, 594, 588, 589, 574, 574, 574, + + 592, 574, 590, 593, 574, 595, 596, 592, 591, 574, + 597, 593, 591, 594, 599, 574, 574, 598, 596, 0, + 600, 594, 603, 597, 602, 604, 598, 592, 605, 599, + 593, 595, 595, 596, 607, 606, 609, 597, 610, 608, + 0, 599, 600, 613, 598, 609, 602, 600, 611, 0, + 615, 602, 605, 607, 614, 605, 606, 604, 608, 612, + 610, 607, 606, 609, 616, 610, 608, 612, 611, 615, + 613, 617, 614, 619, 620, 611, 623, 615, 621, 617, + 624, 614, 622, 625, 628, 626, 612, 628, 632, 623, + 627, 619, 620, 626, 0, 625, 616, 631, 617, 0, + + 619, 620, 621, 623, 622, 621, 624, 624, 627, 622, + 625, 628, 626, 629, 633, 632, 634, 627, 639, 635, + 633, 629, 631, 636, 631, 635, 637, 638, 640, 0, + 636, 637, 647, 641, 638, 650, 639, 629, 634, 642, + 629, 633, 641, 634, 643, 639, 635, 642, 629, 644, + 636, 640, 645, 637, 638, 640, 646, 649, 652, 647, + 641, 648, 643, 659, 644, 645, 642, 650, 648, 653, + 649, 643, 656, 651, 654, 657, 644, 646, 655, 645, + 651, 657, 654, 646, 649, 658, 655, 663, 648, 661, + 652, 660, 653, 655, 656, 659, 653, 664, 661, 656, + + 651, 654, 657, 662, 664, 655, 665, 667, 668, 669, + 0, 658, 658, 655, 666, 660, 661, 662, 660, 663, + 668, 670, 672, 666, 664, 672, 673, 0, 678, 670, + 662, 675, 669, 665, 667, 668, 669, 676, 675, 673, + 0, 666, 681, 676, 681, 679, 0, 680, 670, 672, + 683, 0, 682, 673, 678, 678, 686, 685, 675, 680, + 684, 686, 683, 687, 676, 677, 0, 677, 679, 681, + 685, 677, 679, 677, 680, 682, 687, 683, 677, 682, + 688, 689, 684, 677, 685, 2133, 2133, 684, 686, 677, + 687, 690, 677, 689, 677, 691, 692, 697, 677, 695, + + 677, 690, 694, 688, 696, 677, 693, 688, 689, 692, + 677, 0, 693, 690, 2133, 694, 700, 691, 690, 701, + 695, 702, 691, 692, 697, 703, 695, 704, 690, 694, + 706, 700, 707, 693, 702, 713, 696, 699, 705, 708, + 703, 701, 699, 700, 699, 707, 701, 708, 702, 706, + 709, 710, 703, 704, 704, 699, 711, 706, 709, 707, + 705, 714, 699, 699, 699, 705, 708, 713, 715, 699, + 716, 699, 717, 719, 718, 720, 715, 709, 710, 711, + 721, 719, 699, 711, 716, 714, 723, 724, 714, 699, + 726, 732, 722, 720, 0, 715, 718, 716, 721, 727, + + 719, 718, 720, 722, 717, 724, 727, 721, 725, 728, + 730, 731, 726, 729, 724, 737, 725, 726, 723, 722, + 729, 734, 728, 732, 735, 738, 727, 737, 730, 731, + 736, 739, 735, 740, 734, 725, 728, 730, 731, 736, + 729, 741, 737, 742, 743, 746, 753, 738, 734, 747, + 744, 735, 738, 739, 747, 740, 746, 736, 739, 741, + 740, 0, 748, 749, 744, 748, 750, 751, 741, 742, + 742, 752, 746, 754, 751, 755, 743, 744, 753, 750, + 754, 747, 757, 752, 758, 756, 759, 749, 748, 748, + 749, 756, 748, 750, 751, 760, 761, 759, 752, 755, + + 754, 762, 755, 764, 757, 766, 758, 767, 765, 757, + 0, 758, 756, 759, 770, 768, 762, 760, 761, 765, + 769, 775, 760, 761, 764, 780, 766, 771, 762, 769, + 764, 772, 766, 768, 767, 765, 771, 773, 770, 772, + 776, 770, 768, 774, 773, 781, 777, 769, 783, 780, + 779, 782, 780, 775, 771, 784, 785, 774, 772, 779, + 782, 781, 776, 783, 773, 788, 0, 776, 777, 786, + 774, 787, 781, 777, 789, 783, 790, 779, 782, 791, + 0, 786, 789, 795, 794, 0, 793, 784, 785, 790, + 803, 795, 788, 787, 791, 793, 786, 796, 787, 796, + + 798, 789, 794, 790, 800, 802, 791, 801, 798, 804, + 795, 794, 802, 793, 0, 805, 0, 800, 806, 801, + 0, 811, 803, 808, 796, 807, 809, 798, 0, 810, + 812, 800, 802, 811, 801, 813, 808, 805, 812, 809, + 0, 804, 805, 806, 816, 806, 814, 807, 811, 819, + 808, 810, 807, 809, 818, 813, 810, 812, 814, 815, + 825, 817, 813, 818, 0, 820, 0, 815, 821, 824, + 819, 816, 820, 814, 817, 823, 819, 821, 830, 821, + 825, 818, 821, 827, 826, 828, 815, 825, 817, 0, + 821, 824, 820, 832, 828, 821, 824, 826, 829, 835, + + 830, 823, 823, 0, 821, 830, 821, 827, 836, 821, + 827, 826, 828, 831, 833, 832, 829, 838, 837, 839, + 832, 831, 833, 841, 842, 829, 835, 839, 0, 838, + 840, 836, 844, 846, 0, 836, 837, 852, 844, 842, + 831, 833, 840, 841, 838, 837, 839, 843, 850, 845, + 841, 842, 847, 854, 846, 843, 848, 840, 845, 844, + 846, 849, 856, 848, 847, 853, 850, 857, 849, 852, + 855, 866, 854, 0, 843, 850, 845, 855, 853, 847, + 854, 858, 857, 848, 856, 859, 858, 860, 849, 856, + 861, 864, 853, 859, 857, 862, 0, 855, 865, 0, + + 860, 0, 867, 866, 861, 864, 869, 0, 868, 0, + 0, 878, 859, 858, 860, 0, 865, 861, 864, 879, + 870, 862, 862, 863, 869, 865, 863, 863, 867, 867, + 868, 863, 873, 869, 871, 868, 872, 863, 875, 873, + 877, 863, 870, 878, 876, 863, 881, 870, 874, 877, + 863, 879, 880, 863, 863, 883, 871, 876, 863, 873, + 875, 871, 872, 872, 863, 875, 874, 877, 863, 881, + 885, 876, 887, 881, 880, 874, 888, 892, 890, 880, + 882, 883, 883, 889, 893, 882, 885, 882, 888, 882, + 892, 882, 889, 897, 895, 887, 890, 885, 882, 887, + + 894, 891, 893, 888, 892, 890, 891, 882, 894, 896, + 889, 893, 882, 895, 882, 897, 882, 898, 882, 899, + 897, 895, 896, 900, 901, 902, 901, 894, 903, 904, + 898, 905, 900, 891, 909, 907, 896, 899, 908, 910, + 912, 904, 909, 0, 898, 915, 899, 902, 913, 0, + 900, 901, 902, 921, 917, 903, 904, 911, 905, 907, + 908, 909, 907, 914, 911, 908, 910, 912, 918, 914, + 913, 916, 915, 922, 919, 913, 917, 920, 916, 921, + 921, 917, 922, 924, 911, 923, 927, 918, 925, 928, + 914, 930, 929, 931, 0, 918, 919, 932, 916, 920, + + 922, 919, 925, 924, 920, 932, 923, 934, 0, 933, + 924, 931, 923, 937, 929, 925, 938, 937, 927, 929, + 931, 928, 935, 930, 932, 933, 936, 941, 940, 935, + 942, 939, 943, 936, 934, 940, 933, 939, 0, 944, + 937, 943, 941, 942, 939, 945, 948, 947, 938, 935, + 949, 0, 945, 936, 941, 940, 947, 942, 939, 943, + 946, 951, 946, 950, 939, 944, 944, 950, 948, 957, + 953, 954, 945, 948, 947, 955, 954, 949, 953, 956, + 958, 0, 957, 951, 961, 963, 0, 946, 951, 0, + 950, 964, 958, 955, 965, 0, 957, 953, 956, 962, + + 0, 959, 955, 954, 959, 960, 956, 958, 960, 961, + 965, 961, 962, 959, 964, 966, 968, 963, 964, 967, + 967, 965, 969, 966, 970, 968, 962, 960, 959, 971, + 973, 959, 960, 970, 0, 960, 971, 975, 974, 976, + 978, 0, 966, 968, 969, 975, 967, 974, 977, 969, + 979, 970, 978, 973, 976, 980, 971, 973, 981, 982, + 984, 977, 979, 980, 975, 974, 976, 978, 983, 984, + 985, 991, 986, 988, 990, 977, 0, 979, 989, 982, + 981, 987, 980, 992, 989, 981, 982, 984, 985, 996, + 983, 993, 998, 987, 988, 983, 990, 985, 986, 986, + + 988, 990, 994, 991, 997, 989, 1002, 0, 987, 1000, + 998, 999, 1001, 0, 1003, 992, 996, 993, 993, 998, + 999, 1006, 1000, 1004, 1001, 1005, 1002, 997, 994, 994, + 1004, 997, 1007, 1002, 1008, 1015, 1000, 0, 999, 1001, + 1003, 1003, 1008, 1006, 1005, 1007, 1009, 1012, 1006, 1010, + 1004, 1009, 1005, 1011, 1010, 1012, 1013, 1014, 1017, 1007, + 1011, 1008, 1016, 1016, 1013, 1014, 1017, 1015, 1019, 1018, + 1025, 1020, 0, 0, 1012, 1024, 1025, 0, 1009, 1020, + 1011, 1010, 1027, 1013, 1014, 1017, 1021, 1022, 1024, 1016, + 1018, 1023, 1026, 1028, 1021, 1022, 1018, 1025, 1020, 1023, + + 1019, 1029, 1024, 1030, 1026, 1031, 1032, 1033, 1027, 1027, + 1035, 1040, 1039, 1021, 1022, 0, 1029, 1028, 1023, 1026, + 1028, 1033, 1034, 1039, 1035, 1041, 0, 1031, 1029, 1032, + 1030, 1036, 1031, 1032, 1033, 1036, 1038, 1035, 1040, 1039, + 1034, 1042, 1043, 1038, 1044, 1045, 1046, 1041, 1036, 1034, + 1047, 1044, 1041, 1046, 1045, 1054, 1036, 1048, 1036, 1052, + 0, 1050, 1036, 1038, 1042, 1043, 1053, 1056, 1042, 1043, + 1050, 1044, 1045, 1046, 1058, 1036, 1061, 1064, 1059, 1064, + 1062, 1052, 1047, 1063, 1048, 1065, 1052, 1054, 1050, 1059, + 1068, 1067, 1053, 1053, 1056, 1063, 1066, 1069, 1070, 0, + + 1061, 1058, 1068, 1061, 1064, 1059, 1062, 1062, 1071, 1066, + 1063, 1065, 1065, 1067, 1072, 1071, 1074, 1068, 1067, 1075, + 1076, 1070, 1073, 1066, 1069, 1070, 1077, 1073, 1076, 1079, + 1080, 1081, 1074, 1082, 1091, 1071, 0, 0, 0, 1080, + 1072, 1072, 1075, 1074, 1081, 1083, 1075, 1076, 1077, 1073, + 1086, 1087, 1090, 1077, 1084, 1085, 1079, 1080, 1081, 1082, + 1082, 1084, 1085, 1088, 1089, 1093, 1091, 1083, 1086, 1092, + 1088, 1095, 1083, 1087, 1090, 1096, 1092, 1086, 1087, 1090, + 1097, 1084, 1085, 1098, 1095, 1101, 1111, 1102, 1097, 1089, + 1088, 1089, 1100, 1103, 1104, 1100, 1092, 1093, 1095, 1106, + + 0, 1107, 1096, 1104, 1098, 1105, 1103, 1097, 1109, 1108, + 1098, 1101, 1101, 1102, 1102, 1109, 1112, 1105, 1111, 1100, + 1103, 1104, 1110, 1106, 1108, 1110, 1106, 1107, 1107, 1113, + 1116, 1114, 1105, 1117, 1118, 1109, 1108, 1110, 1112, 1115, + 1120, 1115, 1119, 1112, 1122, 0, 1110, 1113, 1120, 1110, + 1123, 1119, 1110, 1114, 1116, 1121, 1113, 1116, 1114, 1124, + 1118, 1118, 1121, 1126, 1110, 1117, 1115, 1120, 1127, 1119, + 1125, 1128, 1123, 1130, 1125, 1129, 1122, 1123, 1135, 1131, + 1130, 1132, 1121, 1133, 1129, 1126, 1131, 1136, 1134, 1169, + 1126, 1124, 1135, 1128, 1132, 1127, 1133, 1125, 1128, 1139, + + 1130, 1142, 1129, 1134, 1137, 1135, 1131, 1138, 1132, 1145, + 1133, 1137, 1139, 1143, 1138, 1134, 1140, 1144, 1146, 1136, + 1143, 1169, 1140, 1150, 1147, 0, 1139, 1152, 1142, 1148, + 1146, 1137, 1148, 1149, 1138, 1145, 1145, 1147, 1159, 1144, + 1143, 1150, 1149, 1140, 1144, 1146, 1151, 1152, 1154, 1153, + 1150, 1147, 1153, 1158, 1152, 1158, 1148, 1156, 1151, 1154, + 1149, 1160, 1156, 1161, 1162, 1159, 1164, 1153, 1165, 1156, + 1163, 1170, 1162, 1151, 1166, 1154, 1153, 1164, 1167, 1153, + 1158, 1167, 1166, 0, 1156, 1168, 1165, 1161, 1160, 1156, + 1161, 1162, 1163, 1164, 1174, 1165, 1167, 1163, 1170, 1171, + + 1172, 1166, 1173, 1168, 1175, 1167, 1171, 1174, 1167, 1176, + 1179, 1173, 1168, 1180, 1172, 1175, 1178, 1181, 1178, 1179, + 1182, 1174, 0, 1183, 1176, 1186, 1171, 1172, 1181, 1173, + 1185, 1175, 1184, 1185, 1186, 1189, 1176, 1179, 1182, 1180, + 1180, 1191, 1190, 1178, 1181, 1183, 1184, 1182, 1185, 1187, + 1183, 1190, 1186, 1192, 1187, 1193, 1194, 1185, 1184, 1184, + 1185, 1198, 1195, 1197, 1199, 1205, 0, 1189, 1191, 1190, + 1197, 0, 0, 1184, 1200, 1204, 1203, 1193, 1199, 1205, + 1200, 1187, 1193, 1195, 1203, 1192, 1206, 1209, 1194, 1195, + 1197, 1199, 1205, 1198, 1204, 1206, 1207, 1208, 1200, 1210, + + 1211, 1200, 1204, 1203, 1207, 1213, 1215, 1200, 1214, 1211, + 1210, 1208, 1216, 1206, 1217, 1214, 1218, 1220, 1222, 1209, + 1223, 1220, 1219, 1207, 1208, 0, 1210, 1211, 1225, 1215, + 1222, 1226, 1213, 1215, 1216, 1214, 1217, 1224, 1218, 1216, + 1219, 1217, 1227, 1218, 1220, 1222, 1226, 1223, 1225, 1219, + 1224, 1228, 1230, 1229, 1232, 1225, 1231, 1227, 1226, 1228, + 1229, 1233, 1234, 1232, 1224, 1236, 1235, 0, 1239, 1227, + 1240, 1231, 1238, 1242, 0, 0, 1241, 1243, 1228, 0, + 1229, 1232, 1233, 1231, 1230, 1248, 1239, 1246, 1233, 1234, + 1235, 1241, 1236, 1235, 1238, 1239, 1246, 1240, 1242, 1238, + + 1242, 1243, 1244, 1241, 1243, 1245, 1247, 1248, 1249, 1244, + 1245, 1251, 1248, 1250, 1246, 1247, 1256, 1252, 1253, 1257, + 1254, 0, 1255, 1251, 0, 1261, 1249, 1254, 1250, 1244, + 1260, 1253, 1245, 1247, 1255, 1249, 1253, 1260, 1251, 1252, + 1250, 1263, 1258, 1256, 1252, 1253, 1259, 1254, 1258, 1255, + 1264, 1257, 1261, 1262, 1259, 1265, 1264, 1260, 1253, 1267, + 1262, 1266, 1268, 1270, 1272, 1271, 1274, 1275, 1263, 1258, + 1273, 1277, 1273, 1259, 1271, 1276, 1281, 1264, 1284, 0, + 1262, 0, 1265, 1284, 1266, 0, 1268, 0, 1266, 1268, + 1274, 1267, 1271, 1274, 1275, 1270, 1272, 1273, 1278, 1278, + + 1278, 1276, 1276, 1277, 1279, 1278, 1285, 1280, 1281, 1282, + 1284, 1279, 1286, 1278, 1280, 1289, 1282, 1288, 1292, 1285, + 0, 1291, 1287, 1290, 1292, 1278, 1278, 1278, 1291, 1288, + 1293, 1279, 1278, 1285, 1280, 1295, 1282, 1286, 1287, 1286, + 1298, 1290, 1294, 1294, 1288, 1292, 1296, 1289, 1291, 1287, + 1290, 1297, 1299, 1296, 1302, 1304, 1297, 1293, 1303, 1305, + 1306, 1295, 1295, 1309, 1303, 1307, 1298, 1298, 1314, 1294, + 1317, 1305, 1302, 1296, 1308, 1308, 1310, 1310, 1297, 1299, + 1306, 1302, 1304, 1307, 1311, 1303, 1305, 1306, 1313, 1309, + 1309, 1315, 1307, 1316, 1318, 1311, 1319, 1320, 1315, 0, + + 1314, 1308, 1317, 1310, 1321, 1322, 1323, 0, 1326, 0, + 1313, 1311, 1322, 1316, 1323, 1313, 1325, 1326, 1315, 1320, + 1316, 1324, 1321, 1319, 1320, 1328, 1318, 1327, 1327, 1329, + 1330, 1321, 1322, 1323, 1332, 1326, 1324, 1333, 1337, 1335, + 1325, 1329, 1332, 1325, 1336, 1338, 1330, 1335, 1324, 1333, + 1339, 1328, 1328, 1330, 1327, 1341, 1329, 1330, 1345, 1337, + 1346, 1332, 1342, 1338, 1333, 1337, 1335, 1336, 1342, 1340, + 1343, 1336, 1338, 1330, 1340, 1347, 1348, 1339, 1349, 1344, + 1347, 1352, 1341, 1343, 1351, 1340, 1344, 1346, 1354, 1342, + 1345, 1350, 1350, 1355, 1356, 1358, 1340, 1343, 1357, 1351, + + 1357, 1340, 1360, 1354, 1361, 1363, 1344, 1347, 1348, 1356, + 1349, 1351, 1359, 1352, 1364, 1354, 1355, 1359, 1350, 1361, + 1355, 1356, 1365, 1366, 1368, 1357, 1367, 1358, 1372, 1363, + 1369, 1361, 1363, 1367, 1360, 0, 1370, 0, 1371, 1359, + 1364, 1364, 1374, 1376, 1381, 1377, 1372, 1379, 1382, 1365, + 1366, 1369, 1386, 1367, 0, 1372, 1368, 1369, 1370, 1371, + 1377, 1380, 1379, 1370, 1374, 1371, 1381, 1376, 1383, 1374, + 1376, 1381, 1377, 0, 1379, 1382, 1380, 1384, 1385, 1386, + 1387, 1389, 1393, 1388, 1390, 0, 1383, 1387, 1380, 1391, + 1389, 1392, 1390, 1394, 1397, 1383, 1401, 1407, 1396, 1384, + + 1385, 1388, 0, 1397, 1384, 1385, 1394, 1387, 1389, 1396, + 1388, 1390, 1391, 1392, 1393, 1398, 1391, 1399, 1392, 1403, + 1394, 1397, 1405, 1401, 1396, 1396, 1406, 1408, 1411, 1407, + 1403, 1409, 1412, 1398, 1405, 1399, 1396, 1408, 1410, 1406, + 1414, 1415, 1398, 1416, 1399, 0, 1403, 0, 1415, 1405, + 0, 1412, 0, 1406, 1408, 1411, 1417, 1409, 1409, 1412, + 1414, 1419, 1420, 1410, 1421, 1410, 1418, 1414, 1415, 1416, + 1416, 1424, 1418, 1423, 1417, 1426, 1419, 1420, 1428, 1421, + 1422, 1422, 1426, 1417, 1424, 1423, 1427, 1429, 1419, 1420, + 1430, 1421, 1424, 1418, 1431, 1436, 1429, 1430, 1424, 1433, + + 1423, 1427, 1426, 1432, 0, 1428, 1433, 1422, 1439, 1435, + 1437, 1424, 1438, 1427, 1429, 1441, 1442, 1430, 1431, 1437, + 1436, 1431, 1436, 1445, 1447, 1432, 1433, 1444, 1439, 1453, + 1432, 1435, 1448, 1441, 1438, 1439, 1435, 1437, 1449, 1438, + 1444, 1442, 1441, 1442, 1446, 1446, 1447, 1450, 1452, 1451, + 1445, 1447, 1455, 1456, 1444, 1452, 1454, 1448, 1451, 1448, + 1449, 1453, 1458, 1460, 1459, 1449, 1455, 1461, 0, 1450, + 1458, 1446, 1456, 1462, 1450, 1452, 1451, 1459, 1454, 1455, + 1456, 1463, 1464, 1454, 1465, 1462, 1467, 0, 1463, 1458, + 1460, 1459, 1466, 1461, 1461, 1468, 0, 1469, 1472, 1473, + + 1462, 1467, 1470, 1471, 1472, 1470, 1465, 0, 1463, 1474, + 0, 1465, 1477, 1467, 1464, 1478, 1475, 1466, 0, 1466, + 1470, 1468, 1468, 1469, 1469, 1472, 1473, 1474, 1471, 1470, + 1471, 1475, 1470, 1480, 1477, 1482, 1474, 1478, 1481, 1477, + 1483, 1489, 1478, 1475, 1482, 1481, 1488, 1480, 1485, 1487, + 1488, 1483, 1490, 1489, 1490, 1492, 1491, 1494, 1495, 1493, + 1480, 1485, 1482, 0, 1496, 1481, 1495, 1483, 1489, 1485, + 1487, 1497, 1511, 1488, 1491, 1485, 1487, 1493, 1498, 1490, + 1500, 1504, 1492, 1491, 1494, 1495, 1493, 1496, 1485, 1499, + 1501, 1496, 1498, 1497, 1499, 1506, 1507, 1501, 1497, 1500, + + 1505, 0, 1508, 1509, 1511, 1498, 1510, 1500, 1504, 1512, + 1513, 1515, 1514, 1506, 1505, 1510, 0, 1501, 1509, 1517, + 0, 1499, 1506, 1507, 1519, 1505, 1505, 1505, 1508, 1508, + 1509, 1512, 1522, 1510, 1514, 1525, 1512, 1513, 1518, 1514, + 1523, 1505, 1517, 1515, 1523, 1518, 1517, 1519, 1521, 1524, + 1521, 1519, 1505, 1528, 1522, 1526, 1529, 1525, 1527, 1522, + 1530, 1524, 1525, 0, 1526, 1518, 1531, 1523, 0, 1527, + 1532, 1532, 1530, 1533, 1537, 1521, 1524, 1537, 1535, 1529, + 1528, 1533, 1526, 1529, 1538, 1527, 1535, 1530, 1531, 1539, + 1536, 1540, 1538, 1531, 1536, 1539, 1541, 1532, 1543, 1544, + + 1533, 1537, 1541, 1545, 1550, 1535, 1540, 1546, 1551, 1547, + 1543, 1538, 1549, 0, 1548, 1553, 1539, 1536, 1540, 1554, + 1552, 1546, 1547, 1541, 1556, 1543, 1544, 1545, 1548, 1553, + 1545, 1550, 1552, 1562, 1546, 1551, 1547, 1555, 1549, 1549, + 1555, 1548, 1553, 1557, 1559, 1554, 1554, 1552, 1562, 1560, + 1561, 1556, 1563, 1564, 1565, 1555, 1560, 1561, 1566, 1567, + 1562, 1568, 1565, 1569, 1555, 1557, 1559, 1555, 1567, 1570, + 1557, 1559, 1573, 1574, 1576, 1571, 1560, 1561, 1577, 1563, + 1564, 1565, 1570, 1571, 1575, 1566, 1567, 1577, 1568, 1578, + 1569, 1579, 1575, 1580, 1573, 1581, 1570, 1583, 1582, 1573, + + 1574, 1576, 1571, 1585, 1584, 1577, 1582, 1587, 1580, 1583, + 1578, 1575, 1584, 1588, 1587, 1579, 1578, 1588, 1579, 1580, + 1580, 1589, 1581, 1590, 1583, 1582, 1591, 1593, 1592, 1595, + 1585, 1584, 1594, 1589, 1587, 1580, 1592, 1596, 1596, 1594, + 1588, 1597, 1598, 0, 1602, 1599, 1590, 1601, 1589, 1595, + 1590, 1604, 1605, 1591, 1593, 1592, 1595, 0, 1605, 1594, + 1598, 1603, 1601, 1603, 1596, 1604, 1602, 1597, 1597, 1598, + 1599, 1602, 1599, 1606, 1601, 1607, 1609, 1608, 1604, 1605, + 1610, 1611, 1614, 1612, 1617, 0, 1615, 0, 1603, 1608, + 1620, 1617, 1613, 1621, 1609, 1606, 0, 1607, 1610, 1611, + + 1606, 1612, 1607, 1609, 1608, 1613, 1619, 1610, 1611, 1615, + 1612, 1617, 1622, 1615, 1614, 1625, 1620, 1620, 1626, 1613, + 1622, 1623, 1628, 1623, 1619, 1621, 1631, 1625, 1623, 1629, + 1633, 1630, 1642, 1619, 0, 1637, 1626, 1628, 1622, 1622, + 1629, 1631, 1625, 1630, 1634, 1626, 1636, 1622, 1623, 1628, + 1623, 1639, 1635, 1631, 1633, 1641, 1629, 1633, 1630, 1635, + 1640, 1636, 1637, 1643, 1642, 1644, 1634, 1645, 0, 0, + 1646, 1634, 1648, 1636, 1647, 1649, 1653, 1641, 1639, 1635, + 1645, 1650, 1641, 1649, 1640, 1648, 1652, 1640, 1654, 1647, + 1655, 1656, 1644, 1658, 1645, 1643, 1646, 1646, 1656, 1648, + + 1653, 1647, 1649, 1653, 1657, 1659, 1658, 1650, 1650, 1652, + 1662, 1657, 1655, 1652, 1660, 1654, 1661, 1655, 1656, 1663, + 1658, 1660, 1667, 1666, 1664, 1668, 1669, 1670, 1659, 1674, + 0, 1657, 1659, 1664, 1666, 1673, 1675, 1680, 1661, 1677, + 1663, 1660, 1662, 1661, 1667, 1669, 1663, 1679, 1673, 1667, + 1666, 1664, 1670, 1669, 1670, 1674, 1674, 1668, 1676, 1676, + 1675, 1681, 1673, 1675, 1682, 1677, 1677, 1686, 1683, 1680, + 1679, 1688, 0, 1693, 1679, 1691, 1681, 1692, 1695, 1697, + 1688, 1698, 1699, 1708, 0, 1676, 1683, 1700, 1681, 0, + 1701, 1682, 1700, 1699, 1686, 1683, 1705, 1691, 1688, 1692, + + 1693, 1704, 1691, 1707, 1692, 1695, 1712, 1698, 1698, 1699, + 1703, 1697, 1701, 1709, 1700, 1708, 1704, 1701, 1703, 1710, + 1715, 1707, 1709, 1705, 1714, 0, 1716, 1717, 1704, 1718, + 1707, 1710, 1719, 1712, 1721, 1720, 1722, 1703, 1723, 0, + 1709, 1726, 1718, 1724, 0, 1719, 1710, 1715, 1716, 1729, + 1714, 1714, 1717, 1716, 1717, 1725, 1718, 1720, 1724, 1719, + 1727, 1721, 1720, 1722, 1725, 1723, 1728, 1726, 1726, 1729, + 1724, 1730, 1731, 1732, 1734, 1727, 1729, 1733, 1735, 1731, + 1738, 1728, 1725, 1737, 1733, 1741, 1730, 1727, 1736, 1736, + 1737, 1742, 1744, 1728, 1738, 1732, 1735, 1744, 1730, 1731, + + 1732, 1734, 1746, 1739, 1733, 1735, 1739, 1738, 1740, 1742, + 1737, 1741, 1741, 1743, 1747, 1736, 1745, 1748, 1742, 1744, + 1745, 1740, 1743, 1749, 1750, 1751, 1746, 1747, 1752, 1746, + 1739, 1755, 1757, 1756, 0, 1740, 0, 0, 1758, 1748, + 1743, 1747, 1756, 1745, 1748, 1749, 1758, 1780, 1757, 1760, + 1749, 1750, 1751, 1761, 1752, 1752, 1760, 1755, 1755, 1757, + 1756, 1762, 1761, 1763, 1764, 1758, 1762, 1765, 1766, 1769, + 1763, 1767, 1771, 1773, 1765, 1770, 1760, 1766, 1774, 1780, + 1761, 1771, 1764, 1772, 1778, 1773, 1779, 1774, 1762, 0, + 1763, 1764, 1775, 1770, 1765, 1766, 1769, 1767, 1767, 1771, + + 1773, 1775, 1770, 1772, 1776, 1774, 1777, 1781, 1782, 1783, + 1772, 1778, 1788, 1779, 1777, 1776, 1781, 1783, 1784, 1775, + 1782, 1785, 1786, 1789, 1787, 0, 1791, 1790, 1785, 1786, + 1793, 1776, 0, 1777, 1781, 1782, 1783, 1788, 1793, 1788, + 1784, 1795, 1801, 1802, 1805, 1784, 1787, 1810, 1785, 1786, + 1789, 1787, 1790, 1791, 1790, 1796, 1797, 1793, 1800, 1795, + 1803, 1806, 1796, 1808, 1797, 1800, 1801, 1804, 1795, 1801, + 1802, 1805, 1803, 1809, 1810, 1808, 1804, 1811, 1813, 1815, + 1817, 1816, 1796, 1797, 1806, 1800, 1819, 1803, 1806, 1816, + 1808, 1811, 1818, 1824, 1804, 1823, 1809, 1825, 1824, 1826, + + 1809, 1827, 1828, 1829, 1811, 1813, 1815, 1817, 1816, 1838, + 1831, 1825, 1830, 1819, 1818, 1828, 1832, 1826, 1831, 1818, + 1824, 1823, 1823, 1827, 1825, 1829, 1826, 1835, 1827, 1828, + 1829, 1830, 1834, 1836, 1837, 1832, 1838, 1831, 1839, 1830, + 1842, 1841, 1840, 1832, 1834, 0, 1837, 1844, 1843, 1835, + 1847, 0, 1845, 1848, 1835, 1836, 1846, 1851, 1852, 1834, + 1836, 1837, 1840, 1841, 1845, 1839, 1854, 1855, 1841, 1840, + 1843, 1851, 1842, 1844, 1844, 1843, 1853, 1847, 1846, 1845, + 1848, 1853, 1852, 1846, 1851, 1852, 1856, 1857, 1854, 1855, + 1858, 0, 1860, 1854, 1855, 1859, 1861, 1865, 1862, 0, + + 0, 1863, 1867, 0, 1860, 1866, 0, 1871, 1853, 0, + 1857, 1867, 1858, 1859, 1857, 1861, 1863, 1858, 1856, 1860, + 1862, 1865, 1859, 1861, 1865, 1862, 1868, 1866, 1863, 1867, + 1869, 1870, 1866, 1871, 1871, 1875, 1872, 1876, 1877, 1878, + 1868, 1880, 1879, 1875, 1876, 1882, 1877, 0, 1869, 1870, + 1879, 1888, 1883, 1868, 1872, 1881, 1890, 1869, 1870, 1880, + 1883, 1885, 1875, 1872, 1876, 1877, 1878, 1881, 1880, 1879, + 1887, 1889, 1882, 1885, 1888, 1891, 0, 1887, 1888, 1883, + 1894, 1895, 1881, 1890, 1892, 1904, 1897, 1898, 1885, 1899, + 0, 1901, 1906, 1910, 1891, 1895, 1912, 1887, 1894, 1906, + + 1898, 1899, 1891, 1889, 1909, 1911, 1892, 1894, 1895, 1897, + 1913, 1892, 1904, 1897, 1898, 1908, 1899, 1901, 1901, 1906, + 1910, 1914, 1908, 1912, 1916, 1917, 1915, 1918, 1919, 1911, + 1909, 1909, 1911, 1927, 1917, 1920, 1913, 1913, 1915, 1924, + 1918, 1921, 1908, 1925, 1924, 1926, 1929, 1925, 1914, 1930, + 0, 1916, 1917, 1915, 1918, 1928, 1933, 1928, 1934, 1937, + 1919, 1937, 1920, 1935, 1921, 1927, 1926, 1938, 1921, 1929, + 1925, 1924, 1926, 1929, 1939, 1939, 1930, 1934, 1933, 1941, + 1943, 1940, 1928, 1933, 1939, 1934, 1937, 1935, 1941, 1942, + 1935, 1938, 1944, 1943, 1938, 1946, 1942, 1945, 0, 1948, + + 0, 1939, 1939, 1940, 1947, 1945, 1941, 1943, 1940, 1949, + 0, 1950, 1947, 0, 1946, 1955, 1942, 1951, 1952, 1944, + 1953, 1959, 1946, 1963, 1945, 1948, 1948, 1953, 1951, 1954, + 1954, 1947, 1956, 1955, 1957, 1949, 1949, 1950, 1950, 1956, + 1952, 1957, 1955, 1960, 1951, 1952, 1961, 1953, 1959, 1964, + 1963, 1965, 1966, 1967, 1969, 1961, 1954, 1970, 0, 1956, + 1971, 1957, 1978, 1969, 1972, 1973, 0, 1960, 2001, 1964, + 1960, 1967, 1975, 1961, 1966, 1976, 1964, 1973, 1965, 1966, + 1967, 1969, 1972, 1971, 1970, 1974, 1975, 1971, 1979, 1978, + 1974, 1972, 1973, 1976, 1980, 1982, 1984, 1982, 1986, 1975, + + 2001, 1990, 1976, 1989, 1986, 1988, 1979, 0, 1995, 1980, + 1993, 1984, 1992, 1993, 0, 1979, 2004, 1974, 1998, 1990, + 1996, 1980, 1982, 1984, 1997, 1986, 1998, 1988, 1990, 1989, + 1989, 1997, 1988, 1999, 1992, 1995, 1993, 1993, 1996, 1992, + 1993, 2002, 2003, 2004, 2005, 1998, 2006, 1996, 2007, 2008, + 2009, 1997, 2006, 2005, 2010, 1999, 2010, 2011, 2008, 2013, + 1999, 2015, 2014, 2002, 2003, 2016, 2019, 2013, 2002, 2003, + 2007, 2005, 2017, 2006, 2014, 2007, 2008, 2019, 2018, 2016, + 2022, 2010, 2009, 2020, 2011, 2021, 2013, 2024, 2015, 2014, + 2027, 2020, 2016, 2019, 2028, 2017, 2018, 2023, 2023, 2017, + + 2025, 2032, 2022, 2030, 2021, 2018, 2036, 2022, 2025, 2030, + 2020, 2033, 2021, 2034, 2024, 2038, 2037, 2027, 2039, 2038, + 2041, 2028, 2033, 2037, 2023, 2045, 2039, 2025, 2032, 2044, + 2030, 2042, 2046, 2036, 2044, 2034, 2047, 2052, 2033, 2058, + 2034, 2048, 2038, 2037, 2042, 2039, 2041, 2041, 2048, 2049, + 2050, 2053, 2045, 2051, 2047, 2054, 2044, 2049, 2042, 2046, + 2051, 2059, 2060, 2047, 2052, 2050, 2057, 2061, 2048, 2056, + 2062, 2058, 2067, 2057, 2069, 2053, 2049, 2050, 2053, 2062, + 2051, 2054, 2054, 2064, 2056, 2065, 2060, 2066, 2059, 2060, + 2068, 2068, 2071, 2057, 2072, 2066, 2056, 2062, 2074, 2061, + + 2068, 2069, 2072, 2076, 2067, 2064, 2075, 2065, 2078, 2077, + 2064, 2079, 2065, 2080, 2066, 2081, 2076, 2068, 2068, 2071, + 2083, 2072, 2088, 2091, 2086, 2074, 2089, 2088, 2075, 2095, + 2076, 2077, 2086, 2075, 0, 2078, 2077, 2081, 2079, 2093, + 2080, 2092, 2081, 2094, 2099, 2096, 2093, 2083, 2100, 2088, + 2091, 2086, 2089, 2089, 2092, 2101, 2095, 2099, 2102, 2103, + 0, 2094, 2105, 2108, 0, 2107, 2093, 2096, 2092, 2105, + 2094, 2099, 2096, 2109, 2101, 2115, 2106, 2111, 2108, 0, + 2100, 2103, 2101, 2106, 2115, 2102, 2103, 2107, 2113, 2105, + 2108, 2112, 2107, 2124, 2109, 2113, 2111, 2116, 2114, 2112, + + 2109, 2119, 2115, 2106, 2111, 2114, 2117, 2117, 2116, 2125, + 0, 2118, 2122, 2130, 2126, 2113, 2117, 2118, 2112, 2122, + 2124, 2132, 2134, 2119, 2116, 2114, 2136, 2140, 2119, 2138, + 2141, 2143, 2142, 2117, 2117, 2137, 2125, 2126, 2118, 2122, + 2130, 2126, 2138, 2143, 2137, 2134, 2146, 2148, 2132, 2134, + 2141, 2145, 2149, 2136, 2140, 2142, 2138, 2141, 2143, 2142, + 2145, 2147, 2137, 2150, 2146, 2152, 2153, 2151, 2152, 2154, + 2155, 2157, 2155, 2146, 2148, 2150, 0, 2157, 2145, 2149, + 2158, 2159, 2161, 2152, 2156, 2164, 2167, 2147, 2147, 2151, + 2150, 2160, 2152, 2153, 2151, 2152, 2156, 2155, 2157, 2160, + + 2168, 2154, 2158, 2159, 2169, 2171, 2172, 2158, 2159, 2161, + 2174, 2156, 2164, 2167, 2175, 2176, 0, 2177, 2160, 2179, + 2182, 2183, 2178, 2171, 2184, 2184, 2175, 2168, 2185, 2182, + 2176, 2169, 2171, 2172, 2178, 2187, 2188, 2174, 2190, 2189, + 0, 2175, 2176, 2177, 2177, 2183, 2179, 2182, 2183, 2178, + 2191, 2184, 2189, 2193, 2185, 2185, 2203, 2199, 2191, 2187, + 2190, 2192, 2187, 2202, 2193, 2190, 2189, 2202, 2188, 2204, + 2192, 2207, 2205, 2208, 0, 2207, 2204, 2191, 2210, 2203, + 2193, 2199, 2209, 2203, 2199, 2205, 2211, 2212, 2192, 2208, + 2202, 0, 2220, 2216, 2213, 2216, 2204, 2214, 2207, 2205, + + 2208, 2212, 2213, 2210, 2209, 2210, 2214, 2215, 2218, 2209, + 2217, 2222, 2211, 2211, 2212, 2218, 2219, 2224, 2215, 2220, + 2216, 2213, 2217, 2221, 2214, 2223, 2225, 0, 2226, 2219, + 2227, 2230, 2232, 2230, 2215, 2218, 2226, 2217, 2222, 2228, + 2229, 2221, 0, 2219, 2224, 2234, 2242, 2231, 2245, 2246, + 2221, 2223, 2223, 2225, 2227, 2226, 2233, 2227, 2230, 2231, + 2235, 2228, 2229, 2237, 2232, 2243, 2228, 2229, 2235, 2233, + 2239, 2253, 2234, 2242, 2231, 2237, 2247, 2244, 2249, 2239, + 2245, 2246, 2248, 2233, 2243, 2244, 2249, 2235, 2251, 2247, + 2237, 2255, 2243, 2252, 2253, 2251, 2248, 2239, 2253, 2256, + + 2257, 2260, 2258, 2247, 2244, 2249, 2252, 2256, 2261, 2248, + 2264, 2259, 2262, 2255, 2257, 2251, 2258, 2263, 2255, 2259, + 2252, 2262, 2265, 2260, 2266, 2263, 2256, 2257, 2260, 2258, + 2261, 2267, 2270, 2268, 2269, 2261, 2271, 2264, 2259, 2262, + 2270, 2279, 2272, 2273, 2263, 2276, 0, 0, 0, 2275, + 2266, 2266, 2282, 2267, 2265, 2268, 2269, 2275, 2267, 2270, + 2268, 2269, 2285, 2277, 2272, 2276, 2278, 2280, 2271, 2272, + 2273, 2277, 2276, 2279, 2278, 2280, 2275, 2281, 2282, 2282, + 2284, 0, 2289, 2284, 2285, 2288, 2291, 2286, 2287, 2285, + 2277, 2281, 0, 2278, 2280, 2286, 2287, 2290, 2284, 2288, + + 2291, 2292, 2292, 2293, 2281, 2295, 2298, 2284, 2289, 2289, + 2284, 2296, 2288, 2291, 2286, 2287, 2300, 2294, 2297, 2290, + 2301, 2302, 2303, 0, 2290, 2294, 2298, 2299, 2292, 2293, + 2293, 2295, 2295, 2298, 2310, 2299, 2304, 2296, 2296, 2305, + 2297, 0, 2301, 2300, 2294, 2297, 2302, 2301, 2302, 2303, + 2306, 2307, 2308, 2313, 2299, 2317, 2304, 2311, 2306, 2305, + 2308, 2310, 2315, 2304, 2314, 2311, 2305, 2319, 2316, 0, + 2315, 2322, 2323, 2307, 2326, 2313, 2316, 2306, 2307, 2308, + 2313, 2317, 2317, 2324, 2311, 2320, 2314, 2327, 2321, 2315, + 2336, 2314, 2337, 2320, 2319, 2316, 2321, 2322, 2322, 2323, + + 2328, 2326, 2330, 2324, 2333, 2334, 0, 0, 2335, 0, + 2324, 0, 2320, 2334, 2327, 2321, 2335, 2336, 0, 2337, + 2328, 0, 0, 0, 2330, 0, 2333, 2328, 0, 2330, + 0, 2333, 2334, 0, 0, 2335, 2341, 2341, 2341, 2341, + 2341, 2341, 2341, 2342, 2342, 2342, 2342, 2342, 2342, 2342, + 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2344, 2344, 2344, + 2344, 2344, 2344, 2344, 2345, 2345, 2345, 2345, 2345, 2345, + 2345, 2347, 2347, 0, 2347, 2347, 2347, 2347, 2348, 2348, + 0, 0, 0, 2348, 2348, 2349, 2349, 0, 0, 2349, + 0, 2349, 2350, 0, 0, 0, 0, 0, 2350, 2351, + + 2351, 0, 0, 0, 2351, 2351, 2352, 0, 0, 0, + 0, 0, 2352, 2353, 2353, 0, 2353, 2353, 2353, 2353, + 2354, 2354, 0, 2354, 2354, 2354, 2354, 2340, 2340, 2340, + 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, + 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, + 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, + 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, + 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, + 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, + 2340, 2340, 2340, 2340 + } ; static yy_state_type yy_last_accepting_state; @@ -2866,7 +2914,7 @@ static void config_end_include(void) #define YY_NO_INPUT 1 #endif -#line 2868 "" +#line 2916 "" #define INITIAL 0 #define quotedstring 1 @@ -3089,7 +3137,7 @@ YY_DECL { #line 207 "util/configlexer.lex" -#line 3091 "" +#line 3139 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3122,13 +3170,13 @@ YY_DECL 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 >= 2288 ) + if ( yy_current_state >= 2341 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 6594 ); + while ( yy_base[yy_current_state] != 6728 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -4187,83 +4235,98 @@ YY_RULE_SETUP case 205: YY_RULE_SETUP #line 424 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 206: YY_RULE_SETUP #line 425 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 207: YY_RULE_SETUP #line 426 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 208: YY_RULE_SETUP #line 427 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 209: YY_RULE_SETUP #line 428 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 210: YY_RULE_SETUP #line 429 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 211: YY_RULE_SETUP #line 430 "util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 212: YY_RULE_SETUP #line 431 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 213: YY_RULE_SETUP #line 432 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 214: -/* rule 214 can match eol */ YY_RULE_SETUP #line 433 "util/configlexer.lex" +{ YDVAR(1, VAR_CACHEDB_BACKEND) } + YY_BREAK +case 215: +YY_RULE_SETUP +#line 434 "util/configlexer.lex" +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } + YY_BREAK +case 216: +YY_RULE_SETUP +#line 435 "util/configlexer.lex" +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } + YY_BREAK +case 217: +/* rule 217 can match eol */ +YY_RULE_SETUP +#line 436 "util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 215: +case 218: YY_RULE_SETUP -#line 436 "util/configlexer.lex" +#line 439 "util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 437 "util/configlexer.lex" +#line 440 "util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 216: +case 219: YY_RULE_SETUP -#line 442 "util/configlexer.lex" +#line 445 "util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 217: -/* rule 217 can match eol */ +case 220: +/* rule 220 can match eol */ YY_RULE_SETUP -#line 443 "util/configlexer.lex" +#line 446 "util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 218: +case 221: YY_RULE_SETUP -#line 445 "util/configlexer.lex" +#line 448 "util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4276,34 +4339,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 219: +case 222: YY_RULE_SETUP -#line 457 "util/configlexer.lex" +#line 460 "util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 458 "util/configlexer.lex" +#line 461 "util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 220: +case 223: YY_RULE_SETUP -#line 463 "util/configlexer.lex" +#line 466 "util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 221: -/* rule 221 can match eol */ +case 224: +/* rule 224 can match eol */ YY_RULE_SETUP -#line 464 "util/configlexer.lex" +#line 467 "util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 222: +case 225: YY_RULE_SETUP -#line 466 "util/configlexer.lex" +#line 469 "util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4316,38 +4379,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 223: +case 226: YY_RULE_SETUP -#line 478 "util/configlexer.lex" +#line 481 "util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 480 "util/configlexer.lex" +#line 483 "util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 224: -YY_RULE_SETUP -#line 484 "util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK -case 225: -/* rule 225 can match eol */ -YY_RULE_SETUP -#line 485 "util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} - YY_BREAK -case 226: -YY_RULE_SETUP -#line 486 "util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } - YY_BREAK case 227: YY_RULE_SETUP #line 487 "util/configlexer.lex" +{ LEXOUT(("ISP ")); /* ignore */ } + YY_BREAK +case 228: +/* rule 228 can match eol */ +YY_RULE_SETUP +#line 488 "util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++;} + YY_BREAK +case 229: +YY_RULE_SETUP +#line 489 "util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 230: +YY_RULE_SETUP +#line 490 "util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4355,27 +4418,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 492 "util/configlexer.lex" +#line 495 "util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 228: +case 231: YY_RULE_SETUP -#line 496 "util/configlexer.lex" +#line 499 "util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 229: -/* rule 229 can match eol */ +case 232: +/* rule 232 can match eol */ YY_RULE_SETUP -#line 497 "util/configlexer.lex" +#line 500 "util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 230: +case 233: YY_RULE_SETUP -#line 499 "util/configlexer.lex" +#line 502 "util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4385,7 +4448,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 505 "util/configlexer.lex" +#line 508 "util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4397,33 +4460,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 231: +case 234: YY_RULE_SETUP -#line 516 "util/configlexer.lex" +#line 519 "util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 232: +case 235: YY_RULE_SETUP -#line 520 "util/configlexer.lex" +#line 523 "util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 233: +case 236: YY_RULE_SETUP -#line 524 "util/configlexer.lex" +#line 527 "util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 234: +case 237: YY_RULE_SETUP -#line 528 "util/configlexer.lex" +#line 531 "util/configlexer.lex" ECHO; YY_BREAK -#line 4425 "" +#line 4488 "" case YY_END_OF_BUFFER: { @@ -4714,7 +4777,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 >= 2288 ) + if ( yy_current_state >= 2341 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; @@ -4742,11 +4805,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 >= 2288 ) + if ( yy_current_state >= 2341 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; - yy_is_jam = (yy_current_state == 2287); + yy_is_jam = (yy_current_state == 2340); return yy_is_jam ? 0 : yy_current_state; } @@ -5385,7 +5448,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 528 "util/configlexer.lex" +#line 531 "util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index 0c9a4df04298..b7b1ae5e89bb 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -421,6 +421,8 @@ dnscrypt-shared-secret-cache-size{COLON} { YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } dnscrypt-shared-secret-cache-slabs{COLON} { YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } +dnscrypt-nonce-cache-size{COLON} { YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +dnscrypt-nonce-cache-slabs{COLON} { YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } ipsecmod-enabled{COLON} { YDVAR(1, VAR_IPSECMOD_ENABLED) } ipsecmod-ignore-bogus{COLON} { YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } ipsecmod-hook{COLON} { YDVAR(1, VAR_IPSECMOD_HOOK) } @@ -430,6 +432,7 @@ ipsecmod-strict{COLON} { YDVAR(1, VAR_IPSECMOD_STRICT) } cachedb{COLON} { YDVAR(0, VAR_CACHEDB) } backend{COLON} { YDVAR(1, VAR_CACHEDB_BACKEND) } secret-seed{COLON} { YDVAR(1, VAR_CACHEDB_SECRETSEED) } +udp-upstream-without-downstream{COLON} { YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } {NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++; } /* Quoted strings. Strip leading and ending quotes */ diff --git a/util/configparser.c b/util/configparser.c index 7829ed8cd2bf..268949e4a143 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -335,15 +335,18 @@ extern int yydebug; VAR_DNSCRYPT_PROVIDER_CERT = 464, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 465, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 466, - VAR_IPSECMOD_ENABLED = 467, - VAR_IPSECMOD_HOOK = 468, - VAR_IPSECMOD_IGNORE_BOGUS = 469, - VAR_IPSECMOD_MAX_TTL = 470, - VAR_IPSECMOD_WHITELIST = 471, - VAR_IPSECMOD_STRICT = 472, - VAR_CACHEDB = 473, - VAR_CACHEDB_BACKEND = 474, - VAR_CACHEDB_SECRETSEED = 475 + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 467, + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 468, + VAR_IPSECMOD_ENABLED = 469, + VAR_IPSECMOD_HOOK = 470, + VAR_IPSECMOD_IGNORE_BOGUS = 471, + VAR_IPSECMOD_MAX_TTL = 472, + VAR_IPSECMOD_WHITELIST = 473, + VAR_IPSECMOD_STRICT = 474, + VAR_CACHEDB = 475, + VAR_CACHEDB_BACKEND = 476, + VAR_CACHEDB_SECRETSEED = 477, + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 478 }; #endif /* Tokens. */ @@ -556,15 +559,18 @@ extern int yydebug; #define VAR_DNSCRYPT_PROVIDER_CERT 464 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 465 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 466 -#define VAR_IPSECMOD_ENABLED 467 -#define VAR_IPSECMOD_HOOK 468 -#define VAR_IPSECMOD_IGNORE_BOGUS 469 -#define VAR_IPSECMOD_MAX_TTL 470 -#define VAR_IPSECMOD_WHITELIST 471 -#define VAR_IPSECMOD_STRICT 472 -#define VAR_CACHEDB 473 -#define VAR_CACHEDB_BACKEND 474 -#define VAR_CACHEDB_SECRETSEED 475 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 467 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 468 +#define VAR_IPSECMOD_ENABLED 469 +#define VAR_IPSECMOD_HOOK 470 +#define VAR_IPSECMOD_IGNORE_BOGUS 471 +#define VAR_IPSECMOD_MAX_TTL 472 +#define VAR_IPSECMOD_WHITELIST 473 +#define VAR_IPSECMOD_STRICT 474 +#define VAR_CACHEDB 475 +#define VAR_CACHEDB_BACKEND 476 +#define VAR_CACHEDB_SECRETSEED 477 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 478 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -575,7 +581,7 @@ union YYSTYPE char* str; -#line 579 "util/configparser.c" /* yacc.c:355 */ +#line 585 "util/configparser.c" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; @@ -592,7 +598,7 @@ int yyparse (void); /* Copy the second part of user declarations. */ -#line 596 "util/configparser.c" /* yacc.c:358 */ +#line 602 "util/configparser.c" /* yacc.c:358 */ #ifdef short # undef short @@ -834,21 +840,21 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 446 +#define YYLAST 452 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 221 +#define YYNTOKENS 224 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 238 +#define YYNNTS 241 /* YYNRULES -- Number of rules. */ -#define YYNRULES 455 +#define YYNRULES 461 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 683 +#define YYNSTATES 692 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 475 +#define YYMAXUTOK 478 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -904,59 +910,60 @@ static const yytype_uint8 yytranslate[] = 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220 + 215, 216, 217, 218, 219, 220, 221, 222, 223 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 154, 154, 154, 155, 155, 156, 156, 157, 157, - 157, 159, 160, 164, 169, 170, 171, 171, 171, 172, - 172, 173, 173, 174, 174, 175, 175, 176, 176, 176, - 177, 177, 177, 178, 178, 179, 179, 180, 180, 181, - 181, 182, 182, 183, 183, 184, 184, 185, 185, 186, - 186, 186, 187, 187, 187, 188, 188, 188, 189, 189, - 190, 190, 191, 191, 192, 192, 193, 193, 193, 194, - 194, 195, 195, 196, 196, 196, 197, 197, 198, 198, - 199, 199, 200, 200, 200, 201, 201, 202, 202, 203, - 203, 204, 204, 205, 205, 206, 206, 206, 207, 207, - 208, 208, 208, 209, 209, 209, 210, 210, 210, 211, + 0, 157, 157, 157, 158, 158, 159, 159, 160, 160, + 160, 162, 163, 167, 172, 173, 174, 174, 174, 175, + 175, 176, 176, 177, 177, 178, 178, 179, 179, 179, + 180, 180, 180, 181, 181, 182, 182, 183, 183, 184, + 184, 185, 185, 186, 186, 187, 187, 188, 188, 189, + 189, 189, 190, 190, 190, 191, 191, 191, 192, 192, + 193, 193, 194, 194, 195, 195, 196, 196, 196, 197, + 197, 198, 198, 199, 199, 199, 200, 200, 201, 201, + 202, 202, 203, 203, 203, 204, 204, 205, 205, 206, + 206, 207, 207, 208, 208, 209, 209, 209, 210, 210, 211, 211, 211, 212, 212, 212, 213, 213, 213, 214, - 214, 215, 215, 216, 216, 217, 217, 218, 218, 218, - 219, 219, 220, 220, 221, 222, 222, 223, 223, 224, - 224, 225, 226, 226, 227, 227, 228, 228, 229, 229, - 229, 230, 230, 231, 231, 232, 232, 233, 233, 234, - 234, 234, 235, 235, 235, 236, 236, 236, 237, 237, - 238, 238, 239, 239, 240, 240, 242, 254, 255, 256, - 256, 256, 256, 256, 257, 259, 271, 272, 273, 273, - 273, 273, 274, 276, 290, 291, 292, 292, 292, 292, - 293, 293, 293, 295, 304, 313, 324, 333, 342, 351, - 362, 371, 382, 395, 410, 421, 438, 455, 468, 483, - 492, 501, 510, 519, 528, 537, 546, 555, 564, 573, - 582, 591, 600, 609, 618, 625, 632, 641, 650, 659, - 673, 682, 691, 700, 707, 714, 740, 748, 755, 762, - 769, 776, 784, 792, 800, 807, 818, 825, 834, 843, - 852, 859, 866, 874, 882, 892, 902, 912, 925, 936, - 944, 957, 966, 975, 984, 994, 1004, 1012, 1025, 1034, - 1042, 1051, 1059, 1072, 1081, 1088, 1098, 1108, 1118, 1128, - 1138, 1148, 1158, 1168, 1175, 1182, 1189, 1198, 1207, 1216, - 1223, 1233, 1250, 1257, 1275, 1288, 1301, 1310, 1319, 1328, - 1337, 1347, 1357, 1366, 1375, 1388, 1401, 1410, 1417, 1426, - 1435, 1444, 1453, 1461, 1474, 1482, 1510, 1517, 1532, 1542, - 1552, 1559, 1566, 1575, 1589, 1608, 1627, 1639, 1651, 1663, - 1674, 1693, 1703, 1712, 1720, 1728, 1741, 1754, 1767, 1780, - 1789, 1798, 1808, 1818, 1831, 1844, 1855, 1868, 1879, 1892, - 1902, 1909, 1916, 1925, 1935, 1945, 1955, 1962, 1969, 1978, - 1988, 1998, 2027, 2037, 2045, 2054, 2069, 2078, 2083, 2084, - 2085, 2085, 2085, 2086, 2086, 2086, 2087, 2087, 2089, 2099, - 2108, 2115, 2125, 2132, 2139, 2146, 2153, 2158, 2159, 2160, - 2160, 2161, 2161, 2162, 2162, 2163, 2164, 2165, 2166, 2167, - 2168, 2170, 2178, 2185, 2193, 2201, 2208, 2215, 2224, 2233, - 2242, 2251, 2260, 2269, 2274, 2275, 2276, 2278, 2284, 2294, - 2301, 2310, 2318, 2324, 2325, 2327, 2327, 2327, 2328, 2328, - 2329, 2330, 2332, 2342, 2352, 2359, 2366, 2373, 2381, 2394, - 2399, 2400, 2401, 2401, 2403, 2417 + 214, 214, 214, 215, 215, 215, 216, 216, 216, 217, + 217, 218, 218, 219, 219, 220, 220, 221, 221, 221, + 222, 222, 223, 223, 224, 225, 225, 226, 226, 227, + 227, 228, 229, 229, 230, 230, 231, 231, 232, 232, + 232, 233, 233, 234, 234, 235, 235, 236, 236, 237, + 237, 237, 238, 238, 238, 239, 239, 239, 240, 240, + 241, 241, 242, 242, 243, 243, 244, 246, 258, 259, + 260, 260, 260, 260, 260, 261, 263, 275, 276, 277, + 277, 277, 277, 278, 280, 294, 295, 296, 296, 296, + 296, 297, 297, 297, 299, 308, 317, 328, 337, 346, + 355, 366, 375, 386, 399, 414, 425, 442, 459, 472, + 487, 496, 505, 514, 523, 532, 541, 550, 559, 568, + 577, 586, 595, 604, 613, 622, 631, 638, 645, 654, + 663, 672, 686, 695, 704, 713, 720, 727, 753, 761, + 768, 775, 782, 789, 797, 805, 813, 820, 831, 838, + 847, 856, 865, 872, 879, 887, 895, 905, 915, 925, + 938, 949, 957, 970, 979, 988, 997, 1007, 1017, 1025, + 1038, 1047, 1055, 1064, 1072, 1085, 1094, 1101, 1111, 1121, + 1131, 1141, 1151, 1161, 1171, 1181, 1188, 1195, 1202, 1211, + 1220, 1229, 1236, 1246, 1263, 1270, 1288, 1301, 1314, 1323, + 1332, 1341, 1350, 1360, 1370, 1379, 1388, 1401, 1414, 1423, + 1430, 1439, 1448, 1457, 1466, 1474, 1487, 1495, 1523, 1530, + 1545, 1555, 1565, 1572, 1579, 1588, 1602, 1621, 1640, 1652, + 1664, 1676, 1687, 1706, 1716, 1725, 1733, 1741, 1754, 1767, + 1780, 1793, 1802, 1811, 1821, 1831, 1844, 1857, 1868, 1881, + 1892, 1905, 1915, 1922, 1929, 1938, 1948, 1958, 1968, 1975, + 1982, 1991, 2001, 2011, 2040, 2050, 2058, 2067, 2082, 2091, + 2096, 2097, 2098, 2098, 2098, 2099, 2099, 2099, 2100, 2100, + 2102, 2112, 2121, 2128, 2138, 2145, 2152, 2159, 2166, 2171, + 2172, 2173, 2173, 2174, 2174, 2175, 2175, 2176, 2177, 2178, + 2179, 2180, 2181, 2183, 2191, 2198, 2206, 2214, 2221, 2228, + 2237, 2246, 2255, 2264, 2273, 2282, 2287, 2288, 2289, 2291, + 2297, 2307, 2314, 2323, 2331, 2337, 2338, 2340, 2340, 2340, + 2341, 2341, 2342, 2343, 2344, 2345, 2347, 2357, 2367, 2374, + 2381, 2388, 2396, 2409, 2417, 2430, 2435, 2436, 2437, 2437, + 2439, 2453 }; #endif @@ -1040,18 +1047,19 @@ static const char *const yytname[] = "VAR_DNSCRYPT_ENABLE", "VAR_DNSCRYPT_PORT", "VAR_DNSCRYPT_PROVIDER", "VAR_DNSCRYPT_SECRET_KEY", "VAR_DNSCRYPT_PROVIDER_CERT", "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE", - "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS", "VAR_IPSECMOD_ENABLED", - "VAR_IPSECMOD_HOOK", "VAR_IPSECMOD_IGNORE_BOGUS", "VAR_IPSECMOD_MAX_TTL", - "VAR_IPSECMOD_WHITELIST", "VAR_IPSECMOD_STRICT", "VAR_CACHEDB", - "VAR_CACHEDB_BACKEND", "VAR_CACHEDB_SECRETSEED", "$accept", - "toplevelvars", "toplevelvar", "serverstart", "contents_server", - "content_server", "stubstart", "contents_stub", "content_stub", - "forwardstart", "contents_forward", "content_forward", "viewstart", - "contents_view", "content_view", "server_num_threads", - "server_verbosity", "server_statistics_interval", - "server_statistics_cumulative", "server_extended_statistics", - "server_shm_enable", "server_shm_key", "server_port", - "server_send_client_subnet", "server_client_subnet_zone", + "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS", + "VAR_DNSCRYPT_NONCE_CACHE_SIZE", "VAR_DNSCRYPT_NONCE_CACHE_SLABS", + "VAR_IPSECMOD_ENABLED", "VAR_IPSECMOD_HOOK", "VAR_IPSECMOD_IGNORE_BOGUS", + "VAR_IPSECMOD_MAX_TTL", "VAR_IPSECMOD_WHITELIST", "VAR_IPSECMOD_STRICT", + "VAR_CACHEDB", "VAR_CACHEDB_BACKEND", "VAR_CACHEDB_SECRETSEED", + "VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM", "$accept", "toplevelvars", + "toplevelvar", "serverstart", "contents_server", "content_server", + "stubstart", "contents_stub", "content_stub", "forwardstart", + "contents_forward", "content_forward", "viewstart", "contents_view", + "content_view", "server_num_threads", "server_verbosity", + "server_statistics_interval", "server_statistics_cumulative", + "server_extended_statistics", "server_shm_enable", "server_shm_key", + "server_port", "server_send_client_subnet", "server_client_subnet_zone", "server_client_subnet_always_forward", "server_client_subnet_opcode", "server_max_client_subnet_ipv4", "server_max_client_subnet_ipv6", "server_interface", "server_outgoing_interface", "server_outgoing_range", @@ -1059,7 +1067,8 @@ static const char *const yytname[] = "server_outgoing_num_tcp", "server_incoming_num_tcp", "server_interface_automatic", "server_do_ip4", "server_do_ip6", "server_do_udp", "server_do_tcp", "server_prefer_ip6", "server_tcp_mss", - "server_outgoing_tcp_mss", "server_tcp_upstream", "server_ssl_upstream", + "server_outgoing_tcp_mss", "server_tcp_upstream", + "server_udp_upstream_without_downstream", "server_ssl_upstream", "server_ssl_service_key", "server_ssl_service_pem", "server_ssl_port", "server_use_systemd", "server_do_daemonize", "server_use_syslog", "server_log_time_ascii", "server_log_queries", "server_log_replies", @@ -1138,9 +1147,10 @@ static const char *const yytname[] = "dnsc_dnscrypt_port", "dnsc_dnscrypt_provider", "dnsc_dnscrypt_provider_cert", "dnsc_dnscrypt_secret_key", "dnsc_dnscrypt_shared_secret_cache_size", - "dnsc_dnscrypt_shared_secret_cache_slabs", "cachedbstart", - "contents_cachedb", "content_cachedb", "cachedb_backend_name", - "cachedb_secret_seed", YY_NULLPTR + "dnsc_dnscrypt_shared_secret_cache_slabs", + "dnsc_dnscrypt_nonce_cache_size", "dnsc_dnscrypt_nonce_cache_slabs", + "cachedbstart", "contents_cachedb", "content_cachedb", + "cachedb_backend_name", "cachedb_secret_seed", YY_NULLPTR }; #endif @@ -1171,14 +1181,14 @@ static const yytype_uint16 yytoknum[] = 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475 + 475, 476, 477, 478 }; # endif -#define YYPACT_NINF -213 +#define YYPACT_NINF -215 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-213))) + (!!((Yystate) == (-215))) #define YYTABLE_NINF -1 @@ -1189,75 +1199,76 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -213, 0, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, 207, -38, -34, -39, -64, -130, -105, -157, - -212, -1, 2, 3, 26, 29, 30, 32, 33, 34, - 35, 36, 45, 46, 47, 48, 49, 50, 51, 53, - 54, 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, 82, 83, 84, 86, - 89, 91, 92, 93, 94, 95, 96, 98, 99, 100, - 101, 102, 103, 104, 105, 106, 107, 108, 109, 112, - 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 134, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 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, 183, 184, 185, - 186, 187, 188, 189, 190, 191, 192, 193, 195, 196, - 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, - 237, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, 238, 239, 240, 244, 245, 246, -213, -213, - -213, -213, -213, -213, -213, 288, 289, 290, 291, 292, - -213, -213, -213, -213, -213, -213, 293, 294, 295, 296, - 300, 304, 305, -213, -213, -213, -213, -213, -213, -213, - -213, 329, 330, 331, 332, 342, 343, 344, 345, -213, - -213, -213, -213, -213, -213, -213, -213, -213, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 389, 391, 401, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, 402, -213, -213, 403, 404, 405, 406, - 407, 408, 415, -213, -213, -213, -213, -213, -213, -213, - -213, 416, 417, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, 418, 419, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, 420, 421, 422, -213, - -213, -213, -213, -213, -213, -213, -213, -213, 423, 424, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, 425, 426, 427, 428, 429, - 430, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, 431, -213, - -213, 432, 433, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, 434, 435, 436, -213, -213, -213, -213, - -213, -213, -213 + -215, 0, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, 209, -38, -34, -39, -44, -130, -105, -177, + -214, -1, 2, 3, 29, 30, 32, 33, 34, 35, + 36, 46, 47, 48, 49, 50, 51, 53, 54, 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, 82, 83, 84, 86, 89, 91, + 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 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, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 239, 240, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, 241, 242, 246, 247, 248, 290, + -215, -215, -215, -215, -215, -215, -215, 291, 292, 293, + 294, 295, -215, -215, -215, -215, -215, -215, 296, 297, + 298, 302, 306, 307, 331, -215, -215, -215, -215, -215, + -215, -215, -215, 332, 333, 334, 344, 345, 346, 347, + 348, -215, -215, -215, -215, -215, -215, -215, -215, -215, + 349, 350, 351, 352, 353, 354, 355, 356, 391, 393, + 403, 404, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, 405, -215, -215, 406, 407, + 408, 409, 410, 411, 412, 419, 420, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, 421, 423, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, 424, 425, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, 426, 427, 428, -215, -215, -215, -215, -215, + -215, -215, -215, -215, 429, 430, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, 431, 432, 433, 434, 435, 436, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, 437, -215, -215, 438, 439, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, 440, 441, 442, -215, -215, -215, -215, -215, + -215, -215 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1265,9 +1276,9 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 13, 176, 185, 377, 423, 396, 193, - 432, 449, 3, 15, 178, 187, 195, 379, 398, 425, - 434, 451, 4, 5, 6, 10, 8, 9, 7, 11, + 2, 0, 1, 13, 177, 186, 379, 425, 398, 194, + 434, 455, 3, 15, 179, 188, 196, 381, 400, 427, + 436, 457, 4, 5, 6, 10, 8, 9, 7, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1284,114 +1295,117 @@ static const yytype_uint16 yydefact[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 14, 16, 17, 76, 79, 88, 165, 166, 18, - 138, 139, 140, 141, 142, 143, 27, 67, 19, 80, - 81, 38, 60, 75, 20, 21, 23, 24, 22, 25, - 26, 111, 112, 113, 114, 115, 161, 77, 66, 92, - 109, 110, 28, 29, 30, 31, 32, 68, 82, 83, - 98, 54, 64, 55, 169, 93, 48, 49, 168, 50, - 51, 102, 106, 119, 127, 148, 103, 61, 33, 34, - 35, 90, 120, 121, 122, 36, 37, 39, 40, 42, - 43, 41, 125, 44, 45, 46, 52, 71, 107, 85, - 126, 78, 144, 86, 87, 104, 105, 91, 47, 69, - 72, 53, 56, 94, 95, 70, 145, 96, 57, 58, - 59, 108, 158, 159, 167, 97, 65, 99, 100, 101, - 146, 62, 63, 84, 73, 74, 89, 116, 117, 118, - 123, 124, 149, 150, 152, 154, 155, 153, 156, 162, - 128, 129, 132, 133, 130, 131, 134, 135, 137, 136, - 147, 157, 170, 172, 171, 173, 174, 175, 151, 160, - 163, 164, 0, 0, 0, 0, 0, 0, 177, 179, - 180, 181, 183, 184, 182, 0, 0, 0, 0, 0, - 186, 188, 189, 190, 191, 192, 0, 0, 0, 0, - 0, 0, 0, 194, 196, 197, 200, 201, 198, 202, - 199, 0, 0, 0, 0, 0, 0, 0, 0, 378, - 380, 382, 381, 387, 383, 384, 385, 386, 0, 0, + 0, 0, 14, 16, 17, 76, 79, 88, 165, 166, + 18, 138, 139, 140, 141, 142, 143, 27, 67, 19, + 80, 81, 38, 60, 75, 20, 21, 23, 24, 22, + 25, 26, 111, 176, 112, 113, 114, 115, 161, 77, + 66, 92, 109, 110, 28, 29, 30, 31, 32, 68, + 82, 83, 98, 54, 64, 55, 169, 93, 48, 49, + 168, 50, 51, 102, 106, 119, 127, 148, 103, 61, + 33, 34, 35, 90, 120, 121, 122, 36, 37, 39, + 40, 42, 43, 41, 125, 44, 45, 46, 52, 71, + 107, 85, 126, 78, 144, 86, 87, 104, 105, 91, + 47, 69, 72, 53, 56, 94, 95, 70, 145, 96, + 57, 58, 59, 108, 158, 159, 167, 97, 65, 99, + 100, 101, 146, 62, 63, 84, 73, 74, 89, 116, + 117, 118, 123, 124, 149, 150, 152, 154, 155, 153, + 156, 162, 128, 129, 132, 133, 130, 131, 134, 135, + 137, 136, 147, 157, 170, 172, 171, 173, 174, 175, + 151, 160, 163, 164, 0, 0, 0, 0, 0, 0, + 178, 180, 181, 182, 184, 185, 183, 0, 0, 0, + 0, 0, 187, 189, 190, 191, 192, 193, 0, 0, + 0, 0, 0, 0, 0, 195, 197, 198, 201, 202, + 199, 203, 200, 0, 0, 0, 0, 0, 0, 0, + 0, 380, 382, 384, 383, 389, 385, 386, 387, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 397, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 0, 424, 426, 0, 0, 0, 0, - 0, 0, 0, 433, 435, 436, 437, 439, 438, 440, - 441, 0, 0, 450, 452, 453, 204, 203, 210, 219, - 217, 225, 226, 229, 227, 228, 230, 231, 243, 244, - 245, 246, 247, 269, 270, 271, 276, 277, 222, 278, - 279, 282, 280, 281, 284, 285, 286, 299, 257, 258, - 260, 261, 287, 302, 252, 254, 303, 309, 310, 311, - 223, 268, 322, 323, 253, 317, 239, 218, 248, 300, - 306, 288, 0, 0, 326, 224, 205, 238, 292, 206, - 220, 221, 249, 250, 324, 290, 294, 295, 207, 327, - 272, 298, 240, 256, 304, 305, 308, 316, 251, 320, - 318, 319, 262, 267, 296, 297, 263, 264, 289, 312, - 241, 242, 232, 233, 234, 235, 236, 328, 329, 330, - 273, 274, 275, 283, 331, 332, 0, 0, 0, 291, - 265, 428, 341, 345, 343, 342, 346, 344, 0, 0, - 349, 350, 211, 212, 213, 214, 215, 216, 293, 307, - 321, 351, 352, 266, 333, 0, 0, 0, 0, 0, - 0, 313, 314, 315, 429, 259, 255, 237, 208, 209, - 353, 355, 354, 356, 357, 358, 359, 360, 361, 364, - 363, 362, 365, 366, 367, 368, 369, 370, 0, 374, - 375, 0, 0, 376, 388, 390, 389, 392, 393, 394, - 395, 391, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 427, 442, 443, 444, 446, 445, - 447, 448, 454, 455, 301, 325, 340, 430, 431, 347, - 348, 334, 335, 0, 0, 0, 339, 371, 372, 373, - 338, 336, 337 + 0, 0, 399, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 0, 426, 428, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 435, 437, 438, + 439, 441, 440, 442, 443, 444, 445, 0, 0, 456, + 458, 459, 205, 204, 211, 220, 218, 226, 227, 230, + 228, 229, 231, 232, 245, 246, 247, 248, 249, 271, + 272, 273, 278, 279, 223, 280, 281, 284, 282, 283, + 286, 287, 288, 301, 259, 260, 262, 263, 289, 304, + 254, 256, 305, 311, 312, 313, 224, 270, 324, 325, + 255, 319, 241, 219, 250, 302, 308, 290, 0, 0, + 328, 225, 206, 240, 294, 207, 221, 222, 251, 252, + 326, 292, 296, 297, 208, 329, 274, 300, 242, 258, + 306, 307, 310, 318, 253, 322, 320, 321, 264, 269, + 298, 299, 265, 266, 291, 314, 243, 244, 233, 235, + 236, 237, 238, 330, 331, 332, 275, 276, 277, 285, + 333, 334, 0, 0, 0, 293, 267, 430, 343, 347, + 345, 344, 348, 346, 0, 0, 351, 352, 212, 213, + 214, 215, 216, 217, 295, 309, 323, 353, 354, 268, + 335, 0, 0, 0, 0, 0, 0, 315, 316, 317, + 431, 261, 257, 239, 209, 210, 355, 357, 356, 358, + 359, 360, 234, 361, 362, 363, 366, 365, 364, 367, + 368, 369, 370, 371, 372, 0, 376, 377, 0, 0, + 378, 390, 392, 391, 394, 395, 396, 397, 393, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 429, 446, 447, 448, 450, 449, 451, 452, 453, + 454, 460, 461, 303, 327, 342, 432, 433, 349, 350, + 336, 337, 0, 0, 0, 341, 373, 374, 375, 340, + 338, 339 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, - -213, -213, -213, -213, -213, -213, -213, -213 + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 12, 13, 22, 191, 14, 23, 358, 15, - 24, 370, 16, 25, 383, 192, 193, 194, 195, 196, - 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, - 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, - 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, - 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 359, 360, 361, 362, 363, 364, 371, 372, 373, - 374, 375, 384, 385, 386, 387, 388, 389, 390, 17, - 26, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 18, 27, 420, 421, 422, 423, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 19, 28, 434, 435, 348, - 349, 350, 351, 20, 29, 443, 444, 445, 446, 447, - 448, 449, 450, 21, 30, 453, 454, 455 + -1, 1, 12, 13, 22, 192, 14, 23, 360, 15, + 24, 372, 16, 25, 385, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 361, 362, 363, 364, 365, 366, 373, 374, + 375, 376, 377, 386, 387, 388, 389, 390, 391, 392, + 17, 26, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 18, 27, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 19, 28, 436, 437, + 350, 351, 352, 353, 20, 29, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 21, 30, 459, 460, + 461 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1399,61 +1413,62 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint16 yytable[] = { - 2, 376, 352, 433, 353, 354, 365, 451, 452, 456, - 0, 3, 457, 458, 366, 367, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 391, 392, - 393, 394, 395, 396, 397, 398, 459, 377, 378, 460, - 461, 4, 462, 463, 464, 465, 466, 5, 436, 437, - 438, 439, 440, 441, 442, 467, 468, 469, 470, 471, - 472, 473, 379, 474, 475, 355, 476, 477, 478, 479, - 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, - 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, - 500, 6, 501, 502, 503, 356, 504, 357, 368, 505, - 369, 506, 507, 508, 509, 510, 511, 7, 512, 513, - 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, - 380, 381, 524, 525, 526, 527, 528, 529, 530, 531, - 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 8, 547, 548, 549, 550, - 551, 552, 553, 554, 555, 382, 556, 557, 558, 559, - 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, - 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, - 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, - 590, 591, 9, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 10, 603, 604, 605, 606, 607, - 608, 609, 610, 611, 612, 613, 614, 0, 11, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 615, 616, 617, - 618, 59, 60, 61, 619, 620, 621, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, 99, 100, 101, 102, 622, 623, - 624, 625, 626, 627, 628, 629, 630, 103, 104, 105, - 631, 106, 107, 108, 632, 633, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 634, - 635, 636, 637, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 638, 639, 640, 641, 642, 643, 644, 645, - 646, 647, 648, 649, 650, 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, 651, - 175, 652, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 653, 654, 655, 656, 657, 658, 659, 660, 185, - 186, 187, 188, 189, 190, 661, 662, 663, 664, 665, - 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, - 676, 677, 678, 679, 680, 681, 682 + 2, 378, 354, 435, 355, 356, 367, 457, 458, 462, + 0, 3, 463, 464, 368, 369, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 438, 439, + 440, 441, 442, 443, 444, 445, 446, 379, 380, 465, + 466, 4, 467, 468, 469, 470, 471, 5, 393, 394, + 395, 396, 397, 398, 399, 400, 472, 473, 474, 475, + 476, 477, 381, 478, 479, 357, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, + 504, 6, 505, 506, 507, 358, 508, 359, 370, 509, + 371, 510, 511, 512, 513, 514, 515, 7, 516, 517, + 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, + 382, 383, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 547, 548, 549, 550, 8, 551, 552, 553, 554, + 555, 556, 557, 558, 559, 384, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, + 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, + 594, 595, 9, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 10, 607, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 0, + 11, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 621, + 622, 623, 624, 59, 60, 61, 625, 626, 627, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 628, 629, 630, 631, 632, 633, 634, 635, 636, 103, + 104, 105, 637, 106, 107, 108, 638, 639, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 640, 641, 642, 643, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 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, 657, 175, 658, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 659, 660, 661, 662, 663, 664, 665, + 666, 667, 668, 185, 186, 187, 188, 189, 190, 669, + 670, 671, 191, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691 }; static const yytype_int16 yycheck[] = { - 0, 40, 40, 108, 42, 43, 40, 219, 220, 10, + 0, 40, 40, 108, 42, 43, 40, 221, 222, 10, -1, 11, 10, 10, 48, 49, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 92, 93, - 94, 95, 96, 97, 98, 99, 10, 76, 77, 10, - 10, 41, 10, 10, 10, 10, 10, 47, 205, 206, - 207, 208, 209, 210, 211, 10, 10, 10, 10, 10, + 150, 151, 152, 153, 154, 155, 156, 157, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 76, 77, 10, + 10, 41, 10, 10, 10, 10, 10, 47, 92, 93, + 94, 95, 96, 97, 98, 99, 10, 10, 10, 10, 10, 10, 101, 10, 10, 103, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1469,40 +1484,41 @@ static const yytype_int16 yycheck[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 192, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 204, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, -1, 218, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 10, 10, 10, - 10, 44, 45, 46, 10, 10, 10, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 100, 101, 102, - 10, 104, 105, 106, 10, 10, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 10, - 10, 10, 10, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 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, 10, - 193, 10, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 10, 10, 10, 10, 10, 10, 10, 10, 212, - 213, 214, 215, 216, 217, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, -1, + 220, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 10, + 10, 10, 10, 44, 45, 46, 10, 10, 10, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 100, + 101, 102, 10, 104, 105, 106, 10, 10, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 10, 10, 10, 10, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 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, 10, 193, 10, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 214, 215, 216, 217, 218, 219, 10, + 10, 10, 223, 10, 10, 10, 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_uint16 yystos[] = { - 0, 222, 0, 11, 41, 47, 91, 107, 145, 192, - 204, 218, 223, 224, 227, 230, 233, 410, 421, 436, - 444, 454, 225, 228, 231, 234, 411, 422, 437, 445, - 455, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 0, 225, 0, 11, 41, 47, 91, 107, 145, 192, + 204, 220, 226, 227, 230, 233, 236, 414, 425, 440, + 448, 460, 228, 231, 234, 237, 415, 426, 441, 449, + 461, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 44, 45, 46, 50, 51, 52, 53, 54, 55, 56, 57, @@ -1517,34 +1533,35 @@ static const yytype_uint16 yystos[] = 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, 193, 195, 196, 197, 198, - 199, 200, 201, 202, 203, 212, 213, 214, 215, 216, - 217, 226, 236, 237, 238, 239, 240, 241, 242, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, - 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, - 384, 385, 386, 387, 388, 389, 390, 391, 440, 441, - 442, 443, 40, 42, 43, 103, 133, 135, 229, 392, - 393, 394, 395, 396, 397, 40, 48, 49, 132, 134, - 232, 398, 399, 400, 401, 402, 40, 76, 77, 101, - 159, 160, 194, 235, 403, 404, 405, 406, 407, 408, - 409, 92, 93, 94, 95, 96, 97, 98, 99, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 108, 438, 439, 205, 206, 207, 208, - 209, 210, 211, 446, 447, 448, 449, 450, 451, 452, - 453, 219, 220, 456, 457, 458, 10, 10, 10, 10, + 199, 200, 201, 202, 203, 214, 215, 216, 217, 218, + 219, 223, 229, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 444, 445, 446, 447, 40, 42, 43, 103, 133, 135, + 232, 396, 397, 398, 399, 400, 401, 40, 48, 49, + 132, 134, 235, 402, 403, 404, 405, 406, 40, 76, + 77, 101, 159, 160, 194, 238, 407, 408, 409, 410, + 411, 412, 413, 92, 93, 94, 95, 96, 97, 98, + 99, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 108, 442, 443, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 221, 222, 462, + 463, 464, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1567,58 +1584,59 @@ static const yytype_uint16 yystos[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10 + 10, 10 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 221, 222, 222, 223, 223, 223, 223, 223, 223, - 223, 223, 223, 224, 225, 225, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 226, 227, 228, 228, 229, - 229, 229, 229, 229, 229, 230, 231, 231, 232, 232, - 232, 232, 232, 233, 234, 234, 235, 235, 235, 235, - 235, 235, 235, 236, 237, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, 411, - 412, 412, 412, 412, 412, 412, 412, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 422, 423, - 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, - 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 437, 438, 439, 440, 441, - 442, 443, 444, 445, 445, 446, 446, 446, 446, 446, - 446, 446, 447, 448, 449, 450, 451, 452, 453, 454, - 455, 455, 456, 456, 457, 458 + 0, 224, 225, 225, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 227, 228, 228, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 230, 231, 231, + 232, 232, 232, 232, 232, 232, 233, 234, 234, 235, + 235, 235, 235, 235, 236, 237, 237, 238, 238, 238, + 238, 238, 238, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 415, 416, 416, 416, 416, 416, 416, 416, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 426, 427, 427, 427, 427, 427, 427, 427, 427, 427, + 427, 427, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 449, 450, 450, 450, + 450, 450, 450, 450, 450, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 461, 462, 462, + 463, 464 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1641,35 +1659,36 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, - 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, - 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 3, 4, 4, + 4, 3, 3, 2, 2, 2, 2, 2, 2, 3, + 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 3, 3, 3, 2, 2, 2, 1, + 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, - 2, 2, 2, 2, 3, 3, 4, 4, 4, 3, - 3, 2, 2, 2, 2, 2, 2, 3, 3, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 3, 3, 3, 2, 2, 2, 1, 2, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 1, 2, 0, 1, 2, 2, 2, - 3, 3, 1, 2, 0, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, - 2, 0, 1, 1, 2, 2 + 2, 2, 2, 2, 2, 1, 2, 0, 1, 2, + 2, 2, 3, 3, 1, 2, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, + 2, 2 }; @@ -2346,15 +2365,15 @@ yyparse (void) switch (yyn) { case 13: -#line 165 "util/configparser.y" /* yacc.c:1646 */ +#line 168 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(server:)\n")); } -#line 2354 "util/configparser.c" /* yacc.c:1646 */ +#line 2373 "util/configparser.c" /* yacc.c:1646 */ break; - case 176: -#line 243 "util/configparser.y" /* yacc.c:1646 */ + case 177: +#line 247 "util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2365,11 +2384,11 @@ yyparse (void) } else yyerror("out of memory"); } -#line 2369 "util/configparser.c" /* yacc.c:1646 */ +#line 2388 "util/configparser.c" /* yacc.c:1646 */ break; - case 185: -#line 260 "util/configparser.y" /* yacc.c:1646 */ + case 186: +#line 264 "util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2380,11 +2399,11 @@ yyparse (void) } else yyerror("out of memory"); } -#line 2384 "util/configparser.c" /* yacc.c:1646 */ +#line 2403 "util/configparser.c" /* yacc.c:1646 */ break; - case 193: -#line 277 "util/configparser.y" /* yacc.c:1646 */ + case 194: +#line 281 "util/configparser.y" /* yacc.c:1646 */ { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2397,11 +2416,11 @@ yyparse (void) } else yyerror("out of memory"); } -#line 2401 "util/configparser.c" /* yacc.c:1646 */ +#line 2420 "util/configparser.c" /* yacc.c:1646 */ break; - case 203: -#line 296 "util/configparser.y" /* yacc.c:1646 */ + case 204: +#line 300 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2409,11 +2428,11 @@ yyparse (void) else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2413 "util/configparser.c" /* yacc.c:1646 */ +#line 2432 "util/configparser.c" /* yacc.c:1646 */ break; - case 204: -#line 305 "util/configparser.y" /* yacc.c:1646 */ + case 205: +#line 309 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2421,11 +2440,11 @@ yyparse (void) else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2425 "util/configparser.c" /* yacc.c:1646 */ +#line 2444 "util/configparser.c" /* yacc.c:1646 */ break; - case 205: -#line 314 "util/configparser.y" /* yacc.c:1646 */ + case 206: +#line 318 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2435,11 +2454,11 @@ yyparse (void) else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2439 "util/configparser.c" /* yacc.c:1646 */ +#line 2458 "util/configparser.c" /* yacc.c:1646 */ break; - case 206: -#line 325 "util/configparser.y" /* yacc.c:1646 */ + case 207: +#line 329 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2447,11 +2466,11 @@ yyparse (void) else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2451 "util/configparser.c" /* yacc.c:1646 */ +#line 2470 "util/configparser.c" /* yacc.c:1646 */ break; - case 207: -#line 334 "util/configparser.y" /* yacc.c:1646 */ + case 208: +#line 338 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2459,11 +2478,11 @@ yyparse (void) else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2463 "util/configparser.c" /* yacc.c:1646 */ +#line 2482 "util/configparser.c" /* yacc.c:1646 */ break; - case 208: -#line 343 "util/configparser.y" /* yacc.c:1646 */ + case 209: +#line 347 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2471,11 +2490,11 @@ yyparse (void) else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2475 "util/configparser.c" /* yacc.c:1646 */ +#line 2494 "util/configparser.c" /* yacc.c:1646 */ break; - case 209: -#line 352 "util/configparser.y" /* yacc.c:1646 */ + case 210: +#line 356 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2485,11 +2504,11 @@ yyparse (void) else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2489 "util/configparser.c" /* yacc.c:1646 */ +#line 2508 "util/configparser.c" /* yacc.c:1646 */ break; - case 210: -#line 363 "util/configparser.y" /* yacc.c:1646 */ + case 211: +#line 367 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2497,11 +2516,11 @@ yyparse (void) else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2501 "util/configparser.c" /* yacc.c:1646 */ +#line 2520 "util/configparser.c" /* yacc.c:1646 */ break; - case 211: -#line 372 "util/configparser.y" /* yacc.c:1646 */ + case 212: +#line 376 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2511,11 +2530,11 @@ yyparse (void) OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2515 "util/configparser.c" /* yacc.c:1646 */ +#line 2534 "util/configparser.c" /* yacc.c:1646 */ break; - case 212: -#line 383 "util/configparser.y" /* yacc.c:1646 */ + case 213: +#line 387 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -2526,11 +2545,11 @@ yyparse (void) OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2530 "util/configparser.c" /* yacc.c:1646 */ +#line 2549 "util/configparser.c" /* yacc.c:1646 */ break; - case 213: -#line 396 "util/configparser.y" /* yacc.c:1646 */ + case 214: +#line 400 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -2544,25 +2563,25 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 2548 "util/configparser.c" /* yacc.c:1646 */ +#line 2567 "util/configparser.c" /* yacc.c:1646 */ break; - case 214: -#line 411 "util/configparser.y" /* yacc.c:1646 */ + case 215: +#line 415 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); - OUTYY(("P(Depricated option, ignoring)\n")); + OUTYY(("P(Deprecated option, ignoring)\n")); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif free((yyvsp[0].str)); } -#line 2562 "util/configparser.c" /* yacc.c:1646 */ +#line 2581 "util/configparser.c" /* yacc.c:1646 */ break; - case 215: -#line 422 "util/configparser.y" /* yacc.c:1646 */ + case 216: +#line 426 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2578,11 +2597,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 2582 "util/configparser.c" /* yacc.c:1646 */ +#line 2601 "util/configparser.c" /* yacc.c:1646 */ break; - case 216: -#line 439 "util/configparser.y" /* yacc.c:1646 */ + case 217: +#line 443 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -2598,11 +2617,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 2602 "util/configparser.c" /* yacc.c:1646 */ +#line 2621 "util/configparser.c" /* yacc.c:1646 */ break; - case 217: -#line 456 "util/configparser.y" /* yacc.c:1646 */ + case 218: +#line 460 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -2614,11 +2633,11 @@ yyparse (void) else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 2618 "util/configparser.c" /* yacc.c:1646 */ +#line 2637 "util/configparser.c" /* yacc.c:1646 */ break; - case 218: -#line 469 "util/configparser.y" /* yacc.c:1646 */ + case 219: +#line 473 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -2632,11 +2651,11 @@ yyparse (void) cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 2636 "util/configparser.c" /* yacc.c:1646 */ +#line 2655 "util/configparser.c" /* yacc.c:1646 */ break; - case 219: -#line 484 "util/configparser.y" /* yacc.c:1646 */ + case 220: +#line 488 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2644,11 +2663,11 @@ yyparse (void) else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2648 "util/configparser.c" /* yacc.c:1646 */ +#line 2667 "util/configparser.c" /* yacc.c:1646 */ break; - case 220: -#line 493 "util/configparser.y" /* yacc.c:1646 */ + case 221: +#line 497 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -2656,11 +2675,11 @@ yyparse (void) yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2660 "util/configparser.c" /* yacc.c:1646 */ +#line 2679 "util/configparser.c" /* yacc.c:1646 */ break; - case 221: -#line 502 "util/configparser.y" /* yacc.c:1646 */ + case 222: +#line 506 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -2668,11 +2687,11 @@ yyparse (void) yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2672 "util/configparser.c" /* yacc.c:1646 */ +#line 2691 "util/configparser.c" /* yacc.c:1646 */ break; - case 222: -#line 511 "util/configparser.y" /* yacc.c:1646 */ + case 223: +#line 515 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2680,11 +2699,11 @@ yyparse (void) else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2684 "util/configparser.c" /* yacc.c:1646 */ +#line 2703 "util/configparser.c" /* yacc.c:1646 */ break; - case 223: -#line 520 "util/configparser.y" /* yacc.c:1646 */ + case 224: +#line 524 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2692,11 +2711,11 @@ yyparse (void) else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2696 "util/configparser.c" /* yacc.c:1646 */ +#line 2715 "util/configparser.c" /* yacc.c:1646 */ break; - case 224: -#line 529 "util/configparser.y" /* yacc.c:1646 */ + case 225: +#line 533 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2704,11 +2723,11 @@ yyparse (void) else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2708 "util/configparser.c" /* yacc.c:1646 */ +#line 2727 "util/configparser.c" /* yacc.c:1646 */ break; - case 225: -#line 538 "util/configparser.y" /* yacc.c:1646 */ + case 226: +#line 542 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2716,11 +2735,11 @@ yyparse (void) else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2720 "util/configparser.c" /* yacc.c:1646 */ +#line 2739 "util/configparser.c" /* yacc.c:1646 */ break; - case 226: -#line 547 "util/configparser.y" /* yacc.c:1646 */ + case 227: +#line 551 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2728,11 +2747,11 @@ yyparse (void) else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2732 "util/configparser.c" /* yacc.c:1646 */ +#line 2751 "util/configparser.c" /* yacc.c:1646 */ break; - case 227: -#line 556 "util/configparser.y" /* yacc.c:1646 */ + case 228: +#line 560 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2740,11 +2759,11 @@ yyparse (void) else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2744 "util/configparser.c" /* yacc.c:1646 */ +#line 2763 "util/configparser.c" /* yacc.c:1646 */ break; - case 228: -#line 565 "util/configparser.y" /* yacc.c:1646 */ + case 229: +#line 569 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2752,11 +2771,11 @@ yyparse (void) else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2756 "util/configparser.c" /* yacc.c:1646 */ +#line 2775 "util/configparser.c" /* yacc.c:1646 */ break; - case 229: -#line 574 "util/configparser.y" /* yacc.c:1646 */ + case 230: +#line 578 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2764,11 +2783,11 @@ yyparse (void) else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2768 "util/configparser.c" /* yacc.c:1646 */ +#line 2787 "util/configparser.c" /* yacc.c:1646 */ break; - case 230: -#line 583 "util/configparser.y" /* yacc.c:1646 */ + case 231: +#line 587 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2776,11 +2795,11 @@ yyparse (void) else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2780 "util/configparser.c" /* yacc.c:1646 */ +#line 2799 "util/configparser.c" /* yacc.c:1646 */ break; - case 231: -#line 592 "util/configparser.y" /* yacc.c:1646 */ + case 232: +#line 596 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2788,11 +2807,11 @@ yyparse (void) else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2792 "util/configparser.c" /* yacc.c:1646 */ +#line 2811 "util/configparser.c" /* yacc.c:1646 */ break; - case 232: -#line 601 "util/configparser.y" /* yacc.c:1646 */ + case 233: +#line 605 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2800,11 +2819,23 @@ yyparse (void) else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2804 "util/configparser.c" /* yacc.c:1646 */ +#line 2823 "util/configparser.c" /* yacc.c:1646 */ break; - case 233: -#line 610 "util/configparser.y" /* yacc.c:1646 */ + case 234: +#line 614 "util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 2835 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 235: +#line 623 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2812,31 +2843,31 @@ yyparse (void) else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2816 "util/configparser.c" /* yacc.c:1646 */ +#line 2847 "util/configparser.c" /* yacc.c:1646 */ break; - case 234: -#line 619 "util/configparser.y" /* yacc.c:1646 */ + case 236: +#line 632 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } -#line 2826 "util/configparser.c" /* yacc.c:1646 */ +#line 2857 "util/configparser.c" /* yacc.c:1646 */ break; - case 235: -#line 626 "util/configparser.y" /* yacc.c:1646 */ + case 237: +#line 639 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } -#line 2836 "util/configparser.c" /* yacc.c:1646 */ +#line 2867 "util/configparser.c" /* yacc.c:1646 */ break; - case 236: -#line 633 "util/configparser.y" /* yacc.c:1646 */ + case 238: +#line 646 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2844,11 +2875,11 @@ yyparse (void) else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2848 "util/configparser.c" /* yacc.c:1646 */ +#line 2879 "util/configparser.c" /* yacc.c:1646 */ break; - case 237: -#line 642 "util/configparser.y" /* yacc.c:1646 */ + case 239: +#line 655 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2856,11 +2887,11 @@ yyparse (void) else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2860 "util/configparser.c" /* yacc.c:1646 */ +#line 2891 "util/configparser.c" /* yacc.c:1646 */ break; - case 238: -#line 651 "util/configparser.y" /* yacc.c:1646 */ + case 240: +#line 664 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2868,11 +2899,11 @@ yyparse (void) else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2872 "util/configparser.c" /* yacc.c:1646 */ +#line 2903 "util/configparser.c" /* yacc.c:1646 */ break; - case 239: -#line 660 "util/configparser.y" /* yacc.c:1646 */ + case 241: +#line 673 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2885,11 +2916,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 2889 "util/configparser.c" /* yacc.c:1646 */ +#line 2920 "util/configparser.c" /* yacc.c:1646 */ break; - case 240: -#line 674 "util/configparser.y" /* yacc.c:1646 */ + case 242: +#line 687 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2897,11 +2928,11 @@ yyparse (void) else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2901 "util/configparser.c" /* yacc.c:1646 */ +#line 2932 "util/configparser.c" /* yacc.c:1646 */ break; - case 241: -#line 683 "util/configparser.y" /* yacc.c:1646 */ + case 243: +#line 696 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2909,11 +2940,11 @@ yyparse (void) else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2913 "util/configparser.c" /* yacc.c:1646 */ +#line 2944 "util/configparser.c" /* yacc.c:1646 */ break; - case 242: -#line 692 "util/configparser.y" /* yacc.c:1646 */ + case 244: +#line 705 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2921,31 +2952,31 @@ yyparse (void) else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2925 "util/configparser.c" /* yacc.c:1646 */ +#line 2956 "util/configparser.c" /* yacc.c:1646 */ break; - case 243: -#line 701 "util/configparser.y" /* yacc.c:1646 */ + case 245: +#line 714 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 2935 "util/configparser.c" /* yacc.c:1646 */ +#line 2966 "util/configparser.c" /* yacc.c:1646 */ break; - case 244: -#line 708 "util/configparser.y" /* yacc.c:1646 */ + case 246: +#line 721 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 2945 "util/configparser.c" /* yacc.c:1646 */ +#line 2976 "util/configparser.c" /* yacc.c:1646 */ break; - case 245: -#line 715 "util/configparser.y" /* yacc.c:1646 */ + case 247: +#line 728 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -2970,105 +3001,105 @@ yyparse (void) } } } -#line 2974 "util/configparser.c" /* yacc.c:1646 */ +#line 3005 "util/configparser.c" /* yacc.c:1646 */ break; - case 246: -#line 741 "util/configparser.y" /* yacc.c:1646 */ + case 248: +#line 754 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } -#line 2985 "util/configparser.c" /* yacc.c:1646 */ +#line 3016 "util/configparser.c" /* yacc.c:1646 */ break; - case 247: -#line 749 "util/configparser.y" /* yacc.c:1646 */ + case 249: +#line 762 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 2995 "util/configparser.c" /* yacc.c:1646 */ +#line 3026 "util/configparser.c" /* yacc.c:1646 */ break; - case 248: -#line 756 "util/configparser.y" /* yacc.c:1646 */ + case 250: +#line 769 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3005 "util/configparser.c" /* yacc.c:1646 */ +#line 3036 "util/configparser.c" /* yacc.c:1646 */ break; - case 249: -#line 763 "util/configparser.y" /* yacc.c:1646 */ + case 251: +#line 776 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3015 "util/configparser.c" /* yacc.c:1646 */ +#line 3046 "util/configparser.c" /* yacc.c:1646 */ break; - case 250: -#line 770 "util/configparser.y" /* yacc.c:1646 */ + case 252: +#line 783 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3025 "util/configparser.c" /* yacc.c:1646 */ +#line 3056 "util/configparser.c" /* yacc.c:1646 */ break; - case 251: -#line 777 "util/configparser.y" /* yacc.c:1646 */ + case 253: +#line 790 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3036 "util/configparser.c" /* yacc.c:1646 */ +#line 3067 "util/configparser.c" /* yacc.c:1646 */ break; - case 252: -#line 785 "util/configparser.y" /* yacc.c:1646 */ + case 254: +#line 798 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3047 "util/configparser.c" /* yacc.c:1646 */ +#line 3078 "util/configparser.c" /* yacc.c:1646 */ break; - case 253: -#line 793 "util/configparser.y" /* yacc.c:1646 */ + case 255: +#line 806 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3058 "util/configparser.c" /* yacc.c:1646 */ +#line 3089 "util/configparser.c" /* yacc.c:1646 */ break; - case 254: -#line 801 "util/configparser.y" /* yacc.c:1646 */ + case 256: +#line 814 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3068 "util/configparser.c" /* yacc.c:1646 */ +#line 3099 "util/configparser.c" /* yacc.c:1646 */ break; - case 255: -#line 808 "util/configparser.y" /* yacc.c:1646 */ + case 257: +#line 821 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3078,21 +3109,21 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3082 "util/configparser.c" /* yacc.c:1646 */ +#line 3113 "util/configparser.c" /* yacc.c:1646 */ break; - case 256: -#line 819 "util/configparser.y" /* yacc.c:1646 */ + case 258: +#line 832 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3092 "util/configparser.c" /* yacc.c:1646 */ +#line 3123 "util/configparser.c" /* yacc.c:1646 */ break; - case 257: -#line 826 "util/configparser.y" /* yacc.c:1646 */ + case 259: +#line 839 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3100,11 +3131,11 @@ yyparse (void) else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3104 "util/configparser.c" /* yacc.c:1646 */ +#line 3135 "util/configparser.c" /* yacc.c:1646 */ break; - case 258: -#line 835 "util/configparser.y" /* yacc.c:1646 */ + case 260: +#line 848 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3112,11 +3143,11 @@ yyparse (void) else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3116 "util/configparser.c" /* yacc.c:1646 */ +#line 3147 "util/configparser.c" /* yacc.c:1646 */ break; - case 259: -#line 844 "util/configparser.y" /* yacc.c:1646 */ + case 261: +#line 857 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3124,53 +3155,53 @@ yyparse (void) else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3128 "util/configparser.c" /* yacc.c:1646 */ +#line 3159 "util/configparser.c" /* yacc.c:1646 */ break; - case 260: -#line 853 "util/configparser.y" /* yacc.c:1646 */ + case 262: +#line 866 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 3138 "util/configparser.c" /* yacc.c:1646 */ +#line 3169 "util/configparser.c" /* yacc.c:1646 */ break; - case 261: -#line 860 "util/configparser.y" /* yacc.c:1646 */ + case 263: +#line 873 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 3148 "util/configparser.c" /* yacc.c:1646 */ +#line 3179 "util/configparser.c" /* yacc.c:1646 */ break; - case 262: -#line 867 "util/configparser.y" /* yacc.c:1646 */ + case 264: +#line 880 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3159 "util/configparser.c" /* yacc.c:1646 */ +#line 3190 "util/configparser.c" /* yacc.c:1646 */ break; - case 263: -#line 875 "util/configparser.y" /* yacc.c:1646 */ + case 265: +#line 888 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3170 "util/configparser.c" /* yacc.c:1646 */ +#line 3201 "util/configparser.c" /* yacc.c:1646 */ break; - case 264: -#line 883 "util/configparser.y" /* yacc.c:1646 */ + case 266: +#line 896 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3179,11 +3210,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3183 "util/configparser.c" /* yacc.c:1646 */ +#line 3214 "util/configparser.c" /* yacc.c:1646 */ break; - case 265: -#line 893 "util/configparser.y" /* yacc.c:1646 */ + case 267: +#line 906 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3192,11 +3223,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3196 "util/configparser.c" /* yacc.c:1646 */ +#line 3227 "util/configparser.c" /* yacc.c:1646 */ break; - case 266: -#line 903 "util/configparser.y" /* yacc.c:1646 */ + case 268: +#line 916 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3205,11 +3236,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3209 "util/configparser.c" /* yacc.c:1646 */ +#line 3240 "util/configparser.c" /* yacc.c:1646 */ break; - case 267: -#line 913 "util/configparser.y" /* yacc.c:1646 */ + case 269: +#line 926 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3221,11 +3252,11 @@ yyparse (void) else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3225 "util/configparser.c" /* yacc.c:1646 */ +#line 3256 "util/configparser.c" /* yacc.c:1646 */ break; - case 268: -#line 926 "util/configparser.y" /* yacc.c:1646 */ + case 270: +#line 939 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3235,22 +3266,22 @@ yyparse (void) else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3239 "util/configparser.c" /* yacc.c:1646 */ +#line 3270 "util/configparser.c" /* yacc.c:1646 */ break; - case 269: -#line 937 "util/configparser.y" /* yacc.c:1646 */ + case 271: +#line 950 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3250 "util/configparser.c" /* yacc.c:1646 */ +#line 3281 "util/configparser.c" /* yacc.c:1646 */ break; - case 270: -#line 945 "util/configparser.y" /* yacc.c:1646 */ + case 272: +#line 958 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3262,11 +3293,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 3266 "util/configparser.c" /* yacc.c:1646 */ +#line 3297 "util/configparser.c" /* yacc.c:1646 */ break; - case 271: -#line 958 "util/configparser.y" /* yacc.c:1646 */ + case 273: +#line 971 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3274,11 +3305,11 @@ yyparse (void) else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3278 "util/configparser.c" /* yacc.c:1646 */ +#line 3309 "util/configparser.c" /* yacc.c:1646 */ break; - case 272: -#line 967 "util/configparser.y" /* yacc.c:1646 */ + case 274: +#line 980 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3286,11 +3317,11 @@ yyparse (void) else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3290 "util/configparser.c" /* yacc.c:1646 */ +#line 3321 "util/configparser.c" /* yacc.c:1646 */ break; - case 273: -#line 976 "util/configparser.y" /* yacc.c:1646 */ + case 275: +#line 989 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3298,11 +3329,11 @@ yyparse (void) else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3302 "util/configparser.c" /* yacc.c:1646 */ +#line 3333 "util/configparser.c" /* yacc.c:1646 */ break; - case 274: -#line 985 "util/configparser.y" /* yacc.c:1646 */ + case 276: +#line 998 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3311,11 +3342,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3315 "util/configparser.c" /* yacc.c:1646 */ +#line 3346 "util/configparser.c" /* yacc.c:1646 */ break; - case 275: -#line 995 "util/configparser.y" /* yacc.c:1646 */ + case 277: +#line 1008 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3324,22 +3355,22 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3328 "util/configparser.c" /* yacc.c:1646 */ +#line 3359 "util/configparser.c" /* yacc.c:1646 */ break; - case 276: -#line 1005 "util/configparser.y" /* yacc.c:1646 */ + case 278: +#line 1018 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3339 "util/configparser.c" /* yacc.c:1646 */ +#line 3370 "util/configparser.c" /* yacc.c:1646 */ break; - case 277: -#line 1013 "util/configparser.y" /* yacc.c:1646 */ + case 279: +#line 1026 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3351,11 +3382,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 3355 "util/configparser.c" /* yacc.c:1646 */ +#line 3386 "util/configparser.c" /* yacc.c:1646 */ break; - case 278: -#line 1026 "util/configparser.y" /* yacc.c:1646 */ + case 280: +#line 1039 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3363,22 +3394,22 @@ yyparse (void) else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3367 "util/configparser.c" /* yacc.c:1646 */ +#line 3398 "util/configparser.c" /* yacc.c:1646 */ break; - case 279: -#line 1035 "util/configparser.y" /* yacc.c:1646 */ + case 281: +#line 1048 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " "removed, use infra-host-ttl)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3378 "util/configparser.c" /* yacc.c:1646 */ +#line 3409 "util/configparser.c" /* yacc.c:1646 */ break; - case 280: -#line 1043 "util/configparser.y" /* yacc.c:1646 */ + case 282: +#line 1056 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3386,22 +3417,22 @@ yyparse (void) else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3390 "util/configparser.c" /* yacc.c:1646 */ +#line 3421 "util/configparser.c" /* yacc.c:1646 */ break; - case 281: -#line 1052 "util/configparser.y" /* yacc.c:1646 */ + case 283: +#line 1065 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3401 "util/configparser.c" /* yacc.c:1646 */ +#line 3432 "util/configparser.c" /* yacc.c:1646 */ break; - case 282: -#line 1060 "util/configparser.y" /* yacc.c:1646 */ + case 284: +#line 1073 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3413,11 +3444,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 3417 "util/configparser.c" /* yacc.c:1646 */ +#line 3448 "util/configparser.c" /* yacc.c:1646 */ break; - case 283: -#line 1073 "util/configparser.y" /* yacc.c:1646 */ + case 285: +#line 1086 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3425,21 +3456,21 @@ yyparse (void) else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3429 "util/configparser.c" /* yacc.c:1646 */ +#line 3460 "util/configparser.c" /* yacc.c:1646 */ break; - case 284: -#line 1082 "util/configparser.y" /* yacc.c:1646 */ + case 286: +#line 1095 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); } -#line 3439 "util/configparser.c" /* yacc.c:1646 */ +#line 3470 "util/configparser.c" /* yacc.c:1646 */ break; - case 285: -#line 1089 "util/configparser.y" /* yacc.c:1646 */ + case 287: +#line 1102 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3448,11 +3479,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3452 "util/configparser.c" /* yacc.c:1646 */ +#line 3483 "util/configparser.c" /* yacc.c:1646 */ break; - case 286: -#line 1099 "util/configparser.y" /* yacc.c:1646 */ + case 288: +#line 1112 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3461,11 +3492,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3465 "util/configparser.c" /* yacc.c:1646 */ +#line 3496 "util/configparser.c" /* yacc.c:1646 */ break; - case 287: -#line 1109 "util/configparser.y" /* yacc.c:1646 */ + case 289: +#line 1122 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3474,11 +3505,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3478 "util/configparser.c" /* yacc.c:1646 */ +#line 3509 "util/configparser.c" /* yacc.c:1646 */ break; - case 288: -#line 1119 "util/configparser.y" /* yacc.c:1646 */ + case 290: +#line 1132 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3487,11 +3518,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3491 "util/configparser.c" /* yacc.c:1646 */ +#line 3522 "util/configparser.c" /* yacc.c:1646 */ break; - case 289: -#line 1129 "util/configparser.y" /* yacc.c:1646 */ + case 291: +#line 1142 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3500,11 +3531,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3504 "util/configparser.c" /* yacc.c:1646 */ +#line 3535 "util/configparser.c" /* yacc.c:1646 */ break; - case 290: -#line 1139 "util/configparser.y" /* yacc.c:1646 */ + case 292: +#line 1152 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3513,11 +3544,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3517 "util/configparser.c" /* yacc.c:1646 */ +#line 3548 "util/configparser.c" /* yacc.c:1646 */ break; - case 291: -#line 1149 "util/configparser.y" /* yacc.c:1646 */ + case 293: +#line 1162 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3526,11 +3557,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3530 "util/configparser.c" /* yacc.c:1646 */ +#line 3561 "util/configparser.c" /* yacc.c:1646 */ break; - case 292: -#line 1159 "util/configparser.y" /* yacc.c:1646 */ + case 294: +#line 1172 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3539,41 +3570,41 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3543 "util/configparser.c" /* yacc.c:1646 */ +#line 3574 "util/configparser.c" /* yacc.c:1646 */ break; - case 293: -#line 1169 "util/configparser.y" /* yacc.c:1646 */ + case 295: +#line 1182 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3553 "util/configparser.c" /* yacc.c:1646 */ +#line 3584 "util/configparser.c" /* yacc.c:1646 */ break; - case 294: -#line 1176 "util/configparser.y" /* yacc.c:1646 */ + case 296: +#line 1189 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3563 "util/configparser.c" /* yacc.c:1646 */ +#line 3594 "util/configparser.c" /* yacc.c:1646 */ break; - case 295: -#line 1183 "util/configparser.y" /* yacc.c:1646 */ + case 297: +#line 1196 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3573 "util/configparser.c" /* yacc.c:1646 */ +#line 3604 "util/configparser.c" /* yacc.c:1646 */ break; - case 296: -#line 1190 "util/configparser.y" /* yacc.c:1646 */ + case 298: +#line 1203 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3581,11 +3612,11 @@ yyparse (void) else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3585 "util/configparser.c" /* yacc.c:1646 */ +#line 3616 "util/configparser.c" /* yacc.c:1646 */ break; - case 297: -#line 1199 "util/configparser.y" /* yacc.c:1646 */ + case 299: +#line 1212 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3593,11 +3624,11 @@ yyparse (void) else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3597 "util/configparser.c" /* yacc.c:1646 */ +#line 3628 "util/configparser.c" /* yacc.c:1646 */ break; - case 298: -#line 1208 "util/configparser.y" /* yacc.c:1646 */ + case 300: +#line 1221 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3605,21 +3636,21 @@ yyparse (void) else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3609 "util/configparser.c" /* yacc.c:1646 */ +#line 3640 "util/configparser.c" /* yacc.c:1646 */ break; - case 299: -#line 1217 "util/configparser.y" /* yacc.c:1646 */ + case 301: +#line 1230 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3619 "util/configparser.c" /* yacc.c:1646 */ +#line 3650 "util/configparser.c" /* yacc.c:1646 */ break; - case 300: -#line 1224 "util/configparser.y" /* yacc.c:1646 */ + case 302: +#line 1237 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3628,11 +3659,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3632 "util/configparser.c" /* yacc.c:1646 */ +#line 3663 "util/configparser.c" /* yacc.c:1646 */ break; - case 301: -#line 1234 "util/configparser.y" /* yacc.c:1646 */ + case 303: +#line 1247 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -3648,21 +3679,21 @@ yyparse (void) fatal_exit("out of memory adding acl"); } } -#line 3652 "util/configparser.c" /* yacc.c:1646 */ +#line 3683 "util/configparser.c" /* yacc.c:1646 */ break; - case 302: -#line 1251 "util/configparser.y" /* yacc.c:1646 */ + case 304: +#line 1264 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = (yyvsp[0].str); } -#line 3662 "util/configparser.c" /* yacc.c:1646 */ +#line 3693 "util/configparser.c" /* yacc.c:1646 */ break; - case 303: -#line 1258 "util/configparser.y" /* yacc.c:1646 */ + case 305: +#line 1271 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -3679,11 +3710,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 3683 "util/configparser.c" /* yacc.c:1646 */ +#line 3714 "util/configparser.c" /* yacc.c:1646 */ break; - case 304: -#line 1276 "util/configparser.y" /* yacc.c:1646 */ + case 306: +#line 1289 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -3695,11 +3726,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 3699 "util/configparser.c" /* yacc.c:1646 */ +#line 3730 "util/configparser.c" /* yacc.c:1646 */ break; - case 305: -#line 1289 "util/configparser.y" /* yacc.c:1646 */ + case 307: +#line 1302 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -3711,11 +3742,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 3715 "util/configparser.c" /* yacc.c:1646 */ +#line 3746 "util/configparser.c" /* yacc.c:1646 */ break; - case 306: -#line 1302 "util/configparser.y" /* yacc.c:1646 */ + case 308: +#line 1315 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3723,11 +3754,11 @@ yyparse (void) else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3727 "util/configparser.c" /* yacc.c:1646 */ +#line 3758 "util/configparser.c" /* yacc.c:1646 */ break; - case 307: -#line 1311 "util/configparser.y" /* yacc.c:1646 */ + case 309: +#line 1324 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3735,11 +3766,11 @@ yyparse (void) else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3739 "util/configparser.c" /* yacc.c:1646 */ +#line 3770 "util/configparser.c" /* yacc.c:1646 */ break; - case 308: -#line 1320 "util/configparser.y" /* yacc.c:1646 */ + case 310: +#line 1333 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3747,11 +3778,11 @@ yyparse (void) else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3751 "util/configparser.c" /* yacc.c:1646 */ +#line 3782 "util/configparser.c" /* yacc.c:1646 */ break; - case 309: -#line 1329 "util/configparser.y" /* yacc.c:1646 */ + case 311: +#line 1342 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3759,11 +3790,11 @@ yyparse (void) else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3763 "util/configparser.c" /* yacc.c:1646 */ +#line 3794 "util/configparser.c" /* yacc.c:1646 */ break; - case 310: -#line 1338 "util/configparser.y" /* yacc.c:1646 */ + case 312: +#line 1351 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3772,11 +3803,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3776 "util/configparser.c" /* yacc.c:1646 */ +#line 3807 "util/configparser.c" /* yacc.c:1646 */ break; - case 311: -#line 1348 "util/configparser.y" /* yacc.c:1646 */ + case 313: +#line 1361 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3785,11 +3816,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3789 "util/configparser.c" /* yacc.c:1646 */ +#line 3820 "util/configparser.c" /* yacc.c:1646 */ break; - case 312: -#line 1358 "util/configparser.y" /* yacc.c:1646 */ + case 314: +#line 1371 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3797,11 +3828,11 @@ yyparse (void) else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3801 "util/configparser.c" /* yacc.c:1646 */ +#line 3832 "util/configparser.c" /* yacc.c:1646 */ break; - case 313: -#line 1367 "util/configparser.y" /* yacc.c:1646 */ + case 315: +#line 1380 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3809,11 +3840,11 @@ yyparse (void) else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3813 "util/configparser.c" /* yacc.c:1646 */ +#line 3844 "util/configparser.c" /* yacc.c:1646 */ break; - case 314: -#line 1376 "util/configparser.y" /* yacc.c:1646 */ + case 316: +#line 1389 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3825,11 +3856,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 3829 "util/configparser.c" /* yacc.c:1646 */ +#line 3860 "util/configparser.c" /* yacc.c:1646 */ break; - case 315: -#line 1389 "util/configparser.y" /* yacc.c:1646 */ + case 317: +#line 1402 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3841,11 +3872,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 3845 "util/configparser.c" /* yacc.c:1646 */ +#line 3876 "util/configparser.c" /* yacc.c:1646 */ break; - case 316: -#line 1402 "util/configparser.y" /* yacc.c:1646 */ + case 318: +#line 1415 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3853,21 +3884,21 @@ yyparse (void) else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3857 "util/configparser.c" /* yacc.c:1646 */ +#line 3888 "util/configparser.c" /* yacc.c:1646 */ break; - case 317: -#line 1411 "util/configparser.y" /* yacc.c:1646 */ + case 319: +#line 1424 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); } -#line 3867 "util/configparser.c" /* yacc.c:1646 */ +#line 3898 "util/configparser.c" /* yacc.c:1646 */ break; - case 318: -#line 1418 "util/configparser.y" /* yacc.c:1646 */ + case 320: +#line 1431 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3875,11 +3906,11 @@ yyparse (void) else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3879 "util/configparser.c" /* yacc.c:1646 */ +#line 3910 "util/configparser.c" /* yacc.c:1646 */ break; - case 319: -#line 1427 "util/configparser.y" /* yacc.c:1646 */ + case 321: +#line 1440 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3887,11 +3918,11 @@ yyparse (void) else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3891 "util/configparser.c" /* yacc.c:1646 */ +#line 3922 "util/configparser.c" /* yacc.c:1646 */ break; - case 320: -#line 1436 "util/configparser.y" /* yacc.c:1646 */ + case 322: +#line 1449 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3899,11 +3930,11 @@ yyparse (void) else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3903 "util/configparser.c" /* yacc.c:1646 */ +#line 3934 "util/configparser.c" /* yacc.c:1646 */ break; - case 321: -#line 1445 "util/configparser.y" /* yacc.c:1646 */ + case 323: +#line 1458 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3912,22 +3943,22 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3916 "util/configparser.c" /* yacc.c:1646 */ +#line 3947 "util/configparser.c" /* yacc.c:1646 */ break; - case 322: -#line 1454 "util/configparser.y" /* yacc.c:1646 */ + case 324: +#line 1467 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3927 "util/configparser.c" /* yacc.c:1646 */ +#line 3958 "util/configparser.c" /* yacc.c:1646 */ break; - case 323: -#line 1462 "util/configparser.y" /* yacc.c:1646 */ + case 325: +#line 1475 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3939,22 +3970,22 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 3943 "util/configparser.c" /* yacc.c:1646 */ +#line 3974 "util/configparser.c" /* yacc.c:1646 */ break; - case 324: -#line 1475 "util/configparser.y" /* yacc.c:1646 */ + case 326: +#line 1488 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3954 "util/configparser.c" /* yacc.c:1646 */ +#line 3985 "util/configparser.c" /* yacc.c:1646 */ break; - case 325: -#line 1483 "util/configparser.y" /* yacc.c:1646 */ + case 327: +#line 1496 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -3981,21 +4012,21 @@ yyparse (void) fatal_exit("out of memory adding local-zone"); } } -#line 3985 "util/configparser.c" /* yacc.c:1646 */ +#line 4016 "util/configparser.c" /* yacc.c:1646 */ break; - case 326: -#line 1511 "util/configparser.y" /* yacc.c:1646 */ + case 328: +#line 1524 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) fatal_exit("out of memory adding local-data"); } -#line 3995 "util/configparser.c" /* yacc.c:1646 */ +#line 4026 "util/configparser.c" /* yacc.c:1646 */ break; - case 327: -#line 1518 "util/configparser.y" /* yacc.c:1646 */ + case 329: +#line 1531 "util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4009,11 +4040,11 @@ yyparse (void) yyerror("local-data-ptr could not be reversed"); } } -#line 4013 "util/configparser.c" /* yacc.c:1646 */ +#line 4044 "util/configparser.c" /* yacc.c:1646 */ break; - case 328: -#line 1533 "util/configparser.y" /* yacc.c:1646 */ + case 330: +#line 1546 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4022,11 +4053,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4026 "util/configparser.c" /* yacc.c:1646 */ +#line 4057 "util/configparser.c" /* yacc.c:1646 */ break; - case 329: -#line 1543 "util/configparser.y" /* yacc.c:1646 */ + case 331: +#line 1556 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4035,31 +4066,31 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4039 "util/configparser.c" /* yacc.c:1646 */ +#line 4070 "util/configparser.c" /* yacc.c:1646 */ break; - case 330: -#line 1553 "util/configparser.y" /* yacc.c:1646 */ + case 332: +#line 1566 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4049 "util/configparser.c" /* yacc.c:1646 */ +#line 4080 "util/configparser.c" /* yacc.c:1646 */ break; - case 331: -#line 1560 "util/configparser.y" /* yacc.c:1646 */ + case 333: +#line 1573 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 4059 "util/configparser.c" /* yacc.c:1646 */ +#line 4090 "util/configparser.c" /* yacc.c:1646 */ break; - case 332: -#line 1567 "util/configparser.y" /* yacc.c:1646 */ + case 334: +#line 1580 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4067,11 +4098,11 @@ yyparse (void) else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4071 "util/configparser.c" /* yacc.c:1646 */ +#line 4102 "util/configparser.c" /* yacc.c:1646 */ break; - case 333: -#line 1576 "util/configparser.y" /* yacc.c:1646 */ + case 335: +#line 1589 "util/configparser.y" /* yacc.c:1646 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4084,11 +4115,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 4088 "util/configparser.c" /* yacc.c:1646 */ +#line 4119 "util/configparser.c" /* yacc.c:1646 */ break; - case 334: -#line 1590 "util/configparser.y" /* yacc.c:1646 */ + case 336: +#line 1603 "util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4106,11 +4137,11 @@ yyparse (void) } } } -#line 4110 "util/configparser.c" /* yacc.c:1646 */ +#line 4141 "util/configparser.c" /* yacc.c:1646 */ break; - case 335: -#line 1609 "util/configparser.y" /* yacc.c:1646 */ + case 337: +#line 1622 "util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4128,11 +4159,11 @@ yyparse (void) } } } -#line 4132 "util/configparser.c" /* yacc.c:1646 */ +#line 4163 "util/configparser.c" /* yacc.c:1646 */ break; - case 336: -#line 1628 "util/configparser.y" /* yacc.c:1646 */ + case 338: +#line 1641 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, @@ -4143,11 +4174,11 @@ yyparse (void) free((yyvsp[0].str)); } } -#line 4147 "util/configparser.c" /* yacc.c:1646 */ +#line 4178 "util/configparser.c" /* yacc.c:1646 */ break; - case 337: -#line 1640 "util/configparser.y" /* yacc.c:1646 */ + case 339: +#line 1653 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, @@ -4158,11 +4189,11 @@ yyparse (void) free((yyvsp[0].str)); } } -#line 4162 "util/configparser.c" /* yacc.c:1646 */ +#line 4193 "util/configparser.c" /* yacc.c:1646 */ break; - case 338: -#line 1652 "util/configparser.y" /* yacc.c:1646 */ + case 340: +#line 1665 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, @@ -4173,11 +4204,11 @@ yyparse (void) free((yyvsp[0].str)); } } -#line 4177 "util/configparser.c" /* yacc.c:1646 */ +#line 4208 "util/configparser.c" /* yacc.c:1646 */ break; - case 339: -#line 1664 "util/configparser.y" /* yacc.c:1646 */ + case 341: +#line 1677 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -4187,11 +4218,11 @@ yyparse (void) free((yyvsp[0].str)); } } -#line 4191 "util/configparser.c" /* yacc.c:1646 */ +#line 4222 "util/configparser.c" /* yacc.c:1646 */ break; - case 340: -#line 1675 "util/configparser.y" /* yacc.c:1646 */ + case 342: +#line 1688 "util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4209,11 +4240,11 @@ yyparse (void) } } } -#line 4213 "util/configparser.c" /* yacc.c:1646 */ +#line 4244 "util/configparser.c" /* yacc.c:1646 */ break; - case 341: -#line 1694 "util/configparser.y" /* yacc.c:1646 */ + case 343: +#line 1707 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4221,11 +4252,11 @@ yyparse (void) else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4225 "util/configparser.c" /* yacc.c:1646 */ +#line 4256 "util/configparser.c" /* yacc.c:1646 */ break; - case 342: -#line 1704 "util/configparser.y" /* yacc.c:1646 */ + case 344: +#line 1717 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4233,33 +4264,33 @@ yyparse (void) else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4237 "util/configparser.c" /* yacc.c:1646 */ +#line 4268 "util/configparser.c" /* yacc.c:1646 */ break; - case 343: -#line 1713 "util/configparser.y" /* yacc.c:1646 */ + case 345: +#line 1726 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4248 "util/configparser.c" /* yacc.c:1646 */ +#line 4279 "util/configparser.c" /* yacc.c:1646 */ break; - case 344: -#line 1721 "util/configparser.y" /* yacc.c:1646 */ + case 346: +#line 1734 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4259 "util/configparser.c" /* yacc.c:1646 */ +#line 4290 "util/configparser.c" /* yacc.c:1646 */ break; - case 345: -#line 1729 "util/configparser.y" /* yacc.c:1646 */ + case 347: +#line 1742 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4271,11 +4302,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 4275 "util/configparser.c" /* yacc.c:1646 */ +#line 4306 "util/configparser.c" /* yacc.c:1646 */ break; - case 346: -#line 1742 "util/configparser.y" /* yacc.c:1646 */ + case 348: +#line 1755 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4287,11 +4318,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 4291 "util/configparser.c" /* yacc.c:1646 */ +#line 4322 "util/configparser.c" /* yacc.c:1646 */ break; - case 347: -#line 1755 "util/configparser.y" /* yacc.c:1646 */ + case 349: +#line 1768 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -4303,11 +4334,11 @@ yyparse (void) "ratelimit-for-domain"); } } -#line 4307 "util/configparser.c" /* yacc.c:1646 */ +#line 4338 "util/configparser.c" /* yacc.c:1646 */ break; - case 348: -#line 1768 "util/configparser.y" /* yacc.c:1646 */ + case 350: +#line 1781 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -4319,11 +4350,11 @@ yyparse (void) "ratelimit-below-domain"); } } -#line 4323 "util/configparser.c" /* yacc.c:1646 */ +#line 4354 "util/configparser.c" /* yacc.c:1646 */ break; - case 349: -#line 1781 "util/configparser.y" /* yacc.c:1646 */ + case 351: +#line 1794 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4331,11 +4362,11 @@ yyparse (void) else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4335 "util/configparser.c" /* yacc.c:1646 */ +#line 4366 "util/configparser.c" /* yacc.c:1646 */ break; - case 350: -#line 1790 "util/configparser.y" /* yacc.c:1646 */ + case 352: +#line 1803 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4343,11 +4374,11 @@ yyparse (void) else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4347 "util/configparser.c" /* yacc.c:1646 */ +#line 4378 "util/configparser.c" /* yacc.c:1646 */ break; - case 351: -#line 1799 "util/configparser.y" /* yacc.c:1646 */ + case 353: +#line 1812 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4356,11 +4387,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4360 "util/configparser.c" /* yacc.c:1646 */ +#line 4391 "util/configparser.c" /* yacc.c:1646 */ break; - case 352: -#line 1809 "util/configparser.y" /* yacc.c:1646 */ + case 354: +#line 1822 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4369,11 +4400,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4373 "util/configparser.c" /* yacc.c:1646 */ +#line 4404 "util/configparser.c" /* yacc.c:1646 */ break; - case 353: -#line 1819 "util/configparser.y" /* yacc.c:1646 */ + case 355: +#line 1832 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -4385,11 +4416,11 @@ yyparse (void) OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4389 "util/configparser.c" /* yacc.c:1646 */ +#line 4420 "util/configparser.c" /* yacc.c:1646 */ break; - case 354: -#line 1832 "util/configparser.y" /* yacc.c:1646 */ + case 356: +#line 1845 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -4401,11 +4432,11 @@ yyparse (void) OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4405 "util/configparser.c" /* yacc.c:1646 */ +#line 4436 "util/configparser.c" /* yacc.c:1646 */ break; - case 355: -#line 1845 "util/configparser.y" /* yacc.c:1646 */ + case 357: +#line 1858 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -4415,11 +4446,11 @@ yyparse (void) OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4419 "util/configparser.c" /* yacc.c:1646 */ +#line 4450 "util/configparser.c" /* yacc.c:1646 */ break; - case 356: -#line 1856 "util/configparser.y" /* yacc.c:1646 */ + case 358: +#line 1869 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -4431,11 +4462,11 @@ yyparse (void) OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4435 "util/configparser.c" /* yacc.c:1646 */ +#line 4466 "util/configparser.c" /* yacc.c:1646 */ break; - case 357: -#line 1869 "util/configparser.y" /* yacc.c:1646 */ + case 359: +#line 1882 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -4445,11 +4476,11 @@ yyparse (void) OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4449 "util/configparser.c" /* yacc.c:1646 */ +#line 4480 "util/configparser.c" /* yacc.c:1646 */ break; - case 358: -#line 1880 "util/configparser.y" /* yacc.c:1646 */ + case 360: +#line 1893 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -4461,11 +4492,11 @@ yyparse (void) OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4465 "util/configparser.c" /* yacc.c:1646 */ +#line 4496 "util/configparser.c" /* yacc.c:1646 */ break; - case 359: -#line 1893 "util/configparser.y" /* yacc.c:1646 */ + case 361: +#line 1906 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -4474,31 +4505,31 @@ yyparse (void) free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 4478 "util/configparser.c" /* yacc.c:1646 */ +#line 4509 "util/configparser.c" /* yacc.c:1646 */ break; - case 360: -#line 1903 "util/configparser.y" /* yacc.c:1646 */ + case 362: +#line 1916 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4488 "util/configparser.c" /* yacc.c:1646 */ +#line 4519 "util/configparser.c" /* yacc.c:1646 */ break; - case 361: -#line 1910 "util/configparser.y" /* yacc.c:1646 */ + case 363: +#line 1923 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4498 "util/configparser.c" /* yacc.c:1646 */ +#line 4529 "util/configparser.c" /* yacc.c:1646 */ break; - case 362: -#line 1917 "util/configparser.y" /* yacc.c:1646 */ + case 364: +#line 1930 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4506,11 +4537,11 @@ yyparse (void) else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4510 "util/configparser.c" /* yacc.c:1646 */ +#line 4541 "util/configparser.c" /* yacc.c:1646 */ break; - case 363: -#line 1926 "util/configparser.y" /* yacc.c:1646 */ + case 365: +#line 1939 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4519,11 +4550,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4523 "util/configparser.c" /* yacc.c:1646 */ +#line 4554 "util/configparser.c" /* yacc.c:1646 */ break; - case 364: -#line 1936 "util/configparser.y" /* yacc.c:1646 */ + case 366: +#line 1949 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4532,11 +4563,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4536 "util/configparser.c" /* yacc.c:1646 */ +#line 4567 "util/configparser.c" /* yacc.c:1646 */ break; - case 365: -#line 1946 "util/configparser.y" /* yacc.c:1646 */ + case 367: +#line 1959 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -4545,31 +4576,31 @@ yyparse (void) free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 4549 "util/configparser.c" /* yacc.c:1646 */ +#line 4580 "util/configparser.c" /* yacc.c:1646 */ break; - case 366: -#line 1956 "util/configparser.y" /* yacc.c:1646 */ + case 368: +#line 1969 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4559 "util/configparser.c" /* yacc.c:1646 */ +#line 4590 "util/configparser.c" /* yacc.c:1646 */ break; - case 367: -#line 1963 "util/configparser.y" /* yacc.c:1646 */ + case 369: +#line 1976 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4569 "util/configparser.c" /* yacc.c:1646 */ +#line 4600 "util/configparser.c" /* yacc.c:1646 */ break; - case 368: -#line 1970 "util/configparser.y" /* yacc.c:1646 */ + case 370: +#line 1983 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4577,11 +4608,11 @@ yyparse (void) else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4581 "util/configparser.c" /* yacc.c:1646 */ +#line 4612 "util/configparser.c" /* yacc.c:1646 */ break; - case 369: -#line 1979 "util/configparser.y" /* yacc.c:1646 */ + case 371: +#line 1992 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4590,11 +4621,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4594 "util/configparser.c" /* yacc.c:1646 */ +#line 4625 "util/configparser.c" /* yacc.c:1646 */ break; - case 370: -#line 1989 "util/configparser.y" /* yacc.c:1646 */ + case 372: +#line 2002 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -4603,11 +4634,11 @@ yyparse (void) free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 4607 "util/configparser.c" /* yacc.c:1646 */ +#line 4638 "util/configparser.c" /* yacc.c:1646 */ break; - case 371: -#line 1999 "util/configparser.y" /* yacc.c:1646 */ + case 373: +#line 2012 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -4635,11 +4666,11 @@ yyparse (void) fatal_exit("out of memory adding local-zone"); } } -#line 4639 "util/configparser.c" /* yacc.c:1646 */ +#line 4670 "util/configparser.c" /* yacc.c:1646 */ break; - case 372: -#line 2028 "util/configparser.y" /* yacc.c:1646 */ + case 374: +#line 2041 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -4648,22 +4679,22 @@ yyparse (void) fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 4652 "util/configparser.c" /* yacc.c:1646 */ +#line 4683 "util/configparser.c" /* yacc.c:1646 */ break; - case 373: -#line 2038 "util/configparser.y" /* yacc.c:1646 */ + case 375: +#line 2051 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 4663 "util/configparser.c" /* yacc.c:1646 */ +#line 4694 "util/configparser.c" /* yacc.c:1646 */ break; - case 374: -#line 2046 "util/configparser.y" /* yacc.c:1646 */ + case 376: +#line 2059 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { @@ -4671,11 +4702,11 @@ yyparse (void) free((yyvsp[0].str)); } } -#line 4675 "util/configparser.c" /* yacc.c:1646 */ +#line 4706 "util/configparser.c" /* yacc.c:1646 */ break; - case 375: -#line 2055 "util/configparser.y" /* yacc.c:1646 */ + case 377: +#line 2068 "util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4689,11 +4720,11 @@ yyparse (void) yyerror("local-data-ptr could not be reversed"); } } -#line 4693 "util/configparser.c" /* yacc.c:1646 */ +#line 4724 "util/configparser.c" /* yacc.c:1646 */ break; - case 376: -#line 2070 "util/configparser.y" /* yacc.c:1646 */ + case 378: +#line 2083 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4701,19 +4732,19 @@ yyparse (void) else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4705 "util/configparser.c" /* yacc.c:1646 */ +#line 4736 "util/configparser.c" /* yacc.c:1646 */ break; - case 377: -#line 2079 "util/configparser.y" /* yacc.c:1646 */ + case 379: +#line 2092 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 4713 "util/configparser.c" /* yacc.c:1646 */ +#line 4744 "util/configparser.c" /* yacc.c:1646 */ break; - case 388: -#line 2090 "util/configparser.y" /* yacc.c:1646 */ + case 390: +#line 2103 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4722,11 +4753,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4726 "util/configparser.c" /* yacc.c:1646 */ +#line 4757 "util/configparser.c" /* yacc.c:1646 */ break; - case 389: -#line 2100 "util/configparser.y" /* yacc.c:1646 */ + case 391: +#line 2113 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4734,21 +4765,21 @@ yyparse (void) else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4738 "util/configparser.c" /* yacc.c:1646 */ +#line 4769 "util/configparser.c" /* yacc.c:1646 */ break; - case 390: -#line 2109 "util/configparser.y" /* yacc.c:1646 */ + case 392: +#line 2122 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4748 "util/configparser.c" /* yacc.c:1646 */ +#line 4779 "util/configparser.c" /* yacc.c:1646 */ break; - case 391: -#line 2116 "util/configparser.y" /* yacc.c:1646 */ + case 393: +#line 2129 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4757,122 +4788,122 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4761 "util/configparser.c" /* yacc.c:1646 */ +#line 4792 "util/configparser.c" /* yacc.c:1646 */ break; - case 392: -#line 2126 "util/configparser.y" /* yacc.c:1646 */ + case 394: +#line 2139 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = (yyvsp[0].str); } -#line 4771 "util/configparser.c" /* yacc.c:1646 */ +#line 4802 "util/configparser.c" /* yacc.c:1646 */ break; - case 393: -#line 2133 "util/configparser.y" /* yacc.c:1646 */ + case 395: +#line 2146 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } -#line 4781 "util/configparser.c" /* yacc.c:1646 */ +#line 4812 "util/configparser.c" /* yacc.c:1646 */ break; - case 394: -#line 2140 "util/configparser.y" /* yacc.c:1646 */ + case 396: +#line 2153 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = (yyvsp[0].str); } -#line 4791 "util/configparser.c" /* yacc.c:1646 */ +#line 4822 "util/configparser.c" /* yacc.c:1646 */ break; - case 395: -#line 2147 "util/configparser.y" /* yacc.c:1646 */ + case 397: +#line 2160 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } -#line 4801 "util/configparser.c" /* yacc.c:1646 */ +#line 4832 "util/configparser.c" /* yacc.c:1646 */ break; - case 396: -#line 2154 "util/configparser.y" /* yacc.c:1646 */ + case 398: +#line 2167 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 4809 "util/configparser.c" /* yacc.c:1646 */ +#line 4840 "util/configparser.c" /* yacc.c:1646 */ break; - case 411: -#line 2171 "util/configparser.y" /* yacc.c:1646 */ + case 413: +#line 2184 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4820 "util/configparser.c" /* yacc.c:1646 */ +#line 4851 "util/configparser.c" /* yacc.c:1646 */ break; - case 412: -#line 2179 "util/configparser.y" /* yacc.c:1646 */ + case 414: +#line 2192 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } -#line 4830 "util/configparser.c" /* yacc.c:1646 */ +#line 4861 "util/configparser.c" /* yacc.c:1646 */ break; - case 413: -#line 2186 "util/configparser.y" /* yacc.c:1646 */ + case 415: +#line 2199 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4841 "util/configparser.c" /* yacc.c:1646 */ +#line 4872 "util/configparser.c" /* yacc.c:1646 */ break; - case 414: -#line 2194 "util/configparser.y" /* yacc.c:1646 */ + case 416: +#line 2207 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4852 "util/configparser.c" /* yacc.c:1646 */ +#line 4883 "util/configparser.c" /* yacc.c:1646 */ break; - case 415: -#line 2202 "util/configparser.y" /* yacc.c:1646 */ + case 417: +#line 2215 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } -#line 4862 "util/configparser.c" /* yacc.c:1646 */ +#line 4893 "util/configparser.c" /* yacc.c:1646 */ break; - case 416: -#line 2209 "util/configparser.y" /* yacc.c:1646 */ + case 418: +#line 2222 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } -#line 4872 "util/configparser.c" /* yacc.c:1646 */ +#line 4903 "util/configparser.c" /* yacc.c:1646 */ break; - case 417: -#line 2216 "util/configparser.y" /* yacc.c:1646 */ + case 419: +#line 2229 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4880,11 +4911,11 @@ yyparse (void) else cfg_parser->cfg->dnstap_log_resolver_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4884 "util/configparser.c" /* yacc.c:1646 */ +#line 4915 "util/configparser.c" /* yacc.c:1646 */ break; - case 418: -#line 2225 "util/configparser.y" /* yacc.c:1646 */ + case 420: +#line 2238 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4892,11 +4923,11 @@ yyparse (void) else cfg_parser->cfg->dnstap_log_resolver_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4896 "util/configparser.c" /* yacc.c:1646 */ +#line 4927 "util/configparser.c" /* yacc.c:1646 */ break; - case 419: -#line 2234 "util/configparser.y" /* yacc.c:1646 */ + case 421: +#line 2247 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4904,11 +4935,11 @@ yyparse (void) else cfg_parser->cfg->dnstap_log_client_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4908 "util/configparser.c" /* yacc.c:1646 */ +#line 4939 "util/configparser.c" /* yacc.c:1646 */ break; - case 420: -#line 2243 "util/configparser.y" /* yacc.c:1646 */ + case 422: +#line 2256 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4916,11 +4947,11 @@ yyparse (void) else cfg_parser->cfg->dnstap_log_client_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4920 "util/configparser.c" /* yacc.c:1646 */ +#line 4951 "util/configparser.c" /* yacc.c:1646 */ break; - case 421: -#line 2252 "util/configparser.y" /* yacc.c:1646 */ + case 423: +#line 2265 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4928,11 +4959,11 @@ yyparse (void) else cfg_parser->cfg->dnstap_log_forwarder_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4932 "util/configparser.c" /* yacc.c:1646 */ +#line 4963 "util/configparser.c" /* yacc.c:1646 */ break; - case 422: -#line 2261 "util/configparser.y" /* yacc.c:1646 */ + case 424: +#line 2274 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4940,29 +4971,29 @@ yyparse (void) else cfg_parser->cfg->dnstap_log_forwarder_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4944 "util/configparser.c" /* yacc.c:1646 */ +#line 4975 "util/configparser.c" /* yacc.c:1646 */ break; - case 423: -#line 2270 "util/configparser.y" /* yacc.c:1646 */ + case 425: +#line 2283 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(python:)\n")); } -#line 4952 "util/configparser.c" /* yacc.c:1646 */ +#line 4983 "util/configparser.c" /* yacc.c:1646 */ break; - case 427: -#line 2279 "util/configparser.y" /* yacc.c:1646 */ + case 429: +#line 2292 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->python_script); cfg_parser->cfg->python_script = (yyvsp[0].str); } -#line 4962 "util/configparser.c" /* yacc.c:1646 */ +#line 4993 "util/configparser.c" /* yacc.c:1646 */ break; - case 428: -#line 2285 "util/configparser.y" /* yacc.c:1646 */ + case 430: +#line 2298 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4971,21 +5002,21 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4975 "util/configparser.c" /* yacc.c:1646 */ +#line 5006 "util/configparser.c" /* yacc.c:1646 */ break; - case 429: -#line 2295 "util/configparser.y" /* yacc.c:1646 */ + case 431: +#line 2308 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = (yyvsp[0].str); } -#line 4985 "util/configparser.c" /* yacc.c:1646 */ +#line 5016 "util/configparser.c" /* yacc.c:1646 */ break; - case 430: -#line 2302 "util/configparser.y" /* yacc.c:1646 */ + case 432: +#line 2315 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -4993,31 +5024,31 @@ yyparse (void) (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 4997 "util/configparser.c" /* yacc.c:1646 */ +#line 5028 "util/configparser.c" /* yacc.c:1646 */ break; - case 431: -#line 2311 "util/configparser.y" /* yacc.c:1646 */ + case 433: +#line 2324 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 5008 "util/configparser.c" /* yacc.c:1646 */ +#line 5039 "util/configparser.c" /* yacc.c:1646 */ break; - case 432: -#line 2319 "util/configparser.y" /* yacc.c:1646 */ + case 434: +#line 2332 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnscrypt:)\n")); OUTYY(("\nP(dnscrypt:)\n")); } -#line 5017 "util/configparser.c" /* yacc.c:1646 */ +#line 5048 "util/configparser.c" /* yacc.c:1646 */ break; - case 442: -#line 2333 "util/configparser.y" /* yacc.c:1646 */ + case 446: +#line 2348 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5025,11 +5056,11 @@ yyparse (void) else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5029 "util/configparser.c" /* yacc.c:1646 */ +#line 5060 "util/configparser.c" /* yacc.c:1646 */ break; - case 443: -#line 2343 "util/configparser.y" /* yacc.c:1646 */ + case 447: +#line 2358 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); @@ -5038,52 +5069,52 @@ yyparse (void) else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5042 "util/configparser.c" /* yacc.c:1646 */ +#line 5073 "util/configparser.c" /* yacc.c:1646 */ break; - case 444: -#line 2353 "util/configparser.y" /* yacc.c:1646 */ + case 448: +#line 2368 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } -#line 5052 "util/configparser.c" /* yacc.c:1646 */ +#line 5083 "util/configparser.c" /* yacc.c:1646 */ break; - case 445: -#line 2360 "util/configparser.y" /* yacc.c:1646 */ + case 449: +#line 2375 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 5062 "util/configparser.c" /* yacc.c:1646 */ +#line 5093 "util/configparser.c" /* yacc.c:1646 */ break; - case 446: -#line 2367 "util/configparser.y" /* yacc.c:1646 */ + case 450: +#line 2382 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 5072 "util/configparser.c" /* yacc.c:1646 */ +#line 5103 "util/configparser.c" /* yacc.c:1646 */ break; - case 447: -#line 2374 "util/configparser.y" /* yacc.c:1646 */ + case 451: +#line 2389 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5083 "util/configparser.c" /* yacc.c:1646 */ +#line 5114 "util/configparser.c" /* yacc.c:1646 */ break; - case 448: -#line 2382 "util/configparser.y" /* yacc.c:1646 */ + case 452: +#line 2397 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5095,19 +5126,46 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 5099 "util/configparser.c" /* yacc.c:1646 */ +#line 5130 "util/configparser.c" /* yacc.c:1646 */ break; - case 449: -#line 2395 "util/configparser.y" /* yacc.c:1646 */ + case 453: +#line 2410 "util/configparser.y" /* yacc.c:1646 */ { - OUTYY(("\nP(cachedb:)\n")); - } -#line 5107 "util/configparser.c" /* yacc.c:1646 */ + OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str))); + if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) + yyerror("memory size expected"); + free((yyvsp[0].str)); + } +#line 5141 "util/configparser.c" /* yacc.c:1646 */ break; case 454: -#line 2404 "util/configparser.y" /* yacc.c:1646 */ +#line 2418 "util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); + if(atoi((yyvsp[0].str)) == 0) + yyerror("number expected"); + else { + cfg_parser->cfg->dnscrypt_nonce_cache_slabs = atoi((yyvsp[0].str)); + if(!is_pow2(cfg_parser->cfg->dnscrypt_nonce_cache_slabs)) + yyerror("must be a power of 2"); + } + free((yyvsp[0].str)); + } +#line 5157 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 455: +#line 2431 "util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("\nP(cachedb:)\n")); + } +#line 5165 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 460: +#line 2440 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -5120,11 +5178,11 @@ yyparse (void) OUTYY(("P(Compiled without cachedb, ignoring)\n")); #endif } -#line 5124 "util/configparser.c" /* yacc.c:1646 */ +#line 5182 "util/configparser.c" /* yacc.c:1646 */ break; - case 455: -#line 2418 "util/configparser.y" /* yacc.c:1646 */ + case 461: +#line 2454 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -5138,11 +5196,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 5142 "util/configparser.c" /* yacc.c:1646 */ +#line 5200 "util/configparser.c" /* yacc.c:1646 */ break; -#line 5146 "util/configparser.c" /* yacc.c:1646 */ +#line 5204 "util/configparser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -5370,7 +5428,7 @@ yyparse (void) #endif return yyresult; } -#line 2432 "util/configparser.y" /* yacc.c:1906 */ +#line 2468 "util/configparser.y" /* yacc.c:1906 */ /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index fe9d6144256d..b2cf94c3865c 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -254,15 +254,18 @@ extern int yydebug; VAR_DNSCRYPT_PROVIDER_CERT = 464, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 465, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 466, - VAR_IPSECMOD_ENABLED = 467, - VAR_IPSECMOD_HOOK = 468, - VAR_IPSECMOD_IGNORE_BOGUS = 469, - VAR_IPSECMOD_MAX_TTL = 470, - VAR_IPSECMOD_WHITELIST = 471, - VAR_IPSECMOD_STRICT = 472, - VAR_CACHEDB = 473, - VAR_CACHEDB_BACKEND = 474, - VAR_CACHEDB_SECRETSEED = 475 + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 467, + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 468, + VAR_IPSECMOD_ENABLED = 469, + VAR_IPSECMOD_HOOK = 470, + VAR_IPSECMOD_IGNORE_BOGUS = 471, + VAR_IPSECMOD_MAX_TTL = 472, + VAR_IPSECMOD_WHITELIST = 473, + VAR_IPSECMOD_STRICT = 474, + VAR_CACHEDB = 475, + VAR_CACHEDB_BACKEND = 476, + VAR_CACHEDB_SECRETSEED = 477, + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 478 }; #endif /* Tokens. */ @@ -475,15 +478,18 @@ extern int yydebug; #define VAR_DNSCRYPT_PROVIDER_CERT 464 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 465 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 466 -#define VAR_IPSECMOD_ENABLED 467 -#define VAR_IPSECMOD_HOOK 468 -#define VAR_IPSECMOD_IGNORE_BOGUS 469 -#define VAR_IPSECMOD_MAX_TTL 470 -#define VAR_IPSECMOD_WHITELIST 471 -#define VAR_IPSECMOD_STRICT 472 -#define VAR_CACHEDB 473 -#define VAR_CACHEDB_BACKEND 474 -#define VAR_CACHEDB_SECRETSEED 475 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 467 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 468 +#define VAR_IPSECMOD_ENABLED 469 +#define VAR_IPSECMOD_HOOK 470 +#define VAR_IPSECMOD_IGNORE_BOGUS 471 +#define VAR_IPSECMOD_MAX_TTL 472 +#define VAR_IPSECMOD_WHITELIST 473 +#define VAR_IPSECMOD_STRICT 474 +#define VAR_CACHEDB 475 +#define VAR_CACHEDB_BACKEND 476 +#define VAR_CACHEDB_SECRETSEED 477 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 478 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -494,7 +500,7 @@ union YYSTYPE char* str; -#line 498 "util/configparser.h" /* yacc.c:1909 */ +#line 504 "util/configparser.h" /* yacc.c:1909 */ }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index 7b41b1d767d6..1f72c73b08d8 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -146,9 +146,12 @@ extern struct config_parser_state* cfg_parser; %token VAR_DNSCRYPT_SECRET_KEY VAR_DNSCRYPT_PROVIDER_CERT %token VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE %token VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS +%token VAR_DNSCRYPT_NONCE_CACHE_SIZE +%token VAR_DNSCRYPT_NONCE_CACHE_SLABS %token VAR_IPSECMOD_ENABLED VAR_IPSECMOD_HOOK VAR_IPSECMOD_IGNORE_BOGUS %token VAR_IPSECMOD_MAX_TTL VAR_IPSECMOD_WHITELIST VAR_IPSECMOD_STRICT %token VAR_CACHEDB VAR_CACHEDB_BACKEND VAR_CACHEDB_SECRETSEED +%token VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -237,7 +240,8 @@ content_server: server_num_threads | server_verbosity | server_port | server_hide_trustanchor | server_trust_anchor_signaling | server_ipsecmod_enabled | server_ipsecmod_hook | server_ipsecmod_ignore_bogus | server_ipsecmod_max_ttl | - server_ipsecmod_whitelist | server_ipsecmod_strict + server_ipsecmod_whitelist | server_ipsecmod_strict | + server_udp_upstream_without_downstream ; stubstart: VAR_STUB_ZONE { @@ -411,7 +415,7 @@ server_client_subnet_opcode: VAR_CLIENT_SUBNET_OPCODE STRING_ARG { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", $2)); - OUTYY(("P(Depricated option, ignoring)\n")); + OUTYY(("P(Deprecated option, ignoring)\n")); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif @@ -606,6 +610,15 @@ server_tcp_upstream: VAR_TCP_UPSTREAM STRING_ARG free($2); } ; +server_udp_upstream_without_downstream: VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM STRING_ARG + { + OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp($2, "yes")==0); + free($2); + } + ; server_ssl_upstream: VAR_SSL_UPSTREAM STRING_ARG { OUTYY(("P(server_ssl_upstream:%s)\n", $2)); @@ -2327,7 +2340,9 @@ content_dnsc: dnsc_dnscrypt_enable | dnsc_dnscrypt_port | dnsc_dnscrypt_provider | dnsc_dnscrypt_secret_key | dnsc_dnscrypt_provider_cert | dnsc_dnscrypt_shared_secret_cache_size | - dnsc_dnscrypt_shared_secret_cache_slabs + dnsc_dnscrypt_shared_secret_cache_slabs | + dnsc_dnscrypt_nonce_cache_size | + dnsc_dnscrypt_nonce_cache_slabs ; dnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG { @@ -2391,6 +2406,27 @@ dnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS free($2); } ; +dnsc_dnscrypt_nonce_cache_size: VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG + { + OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", $2)); + if(!cfg_parse_memsize($2, &cfg_parser->cfg->dnscrypt_nonce_cache_size)) + yyerror("memory size expected"); + free($2); + } + ; +dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG + { + OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", $2)); + if(atoi($2) == 0) + yyerror("number expected"); + else { + cfg_parser->cfg->dnscrypt_nonce_cache_slabs = atoi($2); + if(!is_pow2(cfg_parser->cfg->dnscrypt_nonce_cache_slabs)) + yyerror("must be a power of 2"); + } + free($2); + } + ; cachedbstart: VAR_CACHEDB { OUTYY(("\nP(cachedb:)\n")); diff --git a/util/data/msgreply.c b/util/data/msgreply.c index 6d80cce4cb50..ae2fe02b6d7c 100644 --- a/util/data/msgreply.c +++ b/util/data/msgreply.c @@ -992,6 +992,9 @@ static int inplace_cb_reply_call_generic( { struct inplace_cb* cb; struct edns_option* opt_list_out = NULL; +#if defined(EXPORT_ALL_SYMBOLS) + (void)type; /* param not used when fptr_ok disabled */ +#endif if(qstate) opt_list_out = qstate->edns_opts_front_out; for(cb=callback_list; cb; cb=cb->next) { diff --git a/util/data/msgreply.h b/util/data/msgreply.h index acbdd3deb61b..b66f344e1521 100644 --- a/util/data/msgreply.h +++ b/util/data/msgreply.h @@ -634,7 +634,7 @@ int inplace_cb_edns_back_parsed_call(struct module_env* env, struct module_qstate* qstate); /** - * Call the registered functions in the inplace_cb_query_reponse linked list. + * Call the registered functions in the inplace_cb_query_response linked list. * This function is going to get called after receiving a reply from a * nameserver. * @param env: module environment. diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c index 81ef487c5877..d3c1a0c06b24 100644 --- a/util/fptr_wlist.c +++ b/util/fptr_wlist.c @@ -233,6 +233,7 @@ fptr_whitelist_hash_sizefunc(lruhash_sizefunc_type fptr) #endif #ifdef USE_DNSCRYPT else if(fptr == &dnsc_shared_secrets_sizefunc) return 1; + else if(fptr == &dnsc_nonces_sizefunc) return 1; #endif return 0; } @@ -249,6 +250,7 @@ fptr_whitelist_hash_compfunc(lruhash_compfunc_type fptr) else if(fptr == &test_slabhash_compfunc) return 1; #ifdef USE_DNSCRYPT else if(fptr == &dnsc_shared_secrets_compfunc) return 1; + else if(fptr == &dnsc_nonces_compfunc) return 1; #endif return 0; } @@ -265,6 +267,7 @@ fptr_whitelist_hash_delkeyfunc(lruhash_delkeyfunc_type fptr) else if(fptr == &test_slabhash_delkey) return 1; #ifdef USE_DNSCRYPT else if(fptr == &dnsc_shared_secrets_delkeyfunc) return 1; + else if(fptr == &dnsc_nonces_delkeyfunc) return 1; #endif return 0; } @@ -283,6 +286,7 @@ fptr_whitelist_hash_deldatafunc(lruhash_deldatafunc_type fptr) #endif #ifdef USE_DNSCRYPT else if(fptr == &dnsc_shared_secrets_deldatafunc) return 1; + else if(fptr == &dnsc_nonces_deldatafunc) return 1; #endif return 0; } diff --git a/util/module.h b/util/module.h index 6e75539d9169..415865c3d8b6 100644 --- a/util/module.h +++ b/util/module.h @@ -416,7 +416,7 @@ struct module_env { /** * Kill newly attached sub. If attach_sub returns newq for * initialisation, but that fails, then this routine will cleanup and - * delete the fresly created sub. + * delete the freshly created sub. * @param newq: the new subquery that is no longer needed. * It is removed. */ @@ -608,6 +608,8 @@ struct module_qstate { int no_cache_lookup; /** whether modules should store answer in the cache */ int no_cache_store; + /** whether to refetch a fresh answer on finishing this state*/ + int need_refetch; /** * Attributes of clients that share the qstate that may affect IP-based diff --git a/util/netevent.c b/util/netevent.c index 771cb6bc7101..5965a2d9aba6 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -1400,7 +1400,7 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) if (r == -1) { #if defined(EINPROGRESS) && defined(EWOULDBLOCK) /* Handshake is underway, maybe because no TFO cookie available. - Come back to write the messsage*/ + Come back to write the message*/ if(errno == EINPROGRESS || errno == EWOULDBLOCK) return 1; #endif diff --git a/util/shm_side/shm_main.c b/util/shm_side/shm_main.c index c0757ed7cdef..a783c099b5a4 100644 --- a/util/shm_side/shm_main.c +++ b/util/shm_side/shm_main.c @@ -254,6 +254,8 @@ void shm_main_run(struct worker *worker) if(worker->daemon->dnscenv) { shm_stat->mem.dnscrypt_shared_secret = (long long)slabhash_get_mem( worker->daemon->dnscenv->shared_secrets_cache); + shm_stat->mem.dnscrypt_nonce = (long long)slabhash_get_mem( + worker->daemon->dnscenv->nonces_cache); } #endif shm_stat->mem.val = (long long)mod_get_mem(&worker->env, diff --git a/util/storage/slabhash.h b/util/storage/slabhash.h index d00983fc1552..2ecf6fe719a7 100644 --- a/util/storage/slabhash.h +++ b/util/storage/slabhash.h @@ -107,7 +107,7 @@ void slabhash_clear(struct slabhash* table); * But entry->data is set to NULL before deletion, and put into * the existing entry. The data is then freed. * @param data: the data. - * @param cb_override: if not NULL overrides the cb_arg for deletfunc. + * @param cb_override: if not NULL overrides the cb_arg for deletefunc. */ void slabhash_insert(struct slabhash* table, hashvalue_type hash, struct lruhash_entry* entry, void* data, void* cb_override); diff --git a/util/ub_event.h b/util/ub_event.h index 9739e6d833ee..b00a9bf6c264 100644 --- a/util/ub_event.h +++ b/util/ub_event.h @@ -67,7 +67,7 @@ const char* ub_event_get_version(void); /** Return the name, system and method for the pluggable event base */ void ub_get_event_sys(struct ub_event_base*, const char** n, const char** s, const char** m); -/** Return a default event base. In the deamon thess will be the only event +/** Return a default event base. In the daemon this will be the only event * bases used. */ struct ub_event_base* ub_default_event_base(int, time_t*, struct timeval*); diff --git a/validator/autotrust.c b/validator/autotrust.c index 5bf815b5ec12..97c3e3cc3691 100644 --- a/validator/autotrust.c +++ b/validator/autotrust.c @@ -2154,7 +2154,7 @@ int autr_process_prime(struct module_env* env, struct val_env* ve, verbose(VERB_ALGO, "autotrust: no dnskey rrset"); /* no update of query_failed, because then we would have * to write to disk. But we cannot because we maybe are - * still 'initialising' with DS records, that we cannot write + * still 'initializing' with DS records, that we cannot write * in the full format (which only contains KSKs). */ return 1; /* trust point exists */ } diff --git a/validator/val_nsec3.c b/validator/val_nsec3.c index 4d978372aaac..e31834a44558 100644 --- a/validator/val_nsec3.c +++ b/validator/val_nsec3.c @@ -1037,7 +1037,7 @@ nsec3_do_prove_nameerror(struct module_env* env, struct nsec3_filter* flt, "nsec3 is an insecure delegation"); return sec; } - log_nametypeclass(VERB_ALGO, "nsec3 namerror: proven ce=", ce.ce,0,0); + log_nametypeclass(VERB_ALGO, "nsec3 nameerror: proven ce=", ce.ce,0,0); /* At this point, we know that qname does not exist. Now we need * to prove that the wildcard does not exist. */ diff --git a/validator/val_secalgo.c b/validator/val_secalgo.c index e9ec5a5b5879..7f5c5181fd2d 100644 --- a/validator/val_secalgo.c +++ b/validator/val_secalgo.c @@ -322,7 +322,7 @@ static int setup_ecdsa_sig(unsigned char** sig, unsigned int* len) { /* convert from two BIGNUMs in the rdata buffer, to ASN notation. - * ASN preable: 30440220 0220 + * ASN preamble: 30440220 0220 * the '20' is the length of that field (=bnsize). i * the '44' is the total remaining length. * if negative, start with leading zero. diff --git a/validator/val_sigcrypt.c b/validator/val_sigcrypt.c index 25278a8f3ac0..099e658a3d2b 100644 --- a/validator/val_sigcrypt.c +++ b/validator/val_sigcrypt.c @@ -906,7 +906,7 @@ canonical_sort(struct ub_packed_rrset_key* rrset, struct packed_rrset_data* d, } /** - * Inser canonical owner name into buffer. + * Insert canonical owner name into buffer. * @param buf: buffer to insert into at current position. * @param k: rrset with its owner name. * @param sig: signature with signer name and label count. diff --git a/validator/val_utils.h b/validator/val_utils.h index 649adc2d6559..a837bb8912ba 100644 --- a/validator/val_utils.h +++ b/validator/val_utils.h @@ -70,7 +70,7 @@ enum val_classification { /** A NXDOMAIN response. */ VAL_CLASS_NAMEERROR, /** A CNAME/DNAME chain, and the offset is at the end of it, - * but there is no answer here, it can be NAMERROR or NODATA. */ + * but there is no answer here, it can be NAMEERROR or NODATA. */ VAL_CLASS_CNAMENOANSWER, /** A referral, from cache with a nonRD query. */ VAL_CLASS_REFERRAL, diff --git a/validator/validator.c b/validator/validator.c index 5f4a1eb4ebed..111cbe140353 100644 --- a/validator/validator.c +++ b/validator/validator.c @@ -1289,7 +1289,7 @@ validate_cname_noanswer_response(struct module_env* env, struct val_env* ve, uint8_t* ce = NULL; /* for wildcard nodata responses. This is the proven closest encloser. */ uint8_t* wc = NULL; /* for wildcard nodata responses. wildcard nsec */ - int nxdomain_valid_nsec = 0; /* if true, namerror has been proven */ + int nxdomain_valid_nsec = 0; /* if true, nameerror has been proven */ int nxdomain_valid_wnsec = 0; int nsec3s_seen = 0; /* nsec3s seen */ struct ub_packed_rrset_key* s;