]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix #1440: [dnscrypt] client nonce cache.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Mon, 18 Sep 2017 08:55:08 +0000 (08:55 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Mon, 18 Sep 2017 08:55:08 +0000 (08:55 +0000)
git-svn-id: file:///svn/unbound/trunk@4351 be551aaa-1e26-0410-a405-d3ace91eadb9

18 files changed:
daemon/remote.c
daemon/stats.c
dnscrypt/dnscrypt.c
dnscrypt/dnscrypt.h
doc/Changelog
doc/unbound-control.8.in
doc/unbound.conf.5.in
libunbound/unbound.h
smallapp/unbound-control.c
util/config_file.c
util/config_file.h
util/configlexer.c
util/configlexer.lex
util/configparser.c
util/configparser.h
util/configparser.y
util/fptr_wlist.c
util/shm_side/shm_main.c

index 3918407af25a1def45daafbb2224239cc5d34441..3477340ff5782a13f3514398b4d6e97ad05138ea 100644 (file)
@@ -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;
 }
index 1058556be7c26d5c376af304f47828d200990c02..ed788720846afa6956c1d5584af81beec8aacd0e 100644 (file)
@@ -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 */
index 92338dc7e27ddbe4537c495245e0c67669f3b420..a0db120770938b1e51a46f824cc8083717c5733c 100644 (file)
@@ -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,
@@ -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;
+}
index dde36d6675d102bde34c41150b7b42d1088bd560..7dec2c488cf385f67b614e38802b5396db5fb450 100644 (file)
@@ -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
index f047d129fe82d596e959a0084a7c04b7106249a6..7cd7f1295f06deddf1c7ee69a52d1ec93d7615f9 100644 (file)
@@ -4,6 +4,7 @@
          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.
index 229106c3e70295766c0df1979f1c4f6cd23a8284..392dd11cfe650bc86caa1eb1165eb07646a2a372 100644 (file)
@@ -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 sucessfully 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 allow 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@
index 55bc67183d7d94e1b2a120f77ab9a81691510633..7d65599bbce79444a810957ab1efbe6327b9657f 100644 (file)
@@ -1523,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<memory size>
+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<number>
+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
index a5599e48f69f702b672bd80b4e4bb35c2dcea3b5..1b0f54fd2b6bf2801b9372629e899b148d27094b 100644 (file)
@@ -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,6 +743,10 @@ 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;
 };
 
 /** 
index dcb9230e8c34a665201bc4b07de2120afe611f54..086afa8dddeb11678e44a9ae859f0a5448e37846 100644 (file)
@@ -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 */
 }
 
index 9b204e27656d50ca8829405b72fefb144b599650..e408a8e40ee48608472ceb15f89af085a51d3d62 100644 (file)
@@ -285,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;
@@ -574,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);
@@ -940,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)
index 2e09253d9fa13ec92b24218c2105699a72dff2b4..5d9b2d0be15e608b12aef16c68d8cb8bcbc42b15 100644 (file)
@@ -470,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 */
index 31f2a2b390f0a3d8153eebf25071dd234a054866..866156d1b9e2f0d5261984ed183f4d3b0e66c1ba 100644 (file)
@@ -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 235
-#define YY_END_OF_BUFFER 236
+#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,263 +372,265 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[2319] =
+static yyconst flex_int16_t yy_accept[2341] =
     {   0,
-        1,    1,  217,  217,  221,  221,  225,  225,  229,  229,
-        1,    1,  236,  233,    1,  215,  215,  234,    2,  234,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  217,  218,  218,  219,  234,  221,  222,  222,  223,
-      234,  228,  225,  226,  226,  227,  234,  229,  230,  230,
-      231,  234,  232,  216,    2,  220,  234,  232,  233,    0,
-        1,    2,    2,    2,    2,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  217,    0,  221,    0,  228,    0,  225,
-      229,    0,  232,    0,    2,    2,  232,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  232,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  232,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,   77,
-      233,  233,  233,  233,  233,  233,    8,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,   88,
-      232,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  232,
-      233,  233,  233,  233,  233,  233,  233,   37,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      170,  233,   14,   15,  233,   18,   17,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  156,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,    3,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  232,  233,  233,  233,
-      212,  233,  233,  211,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  224,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,   40,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,   41,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  145,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,   20,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  103,  233,  224,  233,
-
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  197,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  120,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      102,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,   75,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-
-      233,  233,  233,  233,  233,   25,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,   38,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,   39,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      121,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,   28,  233,  233,  233,  233,  233,  233,
-
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  185,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,   32,  233,   33,
-      233,  233,  233,   78,  233,   79,  233,  233,   76,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,    7,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  163,  233,  233,  233,  233,  105,  233,  233,
-
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,   29,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  137,  233,  136,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,   16,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,   42,  233,  233,  233,  233,
-      233,  233,  233,  144,  233,  233,  233,  233,   81,   80,
-
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  131,
-      233,  233,  233,  233,  233,  233,  233,  233,   89,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,   60,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,   64,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,   36,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  134,  135,  233,  233,
-
-      233,  233,  233,  233,  233,  233,  233,  233,    6,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  195,  233,  233,
-      213,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,   26,
-      233,  233,  233,  233,  233,  233,  233,  233,  127,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  149,
-      233,  128,  233,  233,  161,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-       27,  233,  233,  233,  233,   84,  233,   85,  233,   83,
-
-      233,  233,  233,  233,  233,  233,  233,  233,  100,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      184,  233,  233,  233,  233,  233,  233,  233,  233,  129,
-      233,  233,  233,  233,  233,  132,  233,  233,  160,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,   74,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,   34,  233,  233,   22,  233,  233,  233,  233,   19,
-      233,  110,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,   49,   51,  233,
-
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      199,  233,  233,  233,  171,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,   86,  233,
-      233,  233,  233,  233,  233,  233,   99,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  207,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  104,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      155,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  119,  233,  233,  233,  233,  233,
-
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      115,  233,  122,  233,  233,  233,  233,  233,   92,  233,
-      233,   70,  233,  233,  233,  233,  147,  233,  233,  233,
-      233,  233,  162,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  176,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  118,  233,
-      233,  233,  233,  233,   52,   53,  233,  233,  233,  233,
-      233,   35,  233,  233,  233,  233,  233,   59,  123,  233,
-      138,  233,  164,  133,  233,  233,  233,   45,  233,  125,
-      233,  233,  233,  233,  233,    9,  233,  233,  233,   73,
-
-      233,  233,  233,  233,  189,  233,  146,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  106,  198,  233,  233,
-      233,  175,  233,  233,  233,  233,  233,  233,  233,  233,
-      157,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  210,  233,  124,  233,  233,  233,
-       44,   46,  233,  233,  233,  233,  233,  233,  233,   72,
-
-      233,  233,  233,  233,  187,  233,  194,  233,  233,  233,
-      233,  233,  151,   23,   24,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,   69,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  153,  150,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,   43,  233,  233,  233,  233,
-      233,  233,  233,  233,  101,   13,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  205,  233,  208,  233,  233,
-      233,  233,  233,  233,   12,  233,  233,   21,  233,  233,
-      233,  193,  233,  196,   47,  233,  159,  233,  152,  233,
-
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  114,  113,  233,  233,  233,  233,  233,
-      233,  233,  154,  148,  233,  233,  200,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,   54,  233,
-      233,  233,  188,  233,  233,  233,  233,  233,  158,  233,
-      233,  233,  233,  233,  233,  233,  233,   48,  233,  233,
-      233,   82,  233,  107,  233,  109,  233,  139,  233,  233,
-      233,  112,  233,  233,  165,  233,  233,  233,  233,  233,
-       94,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-
-      233,  172,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  140,  233,  233,  186,  233,
-      209,  233,  233,  233,   30,  233,  233,  233,  233,    4,
-      233,  233,   93,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  168,  233,  233,  233,  233,  233,
-      233,  201,  233,  233,  233,  233,  233,  233,  174,  233,
-      233,  143,  233,  233,  233,  233,  233,  233,  233,  233,
-       57,  233,   31,  192,  233,  169,  233,  233,   11,  233,
-      233,  233,  233,  233,  233,  141,   61,  233,  233,  233,
-      233,  233,  117,  233,  233,  233,  233,  233,   96,  233,
-
-      233,  233,  233,  233,  233,  233,  233,  173,   90,  233,
-       87,  233,  233,  233,   63,   67,   62,  233,   55,  233,
-      233,  233,   10,  233,  233,  233,  190,  233,  233,  233,
-      233,  116,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,   68,   66,
-      233,   56,  206,  233,  233,  233,  130,  233,  233,  142,
-      233,  233,  233,  233,  233,  233,  108,   50,  233,  233,
-      202,  233,  233,  233,  233,  233,  233,  233,   91,   65,
-       97,   98,   58,  233,  191,  111,  233,  233,  233,  233,
-      167,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,   71,  233,  166,  233,
-      183,  233,  233,  233,  233,  233,  233,  233,    5,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,   95,  233,  233,  233,  233,  233,  233,  233,  233,
-      126,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
-      233,  233,  233,  233,  233,  233,  214,  233,  233,  179,
-      233,  233,  233,  233,  233,  203,  233,  233,  233,  233,
-
-      233,  233,  204,  233,  233,  233,  177,  233,  180,  181,
-      233,  233,  233,  233,  233,  178,  182,    0
+        1,    1,  219,  219,  223,  223,  227,  227,  231,  231,
+        1,    1,  238,  235,    1,  217,  217,  236,    2,  236,
+      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
+      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
+      235,  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,  236,  234,  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,
+
+      235,  235,  235,  235,  235,  235,  235,  235,  235,  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,
+
+      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,
+
+      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,
+
+      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,
+
+      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
+      235,  235,  235,  235,  235,  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,
+
+      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,
+
+      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,
+
+      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,
+
+      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,
+
+      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
+      235,  235,  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,
+
+      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
+      235,  235,  235,  235,  235,  235,  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,
+
+       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,
+
+      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,
+
+      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,
+
+      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,
+
+      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,
+
+      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,
+
+      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,
+
+      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,
+
+      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,
+
+      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,
+
+      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] =
@@ -671,15 +673,15 @@ static yyconst YY_CHAR yy_meta[41] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_uint16_t yy_base[2333] =
+static yyconst flex_uint16_t yy_base[2355] =
     {   0,
         0,    0,   38,   41,   44,   46,   59,   65,   71,   77,
-       90,  112, 3634, 3113,   81, 4542, 4542, 4542,   96,   52,
+       90,  112, 3642, 3416,   81, 4589, 4589, 4589,   96,   52,
        72,   63,  107,  111,   70,   91,  109,  124,   98,  127,
       114,  133,  136,  130,  144,  146,  163,  165,  171,  179,
-      186, 2967, 4542, 4542, 4542,  164, 2750, 4542, 4542, 4542,
-       95, 2626, 2480, 4542, 4542, 4542,  206, 2158, 4542, 4542,
-     4542,  176, 2063, 4542,  212, 4542,  216,  147, 1851,  220,
+      186, 3294, 4589, 4589, 4589,  164, 3246, 4589, 4589, 4589,
+       95, 2906, 2815, 4589, 4589, 4589,  206, 2513, 4589, 4589,
+     4589,  176, 2465, 4589,  212, 4589,  216,  147, 2167,  220,
       147,    0,  227,    0,    0,  221,  188,   97,  222,  228,
       158,  214,  216,  229,  232,  233,  156,  240,  238,  236,
       190,  239,  242,  243,  145,  245,  258,  254,  246,  262,
@@ -712,13 +714,13 @@ static yyconst flex_uint16_t yy_base[2333] =
       763,  772,  762,  764,  765,  771,  773,  783,  784,  776,
       777,  786,  708,  792,  789,  790,  802,  798,  801,  800,
       805,  809,  811,  813,  815,  814,  816,  824,  821,  822,
-      823,  830,  832,  833,  831,  836,  841,  834,  847, 4542,
-      849,  838,  624,  842,  840,  852, 4542,  853,  854,  856,
+      823,  830,  832,  833,  831,  836,  841,  834,  847, 4589,
+      849,  838,  624,  842,  840,  852, 4589,  853,  854,  856,
       863,  858,  861,  862,  869,  878,  865,  879,  881,  880,
       883,  868,  884,  887,  886,  892,  893,  889,  910,  895,
 
       898,  896,  919,  904,  900,  902,  906,  914,  927,  923,
-      921,  925,  930,  931,  932,  934,  935,  941,  942, 4542,
+      921,  925,  930,  931,  932,  934,  935,  941,  942, 4589,
       946,  951,  947,  944,  957,  952,  958,  955,  967,  970,
       968,  975,  971,  973,  972,  974,  978,  977,  982,  990,
       986,  992,  995, 1003, 1001, 1005, 1008,  985, 1007, 1009,
@@ -732,468 +734,472 @@ static yyconst flex_uint16_t yy_base[2333] =
      1134, 1135, 1137, 1136, 1139, 1138, 1142, 1143, 1152, 1147,
      1148, 1159, 1164, 1150, 1162, 1165, 1163, 1157, 1171, 1174,
      1172, 1175, 1178, 1180, 1186, 1187, 1188, 1189, 1190, 1191,
-     1192, 1198, 1193, 1201, 1206, 1209, 1210, 4542, 1205, 1217,
+     1192, 1198, 1193, 1201, 1206, 1209, 1210, 4589, 1205, 1217,
      1212, 1216, 1213, 1218, 1227, 1222, 1223, 1226, 1228, 1233,
-     4542, 1229, 4542, 4542, 1237, 4542, 4542, 1231, 1243, 1235,
+     4589, 1229, 4589, 4589, 1237, 4589, 4589, 1231, 1243, 1235,
      1246, 1256, 1259, 1260, 1258, 1250, 1265, 1266, 1270, 1269,
      1274, 1275, 1277, 1284, 1282, 1286, 1288, 1294, 1290, 1280,
      1297, 1295, 1298, 1300, 1303, 1305, 1307, 1306, 1310, 1309,
 
      1312, 1313, 1325, 1329, 1327, 1326, 1328, 1331, 1316, 1333,
-     1335, 1337, 1341, 1343, 1345, 1350, 1346, 4542, 1348, 1349,
-     1351, 1355, 1347, 1362, 1359, 1364, 1366, 1367, 1368, 4542,
+     1335, 1337, 1341, 1343, 1345, 1350, 1346, 4589, 1348, 1349,
+     1351, 1355, 1347, 1362, 1359, 1364, 1366, 1367, 1368, 4589,
      1370, 1377, 1369, 1373, 1380, 1382, 1381, 1384, 1385, 1388,
      1387, 1389, 1386, 1397, 1393, 1400, 1399, 1396, 1410, 1417,
      1412, 1419, 1414, 1415, 1421, 1420, 1422, 1426, 1429, 1428,
      1430, 1436, 1444, 1435, 1440, 1442, 1446, 1437, 1447, 1450,
-     4542, 1453, 1454, 4542, 1456, 1457, 1479, 1458, 1461, 1466,
+     4589, 1453, 1454, 4589, 1456, 1457, 1479, 1458, 1461, 1466,
      1462, 1463, 1470, 1475, 1472, 1497, 1489, 1494, 1492, 1499,
      1501, 1502, 1505, 1508, 1509, 1517, 1474, 1518, 1519, 1471,
 
      1523, 1510, 1521, 1529, 1531, 1532, 1534, 1493, 1535, 1542,
-     1539, 4542, 1550, 1546, 1537, 1547, 1557, 1553, 1552, 1555,
+     1539, 4589, 1550, 1546, 1537, 1547, 1557, 1553, 1552, 1555,
      1559, 1561, 1569, 1565, 1562, 1567, 1566, 1570, 1573, 1576,
-     1578, 1588, 4542, 1575, 1579, 1583, 1580, 1591, 1592, 1594,
-     1600, 1602, 1610, 1605, 4542, 1590, 1613, 1615, 1608, 1614,
+     1578, 1588, 4589, 1575, 1579, 1583, 1580, 1591, 1592, 1594,
+     1600, 1602, 1610, 1605, 4589, 1590, 1613, 1615, 1608, 1614,
      1617, 1620, 1627, 1622, 1623, 1624, 1625, 1629, 1631, 1633,
-     1636, 1632, 4542, 1640, 1639, 1643, 1651, 1648, 1652, 1653,
-     1654, 1658, 1659, 1660, 1667, 1663, 1664, 4542, 1662, 1671,
+     1636, 1632, 4589, 1640, 1639, 1643, 1651, 1648, 1652, 1653,
+     1654, 1658, 1659, 1660, 1667, 1663, 1664, 4589, 1662, 1671,
      1665, 1666, 1675, 1688, 1689, 1678, 1681, 1691, 1685, 1692,
-     1695, 1698, 1696, 1699, 1697, 1700, 4542, 1701,  143, 1703,
+     1695, 1698, 1696, 1699, 1697, 1700, 4589, 1701,  143, 1703,
 
      1709, 1702, 1711, 1718, 1710, 1719, 1723, 1713, 1726, 1729,
      1730, 1731, 1732, 1733, 1735, 1737, 1738, 1741, 1743, 1742,
-     1751, 4542, 1746, 1753, 1757, 1755, 1760, 1761, 1765, 1766,
-     1768, 1772, 1773, 4542, 1776, 1778, 1780, 1781, 1783, 1784,
-     1786, 1785, 1788, 1790, 1791, 1794, 1795, 1798, 1801, 1803,
-     4542, 1814, 1805, 1815, 1804, 1817, 1813, 1832, 1816, 1806,
-     1827, 1828, 1841, 1830, 1833, 1844, 1836, 1834, 1847, 1848,
-     1852, 1858, 1845, 1861, 1862, 1855, 1863, 1872, 1874, 1871,
-     1873, 1875, 1878, 1882, 1883, 4542, 1886, 1885, 1887, 1888,
-     1902, 1892, 1898, 1899, 1903, 1908, 1904, 1910, 1912, 1913,
-
-     1914, 1915, 1917, 1919, 1926, 4542, 1927, 1923, 1929, 1933,
-     1935, 1937, 1938, 1940, 1942, 1944, 1945, 1946, 1947, 1951,
-     1957, 1949, 1953, 1962, 1960, 4542, 1971, 1972, 1963, 1976,
-     1974, 1975, 1977, 1979, 1980, 1981, 1982, 1990, 1989, 1986,
-     1985, 1993, 1992, 1995, 1991, 1987, 1998, 1999, 2014, 2002,
-     2015, 4542, 2008, 2023, 2019, 2018, 2021, 2024, 2029, 2030,
-     2031, 2044, 2036, 2041, 2043, 2033, 2046, 2048, 2047, 2049,
-     4542, 2050, 2055, 2051, 2056, 2057, 2060, 2061, 2058, 2067,
-     2074, 2078, 2066, 2079, 2085, 2080, 2087, 2082, 2089, 2096,
-     2097, 2098, 2100, 4542, 2105, 2102, 2107, 2092, 2108, 2109,
-
-     2111, 2112, 2114, 2115, 2120, 2117, 2119, 2127, 2136, 2128,
-     2132, 2133, 2137, 2145, 2129, 2140, 2141, 2149, 2142, 2144,
-     2146, 2150, 2153, 2154, 2157, 2170, 2173, 2162, 2178, 2179,
-     2160, 2168, 2180, 2182, 2185, 4542, 2166, 2183, 2193, 2196,
-     2190, 2198, 2188, 2197, 2200, 2209, 2206, 4542, 2207, 4542,
-     2211, 2212, 2223, 4542, 2219, 4542, 2222, 2210, 4542, 2224,
-     2228, 2230, 2214, 2231, 2233, 2235, 2234, 2237, 2238, 2241,
-     2243, 2246, 2248, 2250, 2251, 2252, 4542, 2256, 2253, 2258,
-     2262, 2260, 2264, 2266, 2267, 2269, 2273, 2275, 2278, 2285,
-     2280, 2287, 4542, 2282, 2289, 2290, 2291, 4542, 2292, 2294,
-
-     2298, 2301, 2302, 2303, 2304, 2308, 2307, 2312, 2328, 2321,
-     2314, 2324, 2310, 2331, 2338, 2336, 2325, 2333, 2339, 2346,
-     2342, 2350, 2341, 2348, 2355, 2351, 2345, 2349, 2357, 2358,
-     2360, 2361, 2362, 2371, 2366, 2367, 2368, 2370, 4542, 2379,
-     2376, 2380, 2383, 2388, 2381, 2389, 2390, 2392, 2394, 2393,
-     2398, 2399, 4542, 2397, 4542, 2402, 2405, 2419, 2411, 2406,
-     2416, 2420, 2422, 2423, 2426, 2424, 2434, 2430, 2432, 2437,
-     2439, 2440, 2443, 2441, 4542, 2444, 2445, 2446, 2448, 2449,
-     2451, 2460, 2462, 2455, 2478, 4542, 2476, 2465, 2467, 2485,
-     2481, 2488, 2484, 4542, 2480, 2493, 2489, 2492, 4542, 4542,
-
-     2491, 2496, 2494, 2497, 2498, 2499, 2509, 2505, 2506, 4542,
-     2514, 2508, 2516, 2518, 2522, 2525, 2526, 2511, 4542, 2529,
-     2532, 2519, 2536, 2537, 2538, 2539, 2540, 2547, 2542, 2545,
-     2546, 2556, 2548, 2562, 4542, 2559, 2557, 2568, 2553, 2311,
-     2569, 2570, 2572, 2573, 2571, 2574, 2575, 2578, 2577, 2579,
-     2580, 2581, 2585, 2603, 2586, 2594, 2595, 2599, 2602, 2605,
-     2606, 2609, 2610, 2617, 2616, 4542, 2618, 2620, 2629, 2621,
-     2625, 2631, 2632, 2640, 2635, 2624, 2636, 2643, 2639, 4542,
-     2651, 2641, 2658, 2642, 2652, 2663, 2661, 2662, 2664, 2666,
-     2668, 2671, 2669, 2673, 2674, 2677, 4542, 4542, 2678, 2679,
-
-     2681, 2683, 2684, 2688, 2686, 2692, 2690, 2699, 4542, 2696,
-     2708, 2703, 2704, 2713, 2720, 2706, 2717, 2709, 2710, 2719,
-     2721, 2724, 2725, 2726, 2728, 2731, 2735, 4542, 2732, 2734,
-     4542, 2737, 2736, 2741, 2744, 2758, 2748, 2761, 2742, 2754,
-     2745, 2772, 2770, 2777, 2773, 2780, 2762, 2775, 2784, 4542,
-     2779, 2781, 2782, 2783, 2792, 2789, 2796, 2793, 4542, 2795,
-     2799, 2802, 2804, 2797, 2812, 2807, 2809, 2810, 2815, 4542,
-     2818, 4542, 2819, 2820, 4542, 2821, 2825, 2827, 2829, 2830,
-     2831, 2840, 2828, 2834, 2841, 2842, 2845, 2846, 2850, 2852,
-     4542, 2853, 2855, 2847, 2858, 4542, 2863, 4542, 2860, 4542,
-
-     2857, 2864, 2874, 2869, 2870, 2875, 2880, 2881, 4542, 2883,
-     2882, 2884, 2887, 2888, 2891, 2892, 2893, 2894, 2895, 2900,
-     4542, 2897, 2899, 2908, 2898, 2901, 2912, 2913, 2914, 4542,
-     2922, 2923, 2924, 2926, 2928, 4542, 2929, 2930, 4542, 2933,
-     2937, 2939, 2940, 2941, 2944, 2946, 2948, 2950, 2958, 2954,
-     2955, 2953, 4542, 2956, 2957, 2963, 2972, 2964, 2960, 2982,
-     2969, 2981, 2977, 2984, 2986, 2988, 2990, 2978, 2994, 2995,
-     2991, 4542, 2996, 3002, 4542, 2998, 3005, 3006, 3010, 4542,
-     3008, 4542, 3009, 3012, 3013, 3016, 3020, 3018, 3021, 3023,
-     3019, 3032, 3034, 3031, 3043, 3040, 3033, 4542, 4542, 3046,
-
-     3049, 3047, 3052, 3054, 3057, 3058, 3065, 3061, 3063, 3067,
-     4542, 3070, 3060, 3073, 4542, 3068, 3078, 3071, 3081, 3079,
-     3082, 3085, 3087, 3088, 3089, 3090, 3091, 3097, 4542, 3099,
-     3098, 3102, 3103, 3106, 3107, 3108, 4542, 3105, 3110, 3111,
-     3112, 3123, 3115, 3130, 3133, 3135, 3124, 3136, 3140, 3138,
-     3143, 3146, 4542, 3148, 3144, 3145, 3154, 3156, 3158, 3152,
-     3160, 3161, 3163, 3168, 3169, 3170, 4542, 3172, 3174, 3175,
-     3181, 3178, 3176, 3184, 3185, 3191, 3188, 3193, 3192, 3198,
-     4542, 3195, 3199, 3202, 3200, 3206, 3209, 3213, 3203, 3214,
-     3210, 3218, 3216, 3224, 4542, 3220, 3229, 3227, 3230, 3233,
-
-     3235, 3237, 3231, 3238, 3239, 3241, 3244, 3245, 3255, 3256,
-     4542, 3251, 4542, 3257, 3261, 3264, 3267, 3263, 4542, 3265,
-     3269, 4542, 3270, 3272, 3274, 3275, 4542, 3281, 3286, 3273,
-     3290, 3295, 4542, 3297, 3298, 3305, 3306, 3308, 3301, 3309,
-     3292, 3311, 3312, 3313, 4542, 3316, 3318, 3323, 3319, 3317,
-     3326, 3327, 3328, 3329, 3330, 3339, 3334, 3336, 4542, 3342,
-     3338, 3350, 3345, 3277, 4542, 4542, 3347, 3351, 3356, 3348,
-     3362, 4542, 3360, 3371, 3355, 3369, 3357, 4542, 4542, 3373,
-     4542, 3370, 4542, 4542, 3375, 3376, 3378, 4542, 3383, 4542,
-     3385, 3386, 3384, 3389, 3390, 4542, 3391, 3392, 3394, 4542,
-
-     3396, 3403, 3398, 3399, 4542, 3402, 4542, 3406, 3409, 3412,
-     3413, 3418, 3419, 3420, 3422, 3424, 3427, 3428, 3429, 3430,
-     3434, 3436, 3435, 3437, 3438, 3439, 3441, 3451, 3443, 3445,
-     3453, 3454, 3455, 3456, 3459, 3457, 3462, 3463, 3464, 3465,
-     3469, 3472, 3476, 3475, 3489, 3490, 4542, 4542, 3478, 3482,
-     3484, 4542, 3486, 3492, 3494, 3495, 3498, 3497, 3500, 3501,
-     4542, 3505, 3499, 3509, 3512, 3511, 3513, 3514, 3520, 3521,
-     3523, 3525, 3534, 3529, 3530, 3533, 3537, 3535, 3538, 3539,
-     3541, 3549, 3551, 3557, 4542, 3546, 4542, 3550, 3554, 3560,
-     4542, 4542, 3561, 3563, 3568, 3562, 3564, 3570, 3571, 4542,
-
-     3572, 3576, 3584, 3573, 4542, 3589, 4542, 3591, 3578, 3593,
-     3594, 3596, 4542, 4542, 4542, 3600, 3585, 3598, 3603, 3604,
-     3602, 3605, 3606, 3608, 3613, 4542, 3615, 3617, 3618, 3619,
-     3625, 3629, 3626, 3631, 3638, 3635, 3641, 3637, 3639, 3646,
-     3648, 4542, 4542, 3643, 3655, 3653, 3657, 3665, 3660, 3661,
-     3663, 3667, 3668, 3669, 3671, 4542, 3670, 3675, 3677, 3678,
-     3679, 3681, 3650, 3684, 4542, 4542, 3685, 3686, 3689, 3697,
-     3692, 3694, 3687, 3699, 3700, 4542, 3701, 4542, 3705, 3709,
-     3718, 3715, 3720, 3717, 4542, 3721, 3710, 4542, 3727, 3724,
-     3726, 4542, 3732, 4542, 4542, 3735, 4542, 3729, 4542, 3736,
-
-     3739, 3743, 3744, 3746, 3750, 3753, 3748, 3755, 3757, 3758,
-     3765, 3761, 3762, 4542, 4542, 3770, 3767, 3768, 3777, 3773,
-     3776, 3779, 4542, 4542, 3781, 3782, 4542, 3783, 3784, 3788,
-     3789, 3791, 3792, 3793, 3796, 3797, 3802, 3799, 3800, 3803,
-     3813, 3811, 3815, 3817, 3819, 3821, 3822, 3823, 4542, 3825,
-     3826, 3828, 4542, 3832, 3833, 3835, 3836, 3838, 4542, 3839,
-     3849, 3850, 3844, 3851, 3861, 3852, 3858, 4542, 3863, 3859,
-     3864, 4542, 3856, 4542, 3870, 4542, 3869, 4542, 3872, 3873,
-     3871, 4542, 3878, 3884, 4542, 3887, 3889, 3875, 3891, 3892,
-     4542, 3899, 3896, 3903, 3894, 3879, 3904, 3905, 3913, 3906,
-
-     3915, 4542, 3908, 3911, 3917, 3919, 3918, 3920, 3921, 3924,
-     3925, 3930, 3928, 3939, 3934, 4542, 3941, 3945, 4542, 3936,
-     4542, 3947, 3942, 3950, 4542, 3949, 3951, 3952, 3959, 4542,
-     3960, 3956, 4542, 3962, 3964, 3966, 3967, 3968, 3972, 3969,
-     3973, 3980, 3974, 3982, 4542, 3985, 3986, 3995, 3999, 3987,
-     3992, 4542, 3996, 4000, 3994, 4008, 4003, 4012, 4542, 4015,
-     4004, 4542, 4017, 4019, 4018, 4022, 4026, 4029, 4031, 4033,
-     4542, 4035, 4542, 4542, 4036, 4542, 4037, 4039, 4542, 4042,
-     4043, 4044, 4045, 4047, 4048, 4542, 4542, 4049, 4056, 4052,
-     4062, 4065, 4542, 4051, 4058, 4067, 4068, 4069, 4542, 4066,
-
-     4073, 4076, 4077, 4081, 4082, 4083, 4079, 4542, 4542, 4085,
-     4542, 4087, 4089, 4090, 4542, 4542, 4542, 4092, 4542, 4102,
-     4109, 4108, 4542, 4111, 4098, 4103, 4542, 4114, 4115, 4119,
-     4118, 4542, 4120, 4121, 4124, 4127, 4129, 4131, 4132, 4135,
-     4142, 4139, 4140, 4141, 4143, 4144, 4147, 4151, 4542, 4542,
-     4153, 4542, 4542, 4157, 4159, 4161, 4542, 4145, 4168, 4542,
-     4170, 4163, 4165, 4171, 4173, 4175, 4542, 4542, 4176, 4179,
-     4542, 4180, 4187, 4184, 4185, 4186, 4189, 4192, 4542, 4542,
-     4542, 4542, 4542, 4193, 4542, 4542, 4191, 4195, 4197, 4201,
-     4542, 4200, 4202, 4203, 4206, 4209, 4211, 4210, 4212, 4216,
-
-     4218, 4220, 4222, 4224, 4236, 4239, 4242, 4227, 4243, 4244,
-     4225, 4232, 4251, 4246, 4253, 4254, 4542, 4255, 4542, 4256,
-     4542, 4257, 4258, 4267, 4268, 4264, 4259, 4263, 4542, 4266,
-     4269, 4271, 4276, 4279, 4280, 4284, 4285, 4287, 4289, 4288,
-     4290, 4296, 4305, 4300, 4302, 4303, 4310, 4311, 4318, 4314,
-     4317, 4542, 4313, 4320, 4321, 4322, 4329, 4324, 4325, 4333,
-     4542, 4335, 4326, 4336, 4337, 4339, 4345, 4348, 4349, 4328,
-     4350, 4342, 4357, 4359, 4363, 4364, 4365, 4367, 4369, 4007,
-     4373, 4370, 4375, 4376, 4378, 4379, 4542, 4381, 4385, 4542,
-     4386, 4387, 4388, 4389, 4393, 4542, 4397, 4390, 4399, 4400,
-
-     4403, 4405, 4542, 4411, 4414, 4415, 4542, 4416, 4542, 4542,
-     4419, 4406, 4417, 4427, 4429, 4542, 4542, 4542, 4450, 4457,
-     4464, 4471, 4478,   70, 4485, 4492, 4499, 4506, 4513, 4520,
-     4527, 4534
+     1751, 4589, 1746, 1753, 1757, 1755, 1760, 1761, 1766, 1768,
+     1771, 1772, 1774, 4589, 1781, 1778, 1776, 1783, 1784, 1786,
+     1787, 1788, 1789, 1791, 1792, 1796, 1799, 1795, 1797, 1804,
+     4589, 1811, 1806, 1816, 1807, 1818, 1809, 1831, 1819, 1822,
+     1826, 1828, 1840, 1833, 1832, 1843, 1834, 1842, 1851, 1850,
+     1852, 1861, 1844, 1856, 1866, 1854, 1858, 1873, 1875, 1872,
+     1870, 1878, 1879, 1883, 1882, 4589, 1884, 1885, 1886, 1890,
+     1903, 1891, 1901, 1889, 1906, 1895, 1907, 1911, 1913, 1915,
+
+     1916, 1918, 1920, 1917, 1927, 4589, 1921, 1929, 1928, 1931,
+     1935, 1937, 1938, 1939, 1945, 1942, 1946, 1940, 1949, 1952,
+     1958, 1950, 1961, 1956, 1953, 4589, 1970, 1971, 1969, 1978,
+     1973, 1975, 1976, 1980, 1977, 1981, 1983, 1990, 1985, 1988,
+     1986, 1989, 1991, 1992, 1995, 1996, 2000, 2002, 2011, 2004,
+     2012, 4589, 2013, 2020, 2016, 2022, 2023, 2024, 2026, 2028,
+     2029, 2034, 2046, 2038, 2043, 2045, 2035, 2047, 2050, 2049,
+     2051, 4589, 2052, 2057, 2053, 2058, 2059, 2062, 2063, 2060,
+     2069, 2076, 2080, 2066, 2081, 2086, 2082, 2088, 2068, 2091,
+     2098, 2099, 2100, 2102, 4589, 2105, 2106, 2107, 2095, 2108,
+
+     2109, 2111, 2114, 2112, 2117, 2121, 2119, 2120, 2129, 2136,
+     2127, 2131, 2134, 2137, 2144, 2140, 2141, 2142, 2149, 2145,
+     2146, 2151, 2152, 2154, 2155, 2157, 2158, 2174, 2161, 2163,
+     2175, 2178, 2179, 2181, 2183, 2185, 4589, 2169, 2184, 2194,
+     2197, 2195, 2201, 2186, 2198, 2188, 2209, 2211, 4589, 2207,
+     4589, 2212, 2213, 2221, 4589, 2219, 4589, 2223, 2220, 4589,
+     2224, 2228, 2226, 2230, 2231, 2233, 2234, 2235, 2238, 2240,
+     2242, 2245, 2243, 2248, 2249, 2251, 2252, 4589, 2261, 2254,
+     2263, 2266, 2264, 2256, 2258, 2271, 2268, 2274, 2279, 2282,
+     2289, 2275, 2290, 4589, 2285, 2292, 2286, 2296, 4589, 2288,
+
+     2297, 2300, 2293, 2303, 2304, 2306, 2310, 2308, 2313, 2322,
+     2323, 2324, 2318, 2326, 2314, 2332, 2336, 2315, 2334, 2337,
+     2338, 2347, 2343, 2350, 2342, 2346, 2354, 2355, 2345, 2349,
+     2357, 2359, 2361, 2362, 2366, 2370, 2367, 2368, 2371, 2372,
+     4589, 2381, 2376, 2378, 2389, 2382, 2384, 2386, 2391, 2392,
+     2399, 2395, 2394, 2400, 4589, 2404, 4589, 2405, 2408, 2412,
+     2415, 2413, 2417, 2420, 2425, 2421, 2426, 2428, 2429, 2442,
+     2427, 2431, 2433, 2439, 2443, 2445, 4589, 2446, 2448, 2449,
+     2452, 2454, 2455, 2461, 2458, 2456, 2478, 4589, 2475, 2464,
+     2480, 2487, 2483, 2490, 2485, 4589, 2473, 2492, 2489, 2494,
+
+     4589, 4589, 2495, 2496, 2498, 2499, 2500, 2505, 2507, 2506,
+     2508, 4589, 2510, 2512, 2516, 2523, 2524, 2525, 2527, 2515,
+     4589, 2531, 2534, 2521, 2537, 2539, 2540, 2541, 2542, 2549,
+     2545, 2547, 2548, 2556, 2550, 2559, 4589, 2561, 2563, 2568,
+     2564, 2569, 2570, 2574, 2575, 2577, 2578, 2579, 2580, 2581,
+     2583, 2582, 2590, 2585, 2586, 2592, 2606, 2588, 2602, 2603,
+     2608, 2604, 2611, 2613, 2615, 2616, 2625, 2626, 4589, 2628,
+     2617, 2633, 2618, 2636, 2631, 2637, 2646, 2641, 2632, 2642,
+     2650, 2645, 4589, 2657, 2647, 2664, 2648, 2658, 2669, 2667,
+     2668, 2649, 2672, 2674, 2677, 2675, 2679, 2680, 2683, 4589,
+
+     4589, 2684, 2685, 2687, 2689, 2690, 2694, 2691, 2698, 2692,
+     2696, 4589, 2702, 2711, 2708, 2709, 2719, 2720, 2722, 2710,
+     2723, 2724, 2726, 2725, 2727, 2729, 2731, 2733, 2735, 2736,
+     4589, 2739, 2738, 4589, 2741, 2742, 2743, 2752, 2755, 2748,
+     2763, 2751, 2765, 2766, 2773, 2769, 2776, 2777, 2780, 2778,
+     2781, 2788, 4589, 2783, 2785, 2784, 2787, 2797, 2792, 2800,
+     2790, 4589, 2798, 2805, 2808, 2810, 2799, 2817, 2815, 2813,
+     2816, 2820, 4589, 2823, 4589, 2824, 2825, 4589, 2826, 2830,
+     2831, 2833, 2834, 2835, 2839, 2846, 2841, 2847, 2848, 2849,
+     2850, 2852, 2859, 2851, 4589, 2862, 2855, 2858, 2860, 4589,
+
+     2871, 4589, 2864, 4589, 2872, 2875, 2882, 2877, 2878, 2881,
+     2885, 2888, 4589, 2886, 2890, 2891, 2895, 2897, 2899, 2900,
+     2901, 2898, 2902, 2903, 4589, 2905, 2907, 2915, 2908, 2916,
+     2920, 2927, 2921, 4589, 2928, 2929, 2930, 2934, 2935, 4589,
+     2937, 2938, 4589, 2943, 2945, 2947, 2949, 2950, 2951, 2953,
+     2959, 2955, 2966, 2962, 2961, 2963, 4589, 2964, 2965, 2969,
+     2980, 2970, 2972, 2982, 2984, 2986, 2978, 2993, 2995, 2991,
+     2997, 2987, 3002, 2998, 3004, 4589, 3005, 3006, 4589, 3009,
+     3012, 3013, 3014, 4589, 3015, 4589, 3017, 3018, 3020, 3019,
+     3024, 3026, 3027, 3029, 3037, 3038, 3040, 3039, 3049, 3046,
+
+     3047, 4589, 4589, 3051, 3057, 3053, 3060, 3063, 3061, 3066,
+     3071, 3069, 3076, 3077, 3085, 4589, 3086, 3068, 3087, 4589,
+     3055, 3089, 3070, 3081, 3092, 3095, 3098, 3100, 3101, 3102,
+     3103, 3078, 3106, 4589, 3107, 3109, 3110, 3111, 3112, 3115,
+     3116, 4589, 3120, 3119, 3121, 3123, 3128, 3131, 3138, 3141,
+     3146, 3143, 3147, 3148, 3150, 3152, 3156, 4589, 3163, 3153,
+     3154, 3155, 3165, 3170, 3157, 3172, 3166, 3178, 3180, 3175,
+     3181, 4589, 3182, 3186, 3183, 3191, 3188, 3192, 3193, 3194,
+     3204, 3197, 3199, 3201, 3208, 4589, 3205, 3209, 3211, 3213,
+     3219, 3212, 3222, 3215, 3122, 3223, 3227, 3224, 3234, 4589,
+
+     3229, 3237, 3230, 3238, 3239, 3240, 3243, 3244, 3247, 3252,
+     3253, 3254, 3250, 3271, 3266, 4589, 3257, 4589, 3258, 3268,
+     3278, 3273, 3275, 4589, 3276, 3279, 4589, 3280, 3283, 3281,
+     3286, 4589, 3284, 3285, 3289, 3293, 3301, 4589, 3303, 3304,
+     3306, 3314, 3316, 3313, 3315, 3317, 3319, 3320, 3321, 3322,
+     4589, 3324, 3327, 3326, 3332, 3333, 3335, 3336, 3338, 3339,
+     3341, 3349, 3345, 3344, 4589, 3347, 3352, 3354, 3356, 3358,
+     4589, 4589, 3361, 3365, 3367, 3368, 3371, 4589, 3369, 3380,
+     3376, 3378, 3381, 4589, 4589, 3383, 4589, 3379, 4589, 4589,
+     3384, 3386, 3393, 4589, 3396, 4589, 3404, 3399, 3385, 3387,
+
+     3402, 4589, 3403, 3405, 3411, 4589, 3406, 3414, 3412, 3413,
+     4589, 3419, 4589, 3420, 3424, 3426, 3425, 3429, 3432, 3433,
+     3435, 3437, 3440, 3441, 3442, 3444, 3447, 3449, 3448, 3450,
+     3451, 3452, 3454, 3464, 3456, 3458, 3466, 3467, 3468, 3469,
+     3472, 3470, 3475, 3476, 3477, 3478, 3482, 3485, 3489, 3488,
+     3502, 3503, 4589, 4589, 3505, 3491, 3497, 3495, 4589, 3499,
+     3507, 3510, 3511, 3512, 3513, 3516, 3517, 4589, 3523, 3515,
+     3520, 3528, 3526, 3527, 3529, 3530, 3536, 3540, 3543, 3550,
+     3548, 3537, 3549, 3551, 3553, 3554, 3557, 3558, 3564, 3559,
+     3570, 4589, 3565, 4589, 3567, 3571, 3575, 4589, 4589, 3572,
+
+     3577, 3579, 3581, 3582, 3586, 3583, 4589, 3588, 3589, 3598,
+     3595, 4589, 3602, 4589, 3605, 3590, 3607, 3610, 3612, 4589,
+     4589, 4589, 3613, 3599, 3616, 3617, 3618, 3619, 3620, 3622,
+     3624, 3627, 4589, 3631, 3632, 3634, 3636, 3641, 3645, 3642,
+     3647, 3654, 3650, 3656, 3638, 3658, 3660, 3662, 4589, 4589,
+     3664, 3665, 3672, 3669, 3670, 3673, 3676, 3678, 3679, 3681,
+     3682, 3684, 3685, 4589, 3691, 3687, 3686, 3693, 3698, 3699,
+     3700, 3702, 4589, 4589, 3695, 3703, 3705, 3710, 3712, 3713,
+     3715, 3717, 3718, 4589, 3719, 4589, 3720, 3721, 3732, 3728,
+     3733, 3738, 4589, 3735, 3729, 4589, 3745, 3736, 3739, 4589,
+
+     3746, 4589, 4589, 3752, 4589, 3748, 4589, 3753, 3755, 3758,
+     3759, 3761, 3763, 3766, 3767, 3770, 3771, 3772, 3780, 3776,
+     3777, 4589, 4589, 3784, 3779, 3785, 3793, 3788, 3790, 3796,
+     4589, 4589, 3792, 3798, 3800, 4589, 3799, 3801, 3805, 3807,
+     3808, 3809, 3811, 3815, 3816, 3810, 3817, 3819, 3827, 3830,
+     3821, 3833, 3832, 3834, 3839, 3841, 3842, 4589, 3844, 3846,
+     3840, 4589, 3851, 3847, 3856, 3859, 3857, 4589, 3845, 3868,
+     3865, 3870, 3871, 3878, 3874, 3873, 4589, 3876, 3880, 3881,
+     4589, 3883, 4589, 3884, 4589, 3885, 4589, 3890, 3891, 3888,
+     4589, 3894, 3900, 4589, 3903, 3898, 3905, 3909, 3910, 4589,
+
+     3917, 3913, 3914, 3921, 3912, 3916, 3922, 3923, 3932, 3924,
+     3934, 4589, 3929, 3931, 3936, 3938, 3939, 3944, 3940, 3942,
+     3947, 3945, 3952, 3958, 3954, 4589, 3960, 3963, 4589, 3964,
+     4589, 3966, 3967, 3969, 4589, 3971, 3968, 3972, 3975, 4589,
+     3976, 3979, 4589, 3980, 3982, 3987, 3989, 3984, 3990, 3991,
+     3992, 3997, 4005, 3999, 4589, 4001, 4006, 4016, 4015, 4017,
+     4024, 4007, 4589, 4022, 4023, 4011, 4035, 4019, 4032, 4589,
+     4034, 4021, 4589, 4039, 4041, 4042, 4043, 4045, 4050, 4052,
+     4053, 4589, 4055, 4589, 4589, 4047, 4589, 4057, 4059, 4589,
+     4062, 4063, 4064, 4065, 4068, 4070, 4589, 4589, 4069, 4078,
+
+     4073, 4086, 4071, 4589, 4080, 4082, 4087, 4089, 4088, 4589,
+     4090, 4091, 4093, 4095, 4096, 4103, 4099, 4097, 4104, 4589,
+     4589, 4105, 4589, 4107, 4112, 4120, 4589, 4589, 4589, 4122,
+     4589, 4127, 4131, 4130, 4589, 4133, 4123, 4135, 4589, 4137,
+     4138, 4139, 4140, 4589, 4142, 4144, 4146, 4151, 4157, 4148,
+     4154, 4152, 4166, 4168, 4158, 4167, 4169, 4170, 4171, 4172,
+     4174, 4589, 4589, 4178, 4589, 4589, 4180, 4185, 4187, 4589,
+     4188, 4193, 4589, 4195, 4181, 4189, 4198, 4200, 4203, 4589,
+     4589, 4204, 4205, 4206, 4209, 4589, 4211, 4213, 4212, 4216,
+     4217, 4219, 4218, 4589, 4589, 4589, 4589, 4589, 4220, 4589,
+
+     4589, 4224, 4225, 4228, 4227, 4589, 4230, 4231, 4233, 4243,
+     4239, 4244, 4235, 4246, 4249, 4250, 4251, 4252, 4255, 4259,
+     4261, 4263, 4267, 4274, 4277, 4260, 4278, 4280, 4282, 4271,
+     4283, 4290, 4286, 4289, 4291, 4589, 4292, 4589, 4293, 4589,
+     4589, 4295, 4297, 4299, 4308, 4309, 4301, 4304, 4306, 4589,
+     4312, 4313, 4316, 4589, 4314, 4321, 4322, 4323, 4324, 4326,
+     4328, 4329, 4330, 4338, 4345, 4341, 4346, 4348, 4350, 4344,
+     4358, 4354, 4357, 4589, 4360, 4361, 4362, 4364, 4371, 4366,
+     4367, 4369, 4589, 4375, 4372, 4373, 4374, 4376, 4390, 4394,
+     4382, 4378, 4396, 4386, 4400, 4402, 4406, 4407, 4398, 4409,
+
+     4410, 4416, 4413, 4419, 4420, 4421, 4423, 4422, 4589, 4425,
+     4429, 4589, 4430, 4431, 4432, 4433, 4437, 4589, 4443, 4434,
+     4439, 4444, 4447, 4449, 4589, 4455, 4460, 4450, 4589, 4461,
+     4589, 4589, 4462, 4463, 4464, 4469, 4471, 4589, 4589, 4589,
+     4497, 4504, 4511, 4518, 4525,   70, 4532, 4539, 4546, 4553,
+     4560, 4567, 4574, 4581
     } ;
 
-static yyconst flex_int16_t yy_def[2333] =
+static yyconst flex_int16_t yy_def[2355] =
     {   0,
-     2318,    1, 2319, 2319, 2320, 2320, 2321, 2321, 2322, 2322,
-     2323, 2323, 2318, 2324, 2318, 2318, 2318, 2318, 2325, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2326, 2318, 2318, 2318, 2326, 2327, 2318, 2318, 2318,
-     2327, 2328, 2318, 2318, 2318, 2318, 2328, 2329, 2318, 2318,
-     2318, 2329, 2330, 2318, 2331, 2318, 2330, 2330, 2324, 2324,
-     2318, 2332, 2325, 2332, 2325, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2326, 2326, 2327, 2327, 2328, 2328, 2318,
-     2329, 2329, 2330, 2330, 2331, 2331, 2330, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2330, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2330, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318,
-     2324, 2324, 2324, 2324, 2324, 2324, 2318, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318,
-     2330, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2330,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2318, 2324, 2318, 2318, 2324, 2318, 2318, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2330, 2324, 2324, 2324,
-     2318, 2324, 2324, 2318, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2318, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2318, 2324, 2330, 2324,
-
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2318, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2318, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-
-     2324, 2324, 2324, 2324, 2324, 2318, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2318, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2318, 2324, 2324, 2324, 2324, 2324, 2324,
-
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2318, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318, 2324, 2318,
-     2324, 2324, 2324, 2318, 2324, 2318, 2324, 2324, 2318, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2318, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2318, 2324, 2324, 2324, 2324, 2318, 2324, 2324,
-
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2318, 2324, 2318, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2318, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2318, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2318, 2324, 2324, 2324, 2324, 2318, 2318,
-
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2318, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2318, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2318, 2318, 2324, 2324,
-
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318, 2324, 2324,
-     2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318,
-     2324, 2318, 2324, 2324, 2318, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2318, 2324, 2324, 2324, 2324, 2318, 2324, 2318, 2324, 2318,
-
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318,
-     2324, 2324, 2324, 2324, 2324, 2318, 2324, 2324, 2318, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2318, 2324, 2324, 2318, 2324, 2324, 2324, 2324, 2318,
-     2324, 2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318, 2318, 2324,
-
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2318, 2324, 2324, 2324, 2318, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2318, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2318, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2318, 2324, 2324, 2324, 2324, 2324,
-
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2318, 2324, 2318, 2324, 2324, 2324, 2324, 2324, 2318, 2324,
-     2324, 2318, 2324, 2324, 2324, 2324, 2318, 2324, 2324, 2324,
-     2324, 2324, 2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2318, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318, 2324,
-     2324, 2324, 2324, 2324, 2318, 2318, 2324, 2324, 2324, 2324,
-     2324, 2318, 2324, 2324, 2324, 2324, 2324, 2318, 2318, 2324,
-     2318, 2324, 2318, 2318, 2324, 2324, 2324, 2318, 2324, 2318,
-     2324, 2324, 2324, 2324, 2324, 2318, 2324, 2324, 2324, 2318,
-
-     2324, 2324, 2324, 2324, 2318, 2324, 2318, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2318, 2318, 2324, 2324,
-     2324, 2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2318, 2324, 2318, 2324, 2324, 2324,
-     2318, 2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318,
-
-     2324, 2324, 2324, 2324, 2318, 2324, 2318, 2324, 2324, 2324,
-     2324, 2324, 2318, 2318, 2318, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2318, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2318, 2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2318, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2318, 2318, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2318, 2324, 2318, 2324, 2324,
-     2324, 2324, 2324, 2324, 2318, 2324, 2324, 2318, 2324, 2324,
-     2324, 2318, 2324, 2318, 2318, 2324, 2318, 2324, 2318, 2324,
-
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2318, 2318, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2318, 2318, 2324, 2324, 2318, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318, 2324,
-     2324, 2324, 2318, 2324, 2324, 2324, 2324, 2324, 2318, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318, 2324, 2324,
-     2324, 2318, 2324, 2318, 2324, 2318, 2324, 2318, 2324, 2324,
-     2324, 2318, 2324, 2324, 2318, 2324, 2324, 2324, 2324, 2324,
-     2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-
-     2324, 2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2318, 2324, 2324, 2318, 2324,
-     2318, 2324, 2324, 2324, 2318, 2324, 2324, 2324, 2324, 2318,
-     2324, 2324, 2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2318, 2324, 2324, 2324, 2324, 2324,
-     2324, 2318, 2324, 2324, 2324, 2324, 2324, 2324, 2318, 2324,
-     2324, 2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2318, 2324, 2318, 2318, 2324, 2318, 2324, 2324, 2318, 2324,
-     2324, 2324, 2324, 2324, 2324, 2318, 2318, 2324, 2324, 2324,
-     2324, 2324, 2318, 2324, 2324, 2324, 2324, 2324, 2318, 2324,
-
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318, 2318, 2324,
-     2318, 2324, 2324, 2324, 2318, 2318, 2318, 2324, 2318, 2324,
-     2324, 2324, 2318, 2324, 2324, 2324, 2318, 2324, 2324, 2324,
-     2324, 2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318, 2318,
-     2324, 2318, 2318, 2324, 2324, 2324, 2318, 2324, 2324, 2318,
-     2324, 2324, 2324, 2324, 2324, 2324, 2318, 2318, 2324, 2324,
-     2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318, 2318,
-     2318, 2318, 2318, 2324, 2318, 2318, 2324, 2324, 2324, 2324,
-     2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2318, 2324, 2318, 2324,
-     2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2318, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2318, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2324,
-     2324, 2324, 2324, 2324, 2324, 2324, 2318, 2324, 2324, 2318,
-     2324, 2324, 2324, 2324, 2324, 2318, 2324, 2324, 2324, 2324,
-
-     2324, 2324, 2318, 2324, 2324, 2324, 2318, 2324, 2318, 2318,
-     2324, 2324, 2324, 2324, 2324, 2318, 2318,    0, 2318, 2318,
-     2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318,
-     2318, 2318
+     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,
+
+     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 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,
+
+     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,
+
+     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,
+
+     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,
+
+     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
+     2346, 2346, 2346, 2346, 2346, 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,
+
+     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,
+
+     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,
+
+     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,
+
+     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,
+
+     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
+     2346, 2346, 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,
+
+     2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346,
+     2346, 2346, 2346, 2346, 2346, 2346, 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,
+
+     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,
+
+     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,
+
+     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,
+
+     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,
+
+     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,
+
+     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,
+
+     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,
+
+     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,
+
+     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,
+
+     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,
+
+     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,
+
+     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[4583] =
+static yyconst flex_uint16_t yy_nxt[4630] =
     {   0,
        14,   15,   16,   17,   18,   19,   18,   14,   14,   14,
        14,   14,   18,   20,   21,   22,   23,   24,   25,   26,
@@ -1388,320 +1394,325 @@ static yyconst flex_uint16_t yy_nxt[4583] =
       936,   70,   70,  935,  942,  938,   70,  937,  934,   70,
       944,  943,   70,   70,   70,   70,   70,  946,   70,  952,
        70,   70,  949,  945,   70,   70,   70,  135,  947,   70,
-      960,  950,  955,  948,   70,  953,   70,  951,   70,  957,
-       70,  961,  954,   70,   70,  956,  964,  962,   70,   70,
-      958,   70,  963,  959,  967,   70,   70,  966,  971,   70,
-      969,   70,  965,   70,   70,  972,   70,   70,   70,   70,
-
-      968,   70,  973,   70,   70,  970,  977,   70,   70,  974,
-      978,   70,  976,  982,   70,  975,   70,   70,   70,   70,
-      979,  987,  981,  983,  980,  986,   70,   70,   70,   70,
-       70,  984,  988,  996,  985,  991,  989,  990,  992,  993,
-       70,   70,  998,   70,  994,   70,   70,   70,  995,   70,
-     1008, 1007, 1009,  997,   70, 1006, 1005,   70,   70,  999,
-       70,   70, 1000, 1001,   70,   70, 1011, 1002,   70, 1010,
-     1012,   70, 1013, 1003,   70,   70,   70, 1004, 1014, 1019,
-     1016, 1020, 1017, 1015,   70,   70,   70,   70,   70, 1021,
-     1022,   70, 1028, 1029, 1018,   70,   70, 1023,   70,   70,
-
-       70,   70, 1024, 1031, 1025,   70, 1026, 1030, 1027, 1035,
-     1034,   70,   70, 1032, 1036,   70,   70,   70, 1033, 1037,
-     1038,   70, 1042,   70, 1040,   70,   70,   70,   70, 1048,
-       70, 1039,   70, 1047, 1044, 1041,   70, 1043, 1050,   70,
-       70, 1052,   70, 1051, 1045, 1054,   70, 1049,   70, 1056,
-       70,   70, 1046,   70, 1059,   70, 1057,   70,   70,   70,
-       70, 1053,   70, 1061,   70, 1063,   70, 1062, 1055, 1064,
-       70, 1065, 1067,   70, 1058,   70,   70, 1060, 1070, 1071,
-     1066, 1072, 1068, 1073,   70,   70, 1069,   70,   70,   70,
-       70, 1077,   70,   70,   70,   70, 1074, 1081,   70,   70,
-
-       70, 1076,   70,   70,   70,   70,   70, 1075,   70, 1088,
-     1085,   70,   70, 1078, 1079,   70, 1082, 1092, 1080, 1084,
-     1086,   70, 1083, 1087, 1089, 1090, 1093,   70,   70, 1091,
-     1097,   70,   70, 1095,   70, 1098,   70,   70, 1094, 1100,
-     1096, 1099,   70,   70,   70, 1106,   70, 1104, 1101,   70,
-     1105, 1108, 1102, 1109,   70, 1103,   70,   70, 1107,   70,
-       70,   70,   70,   70,   70, 1110, 1114, 1117,   70,   70,
-       70,   70, 1112,   70,   70, 1111,  144, 1113, 1115,   70,
-       70, 1120, 1116, 1119, 1121, 1125, 1118,   70, 1122, 1123,
-     1124,   70,   70,   70, 1126,   70, 1127, 1128,   70, 1130,
-
-       70, 1129,   70, 1135, 1136,   70, 1132, 1134, 1131,   70,
-       70,   70, 1137,   70, 1138,   70, 1133, 1139,   70, 1140,
-       70,   70,   70, 1142,   70,   70, 1146,   70,   70, 1141,
-       70, 1145,   70,   70, 1152, 1143, 1148, 1144, 1149, 1153,
-       70,   70,   70, 1154, 1150,   70,   70, 1147, 1155,   70,
-       70, 1151, 1160,   70,   70,   70, 1164,   70,   70,   70,
-     1163, 1156,   70,   70, 1157, 1158,   70,   70, 1161, 1159,
-       70,  142, 1162,   70, 1165,   70, 1166, 1177, 1167,   70,
-     1169,   70, 1168,   70, 1172, 1171,   70, 1174, 1170, 1173,
-     1175,   70,   70,   70, 1178,   70,   70, 1176,   70, 1184,
-
-     1181,   70, 1179,   70, 1182, 1186,   70, 1188, 1180,   70,
-       70,   70, 1185,   70, 1187, 1189, 1193, 1183, 1194,   70,
-       70, 1190,   70,   70,   70,   70, 1197,   70, 1191, 1196,
-     1198, 1199,   70, 1192, 1200,   70,   70,   70, 1195, 1201,
-     1202,   70, 1203,   70,   70, 1206,   70,   70,   70, 1210,
-       70,   70, 1205, 1208,   70, 1211,   70, 1213, 1204,   70,
-     1207,   70, 1209,   70,   70,   70,   70, 1216, 1219,   70,
-     1218,   70, 1215,   70, 1212,   70, 1222,   70, 1223,   70,
-       70, 1214,   70, 1217, 1220, 1221,   70, 1227,   70, 1226,
-     1229,   70, 1231,   70, 1233,   70, 1230, 1224,   70, 1225,
-
-       70, 1235,   70,   70,   70,   70, 1228,   70, 1239, 1234,
-     1237,   70, 1240, 1232,   70,   70,   70,   70, 1244, 1243,
-       70,   70, 1236,   70,   70,   70, 1377,   70, 1247, 1238,
-     1242, 1248, 1241, 1245,   70, 1250, 1252,   70,   70, 1251,
-     1246,   70, 1253, 1249,   70, 1256,   70, 1255, 1254,   70,
-     1257,   70,   70, 1261,   70,   70, 1258, 1263,   70,   70,
-     1262,   70,   70,   70,   70, 1259, 1265, 1266,   70, 1267,
-       70,   70, 1260,   70,   70,   70, 1268, 1264, 1275,   70,
-       70,   70, 1269,   70,   70, 1271, 1273, 1272, 1274,   70,
-     1270, 1280,   70,   70,   70, 1278,   70, 1283, 1282, 1276,
-
-     1277,   70,   70,   70, 1279,   70,   70,   70, 1285, 1281,
-       70,   70,   70, 1290, 1288,   70, 1284, 1297,   70,   70,
-     1291, 1287, 1289, 1292,   70, 1294, 1286, 1299, 1293,   70,
-     1295, 1298,   70,   70, 1301,   70,   70,   70, 1300,   70,
-     1296, 1308, 1309,   70, 1303,   70, 1307,   70, 1305, 1302,
-       70, 1306,   70,   70,   70, 1304,   70,   70,   70,   70,
-     1318,   70,   70, 1311,   70, 1310, 1315, 1313,   70, 1321,
-     1312, 1320, 1314,   70, 1322,   70, 1317, 1319,   70, 1331,
-       70,  140, 1316, 1329, 1324, 1327, 1326, 1325, 1323,   70,
-     1328,   70, 1332,   70,   70, 1334, 1330,   70,   70, 1333,
-
-     1337,   70,   70, 1335,   70,   70,   70,   70, 1339,   70,
-       70,   70,   70, 1336, 1340, 1338, 1347, 1342,   70,   70,
-     1343,   70,   70, 1341,   70, 1346, 1350,   70, 1344,   70,
-     1345,   70,   70, 1352, 1348,   70, 1353, 1349,   70,   70,
-     1354, 1351,   70, 1355, 1359,   70, 1360, 1357, 1356,   70,
-       70,   70,   70,   70, 1366,   70, 1361, 1358,   70,   70,
-       70,   70, 1362, 1363, 1371, 1369,   70, 1367, 1370,   70,
-       70, 1364,   70, 1365, 1372,   70, 1368, 1373, 1376, 1374,
-     1375,   70,   70,   70,   70,   70,   70,   70,   70, 1382,
-       70,   70,   70,   70,   70, 1386, 1383, 1391,   70,   70,
-
-     1384, 1387, 1378, 1380, 1381, 1379, 1385,   70,   70, 1390,
-     1392, 1396,   70, 1389, 1388,   70,   70, 1398,   70,   70,
-     1393, 1400,   70,   70, 1402, 1404, 1394, 1401, 1395,   70,
-       70,   70, 1403,   70,   70, 1397, 1406,   70,   70,  139,
-     1399, 1408,   70, 1409,   70,   70, 1410, 1411,   70,   70,
-     1418, 1405,   70,   70,   70,   70,   70, 1416, 1420, 1407,
-     1412, 1413, 1414, 1421,   70,   70, 1424, 1415, 1422, 1417,
-     1426,   70, 1419, 1423,   70,   70,   70,   70, 1430,   70,
-     1425,   70,   70, 1427,   70, 1432,   70,   70, 1435, 1436,
-       70,   70,   70, 1439,   70, 1428,   70,   70, 1429,   70,
-
-     1437,   70, 1433,   70, 1441,   70, 1444, 1431, 1434,   70,
-     1442, 1440,   70, 1438, 1447, 1448,   70,   70, 1453,   70,
-     1451,   70,   70,   70, 1450, 1443,   70, 1452, 1446, 1445,
-       70, 1455,   70,   70,   70, 1454, 1449,   70,   70,   70,
-     1459,   70, 1462, 1456,   70,   70, 1458,   70,   70,   70,
-       70, 1457, 1464, 1469,   70,   70, 1460,   70,   70, 1463,
-     1470,   70, 1467,  137, 1466, 1461, 1471,   70, 1465, 1468,
-     1472,   70, 1473, 1475,   70,   70, 1476, 1474, 1478, 1479,
-     1483, 1477, 1480,   70, 1481,   70,   70, 1484,   70, 1482,
-       70, 1487,   70,   70,   70,   70,   70,   70, 1489, 1492,
-
-     1486, 1485,   70, 1494, 1488,   70,   70, 1490,   70,   70,
-       70, 1496,   70, 1497, 1498,   70, 1499,   70, 1495, 1501,
-       70, 1491,   70,   70, 1493,   70, 1502, 1503,   70, 1504,
-     1500,   70,   70,   70,   70, 1507, 1506, 1505,   70, 1511,
-       70,   70,   70,   70,   70, 1508, 1509,   70, 1513, 1514,
-     1510, 1512, 1515,   70,   70,   70, 1517, 1522,   70,   70,
-       70, 1516, 1520,   70, 1521,   70,   70, 1524,   70, 1527,
-       70,   70, 1518,   70, 1519, 1529,   70,   70, 1525, 1523,
-     1528, 1533,   70,   70, 1535, 1531, 1526,   70,   70, 1530,
-     1536, 1532, 1537,   70,   70,   70,   70,   70, 1541, 1534,
-
-       70,   70, 1538, 1539,   70,   70,   70,   70,   70, 1542,
-       70,   70,   70,   70,   70, 1540, 1544, 1545, 1546, 1549,
-     1553,   70, 1543, 1548, 1552,   70,   70,   70, 1556, 1554,
-     1551, 1557, 1550, 1547, 1555,   70,   70,   70, 1560,   70,
-     1559,   70,   70,   70, 1562, 1565,   70, 1558, 1563, 1567,
-       70, 1564,   70,   70,   70, 1561, 1570,   70, 1569,   70,
-     1566,   70, 1571,   70, 1572, 1575,   70,   70,   70,   70,
-       70,   70, 1576,   70, 1578, 1581,   70,   70, 1568, 1573,
-      135, 1577,   70, 1574, 1580,   70, 1582, 1586, 1579, 1585,
-       70,   70, 1583, 1584,   70,   70, 1587,   70, 1589,   70,
-
-     1590,   70, 1588,   70,   70, 1593, 1595,   70,   70,   70,
-     1591,   70, 1594, 1592, 1598,   70, 1597, 1596,   70,   70,
-     1599,   70,   70,   70, 1600,   70,   70, 1604, 1606,   70,
-     1611,   70,   70,   70,   70, 1613,   70, 1602, 1601, 1603,
-     1605, 1608, 1610, 1612,   70,   70,   70,   70, 1607, 1615,
-     1618, 1614, 1616,   70, 1609, 1619,   70, 1617, 1622,   70,
-       70, 1620,   70, 1623, 1627,   70, 1621,   70, 1628, 1626,
-       70,   70, 1631,   70,   70, 1633,   70, 1624,   70, 1632,
-       70,   70, 1629,   70,   70, 1634,   70, 1635, 1625, 1630,
-     1637,   70,   70, 1636,   70,   70, 1639, 1642,   70, 1645,
-
-       70,   70,   70,   70,   70, 1646, 1638, 1640, 1648, 1641,
-       70,   70,   70, 1643, 1644,   70,   70, 1647,   70,   70,
-       70,   70, 1659,   70,   70,   70,   70, 1660,   70, 1650,
-     1649, 1651, 1656, 1658, 1652, 1654,   70,   70, 1661, 1653,
-     1655, 1663, 1657,   70, 1664, 1665,   70, 1666,   70,   70,
-     1662,   70, 1667,   70, 1669, 1672,   70,   70,   70,   70,
-     1670,   70, 1668, 1671, 1673,   70, 1674,   70, 1678,   70,
-     1679,   70, 1681,   70,   70, 1683,   70, 1675, 1676, 1677,
-     1684,   70,   70,   70, 1680,   70, 1688,   70,   70,   70,
-     1687,   70, 1682, 1690,   70, 1692, 1685,   70,   70, 1694,
-
-     1693,   70, 1686, 1696,   70,   70,   70, 1689,   70, 1691,
-     1700,   70,   70,   70, 1695,   70,   70, 1704, 1705,   70,
-     1697, 1698,   70,   70, 1699, 1707,   70,   70, 1701,   70,
-     1703,   70, 1711,   70, 1709, 1702, 1708,   70, 1712, 1713,
-       70, 1706,   70,   70,   70, 1714,   70, 1715,   70, 1710,
-       70,   70,   70, 1719,   70, 1720, 1717,   70,   70, 1721,
-     1722, 1723, 1727, 1724,   70, 1716, 1725, 1718,   70,   70,
-       70, 1732, 1726, 1728,   70, 1731,   70,   70,   70, 1730,
-       70, 1733,   70,   70, 1729,   70,   70,   70,   70, 1734,
-       70, 1738, 1776, 1737,   70, 1739, 1735, 1743, 1736,   70,
-
-     1742, 1740, 1741,   70, 1744,   70, 1745, 1747,   70, 1748,
-       70,   70, 1750, 1751,   70, 1746, 1749, 1755,   70,   70,
-     1752,   70,   70, 1754,   70,   70,   70, 1758, 1753,   70,
-       70,   70,   70, 1759, 1760, 1761,   70, 1762, 1756,   70,
-       70,   70,   70,   70, 1757, 1766, 1769,   70, 1768,   70,
-     1763,   70,   70, 1770, 1765,   70, 1773, 1774,   70, 1764,
-       70,   70, 1767,   70,   70, 1778, 1775, 1771,   70,   70,
-       70, 1772, 1779,   70, 1777,   70, 1781, 1782, 1783, 1786,
-     1784, 1785,   70,   70,   70, 1787,   70, 1780,   70,   70,
-     1791,   70, 1793, 1789, 1790, 1792,   70,   70,   70,   70,
-
-     1794, 1788,   70,   70,   70,   70, 1800,   70, 1797,   70,
-     1802,   70,   70, 1795, 1805,   70,   70, 1799, 1801,   70,
-     1806, 1807,   70, 1798, 1796,   70,   70, 1804, 1809, 1803,
-     1808,   70,   70,   70, 1813,   70, 1814,   70, 1812, 1815,
-       70,   70,   70,   70, 1818, 1810, 1811,   70,   70,   70,
-       70,   70,   70, 1816,   70, 1821,   70, 1824,   70, 1819,
-     1817, 1820, 1822, 1826,   70, 1827,   70,   70,   70,   70,
-       70, 1823,   70, 1833, 1825,   70,   70,   70,   70, 1834,
-     1830, 1838,   70, 1832, 1828,   70, 1829, 1842,   70,   70,
-     1840,   70, 1831, 1835, 1841,   70, 1839,   70, 1836,   70,
-
-     1837, 1843,   70,   70, 1844,   70, 1846,   70,   70, 1845,
-       70,   70,   70,   70,   70, 1855, 1847, 1856,   70, 1848,
-     1852, 1857,   70, 1849,   70,   70,   70,   70, 1851, 1850,
-     1853, 1854, 1859,   70,   70, 1865,   70, 1866,   70, 1860,
-     1858, 1867,   70,   70, 1861, 1862,   70,   70,   70, 1863,
-       70,   70,   70, 1864,   70, 1871, 1875, 1874, 1869,   70,
-     1868, 1876,   70,   70,   70, 1870, 1877,   70, 1872, 1878,
-       70, 1873, 1880,   70,   70,   70,   70,   70, 1879, 1884,
-     1885,   70, 1888,   70,   70,   70,   70, 1881, 1889,   70,
-     1886,   70, 1882, 1891, 1883, 1887, 1892,   70,   70, 1893,
-
-     1890, 1894,   70, 1895,   70, 1897,   70,   70, 1899,   70,
-     1896,   70, 1898,   70, 1900,   70,   70,   70,   70,   70,
-     1901,   70, 1904, 1906, 1902, 1903,   70, 1907,   70, 1905,
-       70,   70,   70, 2318, 1909, 1911, 1912, 1914,   70,   70,
-     1908, 1915,   70, 1910,   70, 1918, 1916, 1913,   70, 1917,
-       70,   70,   70, 1919,   70, 1920,   70, 1922, 1923,   70,
-     1924,   70, 1926,   70, 1944, 1921,   70, 1927,   70, 1925,
-       70, 1928, 1930,   70,   70, 1929,   70, 1931,   70, 1932,
-       70,   70,   70,   70,   70, 1933, 1938, 1936,   70, 1935,
-       70,   70,   70, 1939,   70, 1934, 1937,   70,   70,   70,
-
-       70, 1942,   70, 1943, 1941,   70, 1945,   70, 1940, 1949,
-       70, 1953,   70,   70,   70, 1952, 1951, 1946,   70, 1947,
-     2318, 1948,   70,   70, 1950, 1958, 1957, 1959,   70, 1955,
-       70,   70, 1954,   70,   70, 1961, 1963,   70, 1956,   70,
-       70, 1960,   70, 1962, 1964,   70, 1967, 1968,   70,   70,
-     2318, 1965,   70, 1971, 1966, 1972,   70,   70, 1974,   70,
-     1973,   70, 1969,   70, 1975, 1976,   70, 1978,   70, 1970,
-       70,   70, 1981, 1982,   70,   70, 1977, 1984,   70, 1983,
-       70,   70, 1985,   70, 1988, 1980,   70, 1987, 1979,   70,
-       70, 1991,   70, 1990,   70,   70,   70,   70, 1993, 1992,
-
-     1995,   70,   70, 1986,   70,   70,   70, 1998, 2002,   70,
-       70, 1989,   70,   70, 2006,   70,   70, 2007, 1996, 1997,
-     2001, 1994, 1999, 2004,   70, 2000,   70, 2008,   70, 2003,
-       70, 2005,   70, 2010,   70,   70,   70, 2016,   70,   70,
-     2009,   70, 2017, 2013, 2019,   70,   70, 2021,   70,   70,
-     2011,   70,   70, 2020, 2022, 2014, 2015,   70, 2012, 2018,
-     2023, 2025,   70,   70,   70,   70, 2027, 2026, 2029,   70,
-     2024,   70,   70, 2030,   70, 2033,   70,   70, 2031, 2028,
-     2032, 2034,   70,   70,   70,   70,   70, 2040,   70, 2035,
-     2039,   70,   70, 2041, 2036, 2037, 2042,   70, 2043, 2045,
-
-       70, 2044,   70, 2038,   70,   70, 2050,   70, 2047,   70,
-     2049, 2046,   70, 2054, 2051, 2052,   70,   70,   70,   70,
-     2057,   70, 2055, 2048,   70, 2053,   70, 2059,   70, 2062,
-       70,   70,   70,   70,   70, 2064, 2056,   70,   70, 2061,
-     2060,   70, 2065,   70, 2058, 2063, 2068,   70, 2069,   70,
-     2066, 2071,   70, 2073,   70,   70, 2067, 2074,   70, 2076,
-       70, 2079,   70,   70,   70,   70, 2072, 2070, 2078,   70,
-     2075, 2077,   70,   70, 2083,   70, 2086,   70, 2087,   70,
-       70,   70,   70, 2084, 2080,   70,   70,   70, 2081, 2088,
-     2094, 2082, 2093,   70, 2091,   70, 2095, 2085,   70,   70,
-
-       70, 2089, 2098, 2100, 2090,   70, 2092,   70,   70,   70,
-     2096, 2099,   70,   70, 2102, 2105,   70,   70, 2103, 2097,
-       70,   70, 2289, 2101, 2108,   70, 2104, 2109,   70, 2111,
-       70,   70,   70, 2106, 2107,   70, 2110, 2112, 2115,   70,
-     2114, 2116,   70, 2117,   70, 2113,   70, 2119,   70,   70,
-       70, 2118,   70, 2122, 2123,   70,   70,   70,   70, 2127,
-       70,   70,   70, 2130,   70,   70, 2128, 2126, 2120,   70,
-     2124,   70, 2121, 2131, 2132,   70, 2129, 2125,   70,   70,
-       70,   70,   70, 2133, 2134, 2136,   70, 2139, 2138,   70,
-       70, 2135,   70, 2137,   70,   70,   70, 2147,   70, 2149,
-
-       70, 2150,   70,   70, 2152,   70, 2140, 2151, 2142, 2141,
-     2143,   70, 2144, 2145, 2153,   70,   70, 2146, 2148, 2154,
-     2155,   70,   70, 2157,   70, 2156, 2160,   70,   70, 2158,
-     2159,   70,   70,   70,   70, 2161, 2162,   70, 2166, 2167,
-       70, 2168,   70, 2165,   70,   70, 2163, 2171,   70, 2172,
-     2170, 2164,   70,   70,   70,   70,   70,   70,   70, 2169,
-       70, 2176, 2177, 2179,   70, 2180,   70, 2184, 2174, 2181,
-       70, 2182,   70, 2183,   70, 2175,   70, 2173,   70, 2178,
-     2185,   70, 2186,   70,   70, 2189,   70, 2191,   70,   70,
-     2188, 2187,   70,   70, 2195, 2193, 2194,   70,   70,   70,
-
-       70, 2190,   70, 2197,   70,   70,   70, 2192,   70, 2201,
-       70, 2196, 2203,   70,   70,   70,   70, 2208, 2198,   70,
-     2199, 2200,   70,   70,   70,   70, 2207, 2202, 2205,   70,
-     2204,   70, 2209,   70, 2217,   70, 2206,   70,   70, 2212,
-       70, 2210, 2211, 2222, 2214,   70, 2218, 2216, 2219,   70,
-     2213, 2215,   70, 2220, 2221,   70,   70,   70, 2227,   70,
-     2226, 2223, 2224, 2225,   70, 2229,   70,   70,   70,   70,
-       70,   70,   70, 2228, 2235, 2236,   70,   70, 2233,   70,
-       70,   70,   70, 2231,   70, 2238, 2230, 2232, 2242,   70,
-     2234, 2237,   70,   70, 2243, 2239, 2241,   70,   70, 2240,
-
-       70,   70,   70,   70, 2318, 2248, 2245, 2249, 2252,   70,
-     2246, 2244, 2253,   70, 2254,   70,   70, 2247,   70, 2250,
-     2255, 2256, 2251,   70,   70, 2259,   70,   70, 2257, 2261,
-       70,   70, 2260,   70,   70,   70, 2266,   70,   70,   70,
-     2263,   70,   70, 2258, 2272, 2262,   70, 2269,   70,   70,
-       70, 2268,   70, 2264, 2265,   70, 2267, 2270,   70, 2276,
-     2271,   70,   70,   70, 2280, 2275, 2277, 2279, 2273, 2274,
-       70, 2282,   70, 2283, 2281, 2278,   70,   70,   70, 2287,
-       70, 2284,   70,   70, 2285, 2290,   70, 2288,   70,   70,
-     2291,   70,   70, 2296,   70, 2292, 2294, 2286,   70,   70,
-
-       70,   70,   70,   70, 2298, 2299,   70, 2302, 2293, 2303,
-       70, 2295,   70,   70, 2306, 2307,   70, 2297,   70,   70,
-     2300, 2301, 2304, 2309,   70, 2308, 2310,   70,   70,   70,
-       70, 2305,   70, 2318, 2312, 2311, 2318, 2313, 2314, 2316,
-       70, 2317,   70, 2318, 2318, 2318, 2318, 2318, 2318, 2315,
-       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, 2318,   73,   73,
-       73,   73,  134,  134, 2318, 2318, 2318,  134,  134,  136,
-
-      136, 2318, 2318,  136, 2318,  136,  138, 2318, 2318, 2318,
-     2318, 2318,  138,  141,  141, 2318, 2318, 2318,  141,  141,
-      143, 2318, 2318, 2318, 2318, 2318,  143,  145,  145, 2318,
-      145,  145,  145,  145,   74,   74, 2318,   74,   74,   74,
-       74,   13, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318,
-     2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318,
-     2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318,
-     2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318,
-     2318, 2318
+      961,  950,  955,  948,   70,  953,   70,  951,   70,  957,
+       70,  962,  954,   70,   70,  956,  965,  963,  958,   70,
+      959,   70,  964,  960,   70,   70,  968,   70,  967,   70,
+      970,   70,  966,  972,   70,  973,   70,   70,  974,   70,
+
+       70,   70,   70,  969,   70,   70,  971,  978,   70,   70,
+       70,  975,   70,  979,  977,  983,  976,   70,  988,   70,
+       70,  980,   70,  982,   70,  981,  987,  984,  985,   70,
+      986,   70,   70,  989,  993,   70,  992,  990,  994,   70,
+      991,   70,  999,  995,   70,   70,   70,   70, 1009,  997,
+     1008,  996,  998,   70, 1007,   70,   70,   70, 1000, 1006,
+     1010, 1001, 1002,   70,   70,   70, 1003,   70, 1012,   70,
+     1013,   70, 1004, 1011,   70, 1014, 1005, 1015, 1016,   70,
+     1020, 1018, 1021,   70, 1017,   70,   70, 1023,   70, 1019,
+     1022,   70,   70, 1029, 1030,   70,   70,   70,   70,   70,
+
+     1024, 1032,   70,   70,   70, 1025, 1031, 1026,   70, 1027,
+     1036, 1028, 1035, 1033,   70, 1037,   70, 1034, 1038,   70,
+       70, 1040, 1042, 1039,   70, 1043,   70, 1041,   70,   70,
+       70,   70, 1049,   70,   70, 1045, 1048, 1052, 1044, 1051,
+       70,   70,   70, 1055,   70, 1050, 1046, 1053,   70, 1057,
+       70,   70,   70,   70, 1047,   70, 1058, 1060,   70,   70,
+     1054, 1063,   70,   70, 1062,   70,   70, 1064, 1056,   70,
+     1065,   70, 1066, 1059,   70, 1061, 1069, 1071, 1072, 1070,
+     1068, 1067,   70,   70,   70, 1074,   70, 1073,   70,   70,
+       70,   70, 1078,   70,   70, 1075,   70, 1082,   70,   70,
+
+     1077,   70,   70,   70,   70,   70, 1089, 1076,   70,   70,
+     1079, 1086, 1083,   70, 1080,   70, 1087,   70, 1084, 1081,
+     1093, 1085, 1088, 1094,   70,   70,   70, 1098, 1090,   70,
+     1096, 1092, 1099,   70, 1091,   70,   70,   70, 1100,   70,
+     1095,   70,   70, 1101, 1108, 1097, 1106,   70,   70, 1107,
+     1102,   70, 1103, 1110, 1104, 1111,   70, 1105,   70,   70,
+       70, 1109,   70,   70,   70,   70,   70, 1112, 1116, 1119,
+       70,   70,   70,   70, 1114,   70,   70, 1113, 1115,   70,
+     1117,   70,   70, 1122, 1118, 1121, 1123, 1127, 1120,   70,
+     1124, 1125, 1126,   70,   70,   70, 1128, 1130, 1129,   70,
+
+     1132,   70, 1135, 1131,   70, 1137, 1138, 1134,   70, 1136,
+     1133,   70,   70,   70, 1139,   70, 1140, 1141,   70,   70,
+       70,   70,   70, 1142,   70,   70, 1144,   70, 1148, 1143,
+       70, 1147,   70,   70,   70, 1145, 1154, 1146, 1150, 1151,
+       70, 1155,   70, 1156,   70, 1149, 1152,   70, 1157,   70,
+       70, 1162, 1153,   70,   70,   70, 1166,   70,   70,   70,
+     1158, 1165,   70, 1159,   70,   70, 1160,   70,   70, 1161,
+       70,   70, 1174, 1164,   70, 1177,   70, 1167, 1168, 1163,
+       70, 1171,   70, 1169, 1170, 1173, 1176,   70,   70, 1172,
+     1175,   70,   70, 1178,   70, 1179,   70,   70,   70,   70,
+
+     1183,   70, 1186, 1181, 1184, 1180, 1188,   70,   70, 1182,
+       70,   70, 1190, 1187,   70, 1189, 1195, 1185, 1191, 1192,
+       70, 1194,   70, 1196,   70,   70,   70, 1199, 1200, 1193,
+     1198, 1201,   70,   70,   70, 1202,   70,   70, 1197,   70,
+     1204,   70, 1205,   70,   70, 1208,   70,   70,   70, 1203,
+     1212,   70, 1210,   70, 1206,   70,   70, 1213,   70, 1215,
+     1209,   70,   70, 1211,   70,   70, 1218,   70, 1207,   70,
+     1220,   70, 1217, 1221,   70, 1214,   70,   70, 1216,   70,
+     1224,   70, 1225, 1219,   70, 1222, 1229,   70,   70, 1226,
+     1223, 1227,   70, 1228, 1231,   70, 1233, 1235,   70,   70,
+
+     1232,   70,   70,   70, 1237,   70,   70, 1230, 1234,   70,
+       70, 1241, 1236,   70, 1242, 1239,   70,   70, 1238,   70,
+     1243,   70, 1246,   70, 1247, 1240,   70,   70,   70, 1260,
+     1253,   70, 1245, 1248, 1244,   70,   70,   70, 1250,   70,
+     1255, 1251, 1254, 1259, 1256,   70, 1249,   70, 1258,   70,
+       70,   70, 1257, 1252, 1264,   70,   70, 1266,   70,   70,
+       70, 1265,   70,   70, 1268, 1261, 1269,   70,   70, 1262,
+       70, 1263,   70, 1270,   70,   70, 1271, 1278, 1267,   70,
+       70,   70, 1272,   70,   70,   70, 1274, 1276, 1275,   70,
+     1273,   70, 1277, 1283,   70,   70, 1285,   70, 1281,   70,
+
+     1279, 1280,   70, 1286,   70,   70, 1282,   70,   70, 1284,
+     1287, 1288,   70,   70, 1291, 1293, 1294,   70,   70, 1295,
+     1300,   70, 1290, 1289, 1301,   70,   70, 1292,   70, 1296,
+       70, 1302, 1297,   70,   70, 1304, 1311, 1298,   70,   70,
+       70,   70,   70, 1299,   70, 1303,   70, 1306, 1308, 1305,
+     1310, 1309,   70, 1307, 1312,   70,   70, 1314,   70,   70,
+     1313,   70,   70, 1321, 1315,   70, 1316,   70,   70,   70,
+     1318,   70, 1317, 1324,   70, 1325, 1323,   70,  144, 1320,
+     1327, 1322, 1332, 1328, 1319, 1330,   70, 1329,   70, 1326,
+     1331,   70, 1334,   70, 1335, 1333,   70, 1337,   70, 1340,
+
+       70, 1336,   70,   70, 1338,   70, 1339,   70,   70,   70,
+     1342,   70,   70,   70, 1350, 1341, 1343, 1345,   70,   70,
+       70,   70, 1353,   70, 1346,   70,  142, 1344,   70,   70,
+     1347, 1349, 1348, 1355,   70, 1351,   70,   70,   70, 1352,
+       70, 1356, 1357, 1358,   70, 1354, 1362,   70, 1363, 1359,
+       70, 1360,   70,   70,   70,   70, 1369, 1364,   70, 1361,
+       70,   70,   70,   70, 1365, 1366, 1374, 1372, 1373,   70,
+     1370, 1375,   70, 1367,   70, 1368,   70,   70, 1371, 1376,
+     1378,   70,   70,   70, 1380, 1377, 1381,   70,   70, 1379,
+       70,   70,   70,   70,   70,   70,   70, 1386,   70,   70,
+
+     1390,   70, 1387,   70, 1395,   70, 1388, 1382, 1384, 1385,
+     1383, 1389, 1391, 1396, 1394,   70,   70,   70, 1393,   70,
+     1400,   70, 1397, 1402,   70, 1392,   70, 1404,   70,   70,
+       70,   70, 1406, 1405, 1398, 1408, 1399, 1401,   70,   70,
+     1410,   70, 1407, 1413,   70,   70,   70, 1403, 1409,   70,
+       70, 1414, 1412, 1415,   70,   70, 1411, 1422,   70,   70,
+       70,   70,   70,   70, 1424, 1420, 1416, 1417, 1418, 1425,
+       70,   70, 1428, 1419, 1426, 1421, 1430,   70, 1423, 1427,
+       70,   70,   70, 1433, 1434,   70, 1429,   70,   70, 1431,
+       70, 1436,   70,   70, 1439, 1440,   70,   70,   70, 1443,
+
+       70, 1432,   70,   70,   70,   70, 1441,   70, 1437,   70,
+     1445,   70, 1448, 1435, 1438,   70, 1446, 1444, 1452, 1442,
+     1451,   70,   70,   70,   70, 1450, 1455, 1456, 1458, 1454,
+     1447, 1449,   70,   70, 1457,   70,   70,   70,   70,   70,
+       70, 1453,   70, 1463,   70, 1459,   70, 1466,   70,   70,
+     1462,   70,   70, 1468,   70,   70,   70, 1460, 1461, 1473,
+     1464,   70, 1474, 1467,   70,   70, 1471, 1476,   70, 1469,
+     1465, 1470, 1477, 1472, 1475, 1479,   70, 1478,   70,   70,
+     1483, 1484,   70, 1485, 1487, 1480,   70, 1488, 1486,   70,
+       70,   70, 1481,   70,   70, 1491,   70,   70,   70, 1482,
+
+       70,   70, 1493,   70, 1496,   70, 1490, 1498, 1492, 1494,
+       70,   70,   70,   70, 1500, 1499,  140, 1489,   70, 1501,
+     1502,   70, 1503,   70, 1505, 1495,   70, 1497,   70,   70,
+       70, 1507, 1504,   70, 1506, 1508,   70,   70,   70,   70,
+     1511, 1510, 1509,   70,   70, 1516,   70,   70,   70, 1515,
+     1512, 1513,   70, 1518,   70, 1514, 1517, 1519, 1520,   70,
+       70,   70,   70,   70,   70,   70, 1527, 1525,   70, 1522,
+     1526,   70,   70,   70, 1521,   70, 1529,   70, 1528, 1523,
+     1532, 1524, 1533, 1534,   70,   70, 1531, 1530,   70, 1538,
+       70,   70, 1540, 1535,   70,   70, 1541, 1542,   70,   70,
+
+     1536,   70, 1537,   70,   70, 1546, 1544, 1539,   70, 1543,
+       70,   70,   70,   70,   70,   70,   70, 1547,   70,  139,
+       70,   70, 1554, 1545, 1549, 1550, 1551, 1558,   70,   70,
+     1553, 1548, 1557,   70,   70, 1555, 1561, 1552, 1556, 1559,
+       70,   70,   70,   70, 1565, 1562, 1564,   70,   70, 1560,
+       70,   70, 1567, 1570, 1563, 1568,   70, 1572,   70, 1569,
+       70, 1566,   70,   70,   70, 1575,   70, 1574,   70, 1576,
+     1571, 1577,   70, 1580,   70,   70,   70,   70,   70,   70,
+     1581, 1586,   70,   70, 1583,   70, 1573, 1582, 1579, 1590,
+     1578,   70, 1585,   70, 1587,   70, 1584,   70, 1588,   70,
+
+       70, 1592, 1591, 1593,   70, 1589,   70, 1594,   70, 1595,
+       70,   70, 1598, 1596, 1600,   70, 1597,   70,   70,   70,
+     1601, 1599,   70, 1603, 1604,   70,   70,   70,   70, 1602,
+       70,   70,   70,   70, 1609, 1605, 1611,   70, 1616,   70,
+       70, 1618,   70, 1608, 1607, 1606, 1615, 1610, 1613, 1617,
+       70,   70,   70,   70, 1612, 1620, 1623, 1614, 1621,   70,
+       70, 1624,   70, 1627,   70, 1622,   70, 1625,   70, 1619,
+       70, 1628, 1632,   70,   70, 1631,   70, 1633, 1636,   70,
+     1626,   70,   70,   70,   70, 1629, 1634, 1637, 1638,   70,
+       70,   70, 1640, 1644,   70, 1639, 1630, 1635,   70,   70,
+
+       70, 1642,   70, 1641, 1643,   70, 1646, 1645,   70, 1647,
+     1648,   70, 1651,   70,   70,   70,   70, 1655, 1652,   70,
+       70, 1654,   70,   70,   70,   70, 1649, 1650,   70,   70,
+     1653, 1665,   70,   70,   70,   70,   70, 1666, 1656, 1657,
+     1662,   70, 1715, 1660,   70, 1658, 1661, 1659, 1664, 1667,
+     1663,   70, 1670, 1671,   70, 1668,   70, 1669, 1672,   70,
+       70,   70, 1675,   70, 1678,   70,   70,   70,   70,   70,
+       70, 1673, 1676, 1674, 1679, 1677,   70, 1684,   70,   70,
+     1683, 1680, 1685,   70, 1687,   70, 1681, 1682,   70, 1686,
+     1689,   70, 1690,   70,   70,   70,   70, 1688, 1694,   70,
+
+     1693,   70, 1691, 1696,   70,   70,   70,   70, 1700, 1699,
+       70, 1698,   70, 1692,   70, 1695, 1702,   70,   70, 1697,
+     1706,   70,   70, 1701,   70,   70,   70, 1704,   70, 1703,
+     1710, 1711,   70, 1705, 1713,   70,   70,   70, 1707, 1709,
+       70, 1717,   70,   70, 1712, 1708, 1718,   70, 1714, 1719,
+       70,   70,   70,   70, 1720, 1721,   70,   70, 1725,  137,
+       70, 1726, 1716,   70, 1723,   70,   70,   70, 1722, 1728,
+       70,   70, 1727, 1724, 1729, 1730, 1731, 1732, 1733,   70,
+     1736,   70, 1737, 1734,   70, 1738,   70, 1739,   70,   70,
+     1735,   70,   70,   70,   70, 1740,   70,   70,   70,   70,
+
+     1749, 1744,   70, 1750, 1743, 1745,   70,  135, 1741, 1747,
+     1742, 1748, 1746, 1753,   70, 1754,   70,   70, 1752,   70,
+     1755, 1757, 1751, 1758, 1756, 1759,   70,   70,   70,   70,
+       70, 1761,   70,   70,   70,   70, 1765,   70, 1768,   70,
+       70, 1766, 1760, 1767, 1762,   70,   70, 1763,   70,   70,
+     1769,   70,   70, 1764,   70, 1773, 1776,   70,   70, 1775,
+       70, 1781,   70, 1772, 1777,   70, 1770,   70, 1771,   70,
+     1780,   70, 1774, 1783,   70, 1778, 1779, 1782,   70, 1785,
+       70,   70,   70, 1786,   70, 1788, 1789, 1790, 1784,   70,
+     1792,   70,   70,   70,   70, 1794,   70,   70,   70,   70,
+
+       70, 1791, 1796, 1793, 1797, 1798,   70, 1787, 1799,   70,
+     1795, 1800,   70, 1801, 1802,   70,   70,   70,   70,   70,
+     1804, 1809, 1803, 1807,   70,   70,   70,   70, 1808,   70,
+     1806, 1812,   70,   70, 1813, 1805, 1814,   70,   70,   70,
+     1816, 1811,   70, 1810, 1815,   70,   70, 1820,   70, 1821,
+       70, 1819, 1822,   70,   70,   70, 1817,   70, 1825, 1818,
+       70,   70,   70,   70,   70,   70, 1823,   70, 1828,   70,
+     1831,   70, 1826, 1824, 1827, 1829, 1833,   70, 1834,   70,
+       70,   70,   70,   70, 1830,   70, 1840, 1832,   70,   70,
+       70,   70, 1841, 1837, 1845,   70, 1839, 1835,   70, 1836,
+
+     1849,   70,   70, 1847,   70, 1838, 1842, 1848,   70, 1846,
+       70, 1843,   70, 1844, 1850,   70,   70, 1851,   70, 1852,
+       70, 1854, 1853,   70,   70,   70,   70, 1855,   70,   70,
+       70, 1863, 1856,   70, 1860, 1864,   70, 1865, 1857,   70,
+       70,   70,   70,   70, 1859, 1858, 1861, 1862, 1867,   70,
+       70, 1866, 1873,   70, 1868, 1874,   70, 1875, 1869, 1871,
+     1870,   70,   70,   70,   70, 1877,   70,   70, 1872, 1879,
+       70,   70,   70, 1883, 1885, 1882, 1884,   70,   70, 1876,
+       70, 1878, 1886,   70,   70,   70, 1880, 1881,   70, 1888,
+       70, 1893,   70, 1892,   70,   70,   70, 1887, 1896,   70,
+
+     1897,   70,   70,   70, 1889, 1891, 1899, 1890,   70, 1894,
+     1900,   70,   70, 1895, 1902,   70, 1898, 1903,   70, 1905,
+       70, 1901, 1904,   70, 1907,   70,   70, 1908, 1906,   70,
+       70,   70,   70,   70, 1909,   70, 1912,   70, 1914, 1911,
+       70, 2340, 1910, 1915,   70,   70, 1913,   70, 1917,   70,
+     1919,   70, 1920, 1922,   70,   70, 1916, 1923,   70, 1918,
+       70, 1926, 1924,   70, 1921, 1925, 1929,   70, 1927,   70,
+     1928,   70, 1931,   70, 1932,   70, 1930,   70,   70, 1935,
+     1939, 1934,   70,   70, 1936,   70,   70, 1937, 1938,   70,
+     1933,   70,   70, 1940,   70,   70, 1941,   70,   70,   70,
+
+       70, 1942, 1945, 1944,   70, 1948,   70, 1947,   70, 1943,
+     1946,   70,   70,   70, 1953,   70,   70, 1949,   70, 1950,
+     1951, 1952, 1958,   70, 1954,   70,   70, 1955,   70, 1962,
+       70,   70,   70,   70,   70, 1960, 1956, 1957, 1966, 1967,
+     1968,   70,   70, 1961, 1959,   70,   70, 1964,   70,   70,
+     1963,   70,   70, 1965, 1969, 1972, 1970, 1971,   70,   70,
+     1976,   70, 1973, 1974, 1977,   70,   70, 1975,   70, 1980,
+     1981,   70,   70, 1983,   70, 1982,   70, 1984, 1985,   70,
+       70, 1978, 1987,   70,   70,   70, 1979, 1990, 1991,   70,
+       70, 1993,   70,   70, 1992, 1986, 1994,   70,   70, 1989,
+
+     1997,   70, 1988,   70, 1996,   70,   70, 1999, 2000,   70,
+     2001,   70,   70,   70,   70, 1995, 2003, 2005,   70, 2002,
+       70,   70,   70,   70,   70, 2008, 1998, 2012,   70,   70,
+       70, 2014,   70, 2016,   70, 2006, 2007, 2004, 2011, 2009,
+       70, 2017, 2010,   70, 2018,   70,   70,   70, 2013, 2015,
+     2019, 2020,   70,   70,   70,   70, 2026,   70,   70,   70,
+       70, 2023, 2027, 2029,   70, 2021, 2340, 2030, 2031,   70,
+       70, 2028,   70, 2022, 2024, 2025, 2034, 2032,   70, 2033,
+     2035,   70, 2036,   70,   70, 2039,   70,   70, 2043,   70,
+     2040,   70, 2037,   70,   70, 2042,   70,   70,   70, 2038,
+
+     2041,   70, 2044,   70,   70, 2050, 2045,   70, 2049, 2047,
+     2051,   70, 2052,   70, 2053, 2055,   70, 2054,   70, 2048,
+     2056, 2046,   70,   70, 2060,   70,   70,   70, 2059,   70,
+       70, 2061, 2062, 2063,   70,   70,   70,   70, 2057, 2068,
+     2066, 2058,   70, 2064,   70,   70, 2070,   70, 2073,   70,
+     2065,   70,   70,   70, 2067,   70, 2075,   70,   70, 2072,
+       70, 2071, 2069, 2080, 2074,   70, 2076,   70, 2079, 2077,
+     2082,   70, 2084,   70, 2078, 2085,   70,   70, 2087,   70,
+       70,   70,   70, 2090,   70,   70, 2083, 2089,   70,   70,
+     2094, 2081,   70,   70, 2097,   70, 2088,   70, 2086, 2098,
+
+       70, 2091,   70,   70,   70,   70, 2095, 2093, 2092, 2104,
+       70, 2099,   70, 2106,   70, 2096, 2102, 2100,   70,   70,
+       70, 2105, 2101, 2109,   70, 2103, 2107, 2110,   70,   70,
+       70, 2112,   70, 2111,   70,   70,   70,   70, 2113, 2108,
+     2114, 2115, 2117, 2116, 2120,   70, 2121,   70,   70, 2118,
+     2119, 2123,   70, 2122,   70,   70,   70, 2127,   70, 2124,
+       70, 2126, 2128,   70, 2129,   70,   70, 2131,   70, 2125,
+       70, 2130,   70, 2134, 2135,   70,   70,   70,   70, 2132,
+     2139,   70,   70,   70,   70, 2142,   70, 2138, 2140, 2145,
+     2136,   70, 2133,   70, 2143,   70, 2141, 2137, 2144,   70,
+
+       70,   70,   70,   70,   70, 2148,   70, 2150,   70,   70,
+       70, 2151,   70, 2146, 2149, 2147,   70,   70,   70, 2162,
+       70, 2340, 2160, 2152, 2163,   70, 2153, 2155, 2154, 2157,
+     2158, 2159, 2156,   70, 2165,   70,   70, 2164, 2161, 2166,
+       70, 2167, 2168,   70,   70, 2170,   70, 2169,   70, 2173,
+       70,   70,   70,   70, 2171,   70, 2175,   70, 2174,   70,
+     2179,   70, 2172, 2180,   70,   70, 2178,   70, 2176, 2181,
+       70,   70, 2183, 2177, 2184, 2187, 2182, 2185, 2186,   70,
+       70,   70,   70,   70,   70,   70, 2194,   70, 2191, 2192,
+     2195,   70, 2196,   70,   70, 2189, 2188, 2197,   70, 2198,
+
+       70,   70,   70, 2190, 2193, 2200,   70, 2201,   70, 2202,
+     2199,   70, 2204,   70, 2203, 2206,   70,   70,   70,   70,
+     2212, 2208,   70, 2210,   70,   70,   70, 2211, 2205,   70,
+       70,   70,   70,   70, 2214, 2207, 2218,   70,   70, 2213,
+       70,   70, 2220,   70,   70, 2209,   70, 2217,   70, 2215,
+     2216, 2225,   70, 2227, 2222, 2224,   70,   70, 2226,   70,
+     2219, 2221,   70,   70,   70,   70, 2223, 2229,   70, 2340,
+     2228, 2236,   70,   70,   70, 2238,   70, 2230, 2231, 2233,
+       70, 2239, 2235, 2237,   70, 2234, 2240,   70, 2232, 2241,
+       70,   70, 2242,   70, 2243,   70,   70, 2248, 2244,   70,
+
+     2245, 2250,   70,   70,   70,   70,   70, 2254,   70, 2246,
+       70, 2247,   70, 2249,   70, 2257, 2258,   70, 2255,   70,
+     2252,   70,   70, 2251, 2253,   70,   70,   70, 2259,   70,
+     2260, 2256, 2265, 2264,   70,   70,   70,   70, 2261,   70,
+     2263,   70,   70,   70, 2270, 2262, 2271, 2340, 2267, 2268,
+     2274,   70, 2275, 2266,   70, 2276, 2269,   70,   70,   70,
+     2272,   70, 2273,   70, 2277, 2281, 2278,   70, 2279, 2283,
+       70,   70, 2282,   70,   70,   70, 2280,   70, 2288,   70,
+       70, 2285,   70, 2291,   70,   70,   70,   70,   70,   70,
+     2294,   70, 2284, 2290, 2286,   70, 2287, 2292, 2289,   70,
+
+     2293, 2340, 2297,   70, 2298, 2295, 2296,   70, 2300,   70,
+     2302,   70, 2299,   70, 2304,   70, 2305, 2301, 2303,   70,
+       70, 2309,   70,   70, 2306, 2312,   70, 2307, 2310,   70,
+     2308, 2311,   70,   70,   70,   70,   70, 2318,   70, 2313,
+     2314, 2316,   70,   70,   70,   70,   70,   70, 2320, 2321,
+       70, 2324,   70, 2315, 2317, 2325,   70,   70, 2328, 2329,
+       70, 2319,   70,   70, 2322, 2323, 2326, 2331,   70, 2330,
+     2333, 2327, 2332,   70,   70,   70,   70,   70, 2340, 2334,
+     2335, 2338,   70, 2339,   70, 2340, 2340, 2340, 2340, 2340,
+     2340, 2340, 2340, 2340, 2340, 2336, 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
     } ;
 
-static yyconst flex_int16_t yy_chk[4583] =
+static yyconst flex_int16_t yy_chk[4630] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1710,7 +1721,7 @@ static yyconst flex_int16_t yy_chk[4583] =
         3,    3,    3,    4,    4,    4,    5,    5,    6,    6,
         5,    3,    6,   20,    4,   20,   20,    5,   20,    6,
         7,    7,    7,    7,   20,    7,    8,    8,    8,    8,
-     2324,    8,    7,    9,    9,    9,   22,   22,    8,   10,
+     2346,    8,    7,    9,    9,    9,   22,   22,    8,   10,
        10,   10,   15,   25,    9,   21,   15,   25,   21,   21,
        10,   11,   11,   11,   11,   11,   11,   19,   51,   19,
 
@@ -1897,316 +1908,321 @@ static yyconst flex_int16_t yy_chk[4583] =
       808,  807,  810,  811,  812,  813,  814,  810,  815,  816,
       816,  817,  813,  809,  818,  820,  819,  134,  811,  823,
       823,  814,  819,  812,  821,  817,  824,  815,  826,  821,
-      825,  824,  818,  827,  828,  820,  827,  825,  829,  830,
-      821,  831,  826,  821,  830,  832,  833,  829,  835,  835,
-      832,  836,  828,  837,  838,  836,  839,  840,  842,  841,
-
-      831,  843,  837,  844,  845,  833,  841,  846,  847,  838,
-      842,  848,  840,  846,  849,  839,  850,  855,  853,  860,
-      843,  852,  845,  847,  844,  850,  857,  852,  854,  859,
-      856,  848,  853,  860,  849,  856,  854,  855,  857,  858,
-      861,  862,  862,  864,  858,  858,  865,  868,  859,  867,
-      867,  866,  868,  861,  863,  865,  864,  866,  873,  863,
-      869,  870,  863,  863,   69,  871,  870,  863,  876,  869,
-      871,  872,  872,  863,  874,  875,  877,  863,  873,  878,
-      875,  879,  876,  874,  880,  878,  881,  879,  882,  880,
-      881,  883,  883,  884,  877,  884,  885,  882,  888,  887,
-
-      889,  890,  882,  887,  882,  892,  882,  885,  882,  891,
-      890,  893,  894,  888,  891,  891,  895,  897,  889,  892,
-      893,  896,  897,  898,  895,  899,  900,  901,  902,  903,
-      903,  894,  904,  902,  899,  896,  908,  898,  905,  905,
-      907,  908,  909,  907,  900,  910,  910,  904,  911,  912,
-      912,  913,  901,  914,  915,  915,  913,  916,  917,  918,
-      919,  909,  922,  917,  920,  919,  923,  918,  911,  920,
-      921,  921,  923,  925,  914,  924,  929,  916,  927,  928,
-      922,  929,  924,  930,  927,  928,  925,  931,  932,  930,
-      933,  934,  934,  935,  936,  937,  931,  938,  941,  940,
-
-      946,  933,  939,  938,  945,  943,  942,  932,  944,  944,
-      941,  947,  948,  935,  936,  950,  939,  948,  937,  940,
-      942,  953,  939,  943,  945,  946,  949,  949,  951,  947,
-      954,  956,  955,  951,  957,  954,  954,  958,  950,  956,
-      953,  955,  959,  960,  961,  960,  966,  959,  957,  963,
-      959,  962,  958,  963,  964,  958,  965,  962,  961,  967,
-      969,  968,  970,  972,  974,  964,  968,  972,  973,  975,
-      976,  979,  966,  977,  978,  965,   63,  967,  969,  983,
-      980,  975,  970,  974,  976,  980,  973,  981,  977,  978,
-      979,  982,  984,  986,  981,  988,  982,  983,  985,  985,
-
-      987,  984,  989,  990,  991,  998,  987,  989,  986,  990,
-      991,  992,  992,  993,  993,  996,  988,  995,  995,  996,
-      997,  999, 1000,  998, 1001, 1002, 1002, 1003, 1004,  997,
-     1006, 1001, 1007, 1005, 1008,  999, 1004, 1000, 1005, 1008,
-     1008, 1010, 1015, 1009, 1006, 1011, 1012, 1003, 1009, 1009,
-     1013, 1007, 1014, 1016, 1017, 1019, 1018, 1020, 1014, 1021,
-     1017, 1010, 1018, 1022, 1011, 1012, 1023, 1024, 1015, 1013,
-     1025,   58, 1016, 1031, 1019, 1028, 1020, 1031, 1021, 1037,
-     1023, 1032, 1022, 1026, 1026, 1025, 1027, 1028, 1024, 1027,
-     1029, 1029, 1030, 1033, 1032, 1034, 1038, 1030, 1035, 1037,
-
-     1035, 1043, 1033, 1041, 1035, 1039, 1039, 1041, 1034, 1040,
-     1044, 1042, 1038, 1045, 1040, 1042, 1046, 1035, 1047, 1047,
-     1049, 1043, 1046, 1058, 1051, 1052, 1052, 1063, 1044, 1051,
-     1053, 1055, 1055, 1045, 1057, 1057, 1053, 1060, 1049, 1058,
-     1060, 1061, 1061, 1062, 1064, 1064, 1065, 1067, 1066, 1068,
-     1068, 1069, 1063, 1066, 1070, 1069, 1071, 1071, 1062, 1072,
-     1065, 1073, 1067, 1074, 1075, 1076, 1079, 1074, 1078, 1078,
-     1076, 1080, 1073, 1082, 1070, 1081, 1081, 1083, 1082, 1084,
-     1085, 1072, 1086, 1075, 1079, 1080, 1087, 1086, 1088, 1085,
-     1088, 1089, 1090, 1091, 1092, 1094, 1089, 1083, 1090, 1084,
-
-     1092, 1095, 1095, 1096, 1097, 1099, 1087, 1100, 1100, 1094,
-     1097, 1101, 1101, 1091, 1102, 1103, 1104, 1105, 1105, 1104,
-     1107, 1106, 1096, 1113, 1240, 1108, 1240, 1111, 1108, 1099,
-     1103, 1108, 1102, 1106, 1110, 1109, 1111, 1112, 1117, 1110,
-     1107, 1109, 1112, 1108, 1114, 1115, 1118, 1114, 1113, 1116,
-     1116, 1115, 1119, 1120, 1123, 1121, 1117, 1122, 1127, 1120,
-     1121, 1124, 1128, 1122, 1126, 1118, 1124, 1125, 1125, 1126,
-     1129, 1130, 1119, 1131, 1132, 1133, 1127, 1123, 1134, 1135,
-     1136, 1137, 1128, 1138, 1134, 1130, 1132, 1131, 1133, 1141,
-     1129, 1140, 1140, 1142, 1145, 1137, 1143, 1143, 1142, 1135,
-
-     1136, 1144, 1146, 1147, 1138, 1148, 1150, 1149, 1145, 1141,
-     1154, 1151, 1152, 1150, 1148, 1156, 1144, 1157, 1157, 1160,
-     1151, 1147, 1149, 1151, 1159, 1154, 1146, 1159, 1152, 1161,
-     1154, 1158, 1158, 1162, 1161, 1163, 1164, 1166, 1160, 1165,
-     1156, 1167, 1168, 1168, 1163, 1169, 1166, 1167, 1165, 1162,
-     1170, 1165, 1171, 1172, 1174, 1164, 1173, 1176, 1177, 1178,
-     1178, 1179, 1180, 1170, 1181, 1169, 1174, 1172, 1184, 1181,
-     1171, 1180, 1173, 1182, 1182, 1183, 1177, 1179, 1188, 1189,
-     1189,   53, 1176, 1187, 1183, 1185, 1184, 1183, 1182, 1187,
-     1185, 1185, 1190, 1195, 1191, 1192, 1188, 1193, 1190, 1191,
-
-     1196, 1192, 1197, 1193, 1201, 1198, 1196, 1203, 1198, 1202,
-     1204, 1205, 1206, 1195, 1198, 1197, 1207, 1202, 1208, 1209,
-     1203, 1212, 1207, 1201, 1218, 1206, 1211, 1211, 1204, 1213,
-     1205, 1214, 1222, 1213, 1208, 1215, 1214, 1209, 1216, 1217,
-     1215, 1212, 1220, 1216, 1221, 1221, 1222, 1218, 1217, 1223,
-     1224, 1225, 1226, 1227, 1228, 1229, 1223, 1220, 1230, 1231,
-     1228, 1233, 1224, 1225, 1233, 1231, 1239, 1229, 1232, 1232,
-     1237, 1226, 1236, 1227, 1234, 1234, 1230, 1236, 1239, 1237,
-     1238, 1238, 1241, 1242, 1245, 1243, 1244, 1246, 1247, 1245,
-     1249, 1248, 1250, 1251, 1252, 1249, 1246, 1253, 1253, 1255,
-
-     1247, 1250, 1241, 1243, 1244, 1242, 1248, 1256, 1257, 1252,
-     1254, 1258, 1258, 1251, 1250, 1259, 1254, 1260, 1260, 1261,
-     1255, 1262, 1262, 1263, 1264, 1267, 1256, 1263, 1257, 1265,
-     1264, 1267, 1265, 1268, 1270, 1259, 1269, 1276, 1271,   52,
-     1261, 1271, 1269, 1272, 1272, 1273, 1273, 1274, 1275, 1277,
-     1278, 1268, 1279, 1274, 1282, 1284, 1278, 1276, 1281, 1270,
-     1275, 1275, 1275, 1281, 1281, 1285, 1284, 1275, 1282, 1277,
-     1286, 1283, 1279, 1283, 1287, 1288, 1286, 1289, 1290, 1290,
-     1285, 1291, 1293, 1287, 1292, 1292, 1294, 1295, 1295, 1296,
-     1296, 1299, 1300, 1301, 1301, 1288, 1302, 1303, 1289, 1305,
-
-     1299, 1304, 1293, 1307, 1303, 1306, 1306, 1291, 1294, 1310,
-     1304, 1302, 1308, 1300, 1310, 1311, 1312, 1313, 1316, 1316,
-     1314, 1311, 1318, 1319, 1313, 1305, 1314, 1315, 1308, 1307,
-     1317, 1318, 1320, 1315, 1321, 1317, 1312, 1322, 1323, 1324,
-     1322, 1325, 1325, 1319, 1326, 1329, 1321, 1330, 1327, 1333,
-     1332, 1320, 1327, 1333, 1334, 1339, 1323, 1335, 1341, 1326,
-     1334, 1337, 1330,   47, 1329, 1324, 1335, 1340, 1327, 1332,
-     1336, 1336, 1337, 1338, 1338, 1347, 1339, 1337, 1341, 1342,
-     1345, 1340, 1343, 1343, 1344, 1342, 1345, 1346, 1348, 1344,
-     1344, 1349, 1351, 1346, 1352, 1353, 1354, 1349, 1352, 1355,
-
-     1348, 1347, 1356, 1357, 1351, 1355, 1358, 1353, 1360, 1357,
-     1364, 1360, 1361, 1361, 1362, 1362, 1363, 1363, 1358, 1365,
-     1366, 1354, 1367, 1368, 1356, 1365, 1366, 1367, 1369, 1368,
-     1364, 1371, 1373, 1374, 1376, 1373, 1371, 1369, 1377, 1378,
-     1378, 1383, 1379, 1380, 1381, 1374, 1376, 1384, 1380, 1381,
-     1377, 1379, 1382, 1382, 1385, 1386, 1384, 1389, 1387, 1388,
-     1394, 1383, 1387, 1389, 1388, 1390, 1392, 1392, 1393, 1394,
-     1401, 1395, 1385, 1399, 1386, 1397, 1397, 1402, 1392, 1390,
-     1395, 1403, 1404, 1405, 1405, 1401, 1393, 1403, 1406, 1399,
-     1406, 1402, 1407, 1407, 1408, 1411, 1410, 1412, 1412, 1404,
-
-     1413, 1414, 1408, 1410, 1415, 1416, 1417, 1418, 1419, 1413,
-     1422, 1425, 1423, 1420, 1426, 1411, 1415, 1416, 1417, 1420,
-     1424, 1424, 1414, 1419, 1423, 1427, 1428, 1429, 1427, 1425,
-     1422, 1428, 1420, 1418, 1426, 1431, 1432, 1433, 1432, 1434,
-     1431, 1435, 1437, 1438, 1434, 1438, 1440, 1429, 1435, 1441,
-     1441, 1437, 1442, 1443, 1444, 1433, 1444, 1445, 1443, 1446,
-     1440, 1447, 1445, 1448, 1446, 1449, 1452, 1450, 1451, 1454,
-     1455, 1449, 1450, 1459, 1452, 1456, 1456, 1458, 1442, 1447,
-       42, 1451, 1461, 1448, 1455, 1457, 1457, 1461, 1454, 1460,
-     1463, 1468, 1458, 1459, 1462, 1460, 1462, 1464, 1464, 1465,
-
-     1465, 1466, 1463, 1467, 1471, 1467, 1469, 1469, 1470, 1473,
-     1466, 1476, 1468, 1466, 1473, 1474, 1471, 1470, 1477, 1478,
-     1474, 1481, 1483, 1479, 1476, 1484, 1485, 1481, 1483, 1486,
-     1488, 1488, 1491, 1487, 1489, 1490, 1490, 1478, 1477, 1479,
-     1481, 1485, 1487, 1489, 1494, 1492, 1497, 1493, 1484, 1492,
-     1495, 1491, 1493, 1496, 1486, 1495, 1495, 1494, 1500, 1500,
-     1502, 1496, 1501, 1501, 1503, 1503, 1497, 1504, 1504, 1502,
-     1505, 1506, 1507, 1513, 1508, 1509, 1509, 1501, 1507, 1508,
-     1510, 1516, 1505, 1512, 1518, 1510, 1514, 1512, 1501, 1506,
-     1514, 1517, 1520, 1513, 1519, 1521, 1517, 1520, 1522, 1523,
-
-     1523, 1524, 1525, 1526, 1527, 1524, 1516, 1518, 1526, 1519,
-     1528, 1531, 1530, 1521, 1522, 1532, 1533, 1525, 1538, 1534,
-     1535, 1536, 1539, 1539, 1540, 1541,   14, 1540, 1543, 1528,
-     1527, 1530, 1535, 1538, 1531, 1533, 1542, 1547, 1541, 1532,
-     1534, 1543, 1536, 1544, 1544, 1545, 1545, 1546, 1546, 1548,
-     1542, 1550, 1547, 1549, 1549, 1551, 1551, 1555, 1556, 1552,
-     1550, 1554, 1548, 1550, 1552, 1560, 1554, 1557, 1558, 1558,
-     1559, 1559, 1561, 1561, 1562, 1563, 1563, 1555, 1556, 1557,
-     1564, 1564, 1565, 1566, 1560, 1568, 1569, 1569, 1570, 1573,
-     1568, 1572, 1562, 1571, 1571, 1573, 1565, 1574, 1575, 1575,
-
-     1574, 1577, 1566, 1576, 1576, 1579, 1578, 1570, 1582, 1572,
-     1580, 1580, 1583, 1585, 1575, 1584, 1589, 1585, 1586, 1586,
-     1577, 1578, 1587, 1591, 1579, 1588, 1588, 1590, 1582, 1593,
-     1584, 1592, 1592, 1596, 1590, 1583, 1589, 1594, 1593, 1594,
-     1598, 1587, 1597, 1599, 1603, 1596, 1600, 1597, 1601, 1591,
-     1602, 1604, 1605, 1601, 1606, 1602, 1599, 1607, 1608, 1603,
-     1604, 1605, 1609, 1606, 1612, 1598, 1607, 1600, 1609, 1610,
-     1614, 1616, 1608, 1610, 1615, 1615, 1618, 1616, 1620, 1614,
-     1617, 1617, 1621, 1623, 1612, 1624, 1630, 1625, 1626, 1617,
-     1664, 1621, 1664, 1620, 1628, 1623, 1618, 1628, 1618, 1629,
-
-     1626, 1624, 1625, 1631, 1629, 1641, 1630, 1632, 1632, 1634,
-     1634, 1635, 1636, 1637, 1639, 1631, 1635, 1641, 1636, 1637,
-     1638, 1638, 1640, 1640, 1642, 1643, 1644, 1644, 1639, 1646,
-     1650, 1647, 1649, 1646, 1647, 1648, 1648, 1649, 1642, 1651,
-     1652, 1653, 1654, 1655, 1643, 1653, 1656, 1657, 1655, 1658,
-     1650, 1661, 1656, 1657, 1652, 1660, 1661, 1662, 1663, 1651,
-     1667, 1670, 1654, 1662, 1668, 1668, 1663, 1658, 1675, 1669,
-     1677, 1660, 1669, 1673, 1667, 1671, 1671, 1673, 1674, 1677,
-     1675, 1676, 1676, 1682, 1674, 1680, 1680, 1670, 1685, 1686,
-     1687, 1687, 1691, 1685, 1686, 1689, 1689, 1693, 1691, 1692,
-
-     1692, 1682, 1694, 1695, 1697, 1698, 1699, 1699, 1695, 1701,
-     1702, 1703, 1704, 1693, 1706, 1706, 1702, 1698, 1701, 1708,
-     1708, 1709, 1709, 1697, 1694, 1710, 1711, 1704, 1711, 1703,
-     1710, 1712, 1713, 1714, 1715, 1715, 1716, 1716, 1714, 1717,
-     1717, 1718, 1719, 1720, 1720, 1712, 1713, 1721, 1723, 1722,
-     1724, 1725, 1726, 1718, 1727, 1723, 1729, 1726, 1730, 1721,
-     1719, 1722, 1724, 1728, 1728, 1729, 1731, 1732, 1733, 1734,
-     1736, 1725, 1735, 1735, 1727, 1737, 1738, 1739, 1740, 1736,
-     1732, 1740, 1741, 1734, 1730, 1742, 1731, 1744, 1744, 1743,
-     1742, 1749, 1733, 1737, 1743, 1750, 1741, 1751, 1738, 1753,
-
-     1739, 1745, 1745, 1746, 1746, 1754, 1750, 1755, 1756, 1749,
-     1758, 1757, 1763, 1759, 1760, 1760, 1751, 1762, 1762, 1753,
-     1757, 1763, 1764, 1754, 1766, 1765, 1767, 1768, 1756, 1755,
-     1758, 1759, 1765, 1769, 1770, 1771, 1771, 1772, 1772, 1766,
-     1764, 1773, 1774, 1775, 1767, 1768, 1776, 1773, 1778, 1769,
-     1777, 1779, 1780, 1770, 1781, 1777, 1781, 1780, 1775, 1786,
-     1774, 1782, 1782, 1788, 1783, 1776, 1783, 1789, 1778, 1784,
-     1784, 1779, 1788, 1790, 1793, 1796, 1794, 1797, 1786, 1794,
-     1795, 1795, 1798, 1798, 1799, 1801, 1804, 1789, 1799, 1802,
-     1796, 1809, 1790, 1802, 1793, 1797, 1803, 1803, 1817, 1804,
-
-     1801, 1806, 1806, 1808, 1808, 1810, 1810, 1811, 1812, 1812,
-     1809, 1818, 1811, 1816, 1816, 1821, 1819, 1820, 1822, 1823,
-     1817, 1824, 1820, 1822, 1818, 1819, 1825, 1823, 1827, 1821,
-     1828, 1829, 1830,   13, 1825, 1828, 1829, 1831, 1831, 1833,
-     1824, 1832, 1832, 1827, 1834, 1835, 1833, 1830, 1836, 1834,
-     1838, 1835, 1839, 1836, 1837, 1837, 1844, 1839, 1840, 1840,
-     1841, 1841, 1845, 1863, 1863, 1838, 1846, 1845, 1845, 1844,
-     1847, 1846, 1848, 1849, 1850, 1847, 1851, 1849, 1848, 1850,
-     1852, 1853, 1854, 1857, 1855, 1851, 1857, 1854, 1858, 1853,
-     1859, 1860, 1861, 1858, 1862, 1852, 1855, 1864, 1867, 1868,
-
-     1873, 1861, 1869, 1862, 1860, 1871, 1864, 1872, 1859, 1870,
-     1870, 1874, 1874, 1875, 1877, 1873, 1872, 1867, 1879, 1868,
-        0, 1869, 1880, 1887, 1871, 1881, 1880, 1882, 1882, 1877,
-     1884, 1881, 1875, 1883, 1886, 1884, 1887, 1890, 1879, 1891,
-     1889, 1883, 1898, 1886, 1889, 1893, 1893, 1896, 1896, 1900,
-        0, 1890, 1901, 1901, 1891, 1902, 1902, 1903, 1904, 1904,
-     1903, 1907, 1898, 1905, 1905, 1906, 1906, 1908, 1908, 1900,
-     1909, 1910, 1911, 1912, 1912, 1913, 1907, 1916, 1911, 1913,
-     1917, 1918, 1916, 1916, 1919, 1910, 1920, 1918, 1909, 1921,
-     1919, 1922, 1922, 1921, 1925, 1926, 1928, 1929, 1926, 1925,
-
-     1929, 1930, 1931, 1917, 1932, 1933, 1934, 1931, 1935, 1935,
-     1936, 1920, 1938, 1939, 1939, 1937, 1940, 1940, 1930, 1930,
-     1934, 1928, 1932, 1937, 1942, 1933, 1941, 1941, 1943, 1936,
-     1944, 1938, 1945, 1943, 1946, 1947, 1948, 1950, 1950, 1951,
-     1942, 1952, 1951, 1946, 1954, 1954, 1955, 1956, 1956, 1957,
-     1944, 1958, 1960, 1955, 1957, 1947, 1948, 1963, 1945, 1952,
-     1958, 1961, 1961, 1962, 1964, 1966, 1963, 1962, 1965, 1973,
-     1960, 1967, 1970, 1965, 1965, 1969, 1969, 1971, 1966, 1964,
-     1967, 1970, 1977, 1975, 1981, 1979, 1980, 1980, 1988, 1971,
-     1979, 1983, 1996, 1981, 1973, 1975, 1983, 1984, 1984, 1986,
-
-     1986, 1984, 1987, 1977, 1989, 1990, 1992, 1995, 1988, 1993,
-     1990, 1987, 1992, 1996, 1993, 1994, 1994, 1997, 1998, 2000,
-     1999, 2003, 1997, 1989, 2004, 1995, 1999, 2001, 2001, 2005,
-     2005, 2007, 2006, 2008, 2009, 2007, 1998, 2010, 2011, 2004,
-     2003, 2013, 2008, 2012, 2000, 2006, 2011, 2015, 2012, 2020,
-     2009, 2014, 2014, 2017, 2017, 2023, 2010, 2018, 2018, 2022,
-     2022, 2026, 2026, 2024, 2027, 2028, 2015, 2013, 2024, 2032,
-     2020, 2023, 2029, 2031, 2031, 2034, 2035, 2035, 2036, 2036,
-     2037, 2038, 2040, 2032, 2027, 2039, 2041, 2043, 2028, 2037,
-     2043, 2029, 2042, 2042, 2040, 2044, 2044, 2034, 2046, 2047,
-
-     2050, 2038, 2048, 2050, 2039, 2051, 2041, 2055, 2048, 2053,
-     2046, 2049, 2049, 2054, 2053, 2056, 2057, 2061, 2054, 2047,
-     2280, 2056, 2280, 2051, 2058, 2058, 2055, 2060, 2060, 2063,
-     2063, 2065, 2064, 2057, 2057, 2066, 2061, 2064, 2067, 2067,
-     2066, 2068, 2068, 2069, 2069, 2065, 2070, 2072, 2072, 2075,
-     2077, 2070, 2078, 2078, 2080, 2080, 2081, 2082, 2083, 2084,
-     2084, 2085, 2088, 2089, 2094, 2090, 2085, 2083, 2075, 2089,
-     2081, 2095, 2077, 2090, 2091, 2091, 2088, 2082, 2092, 2100,
-     2096, 2097, 2098, 2092, 2094, 2096, 2101, 2100, 2098, 2102,
-     2103, 2095, 2107, 2097, 2104, 2105, 2106, 2107, 2110, 2112,
-
-     2112, 2113, 2113, 2114, 2118, 2118, 2101, 2114, 2103, 2102,
-     2104, 2125, 2105, 2105, 2120, 2120, 2126, 2106, 2110, 2121,
-     2121, 2122, 2121, 2124, 2124, 2122, 2128, 2128, 2129, 2125,
-     2126, 2131, 2130, 2133, 2134, 2129, 2130, 2135, 2135, 2136,
-     2136, 2137, 2137, 2134, 2138, 2139, 2131, 2140, 2140, 2141,
-     2139, 2133, 2142, 2143, 2144, 2141, 2145, 2146, 2158, 2138,
-     2147, 2145, 2146, 2148, 2148, 2151, 2151, 2158, 2143, 2154,
-     2154, 2155, 2155, 2156, 2156, 2144, 2162, 2142, 2163, 2147,
-     2159, 2159, 2161, 2161, 2164, 2164, 2165, 2166, 2166, 2169,
-     2163, 2162, 2170, 2172, 2173, 2170, 2172, 2174, 2175, 2176,
-
-     2173, 2165, 2177, 2175, 2187, 2178, 2184, 2169, 2188, 2184,
-     2189, 2174, 2188, 2192, 2190, 2193, 2194, 2194, 2176, 2195,
-     2177, 2178, 2196, 2198, 2197, 2199, 2193, 2187, 2190, 2200,
-     2189, 2201, 2195, 2202, 2203, 2203, 2192, 2204, 2211, 2198,
-     2208, 2196, 2197, 2208, 2200, 2212, 2204, 2202, 2205, 2205,
-     2199, 2201, 2206, 2206, 2207, 2207, 2209, 2210, 2213, 2214,
-     2212, 2209, 2210, 2211, 2213, 2215, 2215, 2216, 2218, 2220,
-     2222, 2223, 2227, 2214, 2224, 2225, 2228, 2226, 2222, 2230,
-     2224, 2225, 2231, 2218, 2232, 2227, 2216, 2220, 2232, 2233,
-     2223, 2226, 2234, 2235, 2233, 2228, 2231, 2236, 2237, 2230,
-
-     2238, 2240, 2239, 2241,    0, 2238, 2235, 2239, 2242, 2242,
-     2236, 2234, 2243, 2244, 2244, 2245, 2246, 2237, 2243, 2240,
-     2245, 2246, 2241, 2247, 2248, 2249, 2253, 2250, 2247, 2251,
-     2251, 2249, 2250, 2254, 2255, 2256, 2257, 2258, 2259, 2263,
-     2254, 2270, 2257, 2248, 2263, 2253, 2260, 2260, 2262, 2264,
-     2265, 2259, 2266, 2255, 2256, 2272, 2258, 2262, 2267, 2267,
-     2262, 2268, 2269, 2271, 2271, 2266, 2268, 2270, 2264, 2265,
-     2273, 2273, 2274, 2274, 2272, 2269, 2275, 2276, 2277, 2278,
-     2278, 2275, 2279, 2282, 2276, 2281, 2281, 2279, 2283, 2284,
-     2282, 2285, 2286, 2288, 2288, 2283, 2285, 2277, 2289, 2291,
-
-     2292, 2293, 2294, 2298, 2291, 2292, 2295, 2295, 2284, 2297,
-     2297, 2286, 2299, 2300, 2300, 2301, 2301, 2289, 2302, 2312,
-     2293, 2294, 2298, 2304, 2304, 2302, 2305, 2305, 2306, 2308,
-     2313, 2299, 2311,    0, 2308, 2306,    0, 2311, 2312, 2314,
-     2314, 2315, 2315,    0,    0,    0,    0,    0,    0, 2313,
-     2319, 2319, 2319, 2319, 2319, 2319, 2319, 2320, 2320, 2320,
-     2320, 2320, 2320, 2320, 2321, 2321, 2321, 2321, 2321, 2321,
-     2321, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2323, 2323,
-     2323, 2323, 2323, 2323, 2323, 2325, 2325,    0, 2325, 2325,
-     2325, 2325, 2326, 2326,    0,    0,    0, 2326, 2326, 2327,
-
-     2327,    0,    0, 2327,    0, 2327, 2328,    0,    0,    0,
-        0,    0, 2328, 2329, 2329,    0,    0,    0, 2329, 2329,
-     2330,    0,    0,    0,    0,    0, 2330, 2331, 2331,    0,
-     2331, 2331, 2331, 2331, 2332, 2332,    0, 2332, 2332, 2332,
-     2332, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318,
-     2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318,
-     2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318,
-     2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318,
-     2318, 2318
+      825,  824,  818,  827,  828,  820,  827,  825,  821,  829,
+      821,  830,  826,  821,  831,  832,  830,  833,  829,  837,
+      832,  836,  828,  835,  835,  836,  838,  839,  837,  840,
+
+      841,  842,  843,  831,  844,  845,  833,  841,  848,  846,
+      849,  838,  847,  842,  840,  846,  839,  850,  852,  853,
+      855,  843,  857,  845,  852,  844,  850,  847,  848,  854,
+      849,  856,  859,  853,  857,  860,  856,  854,  858,  861,
+      855,  862,  862,  858,  858,  865,  864,  867,  867,  860,
+      866,  859,  861,  863,  865,  868,  866,  873,  863,  864,
+      868,  863,  863,  870,  869,  871,  863,  876,  870,  874,
+      871,  877,  863,  869,  872,  872,  863,  873,  874,  875,
+      878,  876,  879,  881,  875,  880,  878,  881,  879,  877,
+      880,  882,  883,  883,  884,  885,  884,  887,  888,  889,
+
+      882,  887,  894,  890,  892,  882,  885,  882,  896,  882,
+      891,  882,  890,  888,  893,  891,  891,  889,  892,  895,
+      897,  894,  896,  893,  898,  897,  899,  895,  900,  901,
+      904,  902,  903,  903,  907,  899,  902,  907,  898,  905,
+      905,  909,  908,  910,  910,  904,  900,  908,  911,  912,
+      912,  913,  914,  918,  901,  916,  913,  915,  915,  917,
+      909,  918,  919,  922,  917,  920,  925,  919,  911,  924,
+      920,  921,  921,  914,  923,  916,  924,  927,  928,  925,
+      923,  922,  929,  927,  928,  930,  931,  929,  932,  933,
+      935,  930,  934,  934,  936,  931,  937,  938,  939,  941,
+
+      933,  940,  942,  938,  943,  944,  944,  932,  945,  946,
+      935,  941,  939,  947,  936,  948,  942,  950,  939,  937,
+      948,  940,  943,  949,  949,  951,  953,  954,  945,  955,
+      951,  947,  954,  954,  946,  956,  957,  958,  955,  959,
+      950,  960,  961,  956,  961,  953,  960,  962,  967,  960,
+      957,  964,  958,  963,  959,  964,  965,  959,  966,  963,
+      968,  962,  970,  969,  971,  973,  975,  965,  969,  973,
+      974,  976,  977,  980,  967,  978,  979,  966,  968,  984,
+      970,  989,  981,  976,  971,  975,  977,  981,  974,  982,
+      978,  979,  980,  983,  985,  987,  982,  984,  983,  986,
+
+      986,  988,  989,  985,  990,  991,  992,  988,  999,  990,
+      987,  991,  992,  993,  993,  994,  994,  996,  996,  997,
+      998, 1000, 1001,  997, 1002, 1004,  999, 1003, 1003,  998,
+     1005, 1002, 1007, 1008, 1006, 1000, 1009, 1001, 1005, 1006,
+     1011, 1009, 1009, 1010, 1012, 1004, 1007, 1013, 1010, 1010,
+     1014, 1015, 1008, 1016, 1017, 1018, 1019, 1015, 1020, 1021,
+     1011, 1018, 1019, 1012, 1022, 1023, 1013, 1024, 1025, 1014,
+     1026, 1027, 1027, 1017, 1029, 1030, 1030, 1020, 1021, 1016,
+       69, 1024, 1038, 1022, 1023, 1026, 1029, 1028, 1031, 1025,
+     1028, 1032, 1033, 1031, 1034, 1032, 1035, 1039, 1036, 1044,
+
+     1036, 1046, 1038, 1034, 1036, 1033, 1040, 1040, 1042, 1035,
+     1041, 1045, 1042, 1039, 1043, 1041, 1047, 1036, 1043, 1044,
+     1050, 1046, 1047, 1048, 1048, 1052, 1053, 1053, 1054, 1045,
+     1052, 1056, 1056, 1059, 1054, 1058, 1058, 1061, 1050, 1063,
+     1061, 1062, 1062, 1064, 1065, 1065, 1066, 1067, 1068, 1059,
+     1069, 1069, 1067, 1070, 1063, 1071, 1073, 1070, 1072, 1072,
+     1066, 1074, 1075, 1068, 1076, 1077, 1075, 1080, 1064, 1084,
+     1077, 1085, 1074, 1079, 1079, 1071, 1081, 1083, 1073, 1082,
+     1082, 1087, 1083, 1076, 1086, 1080, 1087, 1088, 1092, 1084,
+     1081, 1085, 1089, 1086, 1089, 1090, 1091, 1093, 1095, 1097,
+
+     1090, 1100, 1091, 1093, 1096, 1096, 1103, 1088, 1092, 1098,
+     1101, 1101, 1095, 1102, 1102, 1098, 1104, 1105, 1097, 1106,
+     1103, 1108, 1106, 1107, 1107, 1100, 1109, 1115, 1118, 1118,
+     1111, 1113, 1105, 1108, 1104, 1110, 1111, 1112, 1110, 1114,
+     1113, 1110, 1112, 1117, 1114, 1116, 1109, 1119, 1116, 1117,
+     1120, 1121, 1115, 1110, 1122, 1125, 1123, 1124, 1129, 1126,
+     1122, 1123, 1130, 1124, 1126, 1119, 1127, 1127, 1128, 1120,
+     1131, 1121, 1132, 1128, 1133, 1134, 1129, 1136, 1125, 1135,
+     1137, 1138, 1130, 1136, 1139, 1140, 1132, 1134, 1133, 1143,
+     1131, 1144, 1135, 1142, 1142, 1146, 1144, 1147, 1139, 1148,
+
+     1137, 1138, 1145, 1145, 1149, 1150, 1140, 1153, 1152, 1143,
+     1146, 1147, 1151, 1154, 1150, 1152, 1153, 1156, 1158, 1153,
+     1159, 1159, 1149, 1148, 1160, 1160, 1162, 1151, 1161, 1154,
+     1163, 1161, 1156, 1164, 1166, 1163, 1169, 1156, 1165, 1167,
+     1171, 1168, 1169, 1158, 1172, 1162, 1173, 1165, 1167, 1164,
+     1168, 1167, 1174, 1166, 1170, 1170, 1175, 1172, 1176, 1178,
+     1171, 1179, 1180, 1180, 1173, 1181, 1174, 1182, 1183, 1186,
+     1176, 1185, 1175, 1183, 1184, 1184, 1182, 1190,   63, 1179,
+     1185, 1181, 1189, 1185, 1178, 1187, 1197, 1186, 1189, 1184,
+     1187, 1187, 1191, 1191, 1192, 1190, 1193, 1194, 1195, 1198,
+
+     1192, 1193, 1199, 1194, 1195, 1198, 1197, 1200, 1203, 1204,
+     1200, 1205, 1206, 1207, 1209, 1199, 1200, 1204, 1208, 1210,
+     1209, 1211, 1213, 1213, 1205, 1214,   58, 1203, 1220, 1215,
+     1206, 1208, 1207, 1215, 1224, 1210, 1216, 1217, 1218, 1211,
+     1219, 1216, 1217, 1218, 1222, 1214, 1223, 1223, 1224, 1219,
+     1225, 1220, 1226, 1227, 1228, 1229, 1230, 1225, 1231, 1222,
+     1232, 1233, 1230, 1235, 1226, 1227, 1235, 1233, 1234, 1234,
+     1231, 1236, 1236, 1228, 1238, 1229, 1239, 1241, 1232, 1238,
+     1240, 1240, 1242, 1243, 1242, 1239, 1243, 1244, 1245, 1241,
+     1246, 1247, 1248, 1249, 1250, 1252, 1251, 1248, 1254, 1255,
+
+     1252, 1258, 1249, 1253, 1256, 1256, 1250, 1244, 1246, 1247,
+     1245, 1251, 1253, 1257, 1255, 1259, 1260, 1262, 1254, 1257,
+     1261, 1261, 1258, 1263, 1263, 1253, 1264, 1265, 1265, 1266,
+     1271, 1273, 1267, 1266, 1259, 1270, 1260, 1262, 1267, 1268,
+     1272, 1270, 1268, 1275, 1275, 1279, 1272, 1264, 1271, 1274,
+     1276, 1276, 1274, 1277, 1278, 1280, 1273, 1281, 1282, 1277,
+     1285, 1287, 1292, 1281, 1284, 1279, 1278, 1278, 1278, 1284,
+     1284, 1288, 1287, 1278, 1285, 1280, 1289, 1286, 1282, 1286,
+     1290, 1291, 1289, 1292, 1293, 1293, 1288, 1294, 1296, 1290,
+     1295, 1295, 1297, 1298, 1298, 1299, 1299, 1302, 1303, 1304,
+
+     1304, 1291, 1305, 1306, 1308, 1310, 1302, 1307, 1296, 1311,
+     1306, 1309, 1309, 1294, 1297, 1313, 1307, 1305, 1314, 1303,
+     1313, 1315, 1316, 1320, 1314, 1311, 1317, 1318, 1320, 1316,
+     1308, 1310, 1317, 1318, 1319, 1319, 1321, 1322, 1324, 1323,
+     1325, 1315, 1326, 1325, 1327, 1321, 1328, 1328, 1329, 1330,
+     1324, 1333, 1332, 1330, 1335, 1336, 1337, 1322, 1323, 1336,
+     1326, 1340, 1337, 1329, 1342, 1338, 1333, 1339, 1339, 1330,
+     1327, 1332, 1340, 1335, 1338, 1341, 1341, 1340, 1343, 1344,
+     1345, 1346, 1346, 1347, 1348, 1342, 1345, 1349, 1347, 1347,
+     1348, 1350, 1343, 1349, 1351, 1352, 1354, 1356, 1355, 1344,
+
+     1357, 1352, 1355, 1361, 1358, 1359, 1351, 1360, 1354, 1356,
+     1358, 1363, 1367, 1360, 1363, 1361,   53, 1350, 1364, 1364,
+     1365, 1365, 1366, 1366, 1368, 1357, 1370, 1359, 1369, 1371,
+     1368, 1370, 1367, 1372, 1369, 1371, 1374, 1376, 1377, 1379,
+     1376, 1374, 1372, 1380, 1381, 1382, 1382, 1383, 1384, 1381,
+     1377, 1379, 1385, 1384, 1387, 1380, 1383, 1385, 1386, 1386,
+     1388, 1389, 1390, 1391, 1394, 1392, 1393, 1391, 1397, 1388,
+     1392, 1398, 1393, 1399, 1387, 1396, 1396, 1403, 1394, 1389,
+     1398, 1390, 1399, 1401, 1401, 1405, 1397, 1396, 1406, 1407,
+     1408, 1409, 1409, 1403, 1410, 1407, 1410, 1411, 1411, 1414,
+
+     1405, 1412, 1406, 1415, 1416, 1416, 1414, 1408, 1417, 1412,
+     1418, 1422, 1419, 1420, 1421, 1423, 1424, 1417, 1426,   52,
+     1427, 1429, 1424, 1415, 1419, 1420, 1421, 1428, 1428, 1430,
+     1423, 1418, 1427, 1431, 1433, 1424, 1431, 1422, 1426, 1429,
+     1432, 1435, 1436, 1437, 1436, 1432, 1435, 1438, 1439, 1430,
+     1441, 1442, 1438, 1442, 1433, 1439, 1444, 1445, 1445, 1441,
+     1446, 1437, 1447, 1448, 1449, 1448, 1450, 1447, 1452, 1449,
+     1444, 1450, 1451, 1453, 1455, 1454, 1456, 1458, 1459, 1453,
+     1454, 1460, 1460, 1462, 1456, 1463, 1446, 1455, 1452, 1464,
+     1451, 1467, 1459, 1461, 1461, 1464, 1458, 1465, 1462, 1466,
+
+     1472, 1466, 1465, 1467, 1470, 1463, 1468, 1468, 1469, 1469,
+     1471, 1474, 1471, 1470, 1473, 1473, 1470, 1475, 1477, 1478,
+     1474, 1472, 1480, 1477, 1478, 1481, 1482, 1483, 1485, 1475,
+     1487, 1488, 1490, 1489, 1485, 1480, 1487, 1491, 1492, 1492,
+     1493, 1494, 1494, 1483, 1482, 1481, 1491, 1485, 1489, 1493,
+     1495, 1496, 1498, 1497, 1488, 1496, 1499, 1490, 1497, 1500,
+     1501, 1499, 1499, 1504, 1504, 1498, 1506, 1500, 1521, 1495,
+     1505, 1505, 1507, 1507, 1509, 1506, 1508, 1508, 1511, 1510,
+     1501, 1518, 1512, 1523, 1511, 1505, 1509, 1512, 1513, 1513,
+     1514, 1532, 1515, 1521, 1524, 1514, 1505, 1510, 1515, 1517,
+
+     1519, 1518, 1522, 1517, 1519, 1525, 1523, 1522, 1526, 1524,
+     1525, 1527, 1528, 1528, 1529, 1530, 1531, 1532, 1529, 1533,
+     1535, 1531, 1536, 1537, 1538, 1539, 1526, 1527, 1540, 1541,
+     1530, 1544, 1544, 1543, 1545, 1595, 1546, 1545, 1533, 1535,
+     1540, 1547, 1595, 1538, 1548, 1536, 1539, 1537, 1543, 1546,
+     1541, 1549, 1549, 1550, 1550, 1547, 1552, 1548, 1551, 1551,
+     1553, 1554, 1554, 1555, 1556, 1556, 1560, 1561, 1562, 1557,
+     1565, 1552, 1555, 1553, 1557, 1555, 1559, 1563, 1563, 1567,
+     1562, 1559, 1564, 1564, 1566, 1566, 1560, 1561, 1570, 1565,
+     1568, 1568, 1569, 1569, 1571, 1573, 1575, 1567, 1574, 1574,
+
+     1573, 1577, 1570, 1576, 1576, 1578, 1579, 1580, 1580, 1579,
+     1582, 1578, 1583, 1571, 1584, 1575, 1581, 1581, 1587, 1577,
+     1585, 1585, 1588, 1580, 1589, 1592, 1590, 1583, 1594, 1582,
+     1590, 1591, 1591, 1584, 1593, 1593, 1596, 1598, 1587, 1589,
+     1597, 1597, 1601, 1603, 1592, 1588, 1598, 1599, 1594, 1599,
+     1602, 1604, 1605, 1606, 1601, 1602, 1607, 1608, 1606,   47,
+     1609, 1607, 1596, 1613, 1604, 1610, 1611, 1612, 1603, 1609,
+     1617, 1619, 1608, 1605, 1610, 1611, 1612, 1613, 1614, 1615,
+     1619, 1620, 1620, 1615, 1614, 1621, 1622, 1622, 1623, 1625,
+     1617, 1621, 1626, 1628, 1630, 1622, 1629, 1633, 1634, 1631,
+
+     1633, 1626, 1635, 1634, 1625, 1628, 1636,   42, 1623, 1630,
+     1623, 1631, 1629, 1637, 1637, 1639, 1639, 1640, 1636, 1641,
+     1640, 1642, 1635, 1643, 1641, 1644, 1644, 1642, 1645, 1643,
+     1646, 1646, 1647, 1648, 1649, 1650, 1650, 1652, 1654, 1654,
+     1653, 1652, 1645, 1653, 1647, 1655, 1656, 1648, 1657, 1658,
+     1655, 1659, 1660, 1649, 1661, 1659, 1662, 1664, 1663, 1661,
+     1666, 1668, 1662, 1658, 1663, 1667, 1656, 1668, 1657, 1669,
+     1667, 1670, 1660, 1670, 1673, 1664, 1666, 1669, 1674, 1674,
+     1675, 1676, 1679, 1675, 1677, 1677, 1679, 1680, 1673, 1681,
+     1682, 1682, 1688, 1680, 1683, 1686, 1686, 1691, 1699, 1692,
+
+     1700, 1681, 1691, 1683, 1692, 1693, 1693, 1676, 1695, 1695,
+     1688, 1697, 1698, 1698, 1699, 1701, 1703, 1697, 1704, 1707,
+     1701, 1708, 1700, 1705, 1705, 1709, 1710, 1708, 1707,   14,
+     1704, 1712, 1712, 1714, 1714, 1703, 1715, 1715, 1717, 1716,
+     1717, 1710, 1718, 1709, 1716, 1719, 1720, 1721, 1721, 1722,
+     1722, 1720, 1723, 1723, 1724, 1725, 1718, 1726, 1726, 1719,
+     1727, 1729, 1728, 1730, 1731, 1732, 1724, 1733, 1729, 1735,
+     1732, 1736, 1727, 1725, 1728, 1730, 1734, 1734, 1735, 1737,
+     1738, 1739, 1740, 1742, 1731, 1741, 1741, 1733, 1743, 1744,
+     1745, 1746, 1742, 1738, 1746, 1747, 1740, 1736, 1748, 1737,
+
+     1750, 1750, 1749, 1748, 1756, 1739, 1743, 1749, 1758, 1747,
+     1757, 1744, 1760, 1745, 1751, 1751, 1752, 1752, 1755, 1755,
+     1761, 1757, 1756, 1762, 1763, 1764, 1765, 1758, 1770, 1766,
+     1767, 1767, 1760, 1771, 1764, 1769, 1769, 1770, 1761, 1773,
+     1774, 1772, 1775, 1776, 1763, 1762, 1765, 1766, 1772, 1777,
+     1782, 1771, 1778, 1778, 1773, 1779, 1779, 1780, 1774, 1776,
+     1775, 1781, 1783, 1780, 1784, 1782, 1785, 1786, 1777, 1784,
+     1787, 1788, 1790, 1788, 1790, 1787, 1789, 1789, 1793, 1781,
+     1795, 1783, 1791, 1791, 1796, 1800, 1785, 1786, 1797, 1795,
+     1801, 1802, 1802, 1801, 1803, 1804, 1806, 1793, 1805, 1805,
+
+     1806, 1808, 1809, 1816, 1796, 1800, 1809, 1797, 1811, 1803,
+     1810, 1810, 1824, 1804, 1813, 1813, 1808, 1815, 1815, 1817,
+     1817, 1811, 1816, 1818, 1819, 1819, 1823, 1823, 1818, 1825,
+     1826, 1827, 1828, 1829, 1824, 1830, 1827, 1831, 1829, 1826,
+     1832,   13, 1825, 1830, 1834, 1835, 1828, 1836, 1832, 1837,
+     1835, 1845, 1836, 1838, 1838, 1840, 1831, 1839, 1839, 1834,
+     1841, 1842, 1840, 1843, 1837, 1841, 1845, 1842, 1843, 1844,
+     1844, 1846, 1847, 1847, 1848, 1848, 1846, 1851, 1852, 1853,
+     1856, 1852, 1854, 1855, 1853, 1853, 1856, 1854, 1855, 1857,
+     1851, 1858, 1859, 1857, 1860, 1861, 1858, 1862, 1863, 1867,
+
+     1866, 1859, 1862, 1861, 1865, 1866, 1868, 1865, 1875, 1860,
+     1863, 1869, 1870, 1871, 1871, 1872, 1876, 1867, 1877, 1868,
+     1869, 1870, 1878, 1878, 1872, 1879, 1880, 1875, 1881, 1882,
+     1882, 1883, 1885, 1887, 1888, 1880, 1876, 1877, 1888, 1889,
+     1890, 1890, 1895, 1881, 1879, 1889, 1891, 1885, 1894, 1898,
+     1883, 1892, 1899, 1887, 1891, 1895, 1892, 1894, 1897, 1901,
+     1901, 1906, 1897, 1898, 1904, 1904, 1908, 1899, 1909, 1909,
+     1910, 1910, 1911, 1912, 1912, 1911, 1913, 1913, 1914, 1914,
+     1915, 1906, 1916, 1916, 1917, 1918, 1908, 1919, 1920, 1920,
+     1921, 1924, 1925, 1919, 1921, 1915, 1924, 1924, 1926, 1918,
+
+     1927, 1928, 1917, 1929, 1926, 1933, 1927, 1929, 1930, 1930,
+     1933, 1934, 1937, 1935, 1938, 1925, 1935, 1938, 1939, 1934,
+     1940, 1941, 1942, 1946, 1943, 1940, 1928, 1944, 1944, 1945,
+     1947, 1946, 1948, 1948, 1951, 1939, 1939, 1937, 1943, 1941,
+     1949, 1949, 1942, 1950, 1950, 1953, 1952, 1954, 1945, 1947,
+     1951, 1952, 1955, 1961, 1956, 1957, 1959, 1959, 1969, 1960,
+     1964, 1955, 1960, 1963, 1963, 1953,    0, 1964, 1965, 1965,
+     1967, 1961, 1966, 1954, 1956, 1957, 1969, 1966, 1971, 1967,
+     1970, 1970, 1971, 1972, 1973, 1974, 1976, 1975, 1978, 1978,
+     1974, 1974, 1972, 1979, 1980, 1976, 1982, 1984, 1986, 1973,
+
+     1975, 1990, 1979, 1988, 1989, 1989, 1980, 1992, 1988, 1984,
+     1990, 1996, 1992, 1993, 1993, 1995, 1995, 1993, 1997, 1986,
+     1996, 1982, 1998, 1999, 2001, 2005, 2002, 2003, 1999, 2006,
+     2001, 2002, 2003, 2004, 2004, 2007, 2008, 2010, 1997, 2009,
+     2007, 1998, 2013, 2005, 2014, 2009, 2011, 2011, 2015, 2015,
+     2006, 2016, 2017, 2019, 2008, 2020, 2017, 2018, 2022, 2014,
+     2021, 2013, 2010, 2022, 2016, 2023, 2018, 2025, 2021, 2019,
+     2024, 2024, 2027, 2027, 2020, 2028, 2028, 2030, 2032, 2032,
+     2033, 2037, 2034, 2036, 2036, 2038, 2025, 2034, 2039, 2041,
+     2041, 2023, 2042, 2044, 2045, 2045, 2033, 2048, 2030, 2046,
+
+     2046, 2037, 2047, 2049, 2050, 2051, 2042, 2039, 2038, 2052,
+     2052, 2047, 2054, 2054, 2056, 2044, 2050, 2048, 2053, 2057,
+     2062, 2053, 2049, 2058, 2066, 2051, 2056, 2059, 2059, 2058,
+     2060, 2061, 2068, 2060, 2072, 2064, 2065, 2061, 2062, 2057,
+     2064, 2065, 2067, 2066, 2069, 2069, 2071, 2071, 2067, 2068,
+     2068, 2074, 2074, 2072, 2075, 2076, 2077, 2078, 2078, 2075,
+     2086, 2077, 2079, 2079, 2080, 2080, 2081, 2083, 2083, 2076,
+     2088, 2081, 2089, 2089, 2091, 2091, 2092, 2093, 2094, 2086,
+     2095, 2095, 2099, 2096, 2103, 2100, 2101, 2094, 2096, 2103,
+     2092, 2100, 2088, 2105, 2101, 2106, 2099, 2093, 2102, 2102,
+
+     2107, 2109, 2108, 2111, 2112, 2107, 2113, 2109, 2114, 2115,
+     2118, 2111, 2117, 2105, 2108, 2106, 2116, 2119, 2122, 2124,
+     2124,    0, 2119, 2112, 2125, 2125, 2113, 2115, 2114, 2117,
+     2117, 2118, 2116, 2126, 2130, 2130, 2137, 2126, 2122, 2132,
+     2132, 2133, 2133, 2134, 2133, 2136, 2136, 2134, 2138, 2140,
+     2140, 2141, 2142, 2143, 2137, 2145, 2142, 2146, 2141, 2147,
+     2147, 2150, 2138, 2148, 2148, 2152, 2146, 2151, 2143, 2149,
+     2149, 2155, 2151, 2145, 2152, 2154, 2150, 2152, 2153, 2153,
+     2156, 2154, 2157, 2158, 2159, 2160, 2161, 2161, 2158, 2159,
+     2164, 2164, 2167, 2167, 2175, 2156, 2155, 2168, 2168, 2169,
+
+     2169, 2171, 2176, 2157, 2160, 2172, 2172, 2174, 2174, 2175,
+     2171, 2177, 2177, 2178, 2176, 2179, 2179, 2182, 2183, 2184,
+     2188, 2183, 2185, 2185, 2187, 2189, 2188, 2187, 2178, 2190,
+     2191, 2193, 2192, 2199, 2190, 2182, 2199, 2202, 2203, 2189,
+     2205, 2204, 2203, 2207, 2208, 2184, 2209, 2193, 2213, 2191,
+     2192, 2209, 2211, 2211, 2205, 2208, 2210, 2212, 2210, 2214,
+     2202, 2204, 2215, 2216, 2217, 2218, 2207, 2213, 2219,    0,
+     2212, 2220, 2220, 2226, 2221, 2222, 2222, 2214, 2215, 2217,
+     2223, 2223, 2219, 2221, 2230, 2218, 2224, 2224, 2216, 2225,
+     2225, 2227, 2226, 2228, 2227, 2229, 2231, 2232, 2228, 2233,
+
+     2229, 2234, 2234, 2232, 2235, 2237, 2239, 2242, 2242, 2230,
+     2243, 2231, 2244, 2233, 2247, 2245, 2246, 2248, 2243, 2249,
+     2237, 2245, 2246, 2235, 2239, 2251, 2252, 2255, 2247, 2253,
+     2248, 2244, 2255, 2253, 2256, 2257, 2258, 2259, 2249, 2260,
+     2252, 2261, 2262, 2263, 2260, 2251, 2261,    0, 2257, 2258,
+     2264, 2264, 2265, 2256, 2266, 2266, 2259, 2270, 2265, 2267,
+     2262, 2268, 2263, 2269, 2267, 2271, 2268, 2272, 2269, 2273,
+     2273, 2271, 2272, 2275, 2276, 2277, 2270, 2278, 2279, 2280,
+     2281, 2276, 2282, 2282, 2279, 2285, 2286, 2287, 2284, 2288,
+     2285, 2292, 2275, 2281, 2277, 2291, 2278, 2284, 2280, 2294,
+
+     2284,    0, 2288, 2289, 2289, 2286, 2287, 2290, 2291, 2293,
+     2293, 2299, 2290, 2295, 2295, 2296, 2296, 2292, 2294, 2297,
+     2298, 2300, 2300, 2301, 2297, 2303, 2303, 2298, 2301, 2302,
+     2299, 2302, 2304, 2305, 2306, 2308, 2307, 2310, 2310, 2304,
+     2305, 2307, 2311, 2313, 2314, 2315, 2316, 2320, 2313, 2314,
+     2317, 2317, 2321, 2306, 2308, 2319, 2319, 2322, 2322, 2323,
+     2323, 2311, 2324, 2328, 2315, 2316, 2320, 2326, 2326, 2324,
+     2328, 2321, 2327, 2327, 2330, 2333, 2334, 2335,    0, 2330,
+     2333, 2336, 2336, 2337, 2337,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0, 2334, 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
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -2417,7 +2433,7 @@ static void config_end_include(void)
 #define YY_NO_INPUT 1
 #endif
 
-#line 2419 "<stdout>"
+#line 2435 "<stdout>"
 
 #define INITIAL 0
 #define quotedstring 1
@@ -2640,7 +2656,7 @@ YY_DECL
        {
 #line 207 "./util/configlexer.lex"
 
-#line 2642 "<stdout>"
+#line 2658 "<stdout>"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -2673,13 +2689,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 2319 )
+                               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] != 4542 );
+               while ( yy_base[yy_current_state] != 4589 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -3738,88 +3754,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:
 YY_RULE_SETUP
 #line 433 "./util/configlexer.lex"
-{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) }
+{ YDVAR(1, VAR_CACHEDB_BACKEND) }
        YY_BREAK
 case 215:
-/* rule 215 can match eol */
 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 216:
+case 218:
 YY_RULE_SETUP
-#line 437 "./util/configlexer.lex"
+#line 439 "./util/configlexer.lex"
 { BEGIN(quotedstring); LEXOUT(("QS ")); }
        YY_BREAK
 case YY_STATE_EOF(quotedstring):
-#line 438 "./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 217:
+case 219:
 YY_RULE_SETUP
-#line 443 "./util/configlexer.lex"
+#line 445 "./util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 218:
-/* rule 218 can match eol */
+case 220:
+/* rule 220 can match eol */
 YY_RULE_SETUP
-#line 444 "./util/configlexer.lex"
+#line 446 "./util/configlexer.lex"
 { yyerror("newline inside quoted string, no end \""); 
                          cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 219:
+case 221:
 YY_RULE_SETUP
-#line 446 "./util/configlexer.lex"
+#line 448 "./util/configlexer.lex"
 {
         LEXOUT(("QE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -3832,34 +3858,34 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* Single Quoted strings. Strip leading and ending quotes */
-case 220:
+case 222:
 YY_RULE_SETUP
-#line 458 "./util/configlexer.lex"
+#line 460 "./util/configlexer.lex"
 { BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
        YY_BREAK
 case YY_STATE_EOF(singlequotedstr):
-#line 459 "./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 221:
+case 223:
 YY_RULE_SETUP
-#line 464 "./util/configlexer.lex"
+#line 466 "./util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 222:
-/* rule 222 can match eol */
+case 224:
+/* rule 224 can match eol */
 YY_RULE_SETUP
-#line 465 "./util/configlexer.lex"
+#line 467 "./util/configlexer.lex"
 { yyerror("newline inside quoted string, no end '"); 
                             cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 223:
+case 225:
 YY_RULE_SETUP
-#line 467 "./util/configlexer.lex"
+#line 469 "./util/configlexer.lex"
 {
         LEXOUT(("SQE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -3872,38 +3898,38 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* include: directive */
-case 224:
+case 226:
 YY_RULE_SETUP
-#line 479 "./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 481 "./util/configlexer.lex"
+#line 483 "./util/configlexer.lex"
 {
         yyerror("EOF inside include directive");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 225:
+case 227:
 YY_RULE_SETUP
-#line 485 "./util/configlexer.lex"
+#line 487 "./util/configlexer.lex"
 { LEXOUT(("ISP ")); /* ignore */ }
        YY_BREAK
-case 226:
-/* rule 226 can match eol */
+case 228:
+/* rule 228 can match eol */
 YY_RULE_SETUP
-#line 486 "./util/configlexer.lex"
+#line 488 "./util/configlexer.lex"
 { LEXOUT(("NL\n")); cfg_parser->line++;}
        YY_BREAK
-case 227:
+case 229:
 YY_RULE_SETUP
-#line 487 "./util/configlexer.lex"
+#line 489 "./util/configlexer.lex"
 { LEXOUT(("IQS ")); BEGIN(include_quoted); }
        YY_BREAK
-case 228:
+case 230:
 YY_RULE_SETUP
-#line 488 "./util/configlexer.lex"
+#line 490 "./util/configlexer.lex"
 {
        LEXOUT(("Iunquotedstr(%s) ", yytext));
        config_start_include_glob(yytext);
@@ -3911,27 +3937,27 @@ YY_RULE_SETUP
 }
        YY_BREAK
 case YY_STATE_EOF(include_quoted):
-#line 493 "./util/configlexer.lex"
+#line 495 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 229:
+case 231:
 YY_RULE_SETUP
-#line 497 "./util/configlexer.lex"
+#line 499 "./util/configlexer.lex"
 { LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 230:
-/* rule 230 can match eol */
+case 232:
+/* rule 232 can match eol */
 YY_RULE_SETUP
-#line 498 "./util/configlexer.lex"
+#line 500 "./util/configlexer.lex"
 { yyerror("newline before \" in include name"); 
                                  cfg_parser->line++; BEGIN(inc_prev); }
        YY_BREAK
-case 231:
+case 233:
 YY_RULE_SETUP
-#line 500 "./util/configlexer.lex"
+#line 502 "./util/configlexer.lex"
 {
        LEXOUT(("IQE "));
        yytext[yyleng - 1] = '\0';
@@ -3941,7 +3967,7 @@ YY_RULE_SETUP
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(val):
-#line 506 "./util/configlexer.lex"
+#line 508 "./util/configlexer.lex"
 {
        LEXOUT(("LEXEOF "));
        yy_set_bol(1); /* Set beginning of line, so "^" rules match.  */
@@ -3953,33 +3979,33 @@ case YY_STATE_EOF(val):
        }
 }
        YY_BREAK
-case 232:
+case 234:
 YY_RULE_SETUP
-#line 517 "./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 233:
+case 235:
 YY_RULE_SETUP
-#line 521 "./util/configlexer.lex"
+#line 523 "./util/configlexer.lex"
 {
        ub_c_error_msg("unknown keyword '%s'", yytext);
        }
        YY_BREAK
-case 234:
+case 236:
 YY_RULE_SETUP
-#line 525 "./util/configlexer.lex"
+#line 527 "./util/configlexer.lex"
 {
        ub_c_error_msg("stray '%s'", yytext);
        }
        YY_BREAK
-case 235:
+case 237:
 YY_RULE_SETUP
-#line 529 "./util/configlexer.lex"
+#line 531 "./util/configlexer.lex"
 ECHO;
        YY_BREAK
-#line 3981 "<stdout>"
+#line 4007 "<stdout>"
 
        case YY_END_OF_BUFFER:
                {
@@ -4270,7 +4296,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 >= 2319 )
+                       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];
@@ -4298,11 +4324,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 >= 2319 )
+               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 == 2318);
+       yy_is_jam = (yy_current_state == 2340);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -4941,7 +4967,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 529 "./util/configlexer.lex"
+#line 531 "./util/configlexer.lex"
 
 
 
index a12040d27b0ae01fe55e62fbbf50a55e29e8184d..b7b1ae5e89bb4718653ebbb1c0fe3b0c1303c4a9 100644 (file)
@@ -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) }
index 7a93ce37fc004e0536a23c7101d5597577ef04b6..e3da5652947b179bb3fbf3162fb2b59b2473dee8 100644 (file)
@@ -335,16 +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_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 476
+    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.  */
@@ -557,16 +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_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 476
+#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
@@ -577,7 +581,7 @@ union YYSTYPE
 
        char*   str;
 
-#line 581 "util/configparser.c" /* yacc.c:355  */
+#line 585 "util/configparser.c" /* yacc.c:355  */
 };
 
 typedef union YYSTYPE YYSTYPE;
@@ -594,7 +598,7 @@ int yyparse (void);
 
 /* Copy the second part of user declarations.  */
 
-#line 598 "util/configparser.c" /* yacc.c:358  */
+#line 602 "util/configparser.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -836,21 +840,21 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   448
+#define YYLAST   452
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  222
+#define YYNTOKENS  224
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  239
+#define YYNNTS  241
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  457
+#define YYNRULES  461
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  686
+#define YYNSTATES  692
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   476
+#define YYMAXUTOK   478
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -906,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,   221
+     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,   155,   155,   155,   156,   156,   157,   157,   158,   158,
-     158,   160,   161,   165,   170,   171,   172,   172,   172,   173,
-     173,   174,   174,   175,   175,   176,   176,   177,   177,   177,
-     178,   178,   178,   179,   179,   180,   180,   181,   181,   182,
-     182,   183,   183,   184,   184,   185,   185,   186,   186,   187,
-     187,   187,   188,   188,   188,   189,   189,   189,   190,   190,
-     191,   191,   192,   192,   193,   193,   194,   194,   194,   195,
-     195,   196,   196,   197,   197,   197,   198,   198,   199,   199,
-     200,   200,   201,   201,   201,   202,   202,   203,   203,   204,
-     204,   205,   205,   206,   206,   207,   207,   207,   208,   208,
-     209,   209,   209,   210,   210,   210,   211,   211,   211,   212,
-     212,   212,   212,   213,   213,   213,   214,   214,   214,   215,
-     215,   216,   216,   217,   217,   218,   218,   219,   219,   219,
-     220,   220,   221,   221,   222,   223,   223,   224,   224,   225,
-     225,   226,   227,   227,   228,   228,   229,   229,   230,   230,
-     230,   231,   231,   232,   232,   233,   233,   234,   234,   235,
-     235,   235,   236,   236,   236,   237,   237,   237,   238,   238,
-     239,   239,   240,   240,   241,   241,   242,   244,   256,   257,
-     258,   258,   258,   258,   258,   259,   261,   273,   274,   275,
-     275,   275,   275,   276,   278,   292,   293,   294,   294,   294,
-     294,   295,   295,   295,   297,   306,   315,   326,   335,   344,
-     353,   364,   373,   384,   397,   412,   423,   440,   457,   470,
-     485,   494,   503,   512,   521,   530,   539,   548,   557,   566,
-     575,   584,   593,   602,   611,   620,   629,   636,   643,   652,
-     661,   670,   684,   693,   702,   711,   718,   725,   751,   759,
-     766,   773,   780,   787,   795,   803,   811,   818,   829,   836,
-     845,   854,   863,   870,   877,   885,   893,   903,   913,   923,
-     936,   947,   955,   968,   977,   986,   995,  1005,  1015,  1023,
-    1036,  1045,  1053,  1062,  1070,  1083,  1092,  1099,  1109,  1119,
-    1129,  1139,  1149,  1159,  1169,  1179,  1186,  1193,  1200,  1209,
-    1218,  1227,  1234,  1244,  1261,  1268,  1286,  1299,  1312,  1321,
-    1330,  1339,  1348,  1358,  1368,  1377,  1386,  1399,  1412,  1421,
-    1428,  1437,  1446,  1455,  1464,  1472,  1485,  1493,  1521,  1528,
-    1543,  1553,  1563,  1570,  1577,  1586,  1600,  1619,  1638,  1650,
-    1662,  1674,  1685,  1704,  1714,  1723,  1731,  1739,  1752,  1765,
-    1778,  1791,  1800,  1809,  1819,  1829,  1842,  1855,  1866,  1879,
-    1890,  1903,  1913,  1920,  1927,  1936,  1946,  1956,  1966,  1973,
-    1980,  1989,  1999,  2009,  2038,  2048,  2056,  2065,  2080,  2089,
-    2094,  2095,  2096,  2096,  2096,  2097,  2097,  2097,  2098,  2098,
-    2100,  2110,  2119,  2126,  2136,  2143,  2150,  2157,  2164,  2169,
-    2170,  2171,  2171,  2172,  2172,  2173,  2173,  2174,  2175,  2176,
-    2177,  2178,  2179,  2181,  2189,  2196,  2204,  2212,  2219,  2226,
-    2235,  2244,  2253,  2262,  2271,  2280,  2285,  2286,  2287,  2289,
-    2295,  2305,  2312,  2321,  2329,  2335,  2336,  2338,  2338,  2338,
-    2339,  2339,  2340,  2341,  2343,  2353,  2363,  2370,  2377,  2384,
-    2392,  2405,  2410,  2411,  2412,  2412,  2414,  2428
+       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,   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
 
@@ -1042,10 +1047,11 @@ 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",
+  "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",
@@ -1141,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
 
@@ -1174,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,   476
+     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
 
@@ -1192,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,   238,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,   239,   240,   244,   245,   246,   288,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,   289,   290,   291,
-     292,   293,  -213,  -213,  -213,  -213,  -213,  -213,   294,   295,
-     296,   300,   304,   305,   329,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,   330,   331,   332,   342,   343,   344,   345,
-     346,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-     347,   348,   349,   350,   351,   352,   353,   354,   389,   391,
-     401,   402,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,   403,  -213,  -213,   404,   405,
-     406,   407,   408,   415,   416,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,   417,   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,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,   420,   421,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,   422,   423,
-     424,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-     425,   426,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,   427,   428,   429,
-     430,   431,   432,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,   433,  -213,  -213,   434,   435,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,  -213,
-    -213,  -213,  -213,  -213,  -213,  -213,   436,   437,   438,  -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.
@@ -1269,8 +1277,8 @@ static const yytype_int16 yypact[] =
 static const yytype_uint16 yydefact[] =
 {
        2,     0,     1,    13,   177,   186,   379,   425,   398,   194,
-     434,   451,     3,    15,   179,   188,   196,   381,   400,   427,
-     436,   453,     4,     5,     6,    10,     8,     9,     7,    11,
+     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,
@@ -1312,60 +1320,62 @@ static const yytype_uint16 yydefact[] =
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        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,   435,   437,   438,   439,   441,
-     440,   442,   443,     0,     0,   452,   454,   455,   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,   444,   445,
-     446,   448,   447,   449,   450,   456,   457,   303,   327,   342,
-     432,   433,   349,   350,   336,   337,     0,     0,     0,   341,
-     373,   374,   375,   340,   338,   339
+       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,  -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].  */
@@ -1393,8 +1403,9 @@ static const yytype_int16 yydefgoto[] =
       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,   445,   446,   447,   448,
-     449,   450,   451,   452,    21,    30,   455,   456,   457
+     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
@@ -1402,61 +1413,62 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_uint16 yytable[] =
 {
-       2,   378,   354,   435,   355,   356,   367,   453,   454,   458,
-       0,     3,   459,   460,   368,   369,   410,   411,   412,   413,
-     414,   415,   416,   417,   418,   419,   420,   421,   393,   394,
-     395,   396,   397,   398,   399,   400,   461,   379,   380,   462,
-     463,     4,   464,   465,   466,   467,   468,     5,   438,   439,
-     440,   441,   442,   443,   444,   469,   470,   471,   472,   473,
-     474,   475,   381,   476,   477,   357,   478,   479,   480,   481,
-     482,   483,   484,   485,   486,   487,   488,   489,   490,   491,
-     492,   493,   494,   495,   496,   497,   498,   499,   500,   501,
-     502,     6,   503,   504,   505,   358,   506,   359,   370,   507,
-     371,   508,   509,   510,   511,   512,   513,     7,   514,   515,
-     516,   517,   518,   519,   520,   521,   522,   523,   524,   525,
-     382,   383,   526,   527,   528,   529,   530,   531,   532,   533,
-     534,   535,   536,   537,   538,   539,   540,   541,   542,   543,
-     544,   545,   546,   547,   548,     8,   549,   550,   551,   552,
-     553,   554,   555,   556,   557,   384,   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,
-     592,   593,     9,   594,   595,   596,   597,   598,   599,   600,
-     601,   602,   603,   604,    10,   605,   606,   607,   608,   609,
-     610,   611,   612,   613,   614,   615,   616,     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,   617,   618,   619,
-     620,    59,    60,    61,   621,   622,   623,    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,   624,   625,
-     626,   627,   628,   629,   630,   631,   632,   103,   104,   105,
-     633,   106,   107,   108,   634,   635,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   636,
-     637,   638,   639,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   640,   641,   642,   643,   644,   645,   646,   647,
-     648,   649,   650,   651,   652,   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,   653,
-     175,   654,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   655,   656,   657,   658,   659,   660,   661,   662,   185,
-     186,   187,   188,   189,   190,   663,   664,   665,   191,   666,
-     667,   668,   669,   670,   671,   672,   673,   674,   675,   676,
-     677,   678,   679,   680,   681,   682,   683,   684,   685
+       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,
@@ -1472,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,   221,    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,    10,    10
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
-       0,   223,     0,    11,    41,    47,    91,   107,   145,   192,
-     204,   218,   224,   225,   228,   231,   234,   412,   423,   438,
-     446,   456,   226,   229,   232,   235,   413,   424,   439,   447,
-     457,    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,
@@ -1520,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,   221,   227,   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,
-     442,   443,   444,   445,    40,    42,    43,   103,   133,   135,
-     230,   394,   395,   396,   397,   398,   399,    40,    48,    49,
-     132,   134,   233,   400,   401,   402,   403,   404,    40,    76,
-      77,   101,   159,   160,   194,   236,   405,   406,   407,   408,
-     409,   410,   411,    92,    93,    94,    95,    96,    97,    98,
-      99,   414,   415,   416,   417,   418,   419,   420,   421,   422,
+     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,   425,   426,   427,   428,   429,   430,   431,   432,
-     433,   434,   435,   436,   437,   108,   440,   441,   205,   206,
-     207,   208,   209,   210,   211,   448,   449,   450,   451,   452,
-     453,   454,   455,   219,   220,   458,   459,   460,    10,    10,
+     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,
@@ -1570,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,    10
+      10,    10
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   222,   223,   223,   224,   224,   224,   224,   224,   224,
-     224,   224,   224,   225,   226,   226,   227,   227,   227,   227,
-     227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
-     227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
-     227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
-     227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
-     227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
-     227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
-     227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
-     227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
-     227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
-     227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
-     227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
-     227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
-     227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
-     227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
-     227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
-     227,   227,   227,   227,   227,   227,   227,   228,   229,   229,
-     230,   230,   230,   230,   230,   230,   231,   232,   232,   233,
-     233,   233,   233,   233,   234,   235,   235,   236,   236,   236,
-     236,   236,   236,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
-     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
-     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
-     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
-     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
-     333,   334,   335,   336,   337,   338,   339,   340,   341,   342,
-     343,   344,   345,   346,   347,   348,   349,   350,   351,   352,
-     353,   354,   355,   356,   357,   358,   359,   360,   361,   362,
-     363,   364,   365,   366,   367,   368,   369,   370,   371,   372,
-     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
-     383,   384,   385,   386,   387,   388,   389,   390,   391,   392,
-     393,   394,   395,   396,   397,   398,   399,   400,   401,   402,
-     403,   404,   405,   406,   407,   408,   409,   410,   411,   412,
-     413,   413,   414,   414,   414,   414,   414,   414,   414,   414,
-     415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
-     424,   425,   425,   425,   425,   425,   425,   425,   425,   425,
-     425,   425,   425,   426,   427,   428,   429,   430,   431,   432,
-     433,   434,   435,   436,   437,   438,   439,   439,   440,   441,
-     442,   443,   444,   445,   446,   447,   447,   448,   448,   448,
-     448,   448,   448,   448,   449,   450,   451,   452,   453,   454,
-     455,   456,   457,   457,   458,   458,   459,   460
+       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.  */
@@ -1671,8 +1686,9 @@ static const yytype_uint8 yyr2[] =
        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
+       1,     1,     1,     1,     1,     1,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     1,     2,     0,     1,     1,
+       2,     2
 };
 
 
@@ -2349,15 +2365,15 @@ yyreduce:
   switch (yyn)
     {
         case 13:
-#line 166 "./util/configparser.y" /* yacc.c:1646  */
+#line 168 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(server:)\n")); 
        }
-#line 2357 "util/configparser.c" /* yacc.c:1646  */
+#line 2373 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 177:
-#line 245 "./util/configparser.y" /* yacc.c:1646  */
+#line 247 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_stub* s;
                OUTYY(("\nP(stub_zone:)\n")); 
@@ -2368,11 +2384,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2372 "util/configparser.c" /* yacc.c:1646  */
+#line 2388 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 186:
-#line 262 "./util/configparser.y" /* yacc.c:1646  */
+#line 264 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_stub* s;
                OUTYY(("\nP(forward_zone:)\n")); 
@@ -2383,11 +2399,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2387 "util/configparser.c" /* yacc.c:1646  */
+#line 2403 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 194:
-#line 279 "./util/configparser.y" /* yacc.c:1646  */
+#line 281 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_view* s;
                OUTYY(("\nP(view:)\n")); 
@@ -2400,11 +2416,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2404 "util/configparser.c" /* yacc.c:1646  */
+#line 2420 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 204:
-#line 298 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2412,11 +2428,11 @@ yyreduce:
                else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2416 "util/configparser.c" /* yacc.c:1646  */
+#line 2432 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 205:
-#line 307 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2424,11 +2440,11 @@ yyreduce:
                else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2428 "util/configparser.c" /* yacc.c:1646  */
+#line 2444 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 206:
-#line 316 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2438,11 +2454,11 @@ yyreduce:
                else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2442 "util/configparser.c" /* yacc.c:1646  */
+#line 2458 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 207:
-#line 327 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2450,11 +2466,11 @@ yyreduce:
                else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2454 "util/configparser.c" /* yacc.c:1646  */
+#line 2470 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 208:
-#line 336 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2462,11 +2478,11 @@ yyreduce:
                else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2466 "util/configparser.c" /* yacc.c:1646  */
+#line 2482 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 209:
-#line 345 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2474,11 +2490,11 @@ yyreduce:
                else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2478 "util/configparser.c" /* yacc.c:1646  */
+#line 2494 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 210:
-#line 354 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2488,11 +2504,11 @@ yyreduce:
                else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2492 "util/configparser.c" /* yacc.c:1646  */
+#line 2508 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 211:
-#line 365 "./util/configparser.y" /* yacc.c:1646  */
+#line 367 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2500,11 +2516,11 @@ yyreduce:
                else cfg_parser->cfg->port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2504 "util/configparser.c" /* yacc.c:1646  */
+#line 2520 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 212:
-#line 374 "./util/configparser.y" /* yacc.c:1646  */
+#line 376 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str)));
@@ -2514,11 +2530,11 @@ yyreduce:
                OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
        #endif
        }
-#line 2518 "util/configparser.c" /* yacc.c:1646  */
+#line 2534 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 213:
-#line 385 "./util/configparser.y" /* yacc.c:1646  */
+#line 387 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str)));
@@ -2529,11 +2545,11 @@ yyreduce:
                OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
        #endif
        }
-#line 2533 "util/configparser.c" /* yacc.c:1646  */
+#line 2549 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 214:
-#line 398 "./util/configparser.y" /* yacc.c:1646  */
+#line 400 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str)));
@@ -2547,11 +2563,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 2551 "util/configparser.c" /* yacc.c:1646  */
+#line 2567 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 215:
-#line 413 "./util/configparser.y" /* yacc.c:1646  */
+#line 415 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str)));
@@ -2561,11 +2577,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 2565 "util/configparser.c" /* yacc.c:1646  */
+#line 2581 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 216:
-#line 424 "./util/configparser.y" /* yacc.c:1646  */
+#line 426 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
@@ -2581,11 +2597,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 2585 "util/configparser.c" /* yacc.c:1646  */
+#line 2601 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 217:
-#line 441 "./util/configparser.y" /* yacc.c:1646  */
+#line 443 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
@@ -2601,11 +2617,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 2605 "util/configparser.c" /* yacc.c:1646  */
+#line 2621 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 218:
-#line 458 "./util/configparser.y" /* yacc.c:1646  */
+#line 460 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->num_ifs == 0)
@@ -2617,11 +2633,11 @@ yyreduce:
                else
                        cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
        }
-#line 2621 "util/configparser.c" /* yacc.c:1646  */
+#line 2637 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 219:
-#line 471 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2635,11 +2651,11 @@ yyreduce:
                        cfg_parser->cfg->out_ifs[
                                cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
        }
-#line 2639 "util/configparser.c" /* yacc.c:1646  */
+#line 2655 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 220:
-#line 486 "./util/configparser.y" /* yacc.c:1646  */
+#line 488 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2647,11 +2663,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2651 "util/configparser.c" /* yacc.c:1646  */
+#line 2667 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 221:
-#line 495 "./util/configparser.y" /* yacc.c:1646  */
+#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, 
@@ -2659,11 +2675,11 @@ yyreduce:
                        yyerror("port number or range (\"low-high\") expected");
                free((yyvsp[0].str));
        }
-#line 2663 "util/configparser.c" /* yacc.c:1646  */
+#line 2679 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 222:
-#line 504 "./util/configparser.y" /* yacc.c:1646  */
+#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, 
@@ -2671,11 +2687,11 @@ yyreduce:
                        yyerror("port number or range (\"low-high\") expected");
                free((yyvsp[0].str));
        }
-#line 2675 "util/configparser.c" /* yacc.c:1646  */
+#line 2691 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 223:
-#line 513 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2683,11 +2699,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2687 "util/configparser.c" /* yacc.c:1646  */
+#line 2703 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 224:
-#line 522 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2695,11 +2711,11 @@ yyreduce:
                else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2699 "util/configparser.c" /* yacc.c:1646  */
+#line 2715 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 225:
-#line 531 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2707,11 +2723,11 @@ yyreduce:
                else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2711 "util/configparser.c" /* yacc.c:1646  */
+#line 2727 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 226:
-#line 540 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2719,11 +2735,11 @@ yyreduce:
                else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2723 "util/configparser.c" /* yacc.c:1646  */
+#line 2739 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 227:
-#line 549 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2731,11 +2747,11 @@ yyreduce:
                else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2735 "util/configparser.c" /* yacc.c:1646  */
+#line 2751 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 228:
-#line 558 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2743,11 +2759,11 @@ yyreduce:
                else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2747 "util/configparser.c" /* yacc.c:1646  */
+#line 2763 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 229:
-#line 567 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2755,11 +2771,11 @@ yyreduce:
                else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2759 "util/configparser.c" /* yacc.c:1646  */
+#line 2775 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 230:
-#line 576 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2767,11 +2783,11 @@ yyreduce:
                else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2771 "util/configparser.c" /* yacc.c:1646  */
+#line 2787 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 231:
-#line 585 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2779,11 +2795,11 @@ yyreduce:
                 else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
                 free((yyvsp[0].str));
        }
-#line 2783 "util/configparser.c" /* yacc.c:1646  */
+#line 2799 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 232:
-#line 594 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2791,11 +2807,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2795 "util/configparser.c" /* yacc.c:1646  */
+#line 2811 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 233:
-#line 603 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2803,11 +2819,11 @@ yyreduce:
                else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2807 "util/configparser.c" /* yacc.c:1646  */
+#line 2823 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 234:
-#line 612 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2815,11 +2831,11 @@ yyreduce:
                else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2819 "util/configparser.c" /* yacc.c:1646  */
+#line 2835 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 235:
-#line 621 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2827,31 +2843,31 @@ yyreduce:
                else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2831 "util/configparser.c" /* yacc.c:1646  */
+#line 2847 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 236:
-#line 630 "./util/configparser.y" /* yacc.c:1646  */
+#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 2841 "util/configparser.c" /* yacc.c:1646  */
+#line 2857 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 237:
-#line 637 "./util/configparser.y" /* yacc.c:1646  */
+#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 2851 "util/configparser.c" /* yacc.c:1646  */
+#line 2867 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 238:
-#line 644 "./util/configparser.y" /* yacc.c:1646  */
+#line 646 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2859,11 +2875,11 @@ yyreduce:
                else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2863 "util/configparser.c" /* yacc.c:1646  */
+#line 2879 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 239:
-#line 653 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2871,11 +2887,11 @@ yyreduce:
                else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2875 "util/configparser.c" /* yacc.c:1646  */
+#line 2891 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 240:
-#line 662 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2883,11 +2899,11 @@ yyreduce:
                else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2887 "util/configparser.c" /* yacc.c:1646  */
+#line 2903 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 241:
-#line 671 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2900,11 +2916,11 @@ yyreduce:
 #endif
                free((yyvsp[0].str));
        }
-#line 2904 "util/configparser.c" /* yacc.c:1646  */
+#line 2920 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 242:
-#line 685 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2912,11 +2928,11 @@ yyreduce:
                else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2916 "util/configparser.c" /* yacc.c:1646  */
+#line 2932 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 243:
-#line 694 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2924,11 +2940,11 @@ yyreduce:
                else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2928 "util/configparser.c" /* yacc.c:1646  */
+#line 2944 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 244:
-#line 703 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -2936,31 +2952,31 @@ yyreduce:
        else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0);
        free((yyvsp[0].str));
   }
-#line 2940 "util/configparser.c" /* yacc.c:1646  */
+#line 2956 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 245:
-#line 712 "./util/configparser.y" /* yacc.c:1646  */
+#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 2950 "util/configparser.c" /* yacc.c:1646  */
+#line 2966 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 246:
-#line 719 "./util/configparser.y" /* yacc.c:1646  */
+#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 2960 "util/configparser.c" /* yacc.c:1646  */
+#line 2976 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 247:
-#line 726 "./util/configparser.y" /* yacc.c:1646  */
+#line 728 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->directory);
@@ -2985,105 +3001,105 @@ yyreduce:
                        }
                }
        }
-#line 2989 "util/configparser.c" /* yacc.c:1646  */
+#line 3005 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 248:
-#line 752 "./util/configparser.y" /* yacc.c:1646  */
+#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 3000 "util/configparser.c" /* yacc.c:1646  */
+#line 3016 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 249:
-#line 760 "./util/configparser.y" /* yacc.c:1646  */
+#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 3010 "util/configparser.c" /* yacc.c:1646  */
+#line 3026 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 250:
-#line 767 "./util/configparser.y" /* yacc.c:1646  */
+#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 3020 "util/configparser.c" /* yacc.c:1646  */
+#line 3036 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 251:
-#line 774 "./util/configparser.y" /* yacc.c:1646  */
+#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 3030 "util/configparser.c" /* yacc.c:1646  */
+#line 3046 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 252:
-#line 781 "./util/configparser.y" /* yacc.c:1646  */
+#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 3040 "util/configparser.c" /* yacc.c:1646  */
+#line 3056 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 253:
-#line 788 "./util/configparser.y" /* yacc.c:1646  */
+#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 3051 "util/configparser.c" /* yacc.c:1646  */
+#line 3067 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 254:
-#line 796 "./util/configparser.y" /* yacc.c:1646  */
+#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 3062 "util/configparser.c" /* yacc.c:1646  */
+#line 3078 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 255:
-#line 804 "./util/configparser.y" /* yacc.c:1646  */
+#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 3073 "util/configparser.c" /* yacc.c:1646  */
+#line 3089 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 256:
-#line 812 "./util/configparser.y" /* yacc.c:1646  */
+#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 3083 "util/configparser.c" /* yacc.c:1646  */
+#line 3099 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 257:
-#line 819 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3093,21 +3109,21 @@ yyreduce:
                                (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3097 "util/configparser.c" /* yacc.c:1646  */
+#line 3113 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 258:
-#line 830 "./util/configparser.y" /* yacc.c:1646  */
+#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 3107 "util/configparser.c" /* yacc.c:1646  */
+#line 3123 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 259:
-#line 837 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3115,11 +3131,11 @@ yyreduce:
                else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3119 "util/configparser.c" /* yacc.c:1646  */
+#line 3135 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 260:
-#line 846 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3127,11 +3143,11 @@ yyreduce:
                else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3131 "util/configparser.c" /* yacc.c:1646  */
+#line 3147 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 261:
-#line 855 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3139,53 +3155,53 @@ yyreduce:
                else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3143 "util/configparser.c" /* yacc.c:1646  */
+#line 3159 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 262:
-#line 864 "./util/configparser.y" /* yacc.c:1646  */
+#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 3153 "util/configparser.c" /* yacc.c:1646  */
+#line 3169 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 263:
-#line 871 "./util/configparser.y" /* yacc.c:1646  */
+#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 3163 "util/configparser.c" /* yacc.c:1646  */
+#line 3179 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 264:
-#line 878 "./util/configparser.y" /* yacc.c:1646  */
+#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 3174 "util/configparser.c" /* yacc.c:1646  */
+#line 3190 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 265:
-#line 886 "./util/configparser.y" /* yacc.c:1646  */
+#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 3185 "util/configparser.c" /* yacc.c:1646  */
+#line 3201 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 266:
-#line 894 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3194,11 +3210,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 3198 "util/configparser.c" /* yacc.c:1646  */
+#line 3214 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 267:
-#line 904 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3207,11 +3223,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 3211 "util/configparser.c" /* yacc.c:1646  */
+#line 3227 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 268:
-#line 914 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3220,11 +3236,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 3224 "util/configparser.c" /* yacc.c:1646  */
+#line 3240 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 269:
-#line 924 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3236,11 +3252,11 @@ yyreduce:
                else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3240 "util/configparser.c" /* yacc.c:1646  */
+#line 3256 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 270:
-#line 937 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3250,22 +3266,22 @@ yyreduce:
                else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3254 "util/configparser.c" /* yacc.c:1646  */
+#line 3270 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 271:
-#line 948 "./util/configparser.y" /* yacc.c:1646  */
+#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 3265 "util/configparser.c" /* yacc.c:1646  */
+#line 3281 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 272:
-#line 956 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3277,11 +3293,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3281 "util/configparser.c" /* yacc.c:1646  */
+#line 3297 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 273:
-#line 969 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3289,11 +3305,11 @@ yyreduce:
                else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3293 "util/configparser.c" /* yacc.c:1646  */
+#line 3309 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 274:
-#line 978 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3301,11 +3317,11 @@ yyreduce:
                else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3305 "util/configparser.c" /* yacc.c:1646  */
+#line 3321 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 275:
-#line 987 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3313,11 +3329,11 @@ yyreduce:
                else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3317 "util/configparser.c" /* yacc.c:1646  */
+#line 3333 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 276:
-#line 996 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3326,11 +3342,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3330 "util/configparser.c" /* yacc.c:1646  */
+#line 3346 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 277:
-#line 1006 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3339,22 +3355,22 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3343 "util/configparser.c" /* yacc.c:1646  */
+#line 3359 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 278:
-#line 1016 "./util/configparser.y" /* yacc.c:1646  */
+#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 3354 "util/configparser.c" /* yacc.c:1646  */
+#line 3370 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 279:
-#line 1024 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3366,11 +3382,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3370 "util/configparser.c" /* yacc.c:1646  */
+#line 3386 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 280:
-#line 1037 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3378,22 +3394,22 @@ yyreduce:
                else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3382 "util/configparser.c" /* yacc.c:1646  */
+#line 3398 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 281:
-#line 1046 "./util/configparser.y" /* yacc.c:1646  */
+#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 3393 "util/configparser.c" /* yacc.c:1646  */
+#line 3409 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 282:
-#line 1054 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3401,22 +3417,22 @@ yyreduce:
                else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3405 "util/configparser.c" /* yacc.c:1646  */
+#line 3421 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 283:
-#line 1063 "./util/configparser.y" /* yacc.c:1646  */
+#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 3416 "util/configparser.c" /* yacc.c:1646  */
+#line 3432 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 284:
-#line 1071 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3428,11 +3444,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3432 "util/configparser.c" /* yacc.c:1646  */
+#line 3448 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 285:
-#line 1084 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3440,21 +3456,21 @@ yyreduce:
                else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3444 "util/configparser.c" /* yacc.c:1646  */
+#line 3460 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 286:
-#line 1093 "./util/configparser.y" /* yacc.c:1646  */
+#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 3454 "util/configparser.c" /* yacc.c:1646  */
+#line 3470 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 287:
-#line 1100 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3463,11 +3479,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3467 "util/configparser.c" /* yacc.c:1646  */
+#line 3483 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 288:
-#line 1110 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3476,11 +3492,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3480 "util/configparser.c" /* yacc.c:1646  */
+#line 3496 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 289:
-#line 1120 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3489,11 +3505,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3493 "util/configparser.c" /* yacc.c:1646  */
+#line 3509 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 290:
-#line 1130 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3502,11 +3518,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3506 "util/configparser.c" /* yacc.c:1646  */
+#line 3522 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 291:
-#line 1140 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3515,11 +3531,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3519 "util/configparser.c" /* yacc.c:1646  */
+#line 3535 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 292:
-#line 1150 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3528,11 +3544,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3532 "util/configparser.c" /* yacc.c:1646  */
+#line 3548 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 293:
-#line 1160 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3541,11 +3557,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3545 "util/configparser.c" /* yacc.c:1646  */
+#line 3561 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 294:
-#line 1170 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3554,41 +3570,41 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3558 "util/configparser.c" /* yacc.c:1646  */
+#line 3574 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 295:
-#line 1180 "./util/configparser.y" /* yacc.c:1646  */
+#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 3568 "util/configparser.c" /* yacc.c:1646  */
+#line 3584 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 296:
-#line 1187 "./util/configparser.y" /* yacc.c:1646  */
+#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 3578 "util/configparser.c" /* yacc.c:1646  */
+#line 3594 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 297:
-#line 1194 "./util/configparser.y" /* yacc.c:1646  */
+#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 3588 "util/configparser.c" /* yacc.c:1646  */
+#line 3604 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 298:
-#line 1201 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3596,11 +3612,11 @@ yyreduce:
                else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3600 "util/configparser.c" /* yacc.c:1646  */
+#line 3616 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 299:
-#line 1210 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3608,11 +3624,11 @@ yyreduce:
                else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3612 "util/configparser.c" /* yacc.c:1646  */
+#line 3628 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 300:
-#line 1219 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3620,21 +3636,21 @@ yyreduce:
                else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3624 "util/configparser.c" /* yacc.c:1646  */
+#line 3640 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 301:
-#line 1228 "./util/configparser.y" /* yacc.c:1646  */
+#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 3634 "util/configparser.c" /* yacc.c:1646  */
+#line 3650 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 302:
-#line 1235 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3643,11 +3659,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3647 "util/configparser.c" /* yacc.c:1646  */
+#line 3663 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 303:
-#line 1245 "./util/configparser.y" /* yacc.c:1646  */
+#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 &&
@@ -3663,21 +3679,21 @@ yyreduce:
                                fatal_exit("out of memory adding acl");
                }
        }
-#line 3667 "util/configparser.c" /* yacc.c:1646  */
+#line 3683 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 304:
-#line 1262 "./util/configparser.y" /* yacc.c:1646  */
+#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 3677 "util/configparser.c" /* yacc.c:1646  */
+#line 3693 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 305:
-#line 1269 "./util/configparser.y" /* yacc.c:1646  */
+#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) {
@@ -3694,11 +3710,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3698 "util/configparser.c" /* yacc.c:1646  */
+#line 3714 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 306:
-#line 1287 "./util/configparser.y" /* yacc.c:1646  */
+#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) {
@@ -3710,11 +3726,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3714 "util/configparser.c" /* yacc.c:1646  */
+#line 3730 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 307:
-#line 1300 "./util/configparser.y" /* yacc.c:1646  */
+#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) {
@@ -3726,11 +3742,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3730 "util/configparser.c" /* yacc.c:1646  */
+#line 3746 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 308:
-#line 1313 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3738,11 +3754,11 @@ yyreduce:
                else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3742 "util/configparser.c" /* yacc.c:1646  */
+#line 3758 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 309:
-#line 1322 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3750,11 +3766,11 @@ yyreduce:
                else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3754 "util/configparser.c" /* yacc.c:1646  */
+#line 3770 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 310:
-#line 1331 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3762,11 +3778,11 @@ yyreduce:
                else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3766 "util/configparser.c" /* yacc.c:1646  */
+#line 3782 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 311:
-#line 1340 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3774,11 +3790,11 @@ yyreduce:
                else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3778 "util/configparser.c" /* yacc.c:1646  */
+#line 3794 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 312:
-#line 1349 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3787,11 +3803,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3791 "util/configparser.c" /* yacc.c:1646  */
+#line 3807 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 313:
-#line 1359 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3800,11 +3816,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3804 "util/configparser.c" /* yacc.c:1646  */
+#line 3820 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 314:
-#line 1369 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3812,11 +3828,11 @@ yyreduce:
                else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3816 "util/configparser.c" /* yacc.c:1646  */
+#line 3832 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 315:
-#line 1378 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3824,11 +3840,11 @@ yyreduce:
                else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3828 "util/configparser.c" /* yacc.c:1646  */
+#line 3844 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 316:
-#line 1387 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3840,11 +3856,11 @@ yyreduce:
 #endif
                free((yyvsp[0].str));
        }
-#line 3844 "util/configparser.c" /* yacc.c:1646  */
+#line 3860 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 317:
-#line 1400 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3856,11 +3872,11 @@ yyreduce:
 #endif
                free((yyvsp[0].str));
        }
-#line 3860 "util/configparser.c" /* yacc.c:1646  */
+#line 3876 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 318:
-#line 1413 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3868,21 +3884,21 @@ yyreduce:
                else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3872 "util/configparser.c" /* yacc.c:1646  */
+#line 3888 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 319:
-#line 1422 "./util/configparser.y" /* yacc.c:1646  */
+#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 3882 "util/configparser.c" /* yacc.c:1646  */
+#line 3898 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 320:
-#line 1429 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3890,11 +3906,11 @@ yyreduce:
                else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3894 "util/configparser.c" /* yacc.c:1646  */
+#line 3910 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 321:
-#line 1438 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3902,11 +3918,11 @@ yyreduce:
                else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3906 "util/configparser.c" /* yacc.c:1646  */
+#line 3922 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 322:
-#line 1447 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3914,11 +3930,11 @@ yyreduce:
                else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3918 "util/configparser.c" /* yacc.c:1646  */
+#line 3934 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 323:
-#line 1456 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3927,22 +3943,22 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3931 "util/configparser.c" /* yacc.c:1646  */
+#line 3947 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 324:
-#line 1465 "./util/configparser.y" /* yacc.c:1646  */
+#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 3942 "util/configparser.c" /* yacc.c:1646  */
+#line 3958 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 325:
-#line 1473 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -3954,22 +3970,22 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3958 "util/configparser.c" /* yacc.c:1646  */
+#line 3974 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 326:
-#line 1486 "./util/configparser.y" /* yacc.c:1646  */
+#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 3969 "util/configparser.c" /* yacc.c:1646  */
+#line 3985 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 327:
-#line 1494 "./util/configparser.y" /* yacc.c:1646  */
+#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 &&
@@ -3996,21 +4012,21 @@ yyreduce:
                                fatal_exit("out of memory adding local-zone");
                }
        }
-#line 4000 "util/configparser.c" /* yacc.c:1646  */
+#line 4016 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 328:
-#line 1522 "./util/configparser.y" /* yacc.c:1646  */
+#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 4010 "util/configparser.c" /* yacc.c:1646  */
+#line 4026 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 329:
-#line 1529 "./util/configparser.y" /* yacc.c:1646  */
+#line 1531 "./util/configparser.y" /* yacc.c:1646  */
     {
                char* ptr;
                OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -4024,11 +4040,11 @@ yyreduce:
                        yyerror("local-data-ptr could not be reversed");
                }
        }
-#line 4028 "util/configparser.c" /* yacc.c:1646  */
+#line 4044 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 330:
-#line 1544 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4037,11 +4053,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4041 "util/configparser.c" /* yacc.c:1646  */
+#line 4057 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 331:
-#line 1554 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4050,31 +4066,31 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4054 "util/configparser.c" /* yacc.c:1646  */
+#line 4070 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 332:
-#line 1564 "./util/configparser.y" /* yacc.c:1646  */
+#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 4064 "util/configparser.c" /* yacc.c:1646  */
+#line 4080 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 333:
-#line 1571 "./util/configparser.y" /* yacc.c:1646  */
+#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 4074 "util/configparser.c" /* yacc.c:1646  */
+#line 4090 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 334:
-#line 1578 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4082,11 +4098,11 @@ yyreduce:
                else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4086 "util/configparser.c" /* yacc.c:1646  */
+#line 4102 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 335:
-#line 1587 "./util/configparser.y" /* yacc.c:1646  */
+#line 1589 "./util/configparser.y" /* yacc.c:1646  */
     {
                char* p, *s = (yyvsp[0].str);
                OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
@@ -4099,11 +4115,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 4103 "util/configparser.c" /* yacc.c:1646  */
+#line 4119 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 336:
-#line 1601 "./util/configparser.y" /* yacc.c:1646  */
+#line 1603 "./util/configparser.y" /* yacc.c:1646  */
     {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -4121,11 +4137,11 @@ yyreduce:
                        }
                }
        }
-#line 4125 "util/configparser.c" /* yacc.c:1646  */
+#line 4141 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 337:
-#line 1620 "./util/configparser.y" /* yacc.c:1646  */
+#line 1622 "./util/configparser.y" /* yacc.c:1646  */
     {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -4143,11 +4159,11 @@ yyreduce:
                        }
                }
        }
-#line 4147 "util/configparser.c" /* yacc.c:1646  */
+#line 4163 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 338:
-#line 1639 "./util/configparser.y" /* yacc.c:1646  */
+#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,
@@ -4158,11 +4174,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 4162 "util/configparser.c" /* yacc.c:1646  */
+#line 4178 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 339:
-#line 1651 "./util/configparser.y" /* yacc.c:1646  */
+#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,
@@ -4173,11 +4189,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 4177 "util/configparser.c" /* yacc.c:1646  */
+#line 4193 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 340:
-#line 1663 "./util/configparser.y" /* yacc.c:1646  */
+#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,
@@ -4188,11 +4204,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 4192 "util/configparser.c" /* yacc.c:1646  */
+#line 4208 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 341:
-#line 1675 "./util/configparser.y" /* yacc.c:1646  */
+#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,
@@ -4202,11 +4218,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 4206 "util/configparser.c" /* yacc.c:1646  */
+#line 4222 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 342:
-#line 1686 "./util/configparser.y" /* yacc.c:1646  */
+#line 1688 "./util/configparser.y" /* yacc.c:1646  */
     {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -4224,11 +4240,11 @@ yyreduce:
                        }
                }
        }
-#line 4228 "util/configparser.c" /* yacc.c:1646  */
+#line 4244 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 343:
-#line 1705 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4236,11 +4252,11 @@ yyreduce:
                else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4240 "util/configparser.c" /* yacc.c:1646  */
+#line 4256 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 344:
-#line 1715 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4248,33 +4264,33 @@ yyreduce:
                else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4252 "util/configparser.c" /* yacc.c:1646  */
+#line 4268 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 345:
-#line 1724 "./util/configparser.y" /* yacc.c:1646  */
+#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 4263 "util/configparser.c" /* yacc.c:1646  */
+#line 4279 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 346:
-#line 1732 "./util/configparser.y" /* yacc.c:1646  */
+#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 4274 "util/configparser.c" /* yacc.c:1646  */
+#line 4290 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 347:
-#line 1740 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4286,11 +4302,11 @@ yyreduce:
        }
        free((yyvsp[0].str));
   }
-#line 4290 "util/configparser.c" /* yacc.c:1646  */
+#line 4306 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 348:
-#line 1753 "./util/configparser.y" /* yacc.c:1646  */
+#line 1755 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -4302,11 +4318,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 4306 "util/configparser.c" /* yacc.c:1646  */
+#line 4322 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 349:
-#line 1766 "./util/configparser.y" /* yacc.c:1646  */
+#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) {
@@ -4318,11 +4334,11 @@ yyreduce:
                                        "ratelimit-for-domain");
                }
        }
-#line 4322 "util/configparser.c" /* yacc.c:1646  */
+#line 4338 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 350:
-#line 1779 "./util/configparser.y" /* yacc.c:1646  */
+#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) {
@@ -4334,11 +4350,11 @@ yyreduce:
                                        "ratelimit-below-domain");
                }
        }
-#line 4338 "util/configparser.c" /* yacc.c:1646  */
+#line 4354 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 351:
-#line 1792 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4346,11 +4362,11 @@ yyreduce:
        else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str));
        free((yyvsp[0].str));
        }
-#line 4350 "util/configparser.c" /* yacc.c:1646  */
+#line 4366 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 352:
-#line 1801 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4358,11 +4374,11 @@ yyreduce:
                else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4362 "util/configparser.c" /* yacc.c:1646  */
+#line 4378 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 353:
-#line 1810 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4371,11 +4387,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4375 "util/configparser.c" /* yacc.c:1646  */
+#line 4391 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 354:
-#line 1820 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4384,11 +4400,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4388 "util/configparser.c" /* yacc.c:1646  */
+#line 4404 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 355:
-#line 1830 "./util/configparser.y" /* yacc.c:1646  */
+#line 1832 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str)));
@@ -4400,11 +4416,11 @@ yyreduce:
                OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
        #endif
        }
-#line 4404 "util/configparser.c" /* yacc.c:1646  */
+#line 4420 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 356:
-#line 1843 "./util/configparser.y" /* yacc.c:1646  */
+#line 1845 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str)));
@@ -4416,11 +4432,11 @@ yyreduce:
                OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
        #endif
        }
-#line 4420 "util/configparser.c" /* yacc.c:1646  */
+#line 4436 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 357:
-#line 1856 "./util/configparser.y" /* yacc.c:1646  */
+#line 1858 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str)));
@@ -4430,11 +4446,11 @@ yyreduce:
                OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
        #endif
        }
-#line 4434 "util/configparser.c" /* yacc.c:1646  */
+#line 4450 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 358:
-#line 1867 "./util/configparser.y" /* yacc.c:1646  */
+#line 1869 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str)));
@@ -4446,11 +4462,11 @@ yyreduce:
                OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
        #endif
        }
-#line 4450 "util/configparser.c" /* yacc.c:1646  */
+#line 4466 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 359:
-#line 1880 "./util/configparser.y" /* yacc.c:1646  */
+#line 1882 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str)));
@@ -4460,11 +4476,11 @@ yyreduce:
                OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
        #endif
        }
-#line 4464 "util/configparser.c" /* yacc.c:1646  */
+#line 4480 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 360:
-#line 1891 "./util/configparser.y" /* yacc.c:1646  */
+#line 1893 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str)));
@@ -4476,11 +4492,11 @@ yyreduce:
                OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
        #endif
        }
-#line 4480 "util/configparser.c" /* yacc.c:1646  */
+#line 4496 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 361:
-#line 1904 "./util/configparser.y" /* yacc.c:1646  */
+#line 1906 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->stubs->name)
@@ -4489,31 +4505,31 @@ yyreduce:
                free(cfg_parser->cfg->stubs->name);
                cfg_parser->cfg->stubs->name = (yyvsp[0].str);
        }
-#line 4493 "util/configparser.c" /* yacc.c:1646  */
+#line 4509 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 362:
-#line 1914 "./util/configparser.y" /* yacc.c:1646  */
+#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 4503 "util/configparser.c" /* yacc.c:1646  */
+#line 4519 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 363:
-#line 1921 "./util/configparser.y" /* yacc.c:1646  */
+#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 4513 "util/configparser.c" /* yacc.c:1646  */
+#line 4529 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 364:
-#line 1928 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4521,11 +4537,11 @@ yyreduce:
                else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4525 "util/configparser.c" /* yacc.c:1646  */
+#line 4541 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 365:
-#line 1937 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4534,11 +4550,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4538 "util/configparser.c" /* yacc.c:1646  */
+#line 4554 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 366:
-#line 1947 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4547,11 +4563,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4551 "util/configparser.c" /* yacc.c:1646  */
+#line 4567 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 367:
-#line 1957 "./util/configparser.y" /* yacc.c:1646  */
+#line 1959 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->forwards->name)
@@ -4560,31 +4576,31 @@ yyreduce:
                free(cfg_parser->cfg->forwards->name);
                cfg_parser->cfg->forwards->name = (yyvsp[0].str);
        }
-#line 4564 "util/configparser.c" /* yacc.c:1646  */
+#line 4580 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 368:
-#line 1967 "./util/configparser.y" /* yacc.c:1646  */
+#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 4574 "util/configparser.c" /* yacc.c:1646  */
+#line 4590 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 369:
-#line 1974 "./util/configparser.y" /* yacc.c:1646  */
+#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 4584 "util/configparser.c" /* yacc.c:1646  */
+#line 4600 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 370:
-#line 1981 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4592,11 +4608,11 @@ yyreduce:
                else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4596 "util/configparser.c" /* yacc.c:1646  */
+#line 4612 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 371:
-#line 1990 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4605,11 +4621,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4609 "util/configparser.c" /* yacc.c:1646  */
+#line 4625 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 372:
-#line 2000 "./util/configparser.y" /* yacc.c:1646  */
+#line 2002 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->views->name)
@@ -4618,11 +4634,11 @@ yyreduce:
                free(cfg_parser->cfg->views->name);
                cfg_parser->cfg->views->name = (yyvsp[0].str);
        }
-#line 4622 "util/configparser.c" /* yacc.c:1646  */
+#line 4638 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 373:
-#line 2010 "./util/configparser.y" /* yacc.c:1646  */
+#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 &&
@@ -4650,11 +4666,11 @@ yyreduce:
                                fatal_exit("out of memory adding local-zone");
                }
        }
-#line 4654 "util/configparser.c" /* yacc.c:1646  */
+#line 4670 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 374:
-#line 2039 "./util/configparser.y" /* yacc.c:1646  */
+#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));
@@ -4663,22 +4679,22 @@ yyreduce:
                        fatal_exit("out of memory adding per-view "
                                "response-ip action");
        }
-#line 4667 "util/configparser.c" /* yacc.c:1646  */
+#line 4683 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 375:
-#line 2049 "./util/configparser.y" /* yacc.c:1646  */
+#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 4678 "util/configparser.c" /* yacc.c:1646  */
+#line 4694 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 376:
-#line 2057 "./util/configparser.y" /* yacc.c:1646  */
+#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))) {
@@ -4686,11 +4702,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 4690 "util/configparser.c" /* yacc.c:1646  */
+#line 4706 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 377:
-#line 2066 "./util/configparser.y" /* yacc.c:1646  */
+#line 2068 "./util/configparser.y" /* yacc.c:1646  */
     {
                char* ptr;
                OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -4704,11 +4720,11 @@ yyreduce:
                        yyerror("local-data-ptr could not be reversed");
                }
        }
-#line 4708 "util/configparser.c" /* yacc.c:1646  */
+#line 4724 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 378:
-#line 2081 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4716,19 +4732,19 @@ yyreduce:
                else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4720 "util/configparser.c" /* yacc.c:1646  */
+#line 4736 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 379:
-#line 2090 "./util/configparser.y" /* yacc.c:1646  */
+#line 2092 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(remote-control:)\n")); 
        }
-#line 4728 "util/configparser.c" /* yacc.c:1646  */
+#line 4744 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 390:
-#line 2101 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4737,11 +4753,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4741 "util/configparser.c" /* yacc.c:1646  */
+#line 4757 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 391:
-#line 2111 "./util/configparser.y" /* yacc.c:1646  */
+#line 2113 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -4749,21 +4765,21 @@ yyreduce:
                else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4753 "util/configparser.c" /* yacc.c:1646  */
+#line 4769 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 392:
-#line 2120 "./util/configparser.y" /* yacc.c:1646  */
+#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 4763 "util/configparser.c" /* yacc.c:1646  */
+#line 4779 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 393:
-#line 2127 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4772,122 +4788,122 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4776 "util/configparser.c" /* yacc.c:1646  */
+#line 4792 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 394:
-#line 2137 "./util/configparser.y" /* yacc.c:1646  */
+#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 4786 "util/configparser.c" /* yacc.c:1646  */
+#line 4802 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 395:
-#line 2144 "./util/configparser.y" /* yacc.c:1646  */
+#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 4796 "util/configparser.c" /* yacc.c:1646  */
+#line 4812 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 396:
-#line 2151 "./util/configparser.y" /* yacc.c:1646  */
+#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 4806 "util/configparser.c" /* yacc.c:1646  */
+#line 4822 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 397:
-#line 2158 "./util/configparser.y" /* yacc.c:1646  */
+#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 4816 "util/configparser.c" /* yacc.c:1646  */
+#line 4832 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 398:
-#line 2165 "./util/configparser.y" /* yacc.c:1646  */
+#line 2167 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("\nP(dnstap:)\n"));
        }
-#line 4824 "util/configparser.c" /* yacc.c:1646  */
+#line 4840 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 413:
-#line 2182 "./util/configparser.y" /* yacc.c:1646  */
+#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 4835 "util/configparser.c" /* yacc.c:1646  */
+#line 4851 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 414:
-#line 2190 "./util/configparser.y" /* yacc.c:1646  */
+#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 4845 "util/configparser.c" /* yacc.c:1646  */
+#line 4861 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 415:
-#line 2197 "./util/configparser.y" /* yacc.c:1646  */
+#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 4856 "util/configparser.c" /* yacc.c:1646  */
+#line 4872 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 416:
-#line 2205 "./util/configparser.y" /* yacc.c:1646  */
+#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 4867 "util/configparser.c" /* yacc.c:1646  */
+#line 4883 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 417:
-#line 2213 "./util/configparser.y" /* yacc.c:1646  */
+#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 4877 "util/configparser.c" /* yacc.c:1646  */
+#line 4893 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 418:
-#line 2220 "./util/configparser.y" /* yacc.c:1646  */
+#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 4887 "util/configparser.c" /* yacc.c:1646  */
+#line 4903 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 419:
-#line 2227 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4895,11 +4911,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_resolver_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4899 "util/configparser.c" /* yacc.c:1646  */
+#line 4915 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 420:
-#line 2236 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4907,11 +4923,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_resolver_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4911 "util/configparser.c" /* yacc.c:1646  */
+#line 4927 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 421:
-#line 2245 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4919,11 +4935,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_client_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4923 "util/configparser.c" /* yacc.c:1646  */
+#line 4939 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 422:
-#line 2254 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4931,11 +4947,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_client_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4935 "util/configparser.c" /* yacc.c:1646  */
+#line 4951 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 423:
-#line 2263 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4943,11 +4959,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_forwarder_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4947 "util/configparser.c" /* yacc.c:1646  */
+#line 4963 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 424:
-#line 2272 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4955,29 +4971,29 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_forwarder_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4959 "util/configparser.c" /* yacc.c:1646  */
+#line 4975 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 425:
-#line 2281 "./util/configparser.y" /* yacc.c:1646  */
+#line 2283 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(python:)\n")); 
        }
-#line 4967 "util/configparser.c" /* yacc.c:1646  */
+#line 4983 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 429:
-#line 2290 "./util/configparser.y" /* yacc.c:1646  */
+#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 4977 "util/configparser.c" /* yacc.c:1646  */
+#line 4993 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 430:
-#line 2296 "./util/configparser.y" /* yacc.c:1646  */
+#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)
@@ -4986,21 +5002,21 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4990 "util/configparser.c" /* yacc.c:1646  */
+#line 5006 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 431:
-#line 2306 "./util/configparser.y" /* yacc.c:1646  */
+#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 5000 "util/configparser.c" /* yacc.c:1646  */
+#line 5016 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 432:
-#line 2313 "./util/configparser.y" /* yacc.c:1646  */
+#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));
@@ -5008,31 +5024,31 @@ yyreduce:
                        (yyvsp[-1].str), (yyvsp[0].str)))
                        fatal_exit("out of memory adding response-ip");
        }
-#line 5012 "util/configparser.c" /* yacc.c:1646  */
+#line 5028 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 433:
-#line 2322 "./util/configparser.y" /* yacc.c:1646  */
+#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 5023 "util/configparser.c" /* yacc.c:1646  */
+#line 5039 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 434:
-#line 2330 "./util/configparser.y" /* yacc.c:1646  */
+#line 2332 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("\nP(dnscrypt:)\n"));
                OUTYY(("\nP(dnscrypt:)\n"));
        }
-#line 5032 "util/configparser.c" /* yacc.c:1646  */
+#line 5048 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 444:
-#line 2344 "./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)
@@ -5040,11 +5056,11 @@ yyreduce:
                else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5044 "util/configparser.c" /* yacc.c:1646  */
+#line 5060 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 445:
-#line 2354 "./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)));
 
@@ -5053,52 +5069,52 @@ yyreduce:
                else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5057 "util/configparser.c" /* yacc.c:1646  */
+#line 5073 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 446:
-#line 2364 "./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 5067 "util/configparser.c" /* yacc.c:1646  */
+#line 5083 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 447:
-#line 2371 "./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 5077 "util/configparser.c" /* yacc.c:1646  */
+#line 5093 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 448:
-#line 2378 "./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 5087 "util/configparser.c" /* yacc.c:1646  */
+#line 5103 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 449:
-#line 2385 "./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 5098 "util/configparser.c" /* yacc.c:1646  */
+#line 5114 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 450:
-#line 2393 "./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)
@@ -5110,19 +5126,46 @@ yyreduce:
        }
        free((yyvsp[0].str));
   }
-#line 5114 "util/configparser.c" /* yacc.c:1646  */
+#line 5130 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 451:
-#line 2406 "./util/configparser.y" /* yacc.c:1646  */
+  case 453:
+#line 2410 "./util/configparser.y" /* yacc.c:1646  */
+    {
+       OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str)));
+       if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size))
+               yyerror("memory size expected");
+       free((yyvsp[0].str));
+  }
+#line 5141 "util/configparser.c" /* yacc.c:1646  */
+    break;
+
+  case 454:
+#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 5122 "util/configparser.c" /* yacc.c:1646  */
+#line 5165 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 456:
-#line 2415 "./util/configparser.y" /* yacc.c:1646  */
+  case 460:
+#line 2440 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef USE_CACHEDB
                OUTYY(("P(backend:%s)\n", (yyvsp[0].str)));
@@ -5135,11 +5178,11 @@ yyreduce:
                OUTYY(("P(Compiled without cachedb, ignoring)\n"));
        #endif
        }
-#line 5139 "util/configparser.c" /* yacc.c:1646  */
+#line 5182 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 457:
-#line 2429 "./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)));
@@ -5153,11 +5196,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 5157 "util/configparser.c" /* yacc.c:1646  */
+#line 5200 "util/configparser.c" /* yacc.c:1646  */
     break;
 
 
-#line 5161 "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
@@ -5385,7 +5428,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 2443 "./util/configparser.y" /* yacc.c:1906  */
+#line 2468 "./util/configparser.y" /* yacc.c:1906  */
 
 
 /* parse helper routines could be here */
index 468736007e2dc09ec08e7e6c5885c3c0608cd042..0e3f53ce4cb28d2f6f431da13e2e8d1851ca6acc 100644 (file)
@@ -254,16 +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_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 476
+    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.  */
@@ -476,16 +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_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 476
+#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
@@ -496,7 +500,7 @@ union YYSTYPE
 
        char*   str;
 
-#line 500 "util/configparser.h" /* yacc.c:1909  */
+#line 504 "util/configparser.h" /* yacc.c:1909  */
 };
 
 typedef union YYSTYPE YYSTYPE;
index 4ddc8fc3412b2f50e7c03c602f4274497a43e2db..1f72c73b08d863b131dcb7349f15688daf504897 100644 (file)
@@ -146,6 +146,8 @@ 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
@@ -2338,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
        {
@@ -2402,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"));
index 81ef487c5877e44a77b3c05531be646e256e5cab..d3c1a0c06b244f37b3f68f0d41ef4198cc8f5ed1 100644 (file)
@@ -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;
 }
index c0757ed7cdef3c2642dde8b6acf20ca10c87085f..a783c099b5a489b0f27dfee9a3f4959f57ec0b04 100644 (file)
@@ -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,