]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- insecure-lan-zones: yesno config option, patch from Dag-Erling
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 9 Feb 2016 13:25:59 +0000 (13:25 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 9 Feb 2016 13:25:59 +0000 (13:25 +0000)
  Smørgrav.

git-svn-id: file:///svn/unbound/trunk@3619 be551aaa-1e26-0410-a405-d3ace91eadb9

15 files changed:
Makefile.in
doc/Changelog
doc/example.conf.in
doc/unbound.conf.5.in
services/localzone.c
util/as112.c [new file with mode: 0644]
util/as112.h [new file with mode: 0644]
util/config_file.c
util/config_file.h
util/configlexer.c
util/configlexer.lex
util/configparser.c
util/configparser.h
util/configparser.y
validator/val_anchor.c

index 100be5a56a4c8abbd3c6e0ef75c13e7ac2124281..15d6d989c7efb0bd65f10e62d3b3493876c89ff9 100644 (file)
@@ -96,7 +96,7 @@ PYUNBOUND_SRC=
 # libunbound_wrap.lo if python libunbound wrapper enabled.
 PYUNBOUND_OBJ=@PYUNBOUND_OBJ@
 COMMON_SRC=services/cache/dns.c services/cache/infra.c services/cache/rrset.c \
-util/data/dname.c util/data/msgencode.c util/data/msgparse.c \
+util/as112.c util/data/dname.c util/data/msgencode.c util/data/msgparse.c \
 util/data/msgreply.c util/data/packed_rrset.c iterator/iterator.c \
 iterator/iter_delegpt.c iterator/iter_donotq.c iterator/iter_fwd.c \
 iterator/iter_hints.c iterator/iter_priv.c iterator/iter_resptype.c \
@@ -114,7 +114,7 @@ validator/val_neg.c validator/val_nsec3.c validator/val_nsec.c \
 validator/val_secalgo.c validator/val_sigcrypt.c \
 validator/val_utils.c dns64/dns64.c $(CHECKLOCK_SRC) $(DNSTAP_SRC)
 COMMON_OBJ_WITHOUT_NETCALL=dns.lo infra.lo rrset.lo dname.lo msgencode.lo \
-msgparse.lo msgreply.lo packed_rrset.lo iterator.lo iter_delegpt.lo \
+as112.lo msgparse.lo msgreply.lo packed_rrset.lo iterator.lo iter_delegpt.lo \
 iter_donotq.lo iter_fwd.lo iter_hints.lo iter_priv.lo iter_resptype.lo \
 iter_scrub.lo iter_utils.lo localzone.lo mesh.lo modstack.lo \
 outbound_list.lo alloc.lo config_file.lo configlexer.lo configparser.lo \
@@ -596,6 +596,7 @@ depend:
        rm -f $(DEPEND_TMP) $(DEPEND_TMP2)
 
 # Dependencies
+as112.lo as112.o: $(srcdir)/util/as112.c $(srcdir)/util/as112.h
 dns.lo dns.o: $(srcdir)/services/cache/dns.c config.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/util/log.h \
  $(srcdir)/validator/val_nsec.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
  $(srcdir)/util/locks.h $(srcdir)/services/cache/dns.h $(srcdir)/util/data/msgreply.h \
@@ -703,7 +704,7 @@ localzone.lo localzone.o: $(srcdir)/services/localzone.c config.h $(srcdir)/serv
  $(srcdir)/sldns/sbuffer.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h \
  $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgencode.h \
  $(srcdir)/util/net_help.h $(srcdir)/util/netevent.h $(srcdir)/util/data/msgreply.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h
+ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/util/as112.h
 mesh.lo mesh.o: $(srcdir)/services/mesh.c config.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
  $(srcdir)/util/netevent.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
  $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h \
@@ -822,7 +823,7 @@ val_anchor.lo val_anchor.o: $(srcdir)/validator/val_anchor.c config.h $(srcdir)/
  $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_sigcrypt.h \
  $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/validator/autotrust.h \
  $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h \
- $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h
+ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h $(srcdir)/util/as112.h
 validator.lo validator.o: $(srcdir)/validator/validator.c config.h $(srcdir)/validator/validator.h \
  $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
  $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
index 8108b860e4936d9040aa54dad4816fb770da78f7..5248826571aaf4eacd3f26fa403d0647c60eed71 100644 (file)
@@ -1,5 +1,7 @@
 9 February 2016: Wouter
        - Test for type OPENPGPKEY.
+       - insecure-lan-zones: yesno config option, patch from Dag-Erling
+         Smørgrav.
 
 8 February 2016: Wouter
        - Fix patch typo in prevuous commit for 734 from Adi Prasaja.
index b9175fa63d4d0caa927d59528feb48d2facdd7ad..0b7752bc777345a3b0a6bbd740656506585d461f 100644 (file)
@@ -517,13 +517,17 @@ server:
        # local-zone: "8.b.d.0.1.0.0.2.ip6.arpa." nodefault
        # And for 64.100.in-addr.arpa. to 127.100.in-addr.arpa.
 
-       # if unbound is running service for the local host then it is useful
+       # If unbound is running service for the local host then it is useful
        # to perform lan-wide lookups to the upstream, and unblock the
        # long list of local-zones above.  If this unbound is a dns server
        # for a network of computers, disabled is better and stops information
        # leakage of local lan information.
        # unblock-lan-zones: no
 
+       # The insecure-lan-zones option disables validation for
+       # these zones, as if they were all listed as domain-insecure.
+       # insecure-lan-zones: no
+
        # a number of locally served zones can be configured.
        #       local-zone: <zone> <type>
        #       local-data: "<resource record string>"
index f45315c2c572b8ad759808d68305c8441b0549c4..c0be896503ee03b315e7349b633c232d80ec94af 100644 (file)
@@ -857,6 +857,11 @@ as a (DHCP-) DNS network resolver for a group of machines, where such
 lookups should be filtered (RFC compliance), this also stops potential
 data leakage about the local network to the upstream DNS servers.
 .TP
+.B insecure\-lan\-zones: \fI<yesno>
+Default is disabled.  If enabled, then reverse lookups in private
+address space are not validated.  This is usually required whenever
+\fIunblock\-lan\-zones\fR is used.
+.TP
 .B local\-zone: \fI<zone> <type>
 Configure a local zone. The type determines the answer to give if
 there is no match from local\-data. The types are deny, refuse, static,
index b3a50532bae9bcef9e20c2aee155e5829017a717..1fcac9713a9035574e568803bf102c0740355bf5 100644 (file)
@@ -51,6 +51,7 @@
 #include "util/netevent.h"
 #include "util/data/msgreply.h"
 #include "util/data/msgparse.h"
+#include "util/as112.h"
 
 struct local_zones* 
 local_zones_create(void)
@@ -592,6 +593,7 @@ static int
 lz_enter_defaults(struct local_zones* zones, struct config_file* cfg)
 {
        struct local_zone* z;
+       const char** zstr;
 
        /* this list of zones is from RFC 6303 and RFC 7686 */
 
@@ -670,110 +672,14 @@ lz_enter_defaults(struct local_zones* zones, struct config_file* cfg)
                lock_rw_unlock(&z->lock);
        }
 
-       /* if unblock lan-zones, then do not add the zones below.
-        * we do add the zones above, about 127.0.0.1, because localhost is
-        * not on the lan. */
-       if(cfg->unblock_lan_zones)
-               return 1;
-
-       /* block LAN level zones */
-       if (    !add_as112_default(zones, cfg, "10.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "16.172.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "17.172.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "18.172.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "19.172.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "20.172.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "21.172.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "22.172.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "23.172.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "24.172.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "25.172.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "26.172.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "27.172.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "28.172.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "29.172.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "30.172.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "31.172.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "168.192.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "0.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "64.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "65.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "66.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "67.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "68.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "69.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "70.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "71.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "72.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "73.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "74.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "75.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "76.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "77.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "78.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "79.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "80.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "81.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "82.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "83.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "84.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "85.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "86.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "87.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "88.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "89.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "90.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "91.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "92.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "93.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "94.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "95.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "96.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "97.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "98.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "99.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "100.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "101.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "102.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "103.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "104.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "105.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "106.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "107.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "108.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "109.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "110.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "111.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "112.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "113.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "114.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "115.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "116.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "117.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "118.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "119.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "120.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "121.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "122.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "123.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "124.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "125.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "126.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "127.100.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "254.169.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "2.0.192.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "100.51.198.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "113.0.203.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "255.255.255.255.in-addr.arpa.") ||
-               !add_as112_default(zones, cfg, "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.") ||
-               !add_as112_default(zones, cfg, "d.f.ip6.arpa.") ||
-               !add_as112_default(zones, cfg, "8.e.f.ip6.arpa.") ||
-               !add_as112_default(zones, cfg, "9.e.f.ip6.arpa.") ||
-               !add_as112_default(zones, cfg, "a.e.f.ip6.arpa.") ||
-               !add_as112_default(zones, cfg, "b.e.f.ip6.arpa.") ||
-               !add_as112_default(zones, cfg, "8.b.d.0.1.0.0.2.ip6.arpa.")) {
-               log_err("out of memory adding default zone");
-               return 0;
+       /* block AS112 zones, unless asked not to */
+       if(!cfg->unblock_lan_zones) {
+               for(zstr = as112_zones; *zstr; zstr++) {
+                       if(!add_as112_default(zones, cfg, *zstr)) {
+                               log_err("out of memory adding default zone");
+                               return 0;
+                       }
+               }
        }
        return 1;
 }
diff --git a/util/as112.c b/util/as112.c
new file mode 100644 (file)
index 0000000..74482ca
--- /dev/null
@@ -0,0 +1,137 @@
+/*
+ * util/as112.c - list of local zones.
+ *
+ * Copyright (c) 2007, NLnet Labs. All rights reserved.
+ *
+ * This software is open source.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 
+ * Neither the name of the NLNET LABS nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "util/as112.h"
+
+static const char* as112_zone_array[] = {
+       "10.in-addr.arpa.",
+       "16.172.in-addr.arpa.",
+       "17.172.in-addr.arpa.",
+       "18.172.in-addr.arpa.",
+       "19.172.in-addr.arpa.",
+       "20.172.in-addr.arpa.",
+       "21.172.in-addr.arpa.",
+       "22.172.in-addr.arpa.",
+       "23.172.in-addr.arpa.",
+       "24.172.in-addr.arpa.",
+       "25.172.in-addr.arpa.",
+       "26.172.in-addr.arpa.",
+       "27.172.in-addr.arpa.",
+       "28.172.in-addr.arpa.",
+       "29.172.in-addr.arpa.",
+       "30.172.in-addr.arpa.",
+       "31.172.in-addr.arpa.",
+       "168.192.in-addr.arpa.",
+       "0.in-addr.arpa.",
+       "64.100.in-addr.arpa.",
+       "65.100.in-addr.arpa.",
+       "66.100.in-addr.arpa.",
+       "67.100.in-addr.arpa.",
+       "68.100.in-addr.arpa.",
+       "69.100.in-addr.arpa.",
+       "70.100.in-addr.arpa.",
+       "71.100.in-addr.arpa.",
+       "72.100.in-addr.arpa.",
+       "73.100.in-addr.arpa.",
+       "74.100.in-addr.arpa.",
+       "75.100.in-addr.arpa.",
+       "76.100.in-addr.arpa.",
+       "77.100.in-addr.arpa.",
+       "78.100.in-addr.arpa.",
+       "79.100.in-addr.arpa.",
+       "80.100.in-addr.arpa.",
+       "81.100.in-addr.arpa.",
+       "82.100.in-addr.arpa.",
+       "83.100.in-addr.arpa.",
+       "84.100.in-addr.arpa.",
+       "85.100.in-addr.arpa.",
+       "86.100.in-addr.arpa.",
+       "87.100.in-addr.arpa.",
+       "88.100.in-addr.arpa.",
+       "89.100.in-addr.arpa.",
+       "90.100.in-addr.arpa.",
+       "91.100.in-addr.arpa.",
+       "92.100.in-addr.arpa.",
+       "93.100.in-addr.arpa.",
+       "94.100.in-addr.arpa.",
+       "95.100.in-addr.arpa.",
+       "96.100.in-addr.arpa.",
+       "97.100.in-addr.arpa.",
+       "98.100.in-addr.arpa.",
+       "99.100.in-addr.arpa.",
+       "100.100.in-addr.arpa.",
+       "101.100.in-addr.arpa.",
+       "102.100.in-addr.arpa.",
+       "103.100.in-addr.arpa.",
+       "104.100.in-addr.arpa.",
+       "105.100.in-addr.arpa.",
+       "106.100.in-addr.arpa.",
+       "107.100.in-addr.arpa.",
+       "108.100.in-addr.arpa.",
+       "109.100.in-addr.arpa.",
+       "110.100.in-addr.arpa.",
+       "111.100.in-addr.arpa.",
+       "112.100.in-addr.arpa.",
+       "113.100.in-addr.arpa.",
+       "114.100.in-addr.arpa.",
+       "115.100.in-addr.arpa.",
+       "116.100.in-addr.arpa.",
+       "117.100.in-addr.arpa.",
+       "118.100.in-addr.arpa.",
+       "119.100.in-addr.arpa.",
+       "120.100.in-addr.arpa.",
+       "121.100.in-addr.arpa.",
+       "122.100.in-addr.arpa.",
+       "123.100.in-addr.arpa.",
+       "124.100.in-addr.arpa.",
+       "125.100.in-addr.arpa.",
+       "126.100.in-addr.arpa.",
+       "127.100.in-addr.arpa.",
+       "254.169.in-addr.arpa.",
+       "2.0.192.in-addr.arpa.",
+       "100.51.198.in-addr.arpa.",
+       "113.0.203.in-addr.arpa.",
+       "255.255.255.255.in-addr.arpa.",
+       "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.",
+       "d.f.ip6.arpa.",
+       "8.e.f.ip6.arpa.",
+       "9.e.f.ip6.arpa.",
+       "a.e.f.ip6.arpa.",
+       "b.e.f.ip6.arpa.",
+       "8.b.d.0.1.0.0.2.ip6.arpa.",
+       0
+};
+
+const char** as112_zones = as112_zone_array;
diff --git a/util/as112.h b/util/as112.h
new file mode 100644 (file)
index 0000000..af2a570
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * util/as112.c - list of local zones.
+ *
+ * Copyright (c) 2007, NLnet Labs. All rights reserved.
+ *
+ * This software is open source.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 
+ * Neither the name of the NLNET LABS nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef UTIL_AS112_H
+#define UTIL_AS112_H
+
+extern const char** as112_zones;
+
+#endif
index 1abd2260d0f9affd74ae6b997767b5e08fcc90d7..b450aaf385511403ab6d06862a9d62c5bffea638 100644 (file)
@@ -212,6 +212,7 @@ config_create(void)
        cfg->local_zones_nodefault = NULL;
        cfg->local_data = NULL;
        cfg->unblock_lan_zones = 0;
+       cfg->insecure_lan_zones = 0;
        cfg->python_script = NULL;
        cfg->remote_control_enable = 0;
        cfg->control_ifs = NULL;
@@ -462,6 +463,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
        else S_YNO("rrset-roundrobin:", rrset_roundrobin)
        else S_STRLIST("local-data:", local_data)
        else S_YNO("unblock-lan-zones:", unblock_lan_zones)
+       else S_YNO("insecure-lan-zones:", insecure_lan_zones)
        else S_YNO("control-enable:", remote_control_enable)
        else S_STRLIST("control-interface:", control_ifs)
        else S_NUMBER_NONZERO("control-port:", control_port)
@@ -745,6 +747,7 @@ config_get_option(struct config_file* cfg, const char* opt,
        else O_YNO(opt, "minimal-responses", minimal_responses)
        else O_YNO(opt, "rrset-roundrobin", rrset_roundrobin)
        else O_YNO(opt, "unblock-lan-zones", unblock_lan_zones)
+       else O_YNO(opt, "insecure-lan-zones", insecure_lan_zones)
        else O_DEC(opt, "max-udp-size", max_udp_size)
        else O_STR(opt, "python-script", python_script)
        else O_DEC(opt, "ratelimit", ratelimit)
index a6caabba738e2046d91246ebe66b81b4a56fb697..42917c434bbab202bb26df81684b5d72f395200d 100644 (file)
@@ -289,8 +289,10 @@ struct config_file {
        struct config_strlist* local_zones_nodefault;
        /** local data RRs configured */
        struct config_strlist* local_data;
-       /** unblock lan zones (reverse lookups for 10/8 and so on) */
+       /** unblock lan zones (reverse lookups for AS112 zones) */
        int unblock_lan_zones;
+       /** insecure lan zones (don't validate AS112 zones) */
+       int insecure_lan_zones;
 
        /** remote control section. enable toggle. */
        int remote_control_enable;
index 5949545f59a6b4e9d9c06759a19187b2e1b5212b..d4299f07ac199e26ee754790059cb58efc5d972f 100644 (file)
@@ -364,8 +364,8 @@ static void yy_fatal_error (yyconst char msg[]  );
        *yy_cp = '\0'; \
        (yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 178
-#define YY_END_OF_BUFFER 179
+#define YY_NUM_RULES 179
+#define YY_END_OF_BUFFER 180
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -373,204 +373,206 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[1783] =
+static yyconst flex_int16_t yy_accept[1800] =
     {   0,
-        1,    1,  160,  160,  164,  164,  168,  168,  172,  172,
-        1,    1,  179,  176,    1,  158,  158,  177,    2,  177,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      160,  161,  161,  162,  177,  164,  165,  165,  166,  177,
-      171,  168,  169,  169,  170,  177,  172,  173,  173,  174,
-      177,  175,  159,    2,  163,  177,  175,  176,    0,    1,
-        2,    2,    2,    2,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  160,    0,  164,    0,
-      171,    0,  168,  172,    0,  175,    0,    2,    2,  175,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-
-      176,  175,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  175,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-       73,  176,  176,  176,  176,  176,  176,    7,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  175,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  175,  176,  176,  176,
-      176,  176,   33,  176,  176,  176,  176,  176,  176,  176,
-      176,  139,  176,   13,   14,  176,   16,   15,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  132,  176,  176,
-      176,  176,  176,  176,  176,    3,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  175,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  167,  176,  176,  176,  176,  176,  176,
-
-      176,  176,  176,  176,  176,  176,  176,  176,   36,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,   37,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,   18,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,   88,  167,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-
-      176,  176,  176,  176,  176,   87,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,   71,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,   23,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,   34,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,   35,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,   25,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  152,  176,  176,  176,  176,  176,  176,   29,  176,
-       30,  176,  176,  176,   74,  176,   75,  176,   72,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,    6,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-
-      176,   90,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,   26,  176,  176,  176,  176,  176,
-      116,  115,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,   38,  176,  176,
-      176,  176,  176,  176,  176,  176,   77,   76,  176,  176,
-      176,  176,  176,  176,  176,  112,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-
-      176,  176,  176,  176,  176,  176,  176,   56,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,   60,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  114,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,    5,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-
-      176,  108,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  125,  176,  109,  176,  137,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,   24,  176,  176,  176,
-      176,   79,  176,   80,   78,  176,  176,  176,  176,  176,
-      176,  176,   86,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  110,  176,  176,  176,  176,  136,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,   70,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,   31,  176,
-      176,   20,  176,  176,  176,   17,  176,   95,  176,  176,
-
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,   45,   47,  176,  176,  176,  176,  176,  176,
-      176,  176,  140,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,   81,  176,  176,  176,
-      176,  176,  176,   85,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-       89,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  131,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,   99,  176,  103,
-
-      176,  176,  176,  176,   84,  176,  176,   66,  176,  123,
-      176,  176,  176,  176,  138,  176,  176,  176,  176,  176,
-      176,  176,  145,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  102,  176,  176,  176,  176,  176,
-       48,   49,  176,   32,   55,  104,  176,  117,  113,  176,
-      176,   41,  176,  106,  176,  176,  176,  176,  176,    8,
-      176,  176,  176,   69,  176,  176,  176,  176,  154,  176,
-      122,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,   91,  144,
-
-      176,  176,  176,  176,  176,  176,  176,  176,  133,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  105,  176,   40,   42,  176,  176,  176,
-      176,  176,  176,  176,   68,  176,  176,  176,  176,  153,
-      176,  176,  176,  176,  127,   21,   22,  176,  176,  176,
-      176,  176,  176,  176,   65,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  129,  126,  176,  176,  176,
-      176,  176,  176,  176,  176,   39,  176,  176,  176,  176,
-      176,  176,  176,   12,  176,  176,  176,  176,  176,  176,
-      176,  176,   11,  176,  176,   19,  176,  176,  176,  157,
-
-      176,   43,  176,  135,  128,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,   98,   97,  176,  176,
-      130,  124,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-       50,  176,  134,  176,  176,  176,  176,  176,  176,  176,
-      176,   44,  176,  176,  176,   92,   94,  118,  176,  176,
-      176,   96,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  141,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,   27,  176,  176,  176,
-        4,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-
-      176,  176,  176,  176,  176,  176,  176,  143,  176,  176,
-      121,  176,  176,  176,  176,  176,  176,  176,   53,  176,
-       28,  176,   10,  176,  176,  176,  176,  176,  119,   57,
-      176,  176,  176,  101,  176,  176,  176,  176,  176,  176,
-      176,  142,   82,  176,  176,  176,  176,   59,   63,   58,
-      176,   51,  176,    9,  176,  176,  155,  176,  176,  100,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-       64,   62,  176,   52,  176,  111,  176,  120,  176,  176,
-       93,   46,  176,  176,  176,  176,  176,  176,   83,   61,
-       54,  156,  176,  176,  176,  176,  176,  176,  176,  176,
-
-      176,  176,  176,  176,  176,  176,  176,  176,   67,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  107,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  148,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      146,  176,  149,  150,  176,  176,  176,  176,  176,  147,
-      151,    0
+        1,    1,  161,  161,  165,  165,  169,  169,  173,  173,
+        1,    1,  180,  177,    1,  159,  159,  178,    2,  178,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      161,  162,  162,  163,  178,  165,  166,  166,  167,  178,
+      172,  169,  170,  170,  171,  178,  173,  174,  174,  175,
+      178,  176,  160,    2,  164,  178,  176,  177,    0,    1,
+        2,    2,    2,    2,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  161,    0,  165,    0,
+      172,    0,  169,  173,    0,  176,    0,    2,    2,  176,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+
+      177,  177,  176,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  176,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,   73,  177,  177,  177,  177,  177,  177,
+        7,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  176,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      176,  177,  177,  177,  177,  177,   33,  177,  177,  177,
+      177,  177,  177,  177,  177,  140,  177,   13,   14,  177,
+       16,   15,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  133,  177,  177,  177,  177,  177,  177,  177,
+        3,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  176,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  168,  177,
+
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,   36,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,   37,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+       18,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,   88,  168,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,   87,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,   71,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,   23,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,   34,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,   35,  177,  177,  177,  177,  177,
+
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,   25,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  153,
+      177,  177,  177,  177,  177,  177,   29,  177,   30,  177,
+      177,  177,   74,  177,   75,  177,   72,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,    6,  177,  177,  177,  177,  177,  177,  177,
+
+      177,  177,  177,  177,  177,  177,  177,  177,  177,   90,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,   26,  177,  177,  177,  177,  177,  116,
+      115,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,   38,  177,  177,  177,
+      177,  177,  177,  177,  177,   77,   76,  177,  177,  177,
+      177,  177,  177,  177,  112,  177,  177,  177,  177,  177,
+
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,   56,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+       60,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  114,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,    5,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  108,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  126,  177,  109,  177,  138,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,   24,  177,  177,  177,
+      177,   79,  177,   80,   78,  177,  177,  177,  177,  177,
+      177,  177,   86,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  110,  177,  177,  177,  177,
+      137,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,   70,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,   31,
+
+      177,  177,   20,  177,  177,  177,   17,  177,   95,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,   45,   47,  177,  177,  177,  177,  177,
+      177,  177,  177,  141,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,   81,  177,  177,
+      177,  177,  177,  177,   85,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,   89,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  132,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+
+      177,  177,  177,  177,  177,  177,  177,  177,  177,   99,
+      177,  103,  177,  177,  177,  177,   84,  177,  177,   66,
+      177,  124,  177,  177,  177,  177,  139,  177,  177,  177,
+      177,  177,  177,  177,  146,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  102,  177,  177,  177,
+      177,  177,   48,   49,  177,  177,   32,   55,  104,  177,
+      117,  113,  177,  177,   41,  177,  106,  177,  177,  177,
+      177,  177,    8,  177,  177,  177,   69,  177,  177,  177,
+      177,  155,  177,  123,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,   91,  145,  177,  177,  177,  177,  177,  177,  177,
+      177,  134,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  105,  177,   40,
+       42,  177,  177,  177,  177,  177,  177,  177,   68,  177,
+      177,  177,  177,  154,  177,  177,  177,  177,  128,   21,
+       22,  177,  177,  177,  177,  177,  177,  177,   65,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  130,
+      127,  177,  177,  177,  177,  177,  177,  177,  177,   39,
+      177,  177,  177,  177,  177,  177,  177,   12,  177,  177,
+
+      177,  177,  177,  177,  177,  177,  177,   11,  177,  177,
+       19,  177,  177,  177,  158,  177,   43,  177,  136,  129,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,   98,   97,  177,  177,  131,  125,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,   50,  177,  177,  135,  177,
+      177,  177,  177,  177,  177,  177,  177,   44,  177,  177,
+      177,   92,   94,  118,  177,  177,  177,   96,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  142,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+
+      119,  177,  177,   27,  177,  177,  177,    4,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  144,  177,  177,  122,  177,  177,
+      177,  177,  177,  177,  177,   53,  177,   28,  177,   10,
+      177,  177,  177,  177,  177,  120,   57,  177,  177,  177,
+      101,  177,  177,  177,  177,  177,  177,  177,  143,   82,
+      177,  177,  177,  177,   59,   63,   58,  177,   51,  177,
+        9,  177,  177,  156,  177,  177,  100,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,   64,   62,  177,
+       52,  177,  111,  177,  121,  177,  177,   93,   46,  177,
+
+      177,  177,  177,  177,  177,   83,   61,   54,  157,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,   67,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  107,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  149,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  177,  177,  177,  177,  147,  177,  150,
+      151,  177,  177,  177,  177,  177,  148,  152,    0
+
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -613,411 +615,415 @@ static yyconst flex_int32_t yy_meta[40] =
         1,    1,    1,    1,    1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[1797] =
+static yyconst flex_int16_t yy_base[1814] =
     {   0,
         0,    0,   37,   40,   44,   51,   63,   75,   56,   68,
-       87,  108, 2901, 2687,   50, 3522, 3522, 3522,  129,   94,
+       87,  108, 2318, 2244,   50, 3568, 3568, 3568,  129,   94,
        70,  104,  130,   90,   92,  115,  127,   95,   84,  111,
       137,  148,   50,  170,  122,  150,  157,  160,  140,  166,
-     2325, 3522, 3522, 3522,   70, 2077, 3522, 3522, 3522,   42,
-     1892, 1777, 3522, 3522, 3522,  192, 1515, 3522, 3522, 3522,
-      141, 1235, 3522,  198, 3522,  202,  197, 1089,  210,  120,
+     2184, 3568, 3568, 3568,   70, 2017, 3568, 3568, 3568,   42,
+     1968, 1969, 3568, 3568, 3568,  192, 1824, 3568, 3568, 3568,
+      141, 1737, 3568,  198, 3568,  202,  197, 1673,  210,  120,
         0,  223,    0,    0,  103,  203,  180,  205,  164,  206,
       213,  210,  125,  216,  224,  218,  226,  227,  229,  230,
       231,  238,  248,  244,  240,  250,  253,  233,  249,  258,
 
-      264,  261,  265,  266,  267,  270,  269,  276,  277,  278,
-      173,  280,  283,  284,  285,  289,  295,  281,  291,  297,
-      301,  302,  303,  306,  308,  309,  737,  250,  392,  319,
-      382,  327,  363,  322,  333,  243,  339,  343,    0,  336,
-      340,  346,  314,  342,  338,  344,  347,  353,  351,  360,
-      363,  384,  364,  349,  366,   49,  358,  369,  372,  370,
-      375,  373,  376,  377,  379,  380,  394,  400,  407,  408,
-      406,  395,  414,  412,  423,  424,  420,  421,  422,  410,
-      425,  411,  429,  426,  435,  432,  436,  438,  441,  442,
-      449,  445,  446,  450,  458,  451,  452,  454,  467,  471,
-
-      472,  468,  459,  469,  481,  479,  487,  473,  475,  486,
-      483,  489,  495,  500,  498,  501,  490,  503,  504,  505,
-      510,  516,  512,  513,  515,  522,  521,  524,  523,  525,
-      527,  529,  530,  531,  533,  537,  536,  540,  543,  546,
-      535,  548,  550,  551,  558,  564,  559,  565,  566,  568,
-      570,  573,  571,  574,  581,  582,  583,  590,  584,  587,
-      588,  595,  596,  597,  605,  602,  598,  601,  599,  608,
-      610,  616,  631,  620,  618,  623,  632,  624,  628,  641,
-      626,  637,  625,  638,  659,  642,  652,  660,  656,  658,
-      667,  661,  668,  669,  673,  674,  671,  670,  677,  680,
-
-      683,  690,  678,  694,  698,  699,  696,  706,  704,  697,
-      711,  713,  701,  714,  715,  716,  717,  719,  721,  725,
-     3522,  728,  730,  731,  732,  733,  734, 3522,  735,  736,
-      738,  745,  748,  744,  750,  759,  743,  747,  760,  762,
-      763,  765,  764,  767,  787,  771,  773,  768,  777,  776,
-      774,  789,  775,  796,  783,  799,  801,  785,  802,  805,
-      806,  807,  808,  814,  817,  809,  819,  820,  822,  828,
-      829,  831,  832,  825,  836,  834,  847,  838,  845,  849,
-      857,  855,  859,  861,  860,  862,  864,  870,  869,  866,
-      863,  877,  874,  875,  882,  886,  878,  884,  893,  891,
-
-      892,  876,  899,  897,  901,  903,  905,  912,  908,  913,
-      915,  920,  909,  921,  928,  924,  930,  926,  937,  934,
-      938,  944,  940,  942,  953,  941,  946,  954,  950,  955,
-      957,  958,  959,  961,  962,  964,  966,  972,  969,  971,
-      974,  979,  911,  980,  984,  986,  989,  679,  987,  991,
-      994,  996,  993,  997, 1003,  995, 1008, 1007, 1014, 1006,
-     1015, 1017, 3522, 1025, 1019, 1021, 1022, 1028, 1029, 1030,
-     1056, 3522, 1031, 3522, 3522, 1032, 3522, 3522, 1034, 1035,
-     1038, 1044, 1079, 1045, 1048, 1037, 1051, 1053, 1057, 1058,
-     1067, 1069, 1060, 1071, 1073, 1074, 1077, 1085, 1087, 1084,
-
-     1072, 1095, 1102, 1108, 1109, 1107, 1105, 1106, 1112, 1113,
-     1116, 1115, 1117, 1119, 1124, 1128, 1125, 3522, 1126, 1129,
-     1127, 1133, 1139, 1134, 1142, 3522, 1137, 1141, 1143, 1148,
-     1150, 1151, 1152, 1155, 1156, 1154, 1157, 1162, 1163, 1178,
-     1160, 1165, 1175, 1186, 1183, 1182, 1184, 1185, 1167, 1191,
-     1194, 1195, 1193, 1197, 1204, 1200, 1203, 1206, 1207, 1208,
-     1209, 1213, 1215, 1214, 1238, 1217, 1216, 1219, 1218, 1225,
-     1226, 1232, 1223, 1224, 1245, 1248, 1242, 1236, 1251, 1252,
-     1266, 1262, 1255, 1264, 1271, 1272, 1273, 1275, 1278, 1276,
-     1277, 1282, 1279, 3522, 1292, 1291, 1289, 1293, 1295, 1297,
-
-     1298, 1301, 1299, 1302, 1303, 1305, 1304, 1317, 3522, 1309,
-     1311, 1315, 1320, 1321, 1322, 1324, 1331, 1339, 1335, 3522,
-     1341, 1342, 1344, 1337, 1338, 1345, 1349, 1350, 1352, 1354,
-     1356, 1357, 1355, 1362, 1365, 1366, 1367, 1374, 1370, 1372,
-     1376, 1379, 1378, 1381, 3522, 1380, 1384, 1382, 1389, 1395,
-     1399, 1397, 1403, 1400, 1404, 1405, 1410, 1407, 1411, 1408,
-     1409, 3522,  158, 1414, 1415, 1413, 1421, 1429, 1426, 1432,
-     1422, 1435, 1438, 1439, 1423, 1440, 1441, 1445, 1446, 1447,
-     1448, 1450, 1452, 1456, 1458, 1459, 1461, 1465, 1466, 1467,
-     1470, 1469, 1473, 1476, 1478, 1480, 1482, 1484, 1481, 1483,
-
-     1487, 1491, 1492, 1490, 1494, 3522, 1506, 1498, 1508, 1499,
-     1509, 1518, 1502, 1522, 1511, 1520, 1530, 1526, 1528, 1531,
-     1534, 1532, 1537, 1538, 1539, 1545, 1548, 1544, 1546, 1558,
-     1553, 1551, 3522, 1555, 1556, 1547, 1560, 1580, 1563, 1564,
-     1573, 1568, 1566, 1561, 1588, 1570, 1590, 3522, 1591, 1592,
-     1593, 1596, 1598, 1600, 1601, 1603, 1604, 1605, 1607, 1608,
-     1616, 1609, 1614, 1619, 3522, 1628, 1630, 1629, 1636, 1632,
-     1621, 1611, 1638, 1633, 1635, 1644, 1642, 1643, 1645, 1646,
-     1647, 1649, 1650, 1652, 1654, 1651, 1655, 3522, 1666, 1667,
-     1671, 1678, 1668, 1677, 1681, 1673, 1683, 1686, 1687, 1688,
-
-     1689, 1690, 1691, 1696, 1692, 1694, 1698, 1700, 1697, 1699,
-     1717, 1701, 1703, 1709, 1719, 1720, 1722, 1723, 1730, 1732,
-     1735, 3522, 1738, 1729, 1739, 1731, 1733, 1751, 1741, 1742,
-     1748, 1749, 1753, 1754, 1762, 1755, 1758, 1759, 1763, 1756,
-     1764, 1765, 1768, 1773, 1771, 1779, 1786, 1781, 1787, 1788,
-     1789, 3522, 1792, 1798, 1799, 1802, 1793, 1805, 3522, 1803,
-     3522, 1809, 1810, 1820, 3522, 1817, 3522, 1819, 3522, 1822,
-     1823, 1826, 1807, 1828, 1829, 1830, 1836, 1827, 1837, 1831,
-     1833, 1839, 1840, 1846, 3522, 1848, 1849, 1854, 1852, 1850,
-     1856, 1858, 1860, 1862, 1868, 1874, 1861, 1877, 1865, 1883,
-
-     1878, 3522, 1871, 1885, 1875, 1888, 1891, 1898, 1896, 1890,
-     1900, 1889, 1903, 1907, 1910, 1904, 1912, 1913, 1915, 1921,
-     1917, 1918, 1925, 1927, 1919, 1926, 1928, 1929, 1930, 1934,
-     1941, 1935, 1938, 1939, 3522, 1944, 1950, 1945, 1954, 1951,
-     3522, 3522, 1957, 1959, 1964, 1961, 1970, 1953, 1971, 1973,
-     1981, 1975, 1968, 1978, 1984, 1985, 1987, 1986, 1989, 1990,
-     1992, 1994, 1995, 1996, 2005, 2000, 1997, 3522, 2016, 2007,
-     2018, 2017, 2019, 2026, 2022, 2024, 3522, 3522, 2028, 2029,
-     2030, 2031, 2037, 2038, 2034, 3522, 2040, 2041, 2044, 2046,
-     2053, 2047, 2043, 2055, 2062, 2057, 2065, 2063, 2064, 2059,
-
-     2073, 2067, 2069, 2074, 2082, 2083, 2085, 3522, 2088, 2090,
-     2091, 2093, 2092, 2094, 2095, 2099, 2096, 2100, 2102, 2108,
-     2114, 2111, 2112, 2113, 2116, 2119, 2122, 2124, 2125, 2135,
-     2134, 3522, 2141, 2126, 2143, 2127, 2146, 2147, 2154, 2150,
-     2140, 2151, 2153, 2128, 2155, 2157, 2158, 2165, 2159, 3522,
-     2161, 2168, 2172, 2174, 2177, 2175, 2182, 2178, 2180, 3522,
-     2185, 2193, 2189, 2191, 2197, 2199, 2203, 2195, 2205, 2206,
-     2208, 2207, 2210, 2211, 2212, 2215, 2217, 2218, 2220, 2222,
-     2221, 2224, 2225, 2234, 2231, 2239, 2245, 2243, 2249, 2251,
-     2247, 2250, 2259, 2255, 2256, 2257, 2258, 2266, 2263, 2270,
-
-     2264, 3522, 2268, 2274, 2278, 2280, 2272, 2281, 2284, 2282,
-     2286, 3522, 2291, 3522, 2290, 3522, 2293, 2298, 2294, 2299,
-     2300, 2301, 2303, 2304, 2311, 2310, 3522, 2315, 2312, 2313,
-     2317, 3522, 2329, 3522, 3522, 2319, 2321, 2336, 2323, 2332,
-     2337, 2342, 3522, 2338, 2343, 2346, 2344, 2348, 2349, 2350,
-     2352, 2351, 2354, 2355, 3522, 2360, 2356, 2359, 2367, 3522,
-     2357, 2373, 2368, 2378, 2379, 2380, 2382, 2370, 2384, 2391,
-     2390, 2389, 2392, 3522, 2393, 2396, 2398, 2405, 2399, 2401,
-     2408, 2411, 2407, 2413, 2415, 2417, 2420, 2418, 3522, 2423,
-     2426, 3522, 2422, 2432, 2433, 3522, 2434, 3522, 2436, 2438,
-
-     2437, 2439, 2444, 2441, 2446, 2447, 2451, 2454, 2456, 2458,
-     2460, 2461, 3522, 3522, 2464, 2465, 2471, 2472, 2467, 2475,
-     2477, 2484, 3522, 2476, 2480, 2486, 2487, 2489, 2478, 2488,
-     2491, 2495, 2492, 2498, 2497, 2500, 3522, 2505, 2506, 2508,
-     2510, 2512, 2511, 3522, 2514, 2515, 2516, 2520, 2522, 2525,
-     2537, 2539, 2533, 2541, 2543, 2545, 2547, 2549, 2551, 2552,
-     3522, 2553, 2555, 2556, 2560, 2561, 2557, 2562, 2567, 2570,
-     2572, 2573, 2574, 2577, 3522, 2564, 2578, 2580, 2517, 2582,
-     2585, 2587, 2589, 2596, 2590, 2594, 2598, 2592, 2600, 2602,
-     2605, 2607, 2609, 2611, 2612, 2619, 2621, 3522, 2608, 3522,
-
-     2624, 2629, 2632, 2634, 3522, 2616, 2636, 3522, 2637, 3522,
-     2638, 2639, 2640, 2647, 3522, 2651, 2642, 2652, 2654, 2648,
-     2655, 2657, 3522, 2659, 2661, 2668, 2665, 2669, 2671, 2672,
-     2673, 2675, 2682, 2678, 3522, 2679, 2681, 2688, 2690, 2692,
-     3522, 3522, 2696, 3522, 3522, 3522, 2700, 3522, 3522, 2701,
-     2703, 3522, 2705, 3522, 2712, 2708, 2710, 2691, 2711, 3522,
-     2714, 2715, 2718, 3522, 2719, 2725, 2721, 2722, 3522, 2724,
-     3522, 2729, 2730, 2731, 2735, 2742, 2744, 2747, 2736, 2738,
-     2749, 2750, 2751, 2752, 2753, 2755, 2758, 2759, 2760, 2764,
-     2765, 2768, 2766, 2769, 2770, 2771, 2779, 2787, 3522, 3522,
-
-     2772, 2781, 2774, 2783, 2788, 2790, 2793, 2794, 3522, 2801,
-     2798, 2802, 2804, 2805, 2806, 2812, 2808, 2814, 2820, 2816,
-     2817, 2818, 2821, 3522, 2825, 3522, 3522, 2822, 2826, 2831,
-     2833, 2835, 2839, 2836, 3522, 2843, 2845, 2847, 2850, 3522,
-     2852, 2854, 2856, 2860, 3522, 3522, 3522, 2861, 2857, 2865,
-     2864, 2866, 2867, 2868, 3522, 2870, 2872, 2875, 2878, 2882,
-     2884, 2892, 2889, 2891, 2896, 3522, 3522, 2902, 2899, 2900,
-     2898, 2901, 2904, 2906, 2908, 3522, 2910, 2909, 2915, 2914,
-     2917, 2918, 2921, 3522, 2922, 2924, 2929, 2932, 2925, 2936,
-     2937, 2933, 3522, 2940, 2939, 3522, 2942, 2943, 2947, 3522,
-
-     2950, 3522, 2954, 3522, 3522, 2955, 2958, 2960, 2965, 2967,
-     2969, 2956, 2970, 2976, 2973, 2977, 3522, 3522, 2979, 2983,
-     3522, 3522, 2980, 2982, 2986, 2988, 2989, 2991, 2992, 2993,
-     2994, 2995, 2999, 3002, 3005, 3006, 3007, 3012, 3009, 3014,
-     3522, 3016, 3522, 3017, 3023, 3020, 3027, 3015, 3032, 3025,
-     3028, 3522, 3039, 3040, 3041, 3522, 3522, 3522, 3042, 3043,
-     3045, 3522, 3046, 3049, 3050, 3053, 3055, 3057, 3061, 3059,
-     3063, 3522, 3064, 3065, 3068, 3069, 3072, 3071, 3076, 3077,
-     3086, 3078, 3089, 3079, 3093, 3094, 3522, 3097, 3082, 3090,
-     3522, 3100, 3103, 3105, 3107, 3109, 3110, 3111, 3112, 3115,
-
-     3116, 3118, 3119, 3120, 3126, 3125, 3131, 3522, 3134, 3122,
-     3522, 3135, 3136, 3144, 3146, 3148, 3152, 3153, 3522, 3155,
-     3522, 3156, 3522, 3160, 3161, 3162, 3164, 3165, 3522, 3522,
-     3166, 3168, 3172, 3522, 3173, 3169, 3176, 3179, 3180, 3182,
-     3183, 3522, 3522, 3184, 3186, 3190, 3187, 3522, 3522, 3522,
-     3193, 3522, 3196, 3522, 3202, 3199, 3522, 3206, 3207, 3522,
-     3208, 3210, 3212, 3214, 3215, 3216, 3218, 3219, 3217, 3221,
-     3522, 3522, 3228, 3522, 3232, 3522, 3234, 3522, 3229, 3242,
-     3522, 3522, 3240, 3238, 3244, 3245, 3247, 3246, 3522, 3522,
-     3522, 3522, 3250, 3248, 3253, 3251, 3255, 3256, 3257, 3259,
-
-     3261, 3258, 3271, 3275, 3263, 3269, 3283, 3277, 3522, 3279,
-     3281, 3290, 3292, 3289, 3286, 3293, 3295, 3296, 3297, 3298,
-     3301, 3302, 3308, 3304, 3305, 3314, 3316, 3317, 3318, 3329,
-     3326, 3327, 3328, 3330, 3336, 3332, 3333, 3522, 3335, 3338,
-     3339, 3341, 3342, 3345, 3344, 3352, 3355, 3359, 3360, 3361,
-     3366, 3362, 3368, 3370, 3371, 3372, 3522, 3373, 3374, 3377,
-     3381, 3382, 3384, 3385, 3386, 3393, 3388, 3398, 3402, 3399,
-     3522, 3405, 3522, 3522, 3407, 3390, 3394, 3415, 3417, 3522,
-     3522, 3522, 3430, 3437, 3444, 3451, 3458,   94, 3465, 3472,
-     3479, 3486, 3493, 3500, 3507, 3514
-
+      264,  261,  265,  266,  269,  270,  273,  276,  278,  280,
+      173,  281,  282,  284,  285,  290,  291,  293,  296,  292,
+      298,  302,  307,  306,  303,  313, 1512,  250, 1433,  325,
+     1243,  333,  498,  453,  329,  243,  343,  347,    0,  326,
+      328,  345,  342,  343,  344,  346,  348,  354,  353,  364,
+      352,  373,  365,  356,  362,   49,  370,  371,  369,  380,
+      384,  360,  381,  385,  388,  391,  397,  403,  400,  409,
+      407,  405,  406,  417,  416,  423,  424,  422,  379,  312,
+      410,  420,  425,  428,  431,  432,  433,  434,  435,  438,
+      439,  446,  442,  443,  449,  455,  451,  452,  465,  468,
+
+      472,  459,  469,  471,  474,  480,  479,  488,  476,  477,
+      485,  473,  489,  496,  502,  500,  503,  494,  505,  506,
+      507,  508,  518,  512,  514,  516,  524,  522,  523,  525,
+      527,  528,  530,  531,  532,  534,  535,  543,  545,  539,
+      537,  544,  550,  555,  558,  559,  564,  566,  556,  560,
+      565,  572,  578,  579,  582,  580,  585,  586,  567,  593,
+      589,  591,  594,  592,  600,  601,  607,  603,  604,  611,
+      605,  612,  615,  613,  635,  614,  623,  622,  633,  624,
+      628,  641,  630,  640,  642,  644,  661,  645,  655,  663,
+      646,  666,  670,  664,  672,  673,  676,  675,  674,  679,
+
+      680,  682,  683,  681,  695,  687,  698,  685,  701,  705,
+      702,  708,  710,  711,  719,  700,  715,  716,  718,  725,
+      727,  717,  729, 3568,  733,  720,  731,  735,  736,  737,
+     3568,  740,  742,  743,  750,  746,  747,  751,  753,  754,
+      758,  761,  763,  764,  765,  768,  766,  786,  769,  771,
+      775,  778,  774,  776,  797,  781,  799,  788,  793,  795,
+      801,  804,  808,  807,  809,  814,  811,  822,  818,  819,
+      821,  823,  825,  827,  832,  833,  835,  838,  840,  847,
+      845,  849,  852,  860,  854,  862,  868,  843,  865,  867,
+      874,  872,  873,  857,  880,  879,  881,  882,  883,  886,
+
+      888,  889,  896,  893,  897,  904,  905,  898,  907,  899,
+      909,  918,  914,  916,  922,  923,  917,  924,  931,  927,
+      933,  929,  942,  939,  940,  948,  945,  944,  951,  955,
+      949,  956,  959,  960,  961,  963,  965,  964,  966,  967,
+      971,  975,  972,  974,  987,  990,  984,  992,  982,  989,
+      996,  999, 1000, 1003, 1002, 1011, 1001, 1013, 1012, 1004,
+     1017,  976, 1023, 1014, 1024, 1028, 3568, 1031, 1030, 1029,
+     1032, 1036, 1038, 1015, 1057, 3568, 1039, 3568, 3568, 1042,
+     3568, 3568, 1043, 1045, 1049, 1060, 1080, 1058, 1046, 1047,
+     1065, 1071, 1067, 1077, 1073, 1085, 1089, 1090, 1091, 1083,
+
+     1075, 1097, 1100, 1103, 1105, 1101, 1106, 1110, 1112, 1118,
+     1114, 1115, 1122, 1123, 1124, 1127, 1126, 1125, 1129, 1135,
+     1139, 1136, 3568, 1137, 1138, 1145, 1140, 1149, 1141, 1157,
+     3568, 1151, 1153, 1152, 1159, 1161, 1162, 1165, 1163, 1166,
+     1169, 1171, 1164, 1170, 1186, 1175, 1177, 1192, 1194, 1193,
+     1181, 1190, 1196, 1198, 1203, 1210, 1206, 1199, 1048, 1212,
+     1208, 1214, 1216, 1211, 1218, 1220, 1221, 1223, 1224, 1246,
+     1225, 1227, 1231, 1232, 1230, 1234, 1236, 1254, 1238, 1259,
+     1260, 1252, 1240, 1263, 1269, 1273, 1270, 1272, 1280, 1279,
+     1282, 1286, 1283, 1233, 1281, 1289, 1291, 1297, 3568, 1303,
+
+     1299, 1292, 1300, 1309, 1305, 1306, 1307, 1312, 1314, 1315,
+     1316, 1317, 1318, 1324, 3568, 1322, 1326, 1328, 1329, 1330,
+     1332, 1338, 1339, 1350, 1342, 3568, 1353, 1356, 1346, 1351,
+     1354, 1358, 1359, 1361, 1362, 1363, 1366, 1369, 1370, 1372,
+     1377, 1380, 1367, 1381, 1382, 1387, 1388, 1390, 1391, 1392,
+     3568, 1393, 1395, 1394, 1401, 1404, 1407, 1409, 1415, 1410,
+     1412, 1416, 1421, 1418, 1422, 1419, 1420, 3568,  158, 1423,
+     1425, 1427, 1435, 1439, 1441, 1443, 1442, 1444, 1449, 1450,
+     1432, 1452, 1453, 1460, 1455, 1457, 1461, 1468, 1466, 1470,
+     1462, 1475, 1464, 1474, 1479, 1480, 1485, 1486, 1487, 1488,
+
+     1489, 1492, 1493, 1494, 1495, 1496, 1498, 1502, 1503, 1501,
+     1510, 3568, 1520, 1509, 1522, 1511, 1524, 1513, 1533, 1526,
+     1534, 1527, 1537, 1541, 1538, 1542, 1543, 1549, 1544, 1551,
+     1552, 1554, 1560, 1562, 1558, 1561, 1573, 1567, 1559, 3568,
+     1571, 1564, 1574, 1569, 1581, 1583, 1577, 1586, 1584, 1585,
+     1588, 1600, 1590, 1602, 3568, 1604, 1606, 1595, 1609, 1610,
+     1616, 1612, 1619, 1620, 1621, 1623, 1622, 1624, 1628, 1629,
+     1632, 3568, 1638, 1641, 1637, 1648, 1644, 1645, 1647, 1650,
+     1634, 1651, 1657, 1655, 1656, 1659, 1660, 1661, 1663, 1665,
+     1666, 1667, 1668, 1677, 3568, 1686, 1670, 1680, 1687, 1692,
+
+     1698, 1695, 1694, 1696,  866, 1700, 1697, 1701, 1703, 1704,
+     1707, 1709, 1710, 1711, 1712, 1713, 1716, 1722, 1730, 1720,
+     1731, 1733, 1736, 1734, 1739, 1746, 1750, 1751, 1753, 3568,
+     1757, 1743, 1758, 1759, 1747, 1765, 1768, 1762, 1769, 1749,
+     1770, 1771, 1779, 1772, 1776, 1778, 1780, 1782, 1783, 1785,
+     1786, 1714, 1790, 1793, 1801, 1794, 1803, 1806, 1808, 3568,
+     1809, 1816, 1813, 1817, 1811, 1825, 3568, 1822, 3568, 1823,
+     1832, 1835, 3568, 1837, 3568, 1839, 3568, 1841, 1842, 1834,
+     1826, 1845, 1847, 1846, 1854, 1848, 1855, 1850, 1858, 1860,
+     1857, 1862, 3568, 1863, 1865, 1870, 1873, 1866, 1874, 1875,
+
+     1877, 1880, 1883, 1890, 1887, 1896, 1889, 1893, 1895, 3568,
+     1898, 1899, 1902, 1904, 1905, 1915, 1912, 1909, 1916, 1906,
+     1925, 1932, 1919, 1926, 1929, 1913, 1930, 1939, 1936, 1937,
+     1941, 1938, 1945, 1946, 1947, 1950, 1949, 1952, 1956, 1953,
+     1954, 1955, 1957, 3568, 1970, 1962, 1972, 1971, 1960, 3568,
+     3568, 1982, 1984, 1985, 1986, 1988, 1989, 1991, 1992, 1998,
+     1995, 1996, 1999, 2004, 2005, 2007, 2006, 2009, 2010, 2013,
+     2011, 2015, 2020, 2029, 2026, 2021, 3568, 2036, 2032, 2042,
+     2040, 2033, 2048, 2041, 2049, 3568, 3568, 1784, 2047, 2045,
+     2051, 2061, 2055, 2057, 3568, 2059, 2062, 2064, 2067, 2068,
+
+     2065, 2076, 2077, 2081, 2082, 2078, 2083, 2086, 2084, 2093,
+     2089, 2087, 2091, 2107, 2108, 2110, 3568, 2104, 2115, 2090,
+     2112, 2116, 2118, 2119, 2121, 2120, 2123, 2122, 2128, 2136,
+     2124, 2132, 2133, 2139, 2135, 2141, 2147, 2144, 2154, 2156,
+     3568, 2157, 2150, 2163, 2160, 2162, 2164, 2171, 2167, 2169,
+     2170, 2177, 2173, 2174, 2175, 2183, 2176, 2191, 2178, 3568,
+     2194, 2200, 2195, 2197, 2205, 2187, 2206, 2201, 2208, 3568,
+     2211, 2217, 2209, 2215, 2223, 2225, 2231, 2221, 2219, 2232,
+     2234, 2233, 2235, 2236, 2237, 2239, 2241, 2242, 2243, 2094,
+     2246, 2248, 2249, 2251, 2257, 2259, 2267, 2269, 2271, 2277,
+
+     2264, 2274, 2280, 2276, 2279, 2281, 2282, 2289, 2287, 2296,
+     2285, 3568, 2292, 2298, 2301, 2303, 2294, 2304, 2306, 2312,
+     2308, 3568, 2315, 3568, 2313, 3568, 2316, 2322, 2319, 2323,
+     2324, 2326, 2327, 2329, 2335, 2333, 3568, 2336, 2338, 2340,
+     2341, 3568, 2344, 3568, 3568, 2346, 2351, 2357, 2353, 2354,
+     2358, 2363, 3568, 2359, 2364, 2367, 2369, 2371, 2373, 2374,
+     2375, 2372, 2376, 2377, 2379, 3568, 2383, 2380, 2389, 2381,
+     3568, 2394, 2396, 2393, 2400, 2401, 2404, 2406, 2402, 2410,
+     2417, 2413, 2414, 2415, 3568, 2416, 2422, 2425, 2428, 2426,
+     2431, 2437, 2433, 2440, 2434, 2443, 2445, 2439, 2444, 3568,
+
+     2449, 2453, 3568, 2450, 2457, 2459, 3568, 2460, 3568, 2461,
+     2464, 2462, 2465, 2469, 2471, 2473, 2470, 2478, 2476, 2483,
+     2485, 2486, 2488, 3568, 3568, 2491, 2492, 2498, 2499, 2493,
+     2495, 2502, 2504, 3568, 2506, 2509, 2510, 2511, 2512, 2516,
+     2519, 2521, 2518, 2515, 2523, 2524, 2525, 3568, 2529, 2527,
+     2536, 2532, 2537, 2538, 3568, 2540, 2542, 2541, 2543, 2547,
+     2561, 2564, 2566, 2556, 2567, 2569, 2573, 2575, 2558, 2579,
+     2582, 2570, 3568, 2583, 2585, 2576, 2587, 2590, 2591, 2593,
+     2598, 2601, 2592, 2594, 2602, 2604, 3568, 2605, 2606, 2607,
+     2612, 2618, 2613, 2620, 2610, 2623, 2626, 2615, 2628, 2630,
+
+     2631, 2637, 2634, 2638, 2640, 2641, 2642, 2648, 2647, 3568,
+     2645, 3568, 2652, 2659, 2662, 2663, 3568, 2654, 2666, 3568,
+     2667, 3568, 2668, 2673, 2670, 2677, 3568, 2681, 2674, 2682,
+     2684, 2685, 2686, 2691, 3568, 2689, 2694, 2701, 2698, 2687,
+     2695, 2702, 2704, 2708, 2715, 2711, 3568, 2712, 2714, 2721,
+     2718, 2546, 3568, 3568, 2720, 2722, 3568, 3568, 3568, 2730,
+     3568, 3568, 2727, 2736, 3568, 2738, 3568, 2744, 2740, 2731,
+     2733, 2743, 3568, 2742, 2745, 2750, 3568, 2751, 2758, 2746,
+     2752, 3568, 2763, 3568, 2754, 2766, 2756, 2769, 2772, 2776,
+     2778, 2773, 2765, 2779, 2780, 2781, 2782, 2784, 2789, 2786,
+
+     2790, 2794, 2796, 2797, 2798, 2799, 2800, 2801, 2802, 2811,
+     2819, 3568, 3568, 2803, 2808, 2805, 2813, 2815, 2820, 2825,
+     2828, 3568, 2831, 2832, 2835, 2834, 2836, 2837, 2844, 2838,
+     2846, 2852, 2848, 2850, 2839, 2851, 2853, 3568, 2859, 3568,
+     3568, 2861, 2864, 2863, 2868, 2869, 2871, 2872, 3568, 2874,
+     2875, 2885, 2877, 3568, 2892, 2880, 2894, 2896, 3568, 3568,
+     3568, 2897, 2882, 2900, 2901, 2902, 2886, 2903, 3568, 2908,
+     2910, 2912, 2913, 2919, 2921, 2927, 2924, 2926, 2931, 3568,
+     3568, 2937, 2934, 2935, 2933, 2936, 2939, 2941, 2943, 3568,
+     2945, 2944, 2950, 2949, 2952, 2953, 2956, 3568, 2957, 2959,
+
+     2964, 2967, 2968, 2960, 2971, 2972, 2973, 3568, 2975, 2977,
+     3568, 2981, 2974, 2982, 3568, 2991, 3568, 2994, 3568, 3568,
+     2986, 2995, 2998, 3000, 3003, 3005, 2989, 3008, 3014, 3011,
+     3012, 3568, 3568, 3013, 3020, 3568, 3568, 3017, 3018, 3021,
+     3024, 3026, 3028, 3029, 3025, 3030, 3031, 3036, 3038, 3041,
+     3042, 2888, 3043, 3045, 3047, 3568, 3051, 3053, 3568, 3055,
+     3058, 3059, 3060, 3061, 3071, 3064, 3066, 3568, 3072, 3068,
+     3074, 3568, 3568, 3568, 3078, 3084, 3079, 3568, 3082, 3086,
+     3089, 3090, 3091, 3092, 3098, 3094, 3101, 3568, 3097, 3102,
+     3104, 3108, 3105, 3106, 3107, 3113, 3115, 3118, 3124, 3127,
+
+     3568, 3129, 3125, 3568, 3132, 3133, 3134, 3568, 3135, 3137,
+     3138, 3140, 3142, 3143, 3147, 3145, 3149, 3152, 3150, 3156,
+     3154, 3163, 3166, 3168, 3568, 3172, 3155, 3568, 3175, 3176,
+     3177, 3179, 3186, 3188, 3189, 3568, 3192, 3568, 3195, 3568,
+     3198, 3193, 3199, 3201, 3204, 3568, 3568, 3202, 3206, 3211,
+     3568, 3212, 3169, 3203, 3213, 3214, 3215, 3218, 3568, 3568,
+     3219, 3225, 3227, 3230, 3568, 3568, 3568, 3238, 3568, 3240,
+     3568, 3242, 3233, 3568, 3246, 3220, 3568, 3243, 3249, 3251,
+     3228, 3252, 3254, 3255, 3257, 3258, 3264, 3568, 3568, 3266,
+     3568, 3269, 3568, 3271, 3568, 3272, 3273, 3568, 3568, 3281,
+
+     3278, 3280, 3279, 3282, 3283, 3568, 3568, 3568, 3568, 3286,
+     3287, 3288, 3289, 3291, 3294, 3293, 3296, 3303, 3295, 3312,
+     3314, 3297, 3305, 3321, 3313, 3568, 3315, 3306, 3328, 3329,
+     3326, 3331, 3332, 3333, 3334, 3335, 3336, 3337, 3338, 3341,
+     3339, 3354, 3345, 3352, 3359, 3342, 3365, 3363, 3366, 3367,
+     3368, 3374, 3370, 3371, 3568, 3372, 3375, 3376, 3378, 3379,
+     3383, 3381, 3392, 3396, 3385, 3398, 3382, 3403, 3399, 3404,
+     3407, 3408, 3409, 3568, 3410, 3412, 3414, 3416, 3418, 3420,
+     3421, 3422, 3425, 3427, 3430, 3432, 3436, 3568, 3437, 3568,
+     3568, 3441, 3438, 3444, 3448, 3450, 3568, 3568, 3568, 3476,
+
+     3483, 3490, 3497, 3504,   94, 3511, 3518, 3525, 3532, 3539,
+     3546, 3553, 3560
     } ;
 
-static yyconst flex_int16_t yy_def[1797] =
+static yyconst flex_int16_t yy_def[1814] =
     {   0,
-     1782,    1, 1783, 1783, 1784, 1784, 1785, 1785, 1786, 1786,
-     1787, 1787, 1782, 1788, 1782, 1782, 1782, 1782, 1789, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1790, 1782, 1782, 1782, 1790, 1791, 1782, 1782, 1782, 1791,
-     1792, 1782, 1782, 1782, 1782, 1792, 1793, 1782, 1782, 1782,
-     1793, 1794, 1782, 1795, 1782, 1794, 1794, 1788, 1788, 1782,
-     1796, 1789, 1796, 1789, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1790, 1790, 1791, 1791,
-     1792, 1792, 1782, 1793, 1793, 1794, 1794, 1795, 1795, 1794,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-
-     1788, 1794, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1794, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1782, 1788, 1788, 1788, 1788, 1788, 1788, 1782, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1794, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1794, 1788, 1788, 1788,
-     1788, 1788, 1782, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1782, 1788, 1782, 1782, 1788, 1782, 1782, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1782, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1782, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1794, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1782, 1788, 1788, 1788, 1788, 1788, 1788,
-
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1782, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1782,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1782, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1782, 1794, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-
-     1788, 1788, 1788, 1788, 1788, 1782, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1782, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1782, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1782, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1782, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1782, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1782, 1788, 1788, 1788, 1788, 1788, 1788, 1782, 1788,
-     1782, 1788, 1788, 1788, 1782, 1788, 1782, 1788, 1782, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1782, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-
-     1788, 1782, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1782, 1788, 1788, 1788, 1788, 1788,
-     1782, 1782, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1782, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1782, 1782, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1782, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1782, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1782, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1782,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1782,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-
-     1788, 1782, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1782, 1788, 1782, 1788, 1782, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1782, 1788, 1788, 1788,
-     1788, 1782, 1788, 1782, 1782, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1782, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1782, 1788, 1788, 1788, 1788, 1782,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1782, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1782, 1788,
-     1788, 1782, 1788, 1788, 1788, 1782, 1788, 1782, 1788, 1788,
-
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1782, 1782, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1782, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1782, 1788, 1788, 1788,
-     1788, 1788, 1788, 1782, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1782, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1782, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1782, 1788, 1782,
-
-     1788, 1788, 1788, 1788, 1782, 1788, 1788, 1782, 1788, 1782,
-     1788, 1788, 1788, 1788, 1782, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1782, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1782, 1788, 1788, 1788, 1788, 1788,
-     1782, 1782, 1788, 1782, 1782, 1782, 1788, 1782, 1782, 1788,
-     1788, 1782, 1788, 1782, 1788, 1788, 1788, 1788, 1788, 1782,
-     1788, 1788, 1788, 1782, 1788, 1788, 1788, 1788, 1782, 1788,
-     1782, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1782, 1782,
-
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1782, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1782, 1788, 1782, 1782, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1782, 1788, 1788, 1788, 1788, 1782,
-     1788, 1788, 1788, 1788, 1782, 1782, 1782, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1782, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1782, 1782, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1782, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1782, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1782, 1788, 1788, 1782, 1788, 1788, 1788, 1782,
-
-     1788, 1782, 1788, 1782, 1782, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1782, 1782, 1788, 1788,
-     1782, 1782, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1782, 1788, 1782, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1782, 1788, 1788, 1788, 1782, 1782, 1782, 1788, 1788,
-     1788, 1782, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1782, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1782, 1788, 1788, 1788,
-     1782, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1782, 1788, 1788,
-     1782, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1782, 1788,
-     1782, 1788, 1782, 1788, 1788, 1788, 1788, 1788, 1782, 1782,
-     1788, 1788, 1788, 1782, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1782, 1782, 1788, 1788, 1788, 1788, 1782, 1782, 1782,
-     1788, 1782, 1788, 1782, 1788, 1788, 1782, 1788, 1788, 1782,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1782, 1782, 1788, 1782, 1788, 1782, 1788, 1782, 1788, 1788,
-     1782, 1782, 1788, 1788, 1788, 1788, 1788, 1788, 1782, 1782,
-     1782, 1782, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1782, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1782, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1782, 1788, 1788, 1788,
-     1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788,
-     1782, 1788, 1782, 1782, 1788, 1788, 1788, 1788, 1788, 1782,
-     1782,    0, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
-     1782, 1782, 1782, 1782, 1782, 1782
-
+     1799,    1, 1800, 1800, 1801, 1801, 1802, 1802, 1803, 1803,
+     1804, 1804, 1799, 1805, 1799, 1799, 1799, 1799, 1806, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1807, 1799, 1799, 1799, 1807, 1808, 1799, 1799, 1799, 1808,
+     1809, 1799, 1799, 1799, 1799, 1809, 1810, 1799, 1799, 1799,
+     1810, 1811, 1799, 1812, 1799, 1811, 1811, 1805, 1805, 1799,
+     1813, 1806, 1813, 1806, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1807, 1807, 1808, 1808,
+     1809, 1809, 1799, 1810, 1810, 1811, 1811, 1812, 1812, 1811,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+
+     1805, 1805, 1811, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1811, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805,
+     1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1811, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1811, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1799, 1805, 1799, 1799, 1805,
+     1799, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1811, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805,
+
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1811, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
+
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
+     1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1799, 1805,
+     1805, 1805, 1799, 1805, 1799, 1805, 1799, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1799,
+     1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1799, 1799, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
+
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1799, 1805, 1799, 1805, 1799, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
+     1805, 1799, 1805, 1799, 1799, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805,
+     1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
+
+     1805, 1805, 1799, 1805, 1805, 1805, 1799, 1805, 1799, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1799, 1799, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805,
+     1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
+     1805, 1799, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1799,
+     1805, 1799, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
+     1805, 1805, 1799, 1799, 1805, 1805, 1799, 1799, 1799, 1805,
+     1799, 1799, 1805, 1805, 1799, 1805, 1799, 1805, 1805, 1805,
+     1805, 1805, 1799, 1805, 1805, 1805, 1799, 1805, 1805, 1805,
+     1805, 1799, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1799, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1799,
+     1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805,
+     1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1799, 1799,
+     1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
+     1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805,
+
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805,
+     1799, 1805, 1805, 1805, 1799, 1805, 1799, 1805, 1799, 1799,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1799, 1799, 1805, 1805, 1799, 1799, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1799, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805,
+     1805, 1799, 1799, 1799, 1805, 1805, 1805, 1799, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+
+     1799, 1805, 1805, 1799, 1805, 1805, 1805, 1799, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1799, 1805, 1805, 1799, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1799, 1805, 1799, 1805, 1799,
+     1805, 1805, 1805, 1805, 1805, 1799, 1799, 1805, 1805, 1805,
+     1799, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1799,
+     1805, 1805, 1805, 1805, 1799, 1799, 1799, 1805, 1799, 1805,
+     1799, 1805, 1805, 1799, 1805, 1805, 1799, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1799, 1805,
+     1799, 1805, 1799, 1805, 1799, 1805, 1805, 1799, 1799, 1805,
+
+     1805, 1805, 1805, 1805, 1805, 1799, 1799, 1799, 1799, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1799, 1805, 1805, 1805, 1805, 1805, 1805,
+     1805, 1805, 1805, 1805, 1805, 1805, 1805, 1799, 1805, 1799,
+     1799, 1805, 1805, 1805, 1805, 1805, 1799, 1799,    0, 1799,
+
+     1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
+     1799, 1799, 1799
     } ;
 
-static yyconst flex_int16_t yy_nxt[3562] =
+static yyconst flex_int16_t yy_nxt[3608] =
     {   0,
        14,   15,   16,   17,   18,   19,   18,   14,   14,   14,
        14,   18,   20,   21,   14,   22,   23,   24,   25,   14,
@@ -1027,7 +1033,7 @@ static yyconst flex_int16_t yy_nxt[3562] =
        49,   70,   45,   47,   48,   71,   50,   49,   58,   59,
        60,   69,   69,   50,   52,   53,   54,   55,   61,   18,
        58,   59,   60,  127,  127,   56,   52,   53,   54,   55,
-       61,   18,   69,  105,  224,   75,   76,   56,   15,   16,
+       61,   18,   69,  105,  225,   75,   76,   56,   15,   16,
        17,   63,   64,   65,   68,   68,   69,   68,   68,   66,
 
        68,   96,   69,   77,   69,   68,   86,   69,   67,   15,
@@ -1038,7 +1044,7 @@ static yyconst flex_int16_t yy_nxt[3562] =
        98,   82,   69,   93,   83,   94,   84,   85,   99,  150,
        69,  102,   69,  112,  100,  103,  123,  113,  101,   69,
       137,  124,   69,  120,  116,  121,   69,  114,   69,  125,
-      115,  104,   69,  126,  117,   69,  184,  106,  118,  119,
+      115,  104,   69,  126,  117,   69,  185,  106,  118,  119,
       122,  107,   69,  131,  146,  131,  131,  108,  131,   73,
 
       109,   73,   73,  136,   73,  136,  136,  110,  136,  137,
@@ -1046,374 +1052,379 @@ static yyconst flex_int16_t yy_nxt[3562] =
       144,   68,   69,  140,   73,   69,   73,   73,   69,   73,
        69,  152,  147,  145,   73,   74,   69,  148,   69,   69,
       149,   69,   69,   69,  154,   69,  158,  151,  159,  153,
-       69,  164,   69,  127,  127,  137,   69,  156,  155,  157,
-       69,   69,   69,  161,  160,   69,  162,  166,  168,  170,
-       69,  165,  169,   69,  172,  171,   69,   69,   69,   69,
-      163,   69,   69,  173,  175,  179,  174,  167,   69,   69,
-       69,  176,   69,   69,  181,   69,   69,   69,  182,  177,
-
-      178,   69,  190,   69,  192,  191,  180,   69,  186,   69,
-      183,  187,  185,   69,   69,   69,  188,  197,   69,  189,
-       69,   69,  129,  199,  193,  129,   69,  194,  131,  195,
-      131,  131,  200,  131,  135,  196,  134,  134,  198,  201,
-      136,  205,  136,  136,   73,  136,   73,   73,  137,   73,
-       69,  202,   69,  204,   69,  139,   69,  203,   69,   69,
-      210,   69,  206,   69,  133,   69,  211,  213,  212,  207,
-       69,  208,   69,  214,  225,   69,   69,  221,   69,  209,
-      222,   69,   69,  223,   69,   69,  226,   69,   69,   69,
-      233,   69,   69,  232,  132,  215,   69,  228,  227,  229,
-
-      216,  237,  230,  231,  130,  217,   69,   69,  236,  234,
-      218,  235,   69,  238,  239,  241,  219,  220,   69,   69,
-       69,  244,   69,   69,   69,  240,   69,  242,  243,  245,
-      246,  247,   69,   69,   69,   69,   69,   69,   69,  248,
-      250,   69,  251,  252,   69,  253,  249,   69,   69,  254,
-       69,  255,  256,   69,   69,  259,  263,   69,   69,  257,
-      265,   69,   69,   69,   69,  267,   69,  270,  258,  266,
-       69,   69,  261,  262,  271,  260,  269,  264,  273,   69,
-      137,   69,  268,   69,   69,   69,  274,   69,  279,  278,
-      277,   69,  276,   69,  281,   69,  280,  272,   69,   69,
-
-      282,   69,   69,  275,  286,  283,  284,   69,  287,  288,
-       69,  289,   69,   69,  290,   69,   69,   69,  291,  293,
-      285,  294,   69,  296,   69,   69,  298,   69,   69,  300,
-      292,  295,  299,   69,   69,   69,   69,   69,  297,   69,
-      305,   69,   69,   69,  310,   69,  307,   69,   69,   69,
-      304,  311,   69,  301,  302,   69,  303,  309,   69,  306,
-       69,  308,   69,   69,  312,  319,  320,  315,  316,  321,
-       69,   69,  313,  317,  318,  314,   69,   69,   69,  322,
-       69,  328,   69,   69,  330,   69,   69,  326,  323,  327,
-      329,  324,  325,   69,   69,   69,   69,  335,  332,   69,
-
-       69,  331,   69,  338,  337,  339,  333,   69,   69,   69,
-       69,   69,  345,   69,   69,  334,  336,   69,  344,  346,
-       69,  340,   69,  347,  341,  352,  350,  342,   69,  343,
-       69,  348,   69,  349,  351,  137,   69,   69,   69,  363,
-       69,  353,  354,   69,   69,  355,  356,  362,  368,   69,
-       69,  366,  371,   69,   69,  357,  364,  358,  359,  360,
-      367,  369,  361,  365,   69,  372,  373,  376,   69,  370,
-       69,   69,   69,   69,  374,  378,  379,  380,  375,   69,
-       69,   69,   69,   69,  377,   69,   69,  386,  385,   69,
-       69,   69,   69,  381,  393,   69,  382,  383,  549,  384,
-
-      387,  389,   69,  388,  391,  395,   69,  392,   69,   69,
-       69,   69,  397,   69,  390,  394,   69,  396,   69,  398,
-      402,  399,  400,   69,  401,   69,   69,   69,   69,   69,
-      407,   69,  406,   69,  403,  404,  408,   69,  410,  405,
-       69,  411,   69,   69,   69,   69,   69,   69,   69,  128,
-       69,  413,  420,  414,  409,   69,   69,   69,  416,   69,
-       69,  422,   69,  412,  419,  415,  424,  417,  418,  421,
-      423,   69,   69,  425,   69,   69,   69,   69,  428,   69,
-       69,  426,  430,   69,  441,   69,   69,   69,   69,   69,
-      429,  443,  431,  427,  442,   69,  440,   69,  432,   69,
-
-      433,   69,  445,  438,  439,  434,  444,  435,   69,  447,
-      448,   69,  446,   69,   69,  436,  451,   69,   69,   69,
-       69,   69,  453,  449,  458,  437,  137,  454,  450,   69,
-      457,   69,   69,  459,   69,  456,  452,   69,  455,  463,
-       69,   69,  462,   69,   69,  461,   69,  466,   69,  460,
-       69,  468,  467,  464,  471,  465,  474,   69,  472,   69,
-      475,   69,  469,  473,  476,  470,  477,   69,  479,   69,
-      478,   69,   69,   69,   69,   69,   69,  483,   69,  481,
-      482,   69,   69,  485,  487,  484,   69,   69,   69,   69,
-       69,  488,  499,  480,   69,  486,   69,  490,   69,  493,
-
-      496,  489,  491,   69,   69,   69,  492,  498,  494,   69,
-      495,   69,  497,   69,  500,   69,  501,   69,  503,  506,
-       69,   69,  502,   69,   69,   69,  507,   69,  508,  505,
-      509,  504,   69,   69,  544,  513,   69,  510,   69,  511,
-       69,  514,   69,  516,  517,  515,   69,  512,  518,   69,
-       69,  521,   69,   69,   69,  527,   69,  523,   69,  519,
-      525,  522,   69,  520,  526,   69,   69,   69,  529,   69,
-       69,   69,  524,   69,   69,  534,   69,  528,   69,  539,
-      530,   69,  535,   69,   69,  531,   69,  542,  532,  536,
-      533,   69,   69,  538,  537,  543,   69,  545,   69,   69,
-
-      540,   69,  541,   69,  550,   69,   69,   69,   69,   69,
-      551,  552,  546,  553,  548,   69,  555,  547,   69,   69,
-      137,  557,  559,  554,  556,  558,   69,   69,  562,   69,
-      560,   69,  565,   69,   69,  566,  563,   69,  564,  561,
-       69,   69,   69,   69,   69,  567,   69,   69,  569,   69,
-       69,  582,  568,  580,  581,  579,   69,   69,  577,  570,
-       69,  578,  590,   69,  594,   69,  593,  571,   69,   69,
-       69,  596,   69,  572,  592,  599,  595,  573,  591,   69,
-      574,   69,  598,   69,   69,   69,   69,  575,  600,   69,
-      576,   69,  583,  584,  597,  585,   69,   69,  586,   69,
-
-      605,   69,  607,  587,  601,  604,  602,   69,  603,  588,
-      589,  606,  608,  609,   69,  610,  611,   69,   69,   69,
-       69,   69,  612,  613,   69,   69,  614,   69,   69,   69,
-      620,   69,  615,  617,  618,  622,   69,   69,   69,   69,
-       69,   69,  626,  616,  621,   69,   69,  624,  619,   69,
-      625,   69,  628,   69,   69,   69,  623,  630,  633,  627,
-       69,  629,   69,   69,   69,  631,   69,   69,   69,   69,
-      632,  639,   69,  638,   69,   69,  634,   69,  642,   69,
-      635,  644,  648,  637,  636,  641,  640,   69,  643,  645,
-       69,  647,  646,  649,   69,   69,   69,   69,   69,  650,
-
-      654,  656,  653,   69,  655,   69,   69,   69,  652,   69,
-      657,  660,   69,  651,  662,   69,   69,  663,  137,   69,
-       69,   69,  659,  658,  665,   69,   69,   69,   69,   69,
-       69,   69,  661,  676,  664,   69,   69,   69,   69,  683,
-      666,  668,  680,  677,   69,  679,  669,  137,   69,  667,
-       69,  684,  681,  670,   69,  671,  678,   69,  682,  672,
-       69,  673,  685,   69,   69,  687,  674,   69,  688,  689,
-      691,  675,  686,  692,   69,  693,   69,  690,   69,  697,
-      694,  698,  695,   69,   69,   69,  701,   69,   69,   69,
-       69,   69,  702,  706,   69,  707,  700,  699,  703,  708,
-
-      696,   69,  704,   69,   69,   69,  709,   69,  705,   69,
-       69,   69,  712,   69,   69,   69,   69,   69,  711,  717,
-      710,   69,  715,   69,  721,  720,  714,   69,  713,   69,
-      716,  719,   69,   69,   69,  718,   69,  725,  726,  727,
-      722,  723,  724,   69,  729,  728,  730,   69,  732,   69,
-       69,   69,  733,   69,   69,  734,   69,   69,  735,  736,
-      731,   69,   69,  737,   69,  741,   69,   69,   69,   69,
-      738,  743,  739,  744,   69,  745,  748,   69,   69,   69,
-      747,  740,   69,  746,   69,  742,   69,  749,   69,  751,
-       69,   69,   69,   69,   69,  756,   69,  750,  757,  759,
-
-      752,   69,  762,  753,  755,  760,  763,   69,  754,   69,
-      758,   69,   69,  761,  765,   69,   69,   69,  769,   69,
-       69,   69,   69,   69,  764,   69,   69,   69,  777,  768,
-      767,  766,  771,   69,   69,   69,  778,  770,   69,  772,
-      774,   69,  775,  779,   69,  776,  773,   69,  781,  780,
-       69,   69,   69,   69,  785,  783,  788,   69,   69,   69,
-       69,  782,   69,  792,   69,  790,  784,  786,   69,  793,
-       69,   69,  787,   69,  796,  794,  789,   69,   69,   69,
-      791,   69,   69,  799,  795,   69,  798,  801,   69,  803,
-       69,  797,   69,   69,   69,   69,   69,  804,  800,   69,
-
-      802,  807,   69,   69,   69,  805,   69,  806,  808,  812,
-       69,   69,  809,  816,   69,  815,  810,  811,   69,  813,
-       69,   69,  814,   69,  817,  821,  820,  135,  818,  822,
-       69,  819,   69,  823,   69,  824,  825,  827,   69,  828,
-       69,  826,   69,   69,   69,  829,   69,  831,  830,   69,
-       69,   69,  836,  832,  833,  837,   69,   69,   69,   69,
-       69,  838,  839,   69,  834,   69,  845,   69,   69,  835,
-       69,  847,   69,   69,  846,   69,   69,  849,   69,  840,
-       69,  850,   69,  848,  841,   69,  842,  851,  843,  853,
-      844,  852,   69,  855,  856,  854,  857,  860,  858,  859,
-
-       69,  861,   69,   69,   69,   69,  862,  865,   69,  863,
-       69,  867,   69,   69,  869,   69,   69,   69,  868,   69,
-       69,   69,  871,   69,  864,  873,   69,  872,   69,  874,
-      866,   69,  876,   69,  884,  878,  870,  879,  877,  875,
-       69,   69,   69,  881,   69,   69,  880,   69,   69,  885,
-       69,  888,  883,  882,   69,   69,   69,   69,   69,   69,
-      894,   69,   69,   69,   69,  886,   69,   69,  889,  892,
-      887,  898,  900,  901,  890,  891,  893,  902,   69,   69,
-       69,  895,  897,   69,  907,   69,  899,  896,  903,   69,
-       69,  904,  905,   69,  906,   69,  909,  908,   69,   69,
-
-       69,   69,   69,   69,   69,  913,   69,  916,   69,   69,
-       69,   69,   69,   69,  910,   69,  923,  912,  925,  914,
-      919,   69,  915,  918,  911,  920,  917,  921,  922,   69,
-      927,   69,   69,  926,   69,   69,  924,  932,  929,  933,
-      931,   69,   69,   69,   69,   69,  928,   69,  934,  935,
-       69,   69,  942,   69,   69,  930,  937,  938,  940,  936,
-       69,   69,  941,   69,  939,   69,   69,   69,   69,  948,
-       69,   69,  947,  943,   69,   69,   69,   69,  133,  944,
-       69,  956,  953,   69,  946,   69,  949,  945,  957,  950,
-      951,   69,  955,   69,  952,  958,  959,  954,   69,   69,
-
-       69,   69,  960,  964,   69,   69,  961,  965,  962,  968,
-       69,   69,  972,  963,   69,   69,  969,   69,  970,   69,
-      966,   69,   69,  975,  967,  971,  974,  976,  977,   69,
-      978,   69,   69,  973,   69,   69,  980,  979,   69,   69,
-       69,   69,   69,   69,  982,   69,  984,  986,   69,   69,
-      988,   69,   69,  981,  983,  991,  990,  985,   69,  987,
-       69,   69,   69,  993,   69,  989,   69,  996,   69,  997,
-       69,  992,   69,   69,   69,  995, 1002,   69,  994, 1000,
-       69, 1004,  998,   69, 1006, 1003,   69,   69,  999,   69,
-       69, 1007, 1001, 1005, 1008,   69, 1009,   69, 1011, 1012,
-
-       69,   69,   69,   69,  132, 1017, 1014, 1010,   69, 1015,
-       69, 1019,   69, 1018, 1023,   69,   69, 1020, 1022,   69,
-     1013, 1016,   69, 1024,   69,   69, 1021,   69, 1029,   69,
-       69,   69, 1028,   69, 1025, 1031, 1032,   69,   69,   69,
-       69,   69,   69, 1026, 1033, 1027,   69,   69, 1040, 1034,
-       69,   69, 1030,   69, 1038, 1037,   69,   69, 1035, 1039,
-     1036, 1044,   69,   69, 1046,   69,   69, 1041, 1050,   69,
-     1042,   69, 1043,   69, 1051, 1047,   69, 1045, 1048, 1049,
-       69, 1052,   69,   69, 1055,   69, 1060,   69, 1059, 1053,
-       69, 1054, 1056,   69, 1058, 1057,   69,   69,   69,   69,
-
-     1061,   69,   69, 1062,   69, 1069,   69,   69,   69,   69,
-     1066, 1064,   69, 1072, 1063, 1065, 1071,   69, 1073,   69,
-     1068, 1075, 1070, 1078, 1076, 1080, 1067, 1077,   69,   69,
-       69,   69, 1074, 1083,   69, 1081,   69, 1079,   69, 1085,
-       69,   69,   69,   69, 1091, 1086,   69, 1084, 1087,   69,
-       69, 1082,   69,   69, 1088,   69,   69, 1095,   69,   69,
-     1089, 1096, 1090, 1097, 1093,   69, 1092,   69, 1099,   69,
-     1098,   69, 1094, 1102,   69,   69,   69,   69, 1100,   69,
-     1108,   69, 1101, 1103, 1104,   69,   69, 1105, 1106,  130,
-     1107, 1109, 1111, 1112,   69,   69, 1114,   69, 1113, 1110,
-
-       69, 1116,   69,   69,   69,   69,   69,   69,   69, 1115,
-     1118,   69,   69, 1119,   69, 1117, 1122, 1123, 1120, 1127,
-       69, 1128, 1121,   69,   69,   69,   69, 1132,   69, 1126,
-     1124,   69, 1125, 1134,   69, 1135,   69,   69,   69,   69,
-       69, 1136, 1137, 1130, 1129, 1131,   69,   69, 1139, 1138,
-     1141, 1133,   69,   69, 1153,   69, 1140, 1143,   69,   69,
-     1144, 1145,   69,   69, 1142,   69,   69,   69, 1155,   69,
-       69,   69, 1150,   69, 1146, 1147, 1148,   69, 1157, 1160,
-       69, 1149, 1159, 1151,   69, 1152,   69,   69, 1154,   69,
-       69, 1158,   69, 1162,   69, 1165, 1156,   69, 1163, 1161,
-
-     1169,   69, 1168,   69, 1172,   69, 1173,   69, 1167,   69,
-     1171,   69, 1175, 1164, 1174,   69, 1166,   69,   69,   69,
-       69, 1170,   69,   69,   69, 1180, 1176,   69, 1183,   69,
-       69, 1179,   69,   69,   69, 1189,   69,   69, 1177, 1178,
-     1187, 1181, 1188,   69, 1184, 1192,   69, 1186, 1190, 1185,
-     1182,   69, 1195, 1191, 1196,   69, 1197,   69, 1199,   69,
-     1198,   69,   69,   69, 1193, 1194, 1202,   69,   69,   69,
-       69,   69, 1204, 1207, 1201,   69,   69, 1209,   69, 1203,
-       69, 1205,   69, 1211,   69, 1200,   69, 1212, 1210, 1213,
-       69, 1214,   69,   69,   69, 1206,   69, 1208,   69, 1216,
-
-     1218, 1217,   69,   69, 1215,   69,   69, 1219, 1220, 1223,
-       69,   69,   69,   69, 1221,   69,   69, 1222, 1230, 1228,
-     1225, 1229,   69,   69,   69,   69, 1224,   69, 1232,   69,
-     1226,   69, 1227,   69, 1235,   69, 1231,  128, 1236, 1233,
-     1237,   69, 1234, 1240,   69, 1242, 1238, 1239,   69,   69,
-       69, 1243, 1241, 1244,   69,   69,   69, 1245,   69, 1247,
-       69,   69,   69,   69,   69, 1248,   69,   69,   69,   69,
-     1257,   69,   69, 1250, 1251, 1246, 1252, 1256, 1253,   69,
-       69, 1249,   69, 1260, 1261,   69, 1254, 1255, 1259, 1258,
-       69,   69,   69, 1264,   69, 1263,   69, 1265, 1269, 1266,
-
-     1267,   69,   69,   69,   69,   69, 1262, 1270,   69, 1275,
-       69,   69, 1272,   69, 1271, 1279, 1268,   69, 1276,   69,
-       69, 1281, 1274,   69, 1273,   69, 1277,   69, 1280,   69,
-       69, 1285,   69, 1278,   69,   69, 1283, 1282,   69, 1284,
-     1288, 1286, 1287, 1289,   69,   69,   69, 1290,   69,   69,
-       69,   69, 1293,   69, 1294, 1298,   69, 1300,   69,   69,
-     1297, 1292, 1299,   69, 1291, 1295,   69, 1302,   69, 1305,
-       69, 1303,   69,   69, 1296, 1308,   69,   69, 1301,   69,
-     1306, 1304, 1310,   69,   69, 1311, 1309,   69,   69,   69,
-       69, 1312,   69, 1307, 1314, 1315,   69, 1317,   69,   69,
-
-       69,   69, 1323,   69,   69, 1313, 1320,   69, 1321,   69,
-       69, 1324,   69, 1316, 1319, 1326, 1322,   69,   69, 1325,
-       69, 1318,   69,   69,   69, 1335,   69,   69,   69,   69,
-     1336, 1328,   69, 1368,   69, 1327, 1333,   69, 1340, 1331,
-     1329, 1337, 1330, 1332, 1334,   69, 1338, 1339, 1341,   69,
-     1342,   69, 1344,   69, 1345,   69, 1346,   69, 1343,   69,
-     1348,   69, 1349,   69,   69,   69, 1352,   69,   69,   69,
-     1351, 1354,   69,   69,   69, 1356,   69, 1357, 1347,   69,
-     1358, 1360,   69, 1350,   69,   69,   69, 1353, 1364,   69,
-       69, 1355,   69, 1369,   69, 1359, 1365,   69, 1371,   69,
-
-     1362,   69,   69, 1361,   69, 1363,   69, 1367,   69, 1373,
-       69, 1374,   69, 1366,   69, 1376, 1370,   69, 1375,   69,
-       69,   69, 1380,   69,   69, 1378, 1385, 1372,   69, 1377,
-     1382,   69, 1383,   69, 1381, 1379,   69, 1386, 1384, 1390,
-     1387,   69, 1389, 1393,   69, 1388,   69, 1391,   69,   69,
-       69,   69,   69, 1396,   69, 1392, 1397, 1394, 1399,   69,
-       69, 1395, 1400,   69,   69, 1402,   69,   69, 1401,   69,
-     1406,   69, 1398,   69, 1404, 1407, 1408,   69, 1403, 1409,
-       69,   69, 1410,   69,   69,   69, 1405,   69, 1413, 1416,
-       69,   69, 1415,   69,   69, 1420, 1417, 1412, 1419,   69,
-
-       69, 1411,   69,   69,   69, 1414, 1422, 1418,   69, 1423,
-     1421, 1424,   69,   69, 1426,   69, 1427,   69, 1425, 1428,
-       69, 1429,   69,   69,   69, 1431,   69,   69, 1432, 1435,
-       69,   69, 1437,   69,   69, 1440,   69,   69, 1430, 1434,
-     1436,   69,   69,   69, 1442, 1433, 1441,   69,   69, 1439,
-       69, 1438, 1444, 1445,   69, 1446,   69, 1443, 1447,   69,
-     1448,   69,   69,   69,   69,   69, 1455,   69, 1449, 1453,
-       69,   69,   69, 1450, 1451, 1452,   69,   69,   69, 1456,
-       69,   69,   69,   69,   69, 1454,   69, 1464, 1465, 1459,
-     1466,   69, 1458,   69, 1461,   69, 1462, 1457, 1467,   69,
-
-       69, 1460,   69, 1463, 1468,   69,   69, 1475, 1470, 1472,
-       69, 1469, 1476,   69,   69, 1471,   69,   69,   69, 1477,
-       69, 1478, 1473, 1474,   69, 1484,   69, 1485,   69,   69,
-       69, 1479,   69,   69,   69, 1480, 1481,   69,   69, 1483,
-     1482, 1492, 1493,   69, 1487,   69, 1486,   69,   69, 1488,
-     1496,   69, 1497, 1489, 1491,   69, 1490,   69, 1500,   69,
-     1494, 1499,   69, 1502,   69, 1495,   69, 1504,   69,   69,
-     1498, 1505,   69,   69, 1506, 1501,   69,   69,   69,   69,
-       69, 1509,   69, 1510,   69, 1503, 1508,   69, 1512, 1514,
-       69, 1507, 1515, 1517,   69, 1518,   69, 1513, 1511, 1519,
-
-     1782,   69, 1521,   69,   69, 1516, 1520, 1522,   69, 1523,
-       69,   69,   69,   69,   69, 1524,   69, 1525,   69, 1526,
-       69,   69,   69, 1529, 1528, 1531,   69,   69, 1527,   69,
-       69, 1536, 1530,   69,   69, 1534,   69,   69, 1535, 1532,
-     1533,   69, 1537, 1541,   69,   69, 1542, 1543,   69,   69,
-     1545,   69,   69, 1538,   69,   69, 1539, 1544, 1548,   69,
-     1540, 1546,   69, 1551, 1547, 1552,   69,   69,   69, 1549,
-       69, 1554,   69, 1782, 1550, 1555, 1556,   69, 1557,   69,
-     1558,   69,   69, 1561, 1562,   69, 1559, 1553,   69,   69,
-     1565,   69,   69, 1563,   69,   69, 1560, 1564,   69, 1568,
-
-       69,   69, 1572,   69,   69,   69,   69,   69, 1576, 1566,
-     1567,   69, 1577, 1574,   69, 1571, 1569,   69,   69,   69,
-     1570,   69, 1579, 1573,   69, 1575,   69,   69,   69,   69,
-     1578, 1585,   69, 1582, 1587,   69, 1588,   69, 1580,   69,
-       69, 1583, 1590, 1591,   69, 1581, 1584, 1586, 1589, 1593,
-     1592,   69,   69,   69,   69,   69, 1598,   69,   69, 1597,
-     1594,   69,   69, 1600, 1595,   69, 1599,   69, 1606,   69,
-     1601,   69, 1604,   69, 1608,   69,   69,   69, 1596, 1611,
-       69,   69, 1602,   69,   69, 1612, 1603, 1605,   69,   69,
-       69,   69, 1610, 1613,   69, 1609, 1607, 1616,   69, 1614,
-
-     1619,   69,   69, 1617, 1621,   69,   69, 1615, 1623,   69,
-     1620, 1622,   69, 1626, 1624,   69, 1618,   69, 1629,   69,
-     1630,   69,   69,   69,   69, 1625, 1634,   69,   69, 1627,
-       69,   69,   69, 1639,   69, 1632, 1637,   69,   69, 1628,
-     1635, 1631, 1642,   69, 1633, 1643,   69,   69,   69, 1782,
-     1636, 1638, 1645, 1644, 1640, 1641,   69, 1648,   69, 1649,
-       69, 1647, 1646, 1650,   69,   69, 1652,   69,   69, 1653,
-     1651, 1654,   69,   69,   69, 1657,   69,   69,   69, 1660,
-       69,   69, 1658, 1656,   69,   69, 1659, 1655,   69, 1661,
-     1662,   69,   69, 1663,   69,   69,   69, 1671,   69,   69,
-
-     1669, 1672,   69, 1673, 1674,   69, 1664, 1665,   69, 1666,
-     1667,   69, 1675, 1676,   69, 1668, 1670, 1678,   69,   69,
-       69, 1681,   69, 1682,   69, 1677,   69,   69,   69,   69,
-       69,   69, 1689,   69, 1679, 1686, 1687, 1782, 1680, 1690,
-       69,   69, 1684, 1691,   69, 1692,   69, 1695, 1688, 1685,
-       69, 1683,   69, 1693,   69, 1694,   69,   69,   69,   69,
-       69, 1697,   69,   69, 1696,   69, 1701,   69,   69,   69,
-       69,   69, 1709,   69, 1700,   69, 1698, 1699, 1703, 1710,
-     1702,   69, 1704,   69, 1706, 1705, 1708,   69, 1711,   69,
-     1715,   69, 1712,   69, 1707,   69, 1714, 1719,   69, 1720,
-
-     1713,   69,   69, 1716,   69,   69, 1717,   69,   69,   69,
-       69, 1722, 1718,   69,   69, 1721,   69,   69, 1732, 1729,
-       69, 1724, 1726, 1727, 1723, 1730,   69, 1725,   69,   69,
-       69, 1733, 1728, 1734, 1735, 1731, 1737, 1738,   69,   69,
-       69,   69,   69, 1742,   69,   69, 1739,   69,   69, 1736,
-       69,   69, 1745,   69,   69, 1749,   69,   69, 1744, 1740,
-     1782, 1741, 1750, 1743,   69, 1752, 1748,   69, 1753, 1746,
-     1747,   69,   69,   69,   69, 1751, 1754, 1757,   69, 1755,
-       69, 1758,   69,   69,   69,   69,   69, 1759, 1761,   69,
-     1763, 1764, 1756,   69,   69, 1767,   69,   69,   69, 1770,
-
-       69, 1760,   69, 1762, 1771,   69,   69, 1772, 1765, 1773,
-       69,   69, 1766, 1774,   69, 1768, 1769,   69, 1775,   69,
-     1782, 1778, 1776, 1782, 1777, 1779, 1780,   69, 1781,   69,
-       41,   41,   41,   41,   41,   41,   41,   46,   46,   46,
-       46,   46,   46,   46,   51,   51,   51,   51,   51,   51,
-       51,   57,   57,   57,   57,   57,   57,   57,   62,   62,
-       62,   62,   62,   62,   62,   72,   72, 1782,   72,   72,
-       72,   72,  127,  127, 1782, 1782, 1782,  127,  127,  129,
-      129, 1782, 1782,  129, 1782,  129,  131, 1782, 1782, 1782,
-     1782, 1782,  131,  134,  134, 1782, 1782, 1782,  134,  134,
-
-      136, 1782, 1782, 1782, 1782, 1782,  136,  138,  138, 1782,
-      138,  138,  138,  138,   73,   73, 1782,   73,   73,   73,
-       73,   13, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
-     1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
-     1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
-     1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
-     1782
+       69,  165,   69,  127,  127,  137,   69,  156,  155,  157,
+       69,   69,   69,  161,  160,   69,  162,  167,  169,  171,
+       69,  166,  170,   69,  173,  172,   69,   69,   69,  163,
+      164,   69,   69,  174,  176,   69,  175,  168,   69,  180,
+       69,  177,   69,   69,   69,  182,   69,   69,  191,  183,
+
+      179,  178,   69,   69,   69,   69,  181,  187,   69,  193,
+       69,  188,  184,  186,   69,   69,  189,  192,   69,   69,
+      190,  198,  195,  200,   69,   69,  196,  201,  129,  194,
+      252,  129,  134,  134,  131,  197,  131,  131,  137,  131,
+       69,  203,  199,  202,  136,  204,  136,  136,   73,  136,
+       73,   73,  205,   73,   69,   69,   69,   69,   69,  139,
+       69,  211,  215,  207,   69,   69,   69,  212,   69,  206,
+      213,  214,   69,  209,   69,  208,   69,   69,  222,  224,
+      210,   69,   69,   69,  216,   69,  226,  223,  227,  217,
+      232,   69,   69,   69,  218,  228,   69,   69,  233,  219,
+
+       69,  235,  234,   69,  251,  220,  221,  229,  230,   69,
+      239,  231,   69,  240,  243,   69,  241,   69,   69,   69,
+      236,   69,   69,  237,  246,  238,  244,  242,   69,   69,
+      248,  249,   69,  247,   69,   69,   69,   69,  254,  245,
+       69,  250,  253,   69,   69,   69,   69,   69,  256,  258,
+       69,   69,  261,  265,   69,   69,  257,  267,   69,  255,
+      259,   69,  269,   69,   69,  135,  260,   69,  268,  263,
+      264,   69,  262,  276,  266,  273,  271,   69,  272,  275,
+       69,  137,  270,   69,   69,   69,   69,  281,   69,   69,
+      277,   69,   69,  278,  280,  283,  282,   69,  274,  133,
+
+       69,   69,  279,  284,  288,  286,   69,  285,   69,  289,
+      287,  290,   69,  291,   69,   69,  292,   69,   69,   69,
+       69,  295,  293,  296,   69,  298,   69,  300,   69,  297,
+       69,  302,  294,  301,   69,   69,   69,   69,  299,   69,
+       69,  307,   69,   69,   69,  308,   69,   69,  310,   69,
+      313,   69,  306,  304,  303,   69,   69,   69,  305,  312,
+      314,  309,   69,  315,  311,  318,  316,   69,   69,  317,
+       69,   69,   69,  322,  323,  324,   69,   69,   69,   69,
+      320,  325,  321,  319,   69,  326,  329,  328,  327,  331,
+       69,   69,   69,  330,   69,  333,  332,   69,   69,  337,
+
+      338,   69,  335,   69,   69,   69,   69,  334,  340,  341,
+      336,  342,   69,   69,  348,   69,   69,   69,  343,   69,
+      349,  339,  347,   69,   69,   69,   69,   69,  344,  350,
+      355,  345,  353,  346,  137,   69,   69,  351,  354,  357,
+       69,  365,   69,  352,  366,   69,  356,   69,  371,  358,
+      359,  369,   69,   69,   69,  367,   69,   69,   69,  360,
+      370,  361,  362,  363,  368,  372,  364,   69,  376,  374,
+      379,  375,  373,   69,  380,   69,   69,  377,   69,  382,
+      383,  378,   69,  381,   69,   69,   69,   69,   69,  388,
+      389,   69,   69,   69,   69,   69,  384,   69,  395,   69,
+
+      385,  386,  387,  392,  394,  398,  391,   69,  397,  390,
+       69,  396,   69,   69,   69,  402,  393,   69,  399,  400,
+       69,  401,   69,   69,  405,  403,  406,   69,   69,   69,
+       69,   69,   69,  407,  410,  404,  408,   69,  411,   69,
+      409,   69,  414,   69,  412,   69,  415,   69,   69,   69,
+      413,  417,   69,  416,   69,   69,  418,  424,   69,   69,
+      428,  420,   69,   69,  426,   69,   69,  425,  419,  423,
+       69,  427,  421,   69,  422,   69,   69,   69,   69,  432,
+       69,   69,  434,   69,  429,  445,   69,   69,   69,  447,
+       69,  433,  430,   69,  431,  446,  435,  436,   69,  437,
+
+       69,  442,  443,  444,  438,   69,  439,   69,  448,   69,
+      449,   69,  451,   69,  440,  452,   69,  453,  450,   69,
+       69,   69,  454,  137,  441,  457,   69,  461,  458,  462,
+       69,   69,  455,   69,   69,   69,  467,   69,  456,   69,
+      459,  460,  463,  466,   69,   69,  465,   69,  470,  464,
+       69,  468,   69,  472,  475,   69,  469,   69,  476,   69,
+      478,   69,  471,  479,   69,  481,   69,  480,  473,   69,
+      477,  474,   69,  482,   69,  483,  484,   69,   69,   69,
+       69,  487,  485,  486,   69,   69,   69,  491,  488,  490,
+      489,   69,   69,   69,   69,   69,  492,  494,   69,  498,
+
+       69,   69,  495,  501,  919,   69,  496,  493,   69,   69,
+       69,   69,  503,  497,  502,  500,   69,   69,  499,   69,
+      504,   69,  506,  507,  508,  511,   69,  509,   69,   69,
+       69,  513,  512,  510,   69,   69,   69,  514,  518,   69,
+      515,   69,  505,   69,  519,   69,  521,  516,  520,  522,
+      517,   69,   69,  523,   69,  526,   69,   69,  530,  528,
+       69,   69,  531,   69,  524,  525,  527,   69,   69,  532,
+      534,   69,   69,   69,  529,   69,   69,   69,   69,   69,
+      533,  539,  544,   69,   69,  540,   69,   69,   69,  535,
+      536,  564,  537,  541,   69,  538,   69,  542,  543,   69,
+
+      547,   69,   69,  545,   69,  546,  548,  549,   69,  550,
+      551,   69,   69,   69,   69,   69,   69,  555,  554,  557,
+      552,  553,  556,   69,   69,   69,   69,   69,  558,  137,
+      562,  559,  560,  561,  563,   69,   69,  567,  570,  565,
+       69,   69,   69,   69,   69,  568,  571,  566,   69,  569,
+       69,   69,  576,  572,   69,   69,  574,   69,   69,   69,
+       69,   69,  573,  585,  584,  586,  582,  587,  575,   69,
+       69,  583,   69,  665,  577,  595,  596,   69,  578,   69,
+      598,  579,  599,   69,  597,   69,  600,   69,  580,   69,
+      601,  581,   69,  588,  589,   69,  590,   69,  603,  591,
+
+      602,   69,   69,   69,  592,  605,  604,  608,  606,   69,
+      593,  594,   69,   69,  607,   69,  611,   69,   69,  616,
+      610,  615,   69,  614,   69,  617,   69,   69,  609,  618,
+       69,  613,  612,  619,   69,   69,   69,   69,   69,   69,
+      626,   69,  620,  621,  623,  624,  628,   69,   69,   69,
+       69,   69,   69,   69,  622,  627,  625,   69,  630,  631,
+      632,   69,  634,   69,   69,   69,  633,  629,  635,   69,
+      639,   69,  636,   69,   69,   69,   69,   69,   69,  645,
+      637,   69,   69,   69,  638,  640,  644,   69,  650,   69,
+      649,  641,  648,   69,  643,  642,  646,  651,   69,  654,
+
+      647,  655,   69,  653,   69,   69,   69,  652,   69,  656,
+       69,   69,  657,  659,  658,   69,  661,  662,   69,  666,
+       69,  663,   69,   69,   69,  668,   69,  669,  137,  664,
+       69,  660,   69,   69,  671,   69,   69,   69,  670,   69,
+      667,  682,   69,   69,   69,   69,   69,  686,   69,  674,
+       69,  672,   69,  709,  683,  132,  675,  673,   69,  685,
+      687,  676,  688,  677,   69,  690,   69,  678,  684,  679,
+      689,   69,   69,  695,  680,   69,  691,  693,  694,  681,
+      698,   69,   69,  699,   69,   69,  692,  697,  700,  696,
+      701,   69,   69,   69,   69,   69,  703,  704,   69,  707,
+
+      708,   69,  712,   69,   69,  705,  706,  710,  702,   69,
+      714,   69,   69,  713,  715,   69,  718,   69,   69,   69,
+      711,   69,  719,  716,   69,  717,   69,   69,   69,   69,
+       69,  728,  724,  722,   69,  721,   69,  720,   69,  727,
+       69,   69,   69,  726,   69,  723,  732,  733,  725,  734,
+       69,   69,  736,  729,   69,  731,  730,  737,   69,  735,
+      739,  743,   69,   69,  740,   69,   69,  738,   69,  741,
+       69,   69,  742,   69,   69,   69,  748,  744,   69,   69,
+      750,   69,   69,  751,   69,  746,  745,  752,  755,   69,
+      754,  747,   69,   69,   69,  749,  758,  757,  753,   69,
+
+       69,  756,   69,   69,   69,   69,   69,   69,  763,  764,
+      766,  769,  759,   69,  770,  762,   69,  767,  760,   69,
+      761,   69,   69,  765,   69,  768,  772,   69,   69,  776,
+       69,   69,   69,   69,   69,   69,  771,   69,  774,   69,
+      775,  773,  784,  778,   69,  130,  785,   69,  777,  781,
+      779,   69,  782,   69,   69,   69,   69,  780,  786,  783,
+      787,   69,   69,  792,   69,   69,  790,   69,  788,   69,
+      789,  795,   69,   69,   69,  797,   69,  791,   69,  793,
+       69,  799,   69,  800,  794,  796,   69,   69,  802,  801,
+      803,   69,   69,  798,  804,  805,  806,   69,   69,   69,
+
+       69,   69,  808,  810,   69,   69,   69,   69,   69,  811,
+       69,  807,  814,   69,   69,   69,  812,  809,  815,  813,
+      819,   69,   69,   69,  128,   69,  816,  823,  818,  817,
+      820,  822,   69,  821,   69,  824,   69,  828,   69,   69,
+      829,  827,  825,  826,  830,   69,   69,  832,  835,   69,
+       69,  836,  833,   69,   69,   69,   69,  831,  834,  837,
+      838,   69,  839,   69,   69,  840,   69,  844,  841,  845,
+       69,   69,   69,   69,   69,  846,   69,  847,  842,   69,
+      853,   69,  854,   69,  843,   69,   69,  855,  859,   69,
+      858,  856,  860,   69,  848,   69,   69,   69,   69,  849,
+
+       69,  850,   69,  851,  857,  852,  863,   69,  862,  861,
+      864,  867,   69,  869,   69,  865,   69,  868,   69,  870,
+      873,   69,   69,  871,   69,  866,  872,  875,   69,  876,
+      877,   69,   69,   69,   69,   69,   69,  882,  879,  881,
+       69,   69,  874,  880,   69,  886,   69,  884,  887,   69,
+       69,  885,  878,   69,  888,  889,   69,   69,  883,   69,
+       69,  893,   69,   69,  896,  890,  894,   69,   69,   69,
+      892,   69,   69,   69,  902,   69,  891,   69,   69,   69,
+       69,  897,   69,  900,  906,   69,  895,  898,  899,   69,
+      901,  911,   69,  909,  908,  903,  905,  910,   69,   69,
+
+      912,  913,  904,  907,   69,  915,   69,   69,   69,   69,
+       69,  916,   69,   69,  921,   69,   69,  917,  914,   69,
+      924,   69,   69,   69,   69,   69,   69,  918,   69,  966,
+      920,  922,   69,  931,   69,  923,  927,  925,  928,  929,
+      926,  932,   69,   69,  930,   69,   69,  933,   69,  137,
+      934,   69,  935,  940,  937,   69,  939,  941,   69,   69,
+      936,   69,   69,   69,  942,   69,  943,  938,  944,   69,
+       69,   69,  949,  945,   69,  946,  950,   69,  948,  951,
+       69,   69,   69,   69,   69,  947,  957,  954,   69,  956,
+       69,   69,   69,  952,   69,   69,   69,   69,   69,  965,
+
+      953,  955,   69,  958, 1097,   69,   69,  959,  962,  960,
+      968,  961,  964,   69,  967,   69,  963,  969,   69,  970,
+       69,   69,  973,   69,  971,   69,  974,  977,   69,   69,
+      978,  972,  981,  979,   69,   69,  135,   69,   69,  975,
+      983,  976,  985,  980,   69,  984,   69,   69,  986,   69,
+      987,   69,  982,   69,   69,  989,  988,   69,   69,   69,
+       69,  990,   69,  991,  993,  995,   69,   69,  997,   69,
+       69,  992,   69,  994,   69,   69, 1000,   69,   69, 1002,
+      996,  999,   69, 1005,  998,   69,   69,   69, 1001,   69,
+     1006, 1004,   69, 1003, 1011,   69, 1009, 1013, 1007,   69,
+
+     1012,   69,   69, 1015, 1017,   69, 1008,   69,   69, 1010,
+       69,   69, 1020, 1018,   69, 1016,   69,   69,   69, 1014,
+     1023,   69, 1026, 1024,   69,   69, 1021,   69,   69, 1027,
+     1028,   69, 1033, 1029, 1019, 1025, 1022,   69,   69, 1032,
+     1031,   69,   69, 1030,   69, 1036, 1038, 1037,   69,   69,
+       69,   69, 1041,   69, 1040, 1042, 1034,   69,   69,   69,
+     1035,   69,   69, 1049,   69,   69,   69,   69,   69,   69,
+      133, 1039,   69, 1047,   69, 1043, 1046, 1048, 1044, 1045,
+      132, 1052,   69,   69,   69, 1050, 1051, 1054, 1059, 1055,
+     1053, 1056, 1057, 1060,   69, 1058,   69,   69,   69, 1061,
+
+       69,   69, 1062,   69,   69, 1069, 1070,   69,   69, 1064,
+       69,   69, 1066, 1068, 1063, 1067,   69,   69,   69,   69,
+     1065,   69,   69,   69, 1072,   69, 1079,   69, 1071,  130,
+     1076, 1074,   69,   69, 1073, 1075, 1081, 1082,   69, 1080,
+     1078,   69, 1083, 1088,   69,   69, 1077, 1085,   69, 1090,
+     1086, 1087,   69,   69,   69, 1093, 1084,   69, 1091,   69,
+       69,   69, 1089,   69, 1095, 1092, 1094,   69, 1101,   69,
+     1096,   69, 1098,   69,   69, 1099,   69,   69, 1105,   69,
+       69, 1106, 1100, 1102, 1107, 1108, 1109, 1103,   69,   69,
+       69, 1104, 1112,   69,   69,   69,   69, 1114,   69,   69,
+
+     1118,   69,   69,   69, 1111,   69,   69, 1115, 1113, 1121,
+     1116, 1110, 1198, 1119, 1127, 1117,   69, 1120, 1122,   69,
+       69, 1124,   69, 1123,   69, 1125, 1126,   69,   69, 1128,
+       69,   69,   69,   69,   69,   69,   69, 1129, 1132, 1137,
+       69, 1133, 1130, 1138,   69,   69, 1131,   69,   69, 1136,
+     1142,   69, 1144,   69, 1134, 1135,   69, 1139, 1145,   69,
+     1146, 1147,   69, 1140, 1149, 1141,   69, 1143,   69,   69,
+     1151, 1148,   69, 1153,   69,   69,   69, 1154, 1155,   69,
+     1150,   69,   69,   69, 1162,   69,   69,   69,   69,   69,
+       69, 1156, 1157, 1158, 1166,   69,  128, 1152, 1159,   69,
+
+     1164, 1160, 1161,   69, 1168, 1163,   69,   69, 1165,   69,
+     1169, 1171,   69,   69, 1167, 1170, 1173,   69,   69, 1176,
+       69,   69, 1172,   69, 1180, 1175, 1174,   69, 1179,   69,
+     1183,   69, 1184,   69, 1182,   69, 1178,   69, 1186, 1177,
+     1187, 1181, 1185,   69,   69,   69,   69,   69,   69,   69,
+     1191,   69, 1194,   69,   69,   69,   69, 1190,   69, 1200,
+       69,   69, 1203,   69, 1188, 1189, 1192, 1199, 1195,   69,
+     1197,   69, 1201, 1196, 1206, 1193,   69, 1202, 1208,   69,
+     1207,   69, 1209,   69, 1210, 1205,   69, 1213,   69,   69,
+     1204,   69,   69,   69,   69, 1215, 1218,   69, 1212,   69,
+
+     1214,   69, 1211, 1220,   69, 1216,   69, 1222,   69, 1221,
+       69, 1223, 1224,   69, 1225,   69,   69, 1799,   69, 1217,
+       69, 1219, 1227, 1228,   69,   69, 1226,   69,   69, 1230,
+     1229,   69, 1231, 1234,   69,   69,   69, 1232,   69,   69,
+     1233,   69, 1241, 1239, 1236,   69, 1240,   69,   69, 1243,
+       69, 1235,   69,   69, 1237, 1248,   69, 1238,   69, 1242,
+     1244, 1246, 1247,   69, 1251,   69,   69, 1253, 1245,   69,
+       69,   69, 1254, 1249, 1255,   69,   69, 1250, 1256,   69,
+     1258,   69, 1252,   69,   69,   69,   69,   69,   69,   69,
+     1259,   69,   69,   69, 1269,   69, 1257, 1261, 1262, 1263,
+
+     1268,   69, 1271, 1265, 1260,   69,   69, 1273,   69, 1266,
+     1264, 1267,   69,   69,   69, 1276,   69, 1275,   69, 1270,
+     1272, 1277,   69, 1278, 1281,   69,   69,   69,   69,   69,
+     1282, 1274, 1279, 1799,   69, 1284, 1287,   69,   69, 1283,
+       69, 1288, 1280,   69, 1291,   69,   69, 1285, 1286,   69,
+     1292,   69,   69, 1289, 1293,   69,   69,   69, 1294, 1297,
+     1298,   69,   69, 1290, 1295,   69, 1300, 1296, 1299,   69,
+     1301,   69,   69,   69,   69, 1302,   69,   69, 1305, 1306,
+     1310,   69,   69,   69, 1312,   69, 1309, 1304,   69, 1303,
+       69, 1307, 1311, 1315, 1314,   69, 1317,   69,   69, 1308,
+
+       69, 1313, 1320,   69,   69,   69, 1318,   69, 1316, 1322,
+       69,   69, 1323, 1321,   69, 1327,   69, 1324,   69, 1326,
+     1319,   69,   69,   69,   69, 1325, 1329,   69,   69, 1332,
+       69,   69, 1335,   69, 1336,   69,   69,   69, 1331,   69,
+     1338,   69, 1337, 1328,   69, 1330, 1333, 1334,   69,   69,
+       69, 1347,   69,   69,   69,   69, 1340, 1348,   69,   69,
+     1435, 1345, 1339, 1342, 1341, 1344, 1349, 1343,   69, 1350,
+       69, 1346, 1351,   69, 1352, 1353,   69, 1354,   69,   69,
+     1357,   69,   69, 1355, 1358,   69, 1359,   69,   69, 1360,
+     1361,   69, 1356, 1362,   69,   69, 1365,   69, 1367,   69,
+
+     1364, 1363,   69,   69,   69,   69,   69, 1366, 1370, 1369,
+       69, 1371, 1373,   69,   69, 1377,   69,   69,   69,   69,
+     1368, 1375,   69, 1374,   69,   69, 1372,   69, 1381, 1382,
+       69, 1384,   69, 1376, 1380,   69, 1386, 1378,   69, 1388,
+       69, 1379,   69,   69, 1383, 1389,   69, 1387, 1385,   69,
+       69, 1393,   69,   69,   69, 1398, 1391,   69, 1799,   69,
+       69, 1395, 1396, 1399,   69, 1394,   69, 1390, 1397, 1403,
+     1392,   69, 1402, 1401,   69,   69, 1404, 1400,   69,   69,
+       69, 1406,   69, 1409, 1405,   69,   69, 1407, 1412,   69,
+     1410, 1408, 1413,   69,   69, 1415,   69,   69,   69,   69,
+
+     1414,   69, 1411,   69, 1419, 1420,   69,   69, 1416, 1421,
+       69, 1417, 1422,   69,   69, 1423,   69, 1418, 1426, 1424,
+       69, 1425, 1429,   69,   69, 1428,   69,   69, 1433, 1430,
+       69, 1432,   69,   69,   69, 1437, 1427, 1799, 1434,   69,
+     1431, 1438,   69,   69, 1439,   69, 1436, 1440,   69, 1441,
+       69, 1442,   69, 1443,   69,   69,   69,   69,   69, 1444,
+     1446, 1449,   69,   69,   69, 1451,   69, 1445,   69, 1448,
+       69, 1455, 1450, 1447, 1454,   69, 1452,   69,   69, 1453,
+     1456,   69, 1457, 1459,   69,   69, 1458, 1460,   69, 1461,
+       69,   69,   69,   69,   69, 1463,   69, 1462,   69, 1467,
+
+     1469,   69,   69, 1464, 1465, 1466,   69, 1470,   69,   69,
+       69,   69,   69,   69,   69,   69, 1468,   69, 1478, 1479,
+       69, 1473, 1480,   69, 1475,   69, 1472,   69, 1471, 1476,
+     1481,   69,   69, 1474, 1477, 1482, 1486,   69, 1483, 1484,
+       69, 1489, 1490,   69,   69, 1485,   69,   69,   69,   69,
+       69,   69, 1487, 1491, 1492, 1488,   69, 1498,   69, 1499,
+       69, 1493,   69,   69,   69,   69, 1494, 1495, 1503, 1497,
+     1502,   69, 1496,   69, 1508,   69,   69, 1501, 1500, 1507,
+       69,   69, 1511,   69,   69, 1504,   69,   69, 1512,   69,
+     1505, 1514,   69, 1506,   69, 1509, 1515,   69,   69, 1510,
+
+       69, 1513, 1516, 1517,   69, 1519,   69, 1520,   69,   69,
+     1521, 1518,   69,   69,   69,   69, 1522, 1526, 1524, 1525,
+       69, 1523,   69, 1527,   69,   69, 1597, 1529, 1799, 1530,
+     1532,   69, 1533,   69, 1534, 1528,   69, 1536,   69,   69,
+     1531, 1535, 1537,   69, 1538,   69,   69,   69,   69,   69,
+     1539,   69, 1540,   69, 1541,   69,   69,   69, 1544, 1543,
+     1546,   69,   69, 1542,   69,   69, 1551, 1545,   69,   69,
+     1549,   69,   69, 1550, 1547, 1548,   69, 1552, 1556,   69,
+       69, 1558, 1559,   69,   69,   69,   69,   69, 1553,   69,
+     1561, 1554, 1560,   69,   69, 1555, 1562, 1564,   69, 1557,
+
+     1565,   69, 1563,   69, 1567, 1568,   69,   69, 1570, 1566,
+       69, 1572,   69, 1571, 1573,   69, 1574,   69, 1569, 1575,
+       69, 1577, 1578,   69,   69,   69,   69, 1581, 1579,   69,
+       69, 1580,   69,   69, 1576, 1584,   69,   69,   69, 1588,
+       69,   69,   69,   69, 1592, 1590, 1582, 1583,   69, 1593,
+       69, 1585, 1587,   69,   69,   69, 1586,   69, 1595,   69,
+     1589, 1591, 1601,   69, 1598,   69, 1594,   69, 1602, 1604,
+       69,   69,   69,   69, 1596, 1605,   69, 1599,   69, 1600,
+       69, 1606, 1608,   69,   69, 1603,   69, 1610, 1607, 1609,
+       69,   69, 1612, 1611,   69, 1614,   69, 1615,   69, 1617,
+
+     1616,   69,   69,   69,   69, 1623,   69, 1618, 1621,   69,
+       69, 1613, 1625,   69,   69, 1628,   69,   69,   69,   69,
+       69, 1619, 1622, 1620, 1629,   69, 1630,   69, 1626, 1627,
+       69, 1624, 1634, 1633, 1631, 1636,   69,   69, 1632,   69,
+     1638,   69, 1639, 1640,   69,   69,   69,   69, 1643,   69,
+       69, 1646,   69, 1647,   69,   69, 1635,   69, 1637,   69,
+     1651,   69,   69, 1644,   69, 1641,   69,   69,   69, 1642,
+     1656, 1649, 1645, 1654, 1648,   69, 1652, 1650,   69, 1659,
+       69,   69, 1653, 1660,   69, 1655, 1661,   69,   69,   69,
+     1665,   69, 1662, 1680, 1664, 1657, 1658, 1666,   69, 1667,
+
+       69,   69, 1663, 1669,   69,   69, 1668,   69, 1670, 1671,
+       69,   69, 1674,   69,   69,   69,   69, 1677,   69, 1672,
+     1673, 1675, 1676,   69,   69,   69,   69,   69, 1678, 1679,
+       69,   69,   69, 1681, 1799, 1686, 1688,   69, 1689,   69,
+       69, 1682,   69, 1683, 1684,   69, 1690, 1696, 1685, 1691,
+       69, 1687,   69, 1693,   69,   69, 1692, 1695,   69, 1694,
+     1698,   69, 1699,   69,   69, 1700,   69,   69, 1799,   69,
+       69, 1799, 1703, 1697, 1704, 1706,   69, 1707,   69, 1701,
+     1708,   69, 1709,   69,   69,   69, 1711, 1702, 1712, 1705,
+       69,   69,   69,   69,   69,   69, 1710, 1714,   69,   69,
+
+       69,   69, 1718,   69, 1713,   69,   69,   69,   69,   69,
+     1715, 1717, 1716, 1720, 1726,   69, 1727,   69,   69, 1719,
+     1721, 1722, 1723, 1725,   69,   69,   69,   69, 1732, 1728,
+     1724, 1729, 1731,   69, 1730, 1736, 1737, 1735,   69, 1733,
+       69,   69, 1734,   69,   69,   69,   69,   69,   69,   69,
+       69,   69, 1738,   69,   69, 1746, 1739,   69, 1747, 1741,
+     1743, 1744, 1750, 1740,   69, 1742,   69, 1749, 1745, 1751,
+     1748,   69, 1754, 1753, 1755,   69, 1752,   69,   69,   69,
+       69, 1759,   69,   69,   69, 1756,   69,   69,   69, 1762,
+       69,   69, 1766,   69,   69,   69, 1761,   69, 1757, 1758,
+
+     1767, 1760, 1771, 1765,   69, 1769, 1763, 1764,   69, 1770,
+       69,   69, 1768, 1773, 1774,   69,   69, 1772, 1775,   69,
+       69,   69,   69, 1776,   69, 1778,   69, 1780,   69, 1781,
+       69, 1784,   69,   69,   69, 1787, 1788,   69, 1777,   69,
+     1779, 1790,   69, 1791,   69, 1782, 1789, 1783,   69,   69,
+       69, 1785, 1786,   69, 1793, 1792,   69, 1799, 1794, 1797,
+       69, 1798,   69, 1799, 1799, 1799, 1799, 1799, 1799, 1795,
+     1799, 1799, 1799, 1799, 1799, 1796,   41,   41,   41,   41,
+       41,   41,   41,   46,   46,   46,   46,   46,   46,   46,
+       51,   51,   51,   51,   51,   51,   51,   57,   57,   57,
+
+       57,   57,   57,   57,   62,   62,   62,   62,   62,   62,
+       62,   72,   72, 1799,   72,   72,   72,   72,  127,  127,
+     1799, 1799, 1799,  127,  127,  129,  129, 1799, 1799,  129,
+     1799,  129,  131, 1799, 1799, 1799, 1799, 1799,  131,  134,
+      134, 1799, 1799, 1799,  134,  134,  136, 1799, 1799, 1799,
+     1799, 1799,  136,  138,  138, 1799,  138,  138,  138,  138,
+       73,   73, 1799,   73,   73,   73,   73,   13, 1799, 1799,
+     1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
+     1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
+     1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
+
+     1799, 1799, 1799, 1799, 1799, 1799, 1799
     } ;
 
-static yyconst flex_int16_t yy_chk[3562] =
+static yyconst flex_int16_t yy_chk[3608] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1424,7 +1435,7 @@ static yyconst flex_int16_t yy_chk[3562] =
         9,  156,   33,    6,    7,    7,    7,    7,    9,    7,
        10,   10,   10,   45,   45,    7,    8,    8,    8,    8,
        10,    8,   21,   33,  156,   21,   21,    8,   11,   11,
-       11,   11,   11,   11, 1788,   20,   29,   20,   20,   11,
+       11,   11,   11,   11, 1805,   20,   29,   20,   20,   11,
 
        20,   29,   24,   21,   25,   20,   24,   28,   11,   12,
        12,   12,   12,   12,   12,   75,   22,   22,   75,   25,
@@ -1433,7 +1444,7 @@ static yyconst flex_int16_t yy_chk[3562] =
        19,   19,   23,   27,   61,   61,   27,   23,   35,   31,
        31,   23,   39,   27,   23,   27,   23,   23,   31,   83,
        32,   32,   36,   36,   31,   32,   39,   36,   31,   37,
-      663,   39,   38,   38,   37,   38,   79,   36,   40,   40,
+      669,   39,   38,   38,   37,   38,   79,   36,   40,   40,
        36,   32,   34,   40,   37,  111,  111,   34,   37,   37,
        38,   34,   77,   56,   79,   56,   56,   34,   56,   64,
 
@@ -1444,369 +1455,374 @@ static yyconst flex_int16_t yy_chk[3562] =
        82,   89,   90,   91,   86,   98,   90,   84,   91,   85,
        92,   94,   95,  128,  128,  136,   94,   88,   87,   89,
        93,   99,   96,   93,   92,   97,   93,   96,   97,   98,
-      100,   95,   97,  102,  100,   99,  101,  103,  104,  105,
-       93,  107,  106,  101,  103,  107,  102,   96,  108,  109,
-      110,  104,  112,  118,  109,  113,  114,  115,  109,  105,
-
-      106,  116,  117,  119,  119,  118,  108,  117,  113,  120,
-      110,  114,  112,  121,  122,  123,  115,  123,  124,  116,
-      125,  126,  130,  124,  119,  130,  143,  120,  132,  121,
-      132,  132,  125,  132,  134,  122,  135,  135,  123,  126,
-      137,  143,  137,  137,  138,  137,  138,  138,  140,  138,
-      145,  140,  141,  142,  144,  138,  146,  141,  142,  147,
-      148,  154,  144,  149,  133,  148,  148,  150,  149,  145,
-      157,  146,  150,  151,  157,  151,  153,  153,  155,  147,
-      154,  158,  160,  155,  159,  162,  158,  161,  163,  164,
-      164,  165,  166,  163,  131,  151,  152,  160,  159,  161,
-
-      152,  167,  161,  162,  129,  152,  167,  172,  166,  164,
-      152,  165,  168,  168,  169,  170,  152,  152,  171,  169,
-      170,  173,  180,  182,  174,  169,  173,  171,  172,  174,
-      175,  176,  177,  178,  179,  175,  176,  181,  184,  177,
-      179,  183,  180,  181,  186,  182,  178,  185,  187,  183,
-      188,  184,  185,  189,  190,  188,  191,  192,  193,  186,
-      193,  191,  194,  196,  197,  195,  198,  198,  187,  194,
-      195,  203,  190,  190,  199,  189,  197,  192,  200,  199,
-      202,  204,  196,  200,  201,  208,  201,  209,  205,  204,
-      203,  206,  202,  205,  207,  211,  206,  199,  210,  207,
-
-      208,  212,  217,  201,  212,  209,  210,  213,  213,  214,
-      215,  215,  214,  216,  216,  218,  219,  220,  217,  219,
-      211,  220,  221,  222,  223,  224,  224,  225,  222,  226,
-      218,  221,  225,  227,  226,  229,  228,  230,  223,  231,
-      231,  232,  233,  234,  236,  235,  233,  241,  237,  236,
-      230,  237,  238,  227,  228,  239,  229,  235,  240,  232,
-      242,  234,  243,  244,  238,  244,  244,  240,  241,  245,
-      245,  247,  239,  242,  243,  239,  246,  248,  249,  246,
-      250,  251,  251,  253,  253,  252,  254,  249,  247,  250,
-      252,  247,  248,  255,  256,  257,  259,  258,  255,  260,
-
-      261,  254,  258,  261,  260,  261,  256,  262,  263,  264,
-      267,  269,  265,  268,  266,  257,  259,  265,  264,  266,
-      270,  262,  271,  267,  263,  271,  269,  263,  272,  263,
-      275,  267,  274,  268,  270,  276,  278,  283,  281,  275,
-      279,  271,  272,  273,  277,  273,  273,  274,  280,  282,
-      284,  278,  283,  280,  286,  273,  276,  273,  273,  273,
-      279,  281,  273,  277,  287,  284,  285,  288,  289,  282,
-      290,  285,  288,  292,  286,  290,  291,  291,  287,  291,
-      293,  294,  298,  297,  289,  295,  296,  297,  296,  299,
-      303,  448,  300,  292,  303,  301,  293,  294,  448,  295,
-
-      298,  300,  302,  299,  301,  305,  304,  302,  307,  310,
-      305,  306,  307,  313,  300,  304,  309,  306,  308,  308,
-      312,  309,  310,  311,  311,  312,  314,  315,  316,  317,
-      317,  318,  316,  319,  313,  314,  318,  320,  320,  315,
-      322,  322,  323,  324,  325,  326,  327,  329,  330,  127,
-      331,  324,  332,  325,  319,  337,  334,  332,  327,  338,
-      333,  334,  335,  323,  331,  326,  336,  329,  330,  333,
-      335,  336,  339,  337,  340,  341,  343,  342,  340,  344,
-      348,  338,  342,  346,  349,  347,  351,  353,  350,  349,
-      341,  350,  343,  339,  349,  355,  348,  358,  344,  345,
-
-      345,  352,  352,  346,  347,  345,  351,  345,  354,  354,
-      355,  356,  353,  357,  359,  345,  358,  360,  361,  362,
-      363,  366,  360,  356,  365,  345,  364,  361,  357,  365,
-      364,  367,  368,  366,  369,  363,  359,  374,  362,  370,
-      370,  371,  369,  372,  373,  368,  376,  373,  375,  367,
-      378,  375,  374,  371,  377,  372,  379,  379,  377,  377,
-      380,  380,  376,  378,  381,  376,  382,  382,  384,  381,
-      383,  383,  385,  384,  386,  391,  387,  388,  390,  386,
-      387,  389,  388,  390,  392,  389,  393,  394,  402,  392,
-      397,  393,  402,  385,  395,  391,  398,  395,  396,  396,
-
-      399,  394,  395,  400,  401,  399,  395,  401,  397,  404,
-      398,  403,  400,  405,  402,  406,  403,  407,  405,  408,
-      409,  413,  404,  443,  408,  410,  409,  411,  410,  407,
-      411,  406,  412,  414,  443,  415,  416,  412,  418,  413,
-      415,  416,  417,  418,  419,  417,  420,  414,  419,  419,
-      421,  422,  423,  426,  424,  426,  422,  424,  427,  420,
-      425,  423,  429,  421,  425,  425,  428,  430,  428,  431,
-      432,  433,  424,  434,  435,  433,  436,  427,  437,  438,
-      429,  439,  434,  440,  438,  430,  441,  441,  431,  435,
-      432,  442,  444,  437,  436,  442,  445,  444,  446,  449,
-
-      439,  447,  440,  450,  449,  453,  451,  456,  452,  454,
-      450,  451,  445,  452,  447,  455,  454,  446,  460,  458,
-      457,  456,  458,  453,  455,  457,  459,  461,  461,  462,
-      459,  465,  464,  466,  467,  465,  461,  464,  462,  460,
-      468,  469,  470,  473,  476,  466,  479,  480,  468,  486,
-      481,  482,  467,  480,  481,  479,  482,  484,  473,  469,
-      485,  476,  484,  487,  488,  488,  487,  470,  471,  489,
-      490,  490,  493,  471,  486,  493,  489,  471,  485,  491,
-      471,  492,  492,  494,  501,  495,  496,  471,  494,  497,
-      471,  483,  483,  483,  491,  483,  500,  498,  483,  499,
-
-      499,   68,  501,  483,  495,  498,  496,  502,  497,  483,
-      483,  500,  502,  503,  503,  504,  505,  507,  508,  506,
-      504,  505,  506,  507,  509,  510,  508,  512,  511,  513,
-      514,  514,  509,  511,  512,  516,  515,  517,  519,  521,
-      516,  520,  521,  510,  515,  522,  524,  519,  513,  527,
-      520,  523,  523,  528,  525,  529,  517,  525,  528,  522,
-      530,  524,  531,  532,  533,  525,  536,  534,  535,  537,
-      527,  534,  541,  533,  538,  539,  529,  542,  537,  549,
-      530,  539,  543,  532,  531,  536,  535,  543,  538,  540,
-      540,  542,  541,  544,  546,  545,  547,  548,  544,  545,
-
-      549,  551,  548,  550,  550,  553,  551,  552,  547,  554,
-      552,  555,  556,  546,  557,  557,  555,  558,  558,  559,
-      560,  561,  554,  553,  560,  562,  564,  563,  567,  566,
-      569,  568,  556,  566,  559,  573,  574,  570,  571,  573,
-      561,  563,  570,  567,  572,  569,  564,   62,  578,  562,
-      565,  574,  571,  565,  577,  565,  568,  575,  572,  565,
-      576,  565,  575,  579,  580,  576,  565,  583,  577,  578,
-      580,  565,  575,  581,  582,  582,  584,  579,  581,  583,
-      582,  584,  582,  585,  586,  587,  587,  588,  590,  591,
-      589,  593,  588,  592,  592,  593,  586,  585,  589,  595,
-
-      582,  597,  590,  596,  595,  598,  596,  599,  591,  600,
-      601,  603,  599,  602,  604,  605,  607,  606,  598,  604,
-      597,  610,  602,  611,  608,  607,  601,  612,  600,  608,
-      603,  606,  613,  614,  615,  605,  616,  613,  614,  615,
-      610,  611,  612,  617,  617,  616,  618,  619,  621,  624,
-      625,  618,  621,  621,  622,  622,  623,  626,  622,  623,
-      619,  627,  628,  624,  629,  628,  630,  633,  631,  632,
-      625,  630,  626,  631,  634,  632,  635,  635,  636,  637,
-      634,  627,  639,  633,  640,  629,  638,  636,  641,  638,
-      643,  642,  646,  644,  648,  643,  647,  637,  644,  647,
-
-      639,  649,  650,  640,  642,  648,  651,  650,  641,  652,
-      646,  651,  654,  649,  653,  653,  655,  656,  657,  658,
-      660,  661,  657,  659,  652,  666,  664,  665,  667,  656,
-      655,  654,  659,  667,  671,  675,  668,  658,  669,  660,
-      664,  668,  665,  669,  670,  666,  661,  672,  671,  670,
-      673,  674,  676,  677,  675,  673,  678,  678,  679,  680,
-      681,  672,  682,  682,  683,  680,  674,  676,  684,  683,
-      685,  686,  677,  687,  686,  684,  679,  688,  689,  690,
-      681,  692,  691,  689,  685,  693,  688,  691,  694,  693,
-      695,  687,  696,  699,  697,  700,  698,  694,  690,  701,
-
-      692,  697,  704,  702,  703,  695,  705,  696,  698,  702,
-      708,  710,  699,  707,  713,  705,  700,  701,  707,  703,
-      709,  711,  704,  715,  708,  712,  711,   57,  709,  712,
-      712,  710,  716,  713,  714,  714,  715,  717,  718,  718,
-      719,  716,  717,  720,  722,  719,  721,  721,  720,  723,
-      724,  725,  726,  722,  723,  727,  728,  726,  729,  736,
-      727,  728,  729,  732,  724,  731,  731,  734,  735,  725,
-      730,  734,  737,  744,  732,  739,  740,  736,  743,  730,
-      742,  737,  746,  735,  730,  741,  730,  738,  730,  739,
-      730,  738,  738,  741,  742,  740,  743,  746,  744,  745,
-
-      745,  747,  747,  749,  750,  751,  749,  752,  752,  750,
-      753,  754,  754,  755,  756,  756,  757,  758,  755,  759,
-      760,  762,  758,  772,  751,  760,  763,  759,  761,  761,
-      753,  764,  763,  771,  772,  766,  757,  767,  764,  762,
-      766,  768,  767,  769,  770,  774,  768,  775,  769,  773,
-      773,  776,  771,  770,  777,  778,  776,  779,  780,  781,
-      781,  782,  783,  786,  784,  774,  785,  787,  777,  779,
-      775,  785,  787,  789,  777,  778,  780,  789,  789,  790,
-      793,  782,  784,  791,  794,  796,  786,  783,  790,  794,
-      792,  791,  792,  795,  793,  797,  796,  795,  798,  799,
-
-      800,  801,  802,  803,  805,  800,  806,  803,  804,  809,
-      807,  810,  808,  812,  797,  813,  810,  799,  812,  801,
-      806,  814,  802,  805,  798,  807,  804,  808,  809,  811,
-      814,  815,  816,  813,  817,  818,  811,  819,  816,  820,
-      818,  824,  819,  826,  820,  827,  815,  821,  821,  823,
-      823,  825,  829,  829,  830,  817,  825,  826,  828,  824,
-      831,  832,  828,  828,  827,  833,  834,  836,  840,  835,
-      837,  838,  834,  830,  835,  839,  841,  842,   52,  831,
-      843,  843,  840,  845,  833,  844,  836,  832,  844,  837,
-      838,  846,  842,  848,  839,  845,  846,  841,  847,  849,
-
-      850,  851,  847,  851,  853,  857,  848,  851,  849,  854,
-      854,  855,  858,  850,  856,  860,  855,  858,  856,  873,
-      851,  862,  863,  863,  853,  857,  862,  864,  866,  866,
-      868,  868,  864,  860,  870,  871,  871,  870,  872,  878,
-      874,  875,  876,  880,  873,  881,  875,  877,  877,  879,
-      879,  882,  883,  872,  874,  882,  881,  876,  884,  878,
-      886,  887,  890,  884,  889,  880,  888,  888,  891,  889,
-      892,  883,  893,  897,  894,  887,  894,  899,  886,  892,
-      895,  896,  890,  903,  898,  895,  896,  905,  891,  898,
-      901,  899,  893,  897,  900,  900,  901,  904,  904,  905,
-
-      906,  912,  910,  907,   51,  908,  907,  903,  909,  907,
-      908,  910,  911,  909,  914,  913,  916,  911,  913,  914,
-      906,  907,  915,  915,  917,  918,  912,  919,  920,  921,
-      922,  925,  919,  920,  916,  922,  923,  923,  926,  924,
-      927,  928,  929,  917,  924,  918,  930,  932,  931,  925,
-      933,  934,  921,  931,  929,  928,  936,  938,  926,  930,
-      927,  936,  937,  940,  938,  948,  939,  932,  943,  943,
-      933,  944,  934,  946,  944,  939,  945,  937,  939,  940,
-      953,  945,  947,  949,  948,  950,  952,  952,  951,  946,
-      954,  947,  949,  951,  950,  949,  955,  956,  958,  957,
-
-      953,  959,  960,  954,  961,  961,  962,  963,  964,  967,
-      958,  956,  966,  964,  955,  957,  963,  965,  965,  970,
-      960,  966,  962,  969,  966,  971,  959,  967,  969,  972,
-      971,  973,  965,  974,  975,  972,  976,  970,  974,  976,
-      979,  980,  981,  982,  983,  976,  985,  975,  979,  983,
-      984,  973,  987,  988,  980,  993,  989,  988,  990,  992,
-      981,  989,  982,  990,  985,  991,  984,  994,  992,  996,
-      991, 1000,  987,  995,  995,  998,  999,  997,  993, 1002,
-     1001, 1003,  994,  996,  997, 1001, 1004,  998,  999,   46,
-     1000, 1002, 1004, 1005, 1005, 1006, 1007, 1007, 1006, 1003,
-
-     1009, 1010, 1010, 1011, 1013, 1012, 1014, 1015, 1017, 1009,
-     1012, 1016, 1018, 1013, 1019, 1011, 1016, 1017, 1014, 1020,
-     1020, 1021, 1015, 1022, 1023, 1024, 1021, 1025, 1025, 1019,
-     1017, 1026, 1018, 1027, 1027, 1028, 1028, 1029, 1034, 1036,
-     1044, 1029, 1030, 1023, 1022, 1024, 1031, 1030, 1033, 1031,
-     1035, 1026, 1041, 1033, 1044, 1035, 1034, 1037, 1037, 1038,
-     1038, 1039, 1040, 1042, 1036, 1043, 1039, 1045, 1046, 1046,
-     1047, 1049, 1041, 1051, 1040, 1040, 1040, 1048, 1048, 1052,
-     1052, 1040, 1051, 1042, 1053, 1043, 1054, 1056, 1045, 1055,
-     1058, 1049, 1059, 1054, 1057, 1057, 1047, 1061, 1055, 1053,
-
-     1062, 1063, 1061, 1064, 1065, 1062, 1066, 1068, 1059, 1065,
-     1064, 1066, 1068, 1056, 1067, 1067, 1058, 1069, 1070, 1072,
-     1071, 1063, 1073, 1074, 1075, 1073, 1069, 1076, 1076, 1077,
-     1078, 1072, 1079, 1081, 1080, 1082, 1082, 1083, 1070, 1071,
-     1080, 1074, 1081, 1085, 1077, 1084, 1084, 1079, 1083, 1078,
-     1075, 1086, 1087, 1083, 1088, 1088, 1089, 1087, 1090, 1091,
-     1089, 1089, 1092, 1090, 1085, 1086, 1093, 1094, 1095, 1096,
-     1097, 1093, 1095, 1098, 1092, 1099, 1101, 1100, 1098, 1094,
-     1103, 1096, 1100, 1103, 1107, 1091, 1104, 1104, 1101, 1105,
-     1105, 1106, 1106, 1108, 1110, 1097, 1109, 1099, 1111, 1108,
-
-     1110, 1109, 1115, 1113, 1107, 1117, 1119, 1111, 1113, 1118,
-     1118, 1120, 1121, 1122, 1115, 1123, 1124, 1117, 1125, 1123,
-     1120, 1124, 1126, 1125, 1129, 1130, 1119, 1128, 1128, 1131,
-     1121, 1136, 1122, 1137, 1130, 1139, 1126,   41, 1131, 1128,
-     1133, 1133, 1129, 1138, 1140, 1140, 1136, 1137, 1138, 1141,
-     1144, 1141, 1139, 1142, 1142, 1145, 1147, 1144, 1146, 1146,
-     1148, 1149, 1150, 1152, 1151, 1147, 1153, 1154, 1157, 1161,
-     1157, 1158, 1156, 1149, 1150, 1145, 1151, 1156, 1152, 1159,
-     1163, 1148, 1168, 1161, 1162, 1162, 1153, 1154, 1159, 1158,
-     1164, 1165, 1166, 1165, 1167, 1164, 1169, 1166, 1170, 1167,
-
-     1168, 1172, 1171, 1170, 1173, 1175, 1163, 1171, 1176, 1177,
-     1177, 1179, 1173, 1180, 1172, 1181, 1169, 1178, 1178, 1183,
-     1181, 1183, 1176, 1182, 1175, 1184, 1179, 1185, 1182, 1186,
-     1188, 1186, 1187, 1180, 1193, 1190, 1185, 1184, 1191, 1185,
-     1190, 1187, 1188, 1191, 1194, 1195, 1197, 1193, 1199, 1201,
-     1200, 1202, 1197, 1204, 1199, 1203, 1203, 1205, 1205, 1206,
-     1202, 1195, 1204, 1207, 1194, 1200, 1208, 1207, 1209, 1210,
-     1210, 1208, 1211, 1212, 1201, 1215, 1215, 1216, 1206, 1219,
-     1211, 1209, 1217, 1217, 1218, 1218, 1216, 1220, 1224, 1221,
-     1229, 1219, 1225, 1212, 1221, 1222, 1222, 1225, 1226, 1227,
-
-     1230, 1228, 1231, 1231, 1233, 1220, 1228, 1232, 1229, 1235,
-     1234, 1232, 1236, 1224, 1227, 1234, 1230, 1238, 1239, 1233,
-     1240, 1226, 1241, 1243, 1242, 1245, 1245, 1246, 1247, 1279,
-     1246, 1236, 1248, 1279, 1249, 1235, 1242, 1250, 1250, 1240,
-     1238, 1247, 1239, 1241, 1243, 1253, 1248, 1249, 1251, 1251,
-     1252, 1252, 1254, 1254, 1255, 1255, 1256, 1256, 1253, 1257,
-     1258, 1258, 1259, 1259, 1260, 1262, 1263, 1263, 1264, 1267,
-     1262, 1265, 1265, 1266, 1268, 1267, 1276, 1268, 1257, 1269,
-     1269, 1270, 1270, 1260, 1271, 1272, 1273, 1264, 1274, 1274,
-     1277, 1266, 1278, 1280, 1280, 1269, 1276, 1281, 1282, 1282,
-
-     1272, 1283, 1285, 1271, 1288, 1273, 1286, 1278, 1284, 1284,
-     1287, 1285, 1289, 1277, 1290, 1287, 1281, 1291, 1286, 1292,
-     1299, 1293, 1291, 1294, 1295, 1289, 1296, 1283, 1306, 1288,
-     1293, 1296, 1294, 1297, 1292, 1290, 1301, 1297, 1295, 1303,
-     1299, 1302, 1302, 1306, 1303, 1301, 1304, 1304, 1307, 1309,
-     1311, 1312, 1313, 1311, 1317, 1304, 1312, 1307, 1314, 1314,
-     1320, 1309, 1316, 1316, 1318, 1318, 1319, 1321, 1317, 1322,
-     1322, 1324, 1313, 1325, 1320, 1324, 1325, 1327, 1319, 1326,
-     1326, 1328, 1327, 1329, 1330, 1331, 1321, 1332, 1330, 1333,
-     1334, 1336, 1332, 1337, 1333, 1338, 1334, 1329, 1337,   14,
-
-     1338, 1328, 1339, 1358, 1340, 1331, 1340, 1336, 1343, 1343,
-     1339, 1347, 1347, 1350, 1351, 1351, 1353, 1353, 1350, 1355,
-     1356, 1356, 1357, 1359, 1355, 1358, 1361, 1362, 1359, 1363,
-     1363, 1365, 1366, 1367, 1368, 1370, 1370, 1366, 1357, 1362,
-     1365, 1372, 1373, 1374, 1373, 1361, 1372, 1375, 1379, 1368,
-     1380, 1367, 1375, 1376, 1376, 1377, 1377, 1374, 1378, 1378,
-     1379, 1381, 1382, 1383, 1384, 1385, 1386, 1386, 1380, 1384,
-     1387, 1388, 1389, 1381, 1382, 1383, 1390, 1391, 1393, 1387,
-     1392, 1394, 1395, 1396, 1401, 1385, 1403, 1395, 1396, 1390,
-     1397, 1397, 1389, 1402, 1392, 1404, 1393, 1388, 1398, 1398,
-
-     1405, 1391, 1406, 1394, 1401, 1407, 1408, 1408, 1403, 1405,
-     1411, 1402, 1410, 1410, 1412, 1404, 1413, 1414, 1415, 1411,
-     1417, 1412, 1406, 1407, 1416, 1418, 1418, 1419, 1420, 1421,
-     1422, 1413, 1419, 1423, 1428, 1414, 1415, 1425, 1429, 1417,
-     1416, 1429, 1430, 1430, 1421, 1431, 1420, 1432, 1434, 1422,
-     1433, 1433, 1434, 1423, 1428, 1436, 1425, 1437, 1438, 1438,
-     1431, 1437, 1439, 1441, 1441, 1432, 1442, 1443, 1443, 1449,
-     1436, 1444, 1444, 1448, 1448, 1439, 1451, 1450, 1452, 1453,
-     1454, 1451, 1456, 1452, 1457, 1442, 1450, 1458, 1454, 1457,
-     1459, 1449, 1458, 1460, 1460, 1461, 1461, 1456, 1453, 1462,
-
-       13, 1463, 1464, 1464, 1462, 1459, 1463, 1465, 1465, 1468,
-     1471, 1469, 1470, 1472, 1468, 1469, 1473, 1470, 1474, 1471,
-     1475, 1478, 1477, 1474, 1473, 1477, 1480, 1479, 1472, 1481,
-     1482, 1482, 1475, 1483, 1485, 1480, 1486, 1489, 1481, 1478,
-     1479, 1487, 1483, 1488, 1488, 1492, 1489, 1490, 1490, 1491,
-     1492, 1495, 1494, 1485, 1497, 1498, 1486, 1491, 1497, 1499,
-     1487, 1494, 1501, 1501, 1495, 1503, 1503, 1506, 1512, 1498,
-     1507, 1507, 1508,    0, 1499, 1508, 1509, 1509, 1510, 1510,
-     1511, 1511, 1513, 1514, 1515, 1515, 1512, 1506, 1514, 1516,
-     1520, 1519, 1523, 1516, 1524, 1520, 1513, 1519, 1525, 1524,
-
-     1526, 1527, 1528, 1528, 1529, 1530, 1531, 1532, 1532, 1523,
-     1523, 1533, 1533, 1530, 1534, 1527, 1525, 1535, 1536, 1537,
-     1526, 1539, 1535, 1529, 1538, 1531, 1540, 1548, 1542, 1544,
-     1534, 1542, 1546, 1538, 1545, 1545, 1546, 1550, 1536, 1547,
-     1551, 1539, 1548, 1549, 1549, 1537, 1540, 1544, 1547, 1551,
-     1550, 1553, 1554, 1555, 1559, 1560, 1560, 1561, 1563, 1559,
-     1553, 1564, 1565, 1563, 1554, 1566, 1561, 1567, 1569, 1568,
-     1564, 1570, 1567, 1569, 1571, 1571, 1573, 1574, 1555, 1575,
-     1575, 1576, 1565, 1578, 1577, 1576, 1566, 1568, 1579, 1580,
-     1582, 1584, 1574, 1577, 1589, 1573, 1570, 1580, 1581, 1578,
-
-     1583, 1583, 1590, 1581, 1585, 1585, 1586, 1579, 1588, 1588,
-     1584, 1586, 1592, 1592, 1589, 1593, 1582, 1594, 1595, 1595,
-     1596, 1596, 1597, 1598, 1599, 1590, 1600, 1600, 1601, 1593,
-     1602, 1603, 1604, 1605, 1610, 1598, 1603, 1606, 1605, 1594,
-     1601, 1597, 1607, 1607, 1599, 1609, 1609, 1612, 1613,    0,
-     1602, 1604, 1612, 1610, 1606, 1606, 1614, 1615, 1615, 1616,
-     1616, 1614, 1613, 1617, 1617, 1618, 1620, 1620, 1622, 1622,
-     1618, 1624, 1624, 1625, 1626, 1627, 1627, 1628, 1631, 1632,
-     1632, 1636, 1628, 1626, 1633, 1635, 1631, 1625, 1637, 1633,
-     1635, 1638, 1639, 1636, 1640, 1641, 1644, 1645, 1645, 1647,
-
-     1641, 1646, 1646, 1647, 1651, 1651, 1637, 1638, 1653, 1639,
-     1639, 1656, 1653, 1655, 1655, 1640, 1644, 1658, 1658, 1659,
-     1661, 1662, 1662, 1663, 1663, 1656, 1664, 1665, 1666, 1669,
-     1667, 1668, 1670, 1670, 1659, 1667, 1668,    0, 1661, 1673,
-     1673, 1679, 1665, 1675, 1675, 1677, 1677, 1683, 1669, 1666,
-     1684, 1664, 1683, 1679, 1680, 1680, 1685, 1686, 1688, 1687,
-     1694, 1685, 1693, 1696, 1684, 1695, 1693, 1697, 1698, 1699,
-     1702, 1700, 1701, 1701, 1688, 1705, 1686, 1687, 1695, 1702,
-     1694, 1706, 1696, 1703, 1698, 1697, 1700, 1704, 1703, 1708,
-     1707, 1710, 1704, 1711, 1699, 1707, 1706, 1712, 1715, 1713,
-
-     1705, 1714, 1712, 1708, 1713, 1716, 1710, 1717, 1718, 1719,
-     1720, 1715, 1711, 1721, 1722, 1714, 1724, 1725, 1725, 1722,
-     1723, 1717, 1719, 1720, 1716, 1723, 1726, 1718, 1727, 1728,
-     1729, 1726, 1721, 1727, 1728, 1724, 1730, 1731, 1731, 1732,
-     1733, 1730, 1734, 1735, 1736, 1737, 1732, 1739, 1735, 1729,
-     1740, 1741, 1739, 1742, 1743, 1743, 1745, 1744, 1737, 1733,
-        0, 1734, 1744, 1736, 1746, 1746, 1742, 1747, 1747, 1740,
-     1741, 1748, 1749, 1750, 1752, 1745, 1748, 1751, 1751, 1749,
-     1753, 1752, 1754, 1755, 1756, 1758, 1759, 1753, 1755, 1760,
-     1758, 1759, 1750, 1761, 1762, 1762, 1763, 1764, 1765, 1765,
-
-     1767, 1754, 1776, 1756, 1766, 1766, 1777, 1767, 1760, 1768,
-     1768, 1770, 1761, 1769, 1769, 1763, 1764, 1772, 1770, 1775,
-        0, 1776, 1772,    0, 1775, 1777, 1778, 1778, 1779, 1779,
-     1783, 1783, 1783, 1783, 1783, 1783, 1783, 1784, 1784, 1784,
-     1784, 1784, 1784, 1784, 1785, 1785, 1785, 1785, 1785, 1785,
-     1785, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1787, 1787,
-     1787, 1787, 1787, 1787, 1787, 1789, 1789,    0, 1789, 1789,
-     1789, 1789, 1790, 1790,    0,    0,    0, 1790, 1790, 1791,
-     1791,    0,    0, 1791,    0, 1791, 1792,    0,    0,    0,
-        0,    0, 1792, 1793, 1793,    0,    0,    0, 1793, 1793,
-
-     1794,    0,    0,    0,    0,    0, 1794, 1795, 1795,    0,
-     1795, 1795, 1795, 1795, 1796, 1796,    0, 1796, 1796, 1796,
-     1796, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
-     1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
-     1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
-     1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
-     1782
+      100,   95,   97,  102,  100,   99,  101,  103,  104,   93,
+       93,  105,  106,  101,  103,  107,  102,   96,  108,  107,
+      109,  104,  110,  112,  113,  109,  114,  115,  117,  109,
+
+      106,  105,  116,  117,  120,  118,  108,  113,  119,  119,
+      121,  114,  110,  112,  122,  125,  115,  118,  124,  123,
+      116,  123,  120,  124,  180,  126,  121,  125,  130,  119,
+      180,  130,  135,  135,  132,  122,  132,  132,  140,  132,
+      141,  140,  123,  126,  137,  141,  137,  137,  138,  137,
+      138,  138,  142,  138,  143,  144,  145,  142,  146,  138,
+      147,  148,  151,  144,  151,  149,  148,  148,  154,  143,
+      149,  150,  162,  146,  155,  145,  150,  153,  153,  155,
+      147,  159,  157,  158,  151,  152,  157,  154,  158,  152,
+      162,  179,  160,  163,  152,  159,  161,  164,  163,  152,
+
+      165,  165,  164,  166,  179,  152,  152,  160,  161,  167,
+      168,  161,  169,  169,  171,  168,  170,  172,  173,  171,
+      165,  170,  181,  166,  174,  167,  172,  170,  175,  174,
+      176,  177,  182,  175,  178,  176,  177,  183,  182,  173,
+      184,  178,  181,  185,  186,  187,  188,  189,  184,  186,
+      190,  191,  189,  192,  193,  194,  185,  194,  192,  183,
+      187,  195,  196,  197,  198,  134,  188,  196,  195,  191,
+      191,  202,  190,  202,  193,  200,  198,  199,  199,  201,
+      200,  203,  197,  204,  201,  212,  205,  206,  209,  210,
+      202,  207,  206,  203,  205,  208,  207,  211,  200,  133,
+
+      208,  213,  204,  209,  213,  211,  218,  210,  214,  214,
+      212,  215,  216,  216,  215,  217,  217,  219,  220,  221,
+      222,  220,  218,  221,  224,  223,  225,  225,  226,  222,
+      223,  227,  219,  226,  228,  229,  227,  230,  224,  231,
+      232,  232,  233,  234,  235,  233,  236,  237,  235,  241,
+      238,  240,  231,  229,  228,  238,  242,  239,  230,  237,
+      239,  234,  243,  240,  236,  242,  241,  244,  249,  241,
+      245,  246,  250,  246,  246,  247,  247,  251,  248,  259,
+      244,  248,  245,  243,  252,  249,  251,  250,  249,  253,
+      253,  254,  256,  252,  255,  255,  254,  257,  258,  259,
+
+      260,  261,  257,  262,  264,  260,  263,  256,  262,  263,
+      258,  263,  265,  266,  267,  268,  269,  271,  264,  267,
+      268,  261,  266,  270,  272,  274,  276,  273,  265,  269,
+      273,  265,  271,  265,  278,  277,  280,  269,  272,  274,
+      281,  276,  283,  270,  277,  279,  273,  275,  282,  275,
+      275,  280,  284,  282,  285,  278,  286,  288,  291,  275,
+      281,  275,  275,  275,  279,  283,  275,  289,  287,  285,
+      290,  286,  284,  287,  291,  290,  294,  288,  292,  293,
+      293,  289,  293,  292,  295,  296,  299,  298,  297,  298,
+      299,  300,  301,  304,  302,  303,  294,  308,  304,  306,
+
+      295,  296,  297,  302,  303,  307,  301,  305,  306,  300,
+      307,  305,  316,  309,  311,  311,  302,  310,  308,  309,
+      312,  310,  313,  314,  314,  312,  315,  317,  318,  322,
+      319,  315,  326,  316,  319,  313,  317,  320,  320,  321,
+      318,  323,  323,  327,  321,  325,  325,  328,  329,  330,
+      322,  327,  332,  326,  333,  334,  328,  335,  336,  337,
+      339,  330,  335,  338,  337,  339,  340,  336,  329,  334,
+      341,  338,  332,  342,  333,  343,  344,  345,  347,  343,
+      346,  349,  345,  350,  340,  352,  353,  351,  354,  353,
+      352,  344,  341,  356,  342,  352,  346,  347,  348,  348,
+
+      358,  349,  350,  351,  348,  359,  348,  360,  354,  355,
+      355,  357,  357,  361,  348,  358,  362,  359,  356,  364,
+      363,  365,  360,  367,  348,  363,  366,  367,  364,  368,
+      369,  370,  361,  371,  368,  372,  373,  373,  362,  374,
+      365,  366,  369,  372,  375,  376,  371,  377,  376,  370,
+      378,  374,  379,  378,  380,  388,  375,  381,  380,  380,
+      382,  382,  377,  383,  383,  385,  385,  384,  379,  394,
+      381,  379,  384,  386,  386,  387,  388,  389,  805,  390,
+      387,  391,  389,  390,  392,  393,  391,  395,  392,  394,
+      393,  396,  395,  397,  398,  399,  396,  398,  400,  400,
+
+      401,  402,  398,  403,  805,  404,  398,  397,  403,  405,
+      408,  410,  405,  399,  404,  402,  406,  407,  401,  409,
+      406,  411,  407,  408,  409,  412,  413,  410,  414,  417,
+      412,  414,  413,  411,  415,  416,  418,  415,  419,  420,
+      416,  422,  406,  419,  420,  421,  422,  417,  421,  423,
+      418,  424,  425,  423,  423,  426,  428,  427,  429,  428,
+      426,  431,  429,  429,  424,  425,  427,  430,  432,  430,
+      432,  433,  434,  435,  428,  436,  438,  437,  439,  440,
+      431,  437,  442,  441,  443,  438,  444,  442,  462,  433,
+      434,  462,  435,  439,  449,  436,  447,  440,  441,  445,
+
+      445,  450,  446,  443,  448,  444,  446,  447,  451,  448,
+      449,  452,  453,  457,  455,  454,  460,  453,  452,  455,
+      450,  451,  454,  456,  459,  458,  464,  474,  456,  461,
+      460,  457,  458,  459,  461,  463,  465,  465,  468,  463,
+      466,  470,  469,  468,  471,  465,  469,  464,  472,  466,
+      473,  477,  474,  470,  480,  483,  472,  484,  489,  490,
+      559,  485,  471,  484,  483,  485,  477,  486,  473,  475,
+      488,  480,  486,  559,  475,  488,  489,  491,  475,  493,
+      491,  475,  492,  492,  490,  495,  493,  501,  475,  494,
+      494,  475,  487,  487,  487,  500,  487,  496,  496,  487,
+
+      495,  497,  498,  499,  487,  498,  497,  501,  499,  502,
+      487,  487,  503,  506,  500,  504,  504,  505,  507,  509,
+      503,  508,  508,  507,  509,  510,  511,  512,  502,  511,
+      510,  506,  505,  512,  513,  514,  515,  518,  517,  516,
+      519,  519,  513,  514,  516,  517,  521,  520,  522,  524,
+      525,  521,  527,  529,  515,  520,  518,  526,  524,  525,
+      526,  528,  528,  532,  534,  533,  527,  522,  529,  530,
+      533,  535,  530,  536,  537,  539,  543,  538,  540,  539,
+      530,  541,  544,  542,  532,  534,  538,  546,  544,  547,
+      543,  535,  542,  551,  537,  536,  540,  545,  545,  548,
+
+      541,  549,  552,  547,  548,  550,  549,  546,  553,  550,
+      554,  558,  551,  553,  552,  555,  555,  556,  557,  560,
+      561,  557,  556,  564,  560,  562,  562,  563,  563,  558,
+      565,  554,  566,  567,  565,  568,  569,  571,  564,  572,
+      561,  571,  575,  573,  574,  594,  576,  575,  577,  568,
+      579,  566,  583,  594,  572,  131,  569,  567,  570,  574,
+      576,  570,  577,  570,  582,  579,  578,  570,  573,  570,
+      578,  580,  581,  583,  570,  584,  580,  581,  582,  570,
+      586,  585,  587,  587,  588,  586,  580,  585,  587,  584,
+      587,  590,  589,  595,  591,  593,  588,  589,  592,  592,
+
+      593,  596,  597,  597,  602,  590,  591,  595,  587,  598,
+      600,  601,  603,  598,  601,  600,  604,  605,  606,  607,
+      596,  604,  605,  602,  608,  603,  609,  610,  611,  612,
+      613,  614,  610,  608,  616,  607,  614,  606,  617,  613,
+      618,  619,  620,  612,  621,  609,  619,  620,  611,  621,
+      622,  623,  623,  616,  625,  618,  617,  624,  629,  622,
+      627,  629,  624,  630,  627,  627,  631,  625,  628,  628,
+      632,  633,  628,  634,  635,  636,  634,  630,  637,  643,
+      636,  638,  639,  637,  640,  632,  631,  638,  641,  641,
+      640,  633,  642,  644,  645,  635,  644,  643,  639,  646,
+
+      647,  642,  648,  649,  650,  652,  654,  653,  649,  650,
+      653,  656,  645,  655,  657,  648,  656,  654,  646,  657,
+      647,  658,  660,  652,  661,  655,  659,  659,  662,  663,
+      664,  666,  667,  663,  665,  670,  658,  671,  661,  672,
+      662,  660,  673,  665,  681,  129,  674,  673,  664,  670,
+      666,  674,  671,  675,  677,  676,  678,  667,  675,  672,
+      676,  679,  680,  681,  682,  683,  679,  685,  677,  686,
+      678,  684,  684,  687,  691,  686,  693,  680,  689,  682,
+      688,  688,  690,  689,  683,  685,  694,  692,  691,  690,
+      692,  695,  696,  687,  693,  694,  695,  697,  698,  699,
+
+      700,  701,  697,  699,  702,  703,  704,  705,  706,  700,
+      707,  696,  703,  710,  708,  709,  701,  698,  704,  702,
+      708,  714,  711,  716,  127,  718,  705,  713,  707,  706,
+      709,  711,  713,  710,  715,  714,  717,  718,  720,  722,
+      719,  717,  715,  716,  719,  719,  721,  721,  724,  723,
+      725,  725,  722,  724,  726,  727,  729,  720,  723,  726,
+      727,  728,  728,  730,  731,  729,  732,  733,  730,  734,
+      735,  739,  733,  736,  734,  735,  742,  736,  731,  738,
+      738,  744,  739,  741,  732,  737,  743,  741,  745,  747,
+      744,  742,  745,  745,  737,  746,  749,  750,  748,  737,
+
+      751,  737,  753,  737,  743,  737,  748,  758,  747,  746,
+      749,  752,  752,  754,  754,  750,  756,  753,  757,  756,
+      759,  759,  760,  757,  762,  751,  758,  761,  761,  762,
+      763,  763,  764,  765,  767,  766,  768,  768,  765,  767,
+      769,  770,  760,  766,  771,  773,  781,  770,  774,  775,
+      773,  771,  764,  774,  775,  776,  777,  778,  769,  779,
+      776,  780,  780,  782,  783,  777,  781,  784,  785,  783,
+      779,  786,  787,  788,  788,  789,  778,  790,  791,  792,
+      793,  784,  797,  786,  792,   68,  782,  784,  785,  794,
+      787,  797,  798,  796,  794,  789,  791,  796,  796,  799,
+
+      798,  799,  790,  793,  800,  801,  803,  802,  804,  807,
+      801,  802,  806,  808,  807,  809,  810,  803,  800,  811,
+      810,  812,  813,  814,  815,  816,  852,  804,  817,  852,
+      806,  808,  820,  817,  818,  809,  813,  811,  814,  815,
+      812,  818,  819,  821,  816,  822,  824,  819,  823,   62,
+      820,  825,  821,  826,  823,  832,  825,  827,  826,  835,
+      822,  840,  827,  828,  828,  829,  829,  824,  831,  831,
+      833,  834,  836,  832,  838,  833,  836,  836,  835,  837,
+      837,  839,  841,  842,  844,  834,  843,  840,  845,  842,
+      846,  843,  847,  838,  848,  849,  988,  850,  851,  851,
+
+      839,  841,  853,  844,  988,  854,  856,  845,  848,  846,
+      854,  847,  850,  855,  853,  857,  849,  855,  858,  856,
+      859,  861,  859,  865,  857,  863,  859,  862,  862,  864,
+      863,  858,  866,  864,  868,  870,   57,  866,  881,  859,
+      870,  861,  872,  865,  871,  871,  880,  872,  874,  874,
+      876,  876,  868,  878,  879,  879,  878,  882,  884,  883,
+      886,  880,  888,  881,  883,  885,  885,  887,  887,  891,
+      889,  882,  890,  884,  892,  894,  890,  895,  898,  892,
+      886,  889,  896,  896,  888,  897,  899,  900,  891,  901,
+      897,  895,  902,  894,  902,  903,  900,  904,  898,  905,
+
+      903,  907,  904,  906,  908,  908,  899,  909,  906,  901,
+      911,  912,  912,  909,  913,  907,  914,  915,  920,  905,
+      915,  918,  916,  915,  917,  926,  913,  916,  919,  917,
+      918,  923,  923,  919,  911,  915,  914,  921,  924,  922,
+      921,  925,  927,  920,  922,  926,  928,  927,  929,  930,
+      932,  928,  931,  931,  930,  932,  924,  933,  934,  935,
+      925,  937,  936,  939,  938,  940,  941,  942,  939,  943,
+       52,  929,  949,  937,  946,  933,  936,  938,  934,  935,
+       51,  942,  945,  948,  947,  940,  941,  945,  949,  946,
+      943,  947,  948,  952,  952,  948,  953,  954,  955,  953,
+
+      956,  957,  954,  958,  959,  960,  961,  961,  962,  956,
+      960,  963,  958,  959,  955,  958,  964,  965,  967,  966,
+      957,  968,  969,  971,  963,  970,  970,  972,  962,   46,
+      967,  965,  973,  976,  964,  966,  972,  973,  975,  971,
+      969,  974,  974,  978,  979,  982,  968,  975,  978,  980,
+      975,  976,  981,  984,  980,  983,  974,  990,  981,  989,
+      983,  985,  979,  991,  985,  982,  984,  993,  992,  994,
+      985,  996,  989,  992,  997,  990,  998, 1001,  997,  999,
+     1000,  998,  991,  993,  999, 1000, 1001,  994, 1002, 1003,
+     1006,  996, 1004, 1004, 1005, 1007, 1009, 1006, 1008, 1012,
+
+     1010, 1011, 1020, 1013, 1003, 1010, 1090, 1007, 1005, 1013,
+     1008, 1002, 1090, 1011, 1020, 1009, 1018, 1012, 1014, 1014,
+     1015, 1016, 1016, 1015, 1021, 1018, 1019, 1019, 1022, 1021,
+     1023, 1024, 1026, 1025, 1028, 1027, 1031, 1022, 1025, 1029,
+     1029, 1026, 1023, 1030, 1032, 1033, 1024, 1035, 1030, 1028,
+     1034, 1034, 1036, 1036, 1026, 1027, 1038, 1031, 1037, 1037,
+     1038, 1039, 1043, 1032, 1042, 1033, 1039, 1035, 1040, 1042,
+     1044, 1040, 1045, 1046, 1046, 1044, 1047, 1047, 1048, 1049,
+     1043, 1050, 1051, 1048, 1052, 1053, 1054, 1055, 1057, 1052,
+     1059, 1049, 1049, 1049, 1056, 1056,   41, 1045, 1049, 1066,
+
+     1054, 1050, 1051, 1058, 1058, 1053, 1061, 1063, 1055, 1064,
+     1059, 1062, 1062, 1068, 1057, 1061, 1064, 1065, 1067, 1067,
+     1069, 1073, 1063, 1071, 1072, 1066, 1065, 1074, 1071, 1072,
+     1075, 1079, 1076, 1078, 1074, 1075, 1069, 1076, 1078, 1068,
+     1079, 1073, 1077, 1077, 1080, 1082, 1081, 1083, 1084, 1085,
+     1083, 1086, 1086, 1087, 1088, 1089,   14, 1082, 1091, 1092,
+     1092, 1093, 1094, 1094, 1080, 1081, 1084, 1091, 1087, 1095,
+     1089, 1096, 1093, 1088, 1097, 1085, 1101, 1093, 1099, 1097,
+     1098, 1098, 1099, 1099, 1100, 1096, 1102, 1103, 1104, 1100,
+     1095, 1105, 1103, 1106, 1107, 1105, 1108, 1111, 1102, 1109,
+
+     1104, 1108, 1101, 1110, 1113, 1106, 1117, 1113, 1110, 1111,
+     1114, 1114, 1115, 1115, 1116, 1116, 1118,   13, 1119, 1107,
+     1121, 1109, 1118, 1119, 1120, 1125, 1117, 1123, 1127, 1121,
+     1120, 1129, 1123, 1128, 1128, 1130, 1131, 1125, 1132, 1133,
+     1127, 1134, 1135, 1133, 1130, 1136, 1134, 1135, 1138, 1138,
+     1139, 1129, 1140, 1141, 1131, 1143, 1143, 1132, 1146, 1136,
+     1138, 1140, 1141, 1147, 1148, 1149, 1150, 1150, 1139, 1148,
+     1151, 1154, 1151, 1146, 1152, 1152, 1155, 1147, 1154, 1156,
+     1156, 1157, 1149, 1158, 1162, 1159, 1160, 1161, 1163, 1164,
+     1157, 1165, 1168, 1170, 1168, 1167, 1155, 1159, 1160, 1161,
+
+     1167, 1169, 1170, 1163, 1158, 1174, 1172, 1173, 1173, 1164,
+     1162, 1165, 1175, 1176, 1179, 1176, 1177, 1175, 1178, 1169,
+     1172, 1177, 1180, 1178, 1181, 1182, 1183, 1184, 1186, 1181,
+     1182, 1174, 1179,    0, 1187, 1184, 1188, 1188, 1190, 1183,
+     1189, 1189, 1180, 1191, 1192, 1193, 1195, 1186, 1187, 1192,
+     1193, 1198, 1194, 1190, 1194, 1196, 1199, 1197, 1195, 1197,
+     1198, 1201, 1204, 1191, 1196, 1202, 1201, 1196, 1199, 1205,
+     1202, 1206, 1208, 1210, 1212, 1204, 1211, 1213, 1208, 1210,
+     1214, 1214, 1217, 1215, 1216, 1216, 1213, 1206, 1219, 1205,
+     1218, 1211, 1215, 1219, 1218, 1220, 1221, 1221, 1222, 1212,
+
+     1223, 1217, 1226, 1226, 1227, 1230, 1222, 1231, 1220, 1228,
+     1228, 1229, 1229, 1227, 1232, 1233, 1233, 1230, 1235, 1232,
+     1223, 1236, 1237, 1238, 1239, 1231, 1236, 1244, 1240, 1239,
+     1243, 1241, 1242, 1242, 1243, 1245, 1246, 1247, 1238, 1250,
+     1245, 1249, 1244, 1235, 1252, 1237, 1240, 1241, 1251, 1253,
+     1254, 1256, 1256, 1258, 1257, 1259, 1247, 1257, 1352, 1260,
+     1352, 1253, 1246, 1250, 1249, 1252, 1258, 1251, 1264, 1259,
+     1269, 1254, 1260, 1261, 1261, 1262, 1262, 1263, 1263, 1265,
+     1266, 1266, 1272, 1264, 1267, 1267, 1268, 1268, 1276, 1269,
+     1270, 1270, 1265, 1271, 1271, 1274, 1275, 1275, 1277, 1277,
+
+     1274, 1272, 1278, 1279, 1283, 1280, 1284, 1276, 1280, 1279,
+     1281, 1281, 1282, 1282, 1285, 1286, 1286, 1288, 1289, 1290,
+     1278, 1284, 1295, 1283, 1291, 1293, 1281, 1298, 1291, 1292,
+     1292, 1294, 1294, 1285, 1290, 1296, 1296, 1288, 1297, 1298,
+     1299, 1289, 1300, 1301, 1293, 1299, 1303, 1297, 1295, 1302,
+     1304, 1303, 1305, 1306, 1307, 1308, 1301, 1311,    0, 1309,
+     1308, 1305, 1306, 1309, 1313, 1304, 1318, 1300, 1307, 1315,
+     1302, 1314, 1314, 1313, 1315, 1316, 1316, 1311, 1319, 1321,
+     1323, 1318, 1325, 1323, 1316, 1324, 1329, 1319, 1326, 1326,
+     1324, 1321, 1328, 1328, 1330, 1330, 1331, 1332, 1333, 1340,
+
+     1329, 1336, 1325, 1334, 1334, 1336, 1337, 1341, 1331, 1337,
+     1339, 1332, 1338, 1338, 1342, 1339, 1343, 1333, 1342, 1340,
+     1344, 1341, 1345, 1346, 1348, 1344, 1349, 1345, 1350, 1346,
+     1351, 1349, 1355, 1350, 1356, 1356, 1343,    0, 1351, 1363,
+     1348, 1360, 1360, 1370, 1363, 1371, 1355, 1364, 1364, 1366,
+     1366, 1368, 1369, 1369, 1374, 1372, 1368, 1375, 1380, 1370,
+     1372, 1376, 1376, 1378, 1381, 1379, 1385, 1371, 1387, 1375,
+     1379, 1385, 1378, 1374, 1383, 1383, 1380, 1393, 1386, 1381,
+     1386, 1388, 1387, 1389, 1389, 1392, 1388, 1390, 1390, 1391,
+     1391, 1394, 1395, 1396, 1397, 1393, 1398, 1392, 1400, 1397,
+
+     1399, 1399, 1401, 1394, 1395, 1396, 1402, 1400, 1403, 1404,
+     1405, 1406, 1407, 1408, 1409, 1414, 1398, 1416, 1408, 1409,
+     1415, 1403, 1410, 1410, 1405, 1417, 1402, 1418, 1401, 1406,
+     1411, 1411, 1419, 1404, 1407, 1414, 1418, 1420, 1415, 1416,
+     1421, 1421, 1423, 1423, 1424, 1417, 1426, 1425, 1427, 1428,
+     1430, 1435, 1419, 1424, 1425, 1420, 1429, 1431, 1431, 1432,
+     1433, 1426, 1434, 1436, 1432, 1437, 1427, 1428, 1436, 1430,
+     1435, 1439, 1429, 1442, 1444, 1444, 1443, 1434, 1433, 1443,
+     1445, 1446, 1447, 1447, 1448, 1437, 1450, 1451, 1448, 1453,
+     1439, 1451, 1456, 1442, 1463, 1445, 1452, 1452, 1467, 1446,
+
+     1552, 1450, 1453, 1455, 1455, 1457, 1457, 1458, 1458, 1462,
+     1462, 1456, 1464, 1465, 1466, 1468, 1463, 1467, 1465, 1466,
+     1470, 1464, 1471, 1468, 1472, 1473, 1552, 1471,    0, 1472,
+     1474, 1474, 1475, 1475, 1476, 1470, 1477, 1478, 1478, 1476,
+     1473, 1477, 1479, 1479, 1482, 1485, 1483, 1484, 1486, 1482,
+     1483, 1487, 1484, 1488, 1485, 1489, 1492, 1491, 1488, 1487,
+     1491, 1494, 1493, 1486, 1495, 1496, 1496, 1489, 1497, 1499,
+     1494, 1500, 1504, 1495, 1492, 1493, 1501, 1497, 1502, 1502,
+     1503, 1504, 1505, 1505, 1506, 1507, 1513, 1509, 1499, 1510,
+     1507, 1500, 1506, 1512, 1514, 1501, 1509, 1512, 1521, 1503,
+
+     1513, 1527, 1510, 1516, 1516, 1518, 1518, 1522, 1522, 1514,
+     1523, 1524, 1524, 1523, 1525, 1525, 1526, 1526, 1521, 1527,
+     1528, 1529, 1530, 1530, 1531, 1534, 1529, 1535, 1531, 1538,
+     1539, 1534, 1535, 1540, 1528, 1539, 1541, 1545, 1542, 1543,
+     1543, 1544, 1546, 1547, 1547, 1545, 1538, 1538, 1548, 1548,
+     1549, 1540, 1542, 1550, 1551, 1553, 1541, 1554, 1550, 1555,
+     1544, 1546, 1557, 1557, 1553, 1558, 1549, 1560, 1558, 1561,
+     1561, 1562, 1563, 1564, 1551, 1562, 1566, 1554, 1567, 1555,
+     1570, 1563, 1565, 1565, 1569, 1560, 1571, 1567, 1564, 1566,
+     1575, 1577, 1570, 1569, 1579, 1575, 1576, 1576, 1580, 1579,
+
+     1577, 1581, 1582, 1583, 1584, 1585, 1586, 1580, 1583, 1589,
+     1585, 1571, 1587, 1587, 1590, 1591, 1591, 1593, 1594, 1595,
+     1592, 1581, 1584, 1582, 1592, 1596, 1593, 1597, 1589, 1590,
+     1598, 1586, 1597, 1596, 1594, 1599, 1599, 1603, 1595, 1600,
+     1602, 1602, 1603, 1605, 1605, 1606, 1607, 1609, 1609, 1610,
+     1611, 1612, 1612, 1613, 1613, 1614, 1598, 1616, 1600, 1615,
+     1617, 1617, 1619, 1610, 1618, 1606, 1621, 1627, 1620, 1607,
+     1622, 1615, 1611, 1620, 1614, 1622, 1618, 1616, 1623, 1624,
+     1624, 1653, 1619, 1626, 1626, 1621, 1627, 1629, 1630, 1631,
+     1632, 1632, 1629, 1653, 1631, 1623, 1623, 1633, 1633, 1634,
+
+     1634, 1635, 1630, 1637, 1637, 1642, 1635, 1639, 1639, 1641,
+     1641, 1643, 1644, 1644, 1648, 1654, 1645, 1649, 1649, 1642,
+     1643, 1645, 1648, 1650, 1652, 1655, 1656, 1657, 1650, 1652,
+     1658, 1661, 1676, 1654,    0, 1658, 1662, 1662, 1663, 1663,
+     1681, 1655, 1664, 1656, 1656, 1673, 1664, 1676, 1657, 1668,
+     1668, 1661, 1670, 1672, 1672, 1678, 1670, 1675, 1675, 1673,
+     1679, 1679, 1680, 1680, 1682, 1681, 1683, 1684,    0, 1685,
+     1686,    0, 1684, 1678, 1685, 1687, 1687, 1690, 1690, 1682,
+     1692, 1692, 1694, 1694, 1696, 1697, 1697, 1683, 1700, 1686,
+     1701, 1703, 1702, 1700, 1704, 1705, 1696, 1702, 1710, 1711,
+
+     1712, 1713, 1710, 1714, 1701, 1716, 1715, 1719, 1717, 1722,
+     1703, 1705, 1704, 1712, 1718, 1718, 1719, 1723, 1728, 1711,
+     1713, 1714, 1715, 1717, 1720, 1725, 1721, 1727, 1724, 1720,
+     1716, 1721, 1723, 1724, 1722, 1729, 1730, 1728, 1731, 1725,
+     1729, 1730, 1727, 1732, 1733, 1734, 1735, 1736, 1737, 1738,
+     1739, 1741, 1731, 1740, 1746, 1739, 1732, 1743, 1740, 1734,
+     1736, 1737, 1743, 1733, 1744, 1735, 1742, 1742, 1738, 1744,
+     1741, 1745, 1747, 1746, 1748, 1748, 1745, 1747, 1749, 1750,
+     1751, 1752, 1753, 1754, 1756, 1749, 1752, 1757, 1758, 1756,
+     1759, 1760, 1760, 1762, 1767, 1761, 1754, 1765, 1750, 1751,
+
+     1761, 1753, 1765, 1759, 1763, 1763, 1757, 1758, 1764, 1764,
+     1766, 1769, 1762, 1767, 1768, 1768, 1770, 1766, 1769, 1771,
+     1772, 1773, 1775, 1770, 1776, 1772, 1777, 1775, 1778, 1776,
+     1779, 1779, 1780, 1781, 1782, 1782, 1783, 1783, 1771, 1784,
+     1773, 1785, 1785, 1786, 1786, 1777, 1784, 1778, 1787, 1789,
+     1793, 1780, 1781, 1792, 1789, 1787, 1794,    0, 1792, 1795,
+     1795, 1796, 1796,    0,    0,    0,    0,    0,    0, 1793,
+        0,    0,    0,    0,    0, 1794, 1800, 1800, 1800, 1800,
+     1800, 1800, 1800, 1801, 1801, 1801, 1801, 1801, 1801, 1801,
+     1802, 1802, 1802, 1802, 1802, 1802, 1802, 1803, 1803, 1803,
+
+     1803, 1803, 1803, 1803, 1804, 1804, 1804, 1804, 1804, 1804,
+     1804, 1806, 1806,    0, 1806, 1806, 1806, 1806, 1807, 1807,
+        0,    0,    0, 1807, 1807, 1808, 1808,    0,    0, 1808,
+        0, 1808, 1809,    0,    0,    0,    0,    0, 1809, 1810,
+     1810,    0,    0,    0, 1810, 1810, 1811,    0,    0,    0,
+        0,    0, 1811, 1812, 1812,    0, 1812, 1812, 1812, 1812,
+     1813, 1813,    0, 1813, 1813, 1813, 1813, 1799, 1799, 1799,
+     1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
+     1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
+     1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
+
+     1799, 1799, 1799, 1799, 1799, 1799, 1799
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -2011,7 +2027,7 @@ static void config_end_include(void)
 #define YY_NO_INPUT 1
 #endif
 
-#line 2013 "<stdout>"
+#line 2029 "<stdout>"
 
 #define INITIAL 0
 #define quotedstring 1
@@ -2225,7 +2241,7 @@ YY_DECL
        {
 #line 201 "./util/configlexer.lex"
 
-#line 2227 "<stdout>"
+#line 2243 "<stdout>"
 
        while ( 1 )             /* loops until end-of-file is reached */
                {
@@ -2258,13 +2274,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 >= 1783 )
+                               if ( yy_current_state >= 1800 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 3522 );
+               while ( yy_base[yy_current_state] != 3568 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -2885,239 +2901,244 @@ YY_RULE_SETUP
 case 119:
 YY_RULE_SETUP
 #line 324 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
+{ YDVAR(1, VAR_INSECURE_LAN_ZONES) }
        YY_BREAK
 case 120:
 YY_RULE_SETUP
 #line 325 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
+{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
        YY_BREAK
 case 121:
 YY_RULE_SETUP
 #line 326 "./util/configlexer.lex"
-{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
+{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
        YY_BREAK
 case 122:
 YY_RULE_SETUP
 #line 327 "./util/configlexer.lex"
-{ YDVAR(0, VAR_REMOTE_CONTROL) }
+{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
        YY_BREAK
 case 123:
 YY_RULE_SETUP
 #line 328 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_ENABLE) }
+{ YDVAR(0, VAR_REMOTE_CONTROL) }
        YY_BREAK
 case 124:
 YY_RULE_SETUP
 #line 329 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_INTERFACE) }
+{ YDVAR(1, VAR_CONTROL_ENABLE) }
        YY_BREAK
 case 125:
 YY_RULE_SETUP
 #line 330 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_PORT) }
+{ YDVAR(1, VAR_CONTROL_INTERFACE) }
        YY_BREAK
 case 126:
 YY_RULE_SETUP
 #line 331 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_USE_CERT) }
+{ YDVAR(1, VAR_CONTROL_PORT) }
        YY_BREAK
 case 127:
 YY_RULE_SETUP
 #line 332 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_KEY_FILE) }
+{ YDVAR(1, VAR_CONTROL_USE_CERT) }
        YY_BREAK
 case 128:
 YY_RULE_SETUP
 #line 333 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_CERT_FILE) }
+{ YDVAR(1, VAR_SERVER_KEY_FILE) }
        YY_BREAK
 case 129:
 YY_RULE_SETUP
 #line 334 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
+{ YDVAR(1, VAR_SERVER_CERT_FILE) }
        YY_BREAK
 case 130:
 YY_RULE_SETUP
 #line 335 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
+{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
        YY_BREAK
 case 131:
 YY_RULE_SETUP
 #line 336 "./util/configlexer.lex"
-{ YDVAR(1, VAR_PYTHON_SCRIPT) }
+{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
        YY_BREAK
 case 132:
 YY_RULE_SETUP
 #line 337 "./util/configlexer.lex"
-{ YDVAR(0, VAR_PYTHON) }
+{ YDVAR(1, VAR_PYTHON_SCRIPT) }
        YY_BREAK
 case 133:
 YY_RULE_SETUP
 #line 338 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DOMAIN_INSECURE) }
+{ YDVAR(0, VAR_PYTHON) }
        YY_BREAK
 case 134:
 YY_RULE_SETUP
 #line 339 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MINIMAL_RESPONSES) }
+{ YDVAR(1, VAR_DOMAIN_INSECURE) }
        YY_BREAK
 case 135:
 YY_RULE_SETUP
 #line 340 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RRSET_ROUNDROBIN) }
+{ YDVAR(1, VAR_MINIMAL_RESPONSES) }
        YY_BREAK
 case 136:
 YY_RULE_SETUP
 #line 341 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_UDP_SIZE) }
+{ YDVAR(1, VAR_RRSET_ROUNDROBIN) }
        YY_BREAK
 case 137:
 YY_RULE_SETUP
 #line 342 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNS64_PREFIX) }
+{ YDVAR(1, VAR_MAX_UDP_SIZE) }
        YY_BREAK
 case 138:
 YY_RULE_SETUP
 #line 343 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNS64_SYNTHALL) }
+{ YDVAR(1, VAR_DNS64_PREFIX) }
        YY_BREAK
 case 139:
 YY_RULE_SETUP
 #line 344 "./util/configlexer.lex"
-{ YDVAR(0, VAR_DNSTAP) }
+{ YDVAR(1, VAR_DNS64_SYNTHALL) }
        YY_BREAK
 case 140:
 YY_RULE_SETUP
 #line 345 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_ENABLE) }
+{ YDVAR(0, VAR_DNSTAP) }
        YY_BREAK
 case 141:
 YY_RULE_SETUP
 #line 346 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
+{ YDVAR(1, VAR_DNSTAP_ENABLE) }
        YY_BREAK
 case 142:
 YY_RULE_SETUP
 #line 347 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
+{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
        YY_BREAK
 case 143:
 YY_RULE_SETUP
 #line 348 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
+{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
        YY_BREAK
 case 144:
 YY_RULE_SETUP
 #line 349 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
+{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
        YY_BREAK
 case 145:
 YY_RULE_SETUP
 #line 350 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_VERSION) }
+{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
        YY_BREAK
 case 146:
 YY_RULE_SETUP
 #line 351 "./util/configlexer.lex"
-{
-               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
+{ YDVAR(1, VAR_DNSTAP_VERSION) }
        YY_BREAK
 case 147:
 YY_RULE_SETUP
-#line 353 "./util/configlexer.lex"
+#line 352 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
        YY_BREAK
 case 148:
 YY_RULE_SETUP
-#line 355 "./util/configlexer.lex"
+#line 354 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
        YY_BREAK
 case 149:
 YY_RULE_SETUP
-#line 357 "./util/configlexer.lex"
+#line 356 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
        YY_BREAK
 case 150:
 YY_RULE_SETUP
-#line 359 "./util/configlexer.lex"
+#line 358 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
        YY_BREAK
 case 151:
 YY_RULE_SETUP
-#line 361 "./util/configlexer.lex"
+#line 360 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
        YY_BREAK
 case 152:
 YY_RULE_SETUP
-#line 363 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT) }
+#line 362 "./util/configlexer.lex"
+{
+               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
        YY_BREAK
 case 153:
 YY_RULE_SETUP
 #line 364 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_SLABS) }
+{ YDVAR(1, VAR_RATELIMIT) }
        YY_BREAK
 case 154:
 YY_RULE_SETUP
 #line 365 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_SIZE) }
+{ YDVAR(1, VAR_RATELIMIT_SLABS) }
        YY_BREAK
 case 155:
 YY_RULE_SETUP
 #line 366 "./util/configlexer.lex"
-{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
+{ YDVAR(1, VAR_RATELIMIT_SIZE) }
        YY_BREAK
 case 156:
 YY_RULE_SETUP
 #line 367 "./util/configlexer.lex"
-{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
+{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
        YY_BREAK
 case 157:
 YY_RULE_SETUP
 #line 368 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
+{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
        YY_BREAK
 case 158:
-/* rule 158 can match eol */
 YY_RULE_SETUP
 #line 369 "./util/configlexer.lex"
+{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
+       YY_BREAK
+case 159:
+/* rule 159 can match eol */
+YY_RULE_SETUP
+#line 370 "./util/configlexer.lex"
 { LEXOUT(("NL\n")); cfg_parser->line++; }
        YY_BREAK
 /* Quoted strings. Strip leading and ending quotes */
-case 159:
+case 160:
 YY_RULE_SETUP
-#line 372 "./util/configlexer.lex"
+#line 373 "./util/configlexer.lex"
 { BEGIN(quotedstring); LEXOUT(("QS ")); }
        YY_BREAK
 case YY_STATE_EOF(quotedstring):
-#line 373 "./util/configlexer.lex"
+#line 374 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
        else                { BEGIN(val); }
 }
        YY_BREAK
-case 160:
+case 161:
 YY_RULE_SETUP
-#line 378 "./util/configlexer.lex"
+#line 379 "./util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 161:
-/* rule 161 can match eol */
+case 162:
+/* rule 162 can match eol */
 YY_RULE_SETUP
-#line 379 "./util/configlexer.lex"
+#line 380 "./util/configlexer.lex"
 { yyerror("newline inside quoted string, no end \""); 
                          cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 162:
+case 163:
 YY_RULE_SETUP
-#line 381 "./util/configlexer.lex"
+#line 382 "./util/configlexer.lex"
 {
         LEXOUT(("QE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -3130,34 +3151,34 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* Single Quoted strings. Strip leading and ending quotes */
-case 163:
+case 164:
 YY_RULE_SETUP
-#line 393 "./util/configlexer.lex"
+#line 394 "./util/configlexer.lex"
 { BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
        YY_BREAK
 case YY_STATE_EOF(singlequotedstr):
-#line 394 "./util/configlexer.lex"
+#line 395 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
        else                { BEGIN(val); }
 }
        YY_BREAK
-case 164:
+case 165:
 YY_RULE_SETUP
-#line 399 "./util/configlexer.lex"
+#line 400 "./util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 165:
-/* rule 165 can match eol */
+case 166:
+/* rule 166 can match eol */
 YY_RULE_SETUP
-#line 400 "./util/configlexer.lex"
+#line 401 "./util/configlexer.lex"
 { yyerror("newline inside quoted string, no end '"); 
                             cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 166:
+case 167:
 YY_RULE_SETUP
-#line 402 "./util/configlexer.lex"
+#line 403 "./util/configlexer.lex"
 {
         LEXOUT(("SQE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -3170,38 +3191,38 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* include: directive */
-case 167:
+case 168:
 YY_RULE_SETUP
-#line 414 "./util/configlexer.lex"
+#line 415 "./util/configlexer.lex"
 { 
        LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
        YY_BREAK
 case YY_STATE_EOF(include):
-#line 416 "./util/configlexer.lex"
+#line 417 "./util/configlexer.lex"
 {
         yyerror("EOF inside include directive");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 168:
-YY_RULE_SETUP
-#line 420 "./util/configlexer.lex"
-{ LEXOUT(("ISP ")); /* ignore */ }
-       YY_BREAK
 case 169:
-/* rule 169 can match eol */
 YY_RULE_SETUP
 #line 421 "./util/configlexer.lex"
-{ LEXOUT(("NL\n")); cfg_parser->line++;}
+{ LEXOUT(("ISP ")); /* ignore */ }
        YY_BREAK
 case 170:
+/* rule 170 can match eol */
 YY_RULE_SETUP
 #line 422 "./util/configlexer.lex"
-{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
+{ LEXOUT(("NL\n")); cfg_parser->line++;}
        YY_BREAK
 case 171:
 YY_RULE_SETUP
 #line 423 "./util/configlexer.lex"
+{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
+       YY_BREAK
+case 172:
+YY_RULE_SETUP
+#line 424 "./util/configlexer.lex"
 {
        LEXOUT(("Iunquotedstr(%s) ", yytext));
        config_start_include_glob(yytext);
@@ -3209,27 +3230,27 @@ YY_RULE_SETUP
 }
        YY_BREAK
 case YY_STATE_EOF(include_quoted):
-#line 428 "./util/configlexer.lex"
+#line 429 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 172:
+case 173:
 YY_RULE_SETUP
-#line 432 "./util/configlexer.lex"
+#line 433 "./util/configlexer.lex"
 { LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 173:
-/* rule 173 can match eol */
+case 174:
+/* rule 174 can match eol */
 YY_RULE_SETUP
-#line 433 "./util/configlexer.lex"
+#line 434 "./util/configlexer.lex"
 { yyerror("newline before \" in include name"); 
                                  cfg_parser->line++; BEGIN(inc_prev); }
        YY_BREAK
-case 174:
+case 175:
 YY_RULE_SETUP
-#line 435 "./util/configlexer.lex"
+#line 436 "./util/configlexer.lex"
 {
        LEXOUT(("IQE "));
        yytext[yyleng - 1] = '\0';
@@ -3239,7 +3260,7 @@ YY_RULE_SETUP
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(val):
-#line 441 "./util/configlexer.lex"
+#line 442 "./util/configlexer.lex"
 {
        LEXOUT(("LEXEOF "));
        yy_set_bol(1); /* Set beginning of line, so "^" rules match.  */
@@ -3251,33 +3272,33 @@ case YY_STATE_EOF(val):
        }
 }
        YY_BREAK
-case 175:
+case 176:
 YY_RULE_SETUP
-#line 452 "./util/configlexer.lex"
+#line 453 "./util/configlexer.lex"
 { LEXOUT(("unquotedstr(%s) ", yytext)); 
                        if(--num_args == 0) { BEGIN(INITIAL); }
                        yylval.str = strdup(yytext); return STRING_ARG; }
        YY_BREAK
-case 176:
+case 177:
 YY_RULE_SETUP
-#line 456 "./util/configlexer.lex"
+#line 457 "./util/configlexer.lex"
 {
        ub_c_error_msg("unknown keyword '%s'", yytext);
        }
        YY_BREAK
-case 177:
+case 178:
 YY_RULE_SETUP
-#line 460 "./util/configlexer.lex"
+#line 461 "./util/configlexer.lex"
 {
        ub_c_error_msg("stray '%s'", yytext);
        }
        YY_BREAK
-case 178:
+case 179:
 YY_RULE_SETUP
-#line 464 "./util/configlexer.lex"
+#line 465 "./util/configlexer.lex"
 ECHO;
        YY_BREAK
-#line 3279 "<stdout>"
+#line 3300 "<stdout>"
 
        case YY_END_OF_BUFFER:
                {
@@ -3568,7 +3589,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 >= 1783 )
+                       if ( yy_current_state >= 1800 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -3596,11 +3617,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 >= 1783 )
+               if ( yy_current_state >= 1800 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 1782);
+       yy_is_jam = (yy_current_state == 1799);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -4233,7 +4254,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 464 "./util/configlexer.lex"
+#line 465 "./util/configlexer.lex"
 
 
 
index 123d9ff5b16b75a97db42619441aea55608277c0..6fbf0a839c81193aeb6ec382b2462aa044d4e8d3 100644 (file)
@@ -321,6 +321,7 @@ local-zone{COLON}           { YDVAR(2, VAR_LOCAL_ZONE) }
 local-data{COLON}              { YDVAR(1, VAR_LOCAL_DATA) }
 local-data-ptr{COLON}          { YDVAR(1, VAR_LOCAL_DATA_PTR) }
 unblock-lan-zones{COLON}       { YDVAR(1, VAR_UNBLOCK_LAN_ZONES) }
+insecure-lan-zones{COLON}      { YDVAR(1, VAR_INSECURE_LAN_ZONES) }
 statistics-interval{COLON}     { YDVAR(1, VAR_STATISTICS_INTERVAL) }
 statistics-cumulative{COLON}   { YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
 extended-statistics{COLON}     { YDVAR(1, VAR_EXTENDED_STATISTICS) }
index 6841a9e045511c9faf8005d30b329a72258c40f5..3b0451229218c6dd4c3b5fa123798641c62690b3 100644 (file)
@@ -258,34 +258,35 @@ extern int yydebug;
     VAR_MAX_UDP_SIZE = 389,
     VAR_DELAY_CLOSE = 390,
     VAR_UNBLOCK_LAN_ZONES = 391,
-    VAR_INFRA_CACHE_MIN_RTT = 392,
-    VAR_DNS64_PREFIX = 393,
-    VAR_DNS64_SYNTHALL = 394,
-    VAR_DNSTAP = 395,
-    VAR_DNSTAP_ENABLE = 396,
-    VAR_DNSTAP_SOCKET_PATH = 397,
-    VAR_DNSTAP_SEND_IDENTITY = 398,
-    VAR_DNSTAP_SEND_VERSION = 399,
-    VAR_DNSTAP_IDENTITY = 400,
-    VAR_DNSTAP_VERSION = 401,
-    VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 402,
-    VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 403,
-    VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 404,
-    VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 405,
-    VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 406,
-    VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 407,
-    VAR_HARDEN_ALGO_DOWNGRADE = 408,
-    VAR_IP_TRANSPARENT = 409,
-    VAR_RATELIMIT = 410,
-    VAR_RATELIMIT_SLABS = 411,
-    VAR_RATELIMIT_SIZE = 412,
-    VAR_RATELIMIT_FOR_DOMAIN = 413,
-    VAR_RATELIMIT_BELOW_DOMAIN = 414,
-    VAR_RATELIMIT_FACTOR = 415,
-    VAR_CAPS_WHITELIST = 416,
-    VAR_CACHE_MAX_NEGATIVE_TTL = 417,
-    VAR_PERMIT_SMALL_HOLDDOWN = 418,
-    VAR_QNAME_MINIMISATION = 419
+    VAR_INSECURE_LAN_ZONES = 392,
+    VAR_INFRA_CACHE_MIN_RTT = 393,
+    VAR_DNS64_PREFIX = 394,
+    VAR_DNS64_SYNTHALL = 395,
+    VAR_DNSTAP = 396,
+    VAR_DNSTAP_ENABLE = 397,
+    VAR_DNSTAP_SOCKET_PATH = 398,
+    VAR_DNSTAP_SEND_IDENTITY = 399,
+    VAR_DNSTAP_SEND_VERSION = 400,
+    VAR_DNSTAP_IDENTITY = 401,
+    VAR_DNSTAP_VERSION = 402,
+    VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 403,
+    VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 404,
+    VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 405,
+    VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 406,
+    VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 407,
+    VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 408,
+    VAR_HARDEN_ALGO_DOWNGRADE = 409,
+    VAR_IP_TRANSPARENT = 410,
+    VAR_RATELIMIT = 411,
+    VAR_RATELIMIT_SLABS = 412,
+    VAR_RATELIMIT_SIZE = 413,
+    VAR_RATELIMIT_FOR_DOMAIN = 414,
+    VAR_RATELIMIT_BELOW_DOMAIN = 415,
+    VAR_RATELIMIT_FACTOR = 416,
+    VAR_CAPS_WHITELIST = 417,
+    VAR_CACHE_MAX_NEGATIVE_TTL = 418,
+    VAR_PERMIT_SMALL_HOLDDOWN = 419,
+    VAR_QNAME_MINIMISATION = 420
   };
 #endif
 /* Tokens.  */
@@ -423,34 +424,35 @@ extern int yydebug;
 #define VAR_MAX_UDP_SIZE 389
 #define VAR_DELAY_CLOSE 390
 #define VAR_UNBLOCK_LAN_ZONES 391
-#define VAR_INFRA_CACHE_MIN_RTT 392
-#define VAR_DNS64_PREFIX 393
-#define VAR_DNS64_SYNTHALL 394
-#define VAR_DNSTAP 395
-#define VAR_DNSTAP_ENABLE 396
-#define VAR_DNSTAP_SOCKET_PATH 397
-#define VAR_DNSTAP_SEND_IDENTITY 398
-#define VAR_DNSTAP_SEND_VERSION 399
-#define VAR_DNSTAP_IDENTITY 400
-#define VAR_DNSTAP_VERSION 401
-#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 402
-#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 403
-#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 404
-#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 405
-#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 406
-#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 407
-#define VAR_HARDEN_ALGO_DOWNGRADE 408
-#define VAR_IP_TRANSPARENT 409
-#define VAR_RATELIMIT 410
-#define VAR_RATELIMIT_SLABS 411
-#define VAR_RATELIMIT_SIZE 412
-#define VAR_RATELIMIT_FOR_DOMAIN 413
-#define VAR_RATELIMIT_BELOW_DOMAIN 414
-#define VAR_RATELIMIT_FACTOR 415
-#define VAR_CAPS_WHITELIST 416
-#define VAR_CACHE_MAX_NEGATIVE_TTL 417
-#define VAR_PERMIT_SMALL_HOLDDOWN 418
-#define VAR_QNAME_MINIMISATION 419
+#define VAR_INSECURE_LAN_ZONES 392
+#define VAR_INFRA_CACHE_MIN_RTT 393
+#define VAR_DNS64_PREFIX 394
+#define VAR_DNS64_SYNTHALL 395
+#define VAR_DNSTAP 396
+#define VAR_DNSTAP_ENABLE 397
+#define VAR_DNSTAP_SOCKET_PATH 398
+#define VAR_DNSTAP_SEND_IDENTITY 399
+#define VAR_DNSTAP_SEND_VERSION 400
+#define VAR_DNSTAP_IDENTITY 401
+#define VAR_DNSTAP_VERSION 402
+#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 403
+#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 404
+#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 405
+#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 406
+#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 407
+#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 408
+#define VAR_HARDEN_ALGO_DOWNGRADE 409
+#define VAR_IP_TRANSPARENT 410
+#define VAR_RATELIMIT 411
+#define VAR_RATELIMIT_SLABS 412
+#define VAR_RATELIMIT_SIZE 413
+#define VAR_RATELIMIT_FOR_DOMAIN 414
+#define VAR_RATELIMIT_BELOW_DOMAIN 415
+#define VAR_RATELIMIT_FACTOR 416
+#define VAR_CAPS_WHITELIST 417
+#define VAR_CACHE_MAX_NEGATIVE_TTL 418
+#define VAR_PERMIT_SMALL_HOLDDOWN 419
+#define VAR_QNAME_MINIMISATION 420
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -461,7 +463,7 @@ union YYSTYPE
 
        char*   str;
 
-#line 465 "util/configparser.c" /* yacc.c:355  */
+#line 467 "util/configparser.c" /* yacc.c:355  */
 };
 
 typedef union YYSTYPE YYSTYPE;
@@ -478,7 +480,7 @@ int yyparse (void);
 
 /* Copy the second part of user declarations.  */
 
-#line 482 "util/configparser.c" /* yacc.c:358  */
+#line 484 "util/configparser.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -720,21 +722,21 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   309
+#define YYLAST   310
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  165
+#define YYNTOKENS  166
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  170
+#define YYNNTS  171
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  325
+#define YYNRULES  327
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  479
+#define YYNSTATES  482
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   419
+#define YYMAXUTOK   420
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -784,46 +786,47 @@ static const yytype_uint8 yytranslate[] =
      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
      135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
      145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   129,   129,   129,   130,   130,   131,   131,   132,   132,
-     136,   141,   142,   143,   143,   143,   144,   144,   145,   145,
-     145,   146,   146,   147,   147,   147,   148,   148,   148,   149,
-     149,   150,   150,   151,   151,   152,   152,   153,   153,   154,
-     154,   155,   155,   156,   156,   157,   157,   157,   158,   158,
-     158,   159,   159,   159,   160,   160,   161,   161,   162,   162,
-     163,   163,   164,   164,   164,   165,   165,   166,   166,   167,
-     167,   167,   168,   168,   169,   169,   170,   170,   171,   171,
-     171,   172,   172,   173,   173,   174,   174,   175,   175,   176,
-     176,   177,   177,   177,   178,   178,   179,   179,   179,   180,
-     180,   180,   181,   181,   181,   182,   182,   182,   183,   183,
-     183,   184,   184,   184,   185,   185,   185,   186,   186,   187,
-     187,   188,   188,   188,   189,   189,   190,   190,   191,   191,
-     192,   192,   194,   206,   207,   208,   208,   208,   208,   208,
-     210,   222,   223,   224,   224,   224,   224,   226,   235,   244,
-     255,   264,   273,   282,   295,   310,   319,   328,   337,   346,
-     355,   364,   373,   382,   391,   400,   409,   418,   427,   436,
-     443,   450,   459,   468,   482,   491,   500,   507,   514,   521,
-     529,   536,   543,   550,   557,   565,   573,   581,   588,   595,
-     604,   613,   620,   627,   635,   643,   653,   663,   676,   687,
-     695,   708,   717,   726,   735,   745,   753,   766,   775,   783,
-     792,   800,   813,   822,   829,   839,   849,   859,   869,   879,
-     889,   899,   909,   916,   923,   930,   939,   948,   957,   964,
-     974,   991,   998,  1016,  1029,  1042,  1051,  1060,  1069,  1078,
-    1088,  1098,  1107,  1116,  1123,  1132,  1141,  1150,  1159,  1167,
-    1180,  1188,  1212,  1219,  1234,  1244,  1254,  1261,  1268,  1277,
-    1286,  1294,  1307,  1320,  1333,  1342,  1352,  1362,  1369,  1376,
-    1385,  1395,  1405,  1412,  1419,  1428,  1433,  1434,  1435,  1435,
-    1435,  1436,  1436,  1436,  1437,  1437,  1439,  1449,  1458,  1465,
-    1475,  1482,  1489,  1496,  1503,  1508,  1509,  1510,  1510,  1511,
-    1511,  1512,  1512,  1513,  1514,  1515,  1516,  1517,  1518,  1520,
-    1528,  1535,  1543,  1551,  1558,  1565,  1574,  1583,  1592,  1601,
-    1610,  1619,  1624,  1625,  1626,  1628
+       0,   130,   130,   130,   131,   131,   132,   132,   133,   133,
+     137,   142,   143,   144,   144,   144,   145,   145,   146,   146,
+     146,   147,   147,   148,   148,   148,   149,   149,   149,   150,
+     150,   151,   151,   152,   152,   153,   153,   154,   154,   155,
+     155,   156,   156,   157,   157,   158,   158,   158,   159,   159,
+     159,   160,   160,   160,   161,   161,   162,   162,   163,   163,
+     164,   164,   165,   165,   165,   166,   166,   167,   167,   168,
+     168,   168,   169,   169,   170,   170,   171,   171,   172,   172,
+     172,   173,   173,   174,   174,   175,   175,   176,   176,   177,
+     177,   178,   178,   178,   179,   179,   180,   180,   180,   181,
+     181,   181,   182,   182,   182,   183,   183,   183,   184,   184,
+     184,   185,   185,   185,   186,   186,   187,   187,   188,   188,
+     189,   189,   190,   190,   190,   191,   191,   192,   192,   193,
+     193,   194,   194,   196,   208,   209,   210,   210,   210,   210,
+     210,   212,   224,   225,   226,   226,   226,   226,   228,   237,
+     246,   257,   266,   275,   284,   297,   312,   321,   330,   339,
+     348,   357,   366,   375,   384,   393,   402,   411,   420,   429,
+     438,   445,   452,   461,   470,   484,   493,   502,   509,   516,
+     523,   531,   538,   545,   552,   559,   567,   575,   583,   590,
+     597,   606,   615,   622,   629,   637,   645,   655,   665,   678,
+     689,   697,   710,   719,   728,   737,   747,   757,   765,   778,
+     787,   795,   804,   812,   825,   834,   841,   851,   861,   871,
+     881,   891,   901,   911,   921,   928,   935,   942,   951,   960,
+     969,   976,   986,  1003,  1010,  1028,  1041,  1054,  1063,  1072,
+    1081,  1090,  1100,  1110,  1119,  1128,  1135,  1144,  1153,  1162,
+    1171,  1179,  1192,  1200,  1224,  1231,  1246,  1256,  1266,  1273,
+    1280,  1289,  1298,  1306,  1319,  1332,  1345,  1354,  1364,  1374,
+    1381,  1388,  1397,  1407,  1417,  1424,  1431,  1440,  1445,  1446,
+    1447,  1447,  1447,  1448,  1448,  1448,  1449,  1449,  1451,  1461,
+    1470,  1477,  1487,  1494,  1501,  1508,  1515,  1520,  1521,  1522,
+    1522,  1523,  1523,  1524,  1524,  1525,  1526,  1527,  1528,  1529,
+    1530,  1532,  1540,  1547,  1555,  1563,  1570,  1577,  1586,  1595,
+    1604,  1613,  1622,  1631,  1636,  1637,  1638,  1640
 };
 #endif
 
@@ -875,10 +878,10 @@ static const char *const yytname[] =
   "VAR_SSL_SERVICE_PEM", "VAR_SSL_PORT", "VAR_FORWARD_FIRST",
   "VAR_STUB_FIRST", "VAR_MINIMAL_RESPONSES", "VAR_RRSET_ROUNDROBIN",
   "VAR_MAX_UDP_SIZE", "VAR_DELAY_CLOSE", "VAR_UNBLOCK_LAN_ZONES",
-  "VAR_INFRA_CACHE_MIN_RTT", "VAR_DNS64_PREFIX", "VAR_DNS64_SYNTHALL",
-  "VAR_DNSTAP", "VAR_DNSTAP_ENABLE", "VAR_DNSTAP_SOCKET_PATH",
-  "VAR_DNSTAP_SEND_IDENTITY", "VAR_DNSTAP_SEND_VERSION",
-  "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION",
+  "VAR_INSECURE_LAN_ZONES", "VAR_INFRA_CACHE_MIN_RTT", "VAR_DNS64_PREFIX",
+  "VAR_DNS64_SYNTHALL", "VAR_DNSTAP", "VAR_DNSTAP_ENABLE",
+  "VAR_DNSTAP_SOCKET_PATH", "VAR_DNSTAP_SEND_IDENTITY",
+  "VAR_DNSTAP_SEND_VERSION", "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION",
   "VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES",
   "VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES",
   "VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES",
@@ -915,26 +918,27 @@ static const char *const yytname[] =
   "server_msg_cache_size", "server_msg_cache_slabs",
   "server_num_queries_per_thread", "server_jostle_timeout",
   "server_delay_close", "server_unblock_lan_zones",
-  "server_rrset_cache_size", "server_rrset_cache_slabs",
-  "server_infra_host_ttl", "server_infra_lame_ttl",
-  "server_infra_cache_numhosts", "server_infra_cache_lame_size",
-  "server_infra_cache_slabs", "server_infra_cache_min_rtt",
-  "server_target_fetch_policy", "server_harden_short_bufsize",
-  "server_harden_large_queries", "server_harden_glue",
-  "server_harden_dnssec_stripped", "server_harden_below_nxdomain",
-  "server_harden_referral_path", "server_harden_algo_downgrade",
-  "server_use_caps_for_id", "server_caps_whitelist",
-  "server_private_address", "server_private_domain", "server_prefetch",
-  "server_prefetch_key", "server_unwanted_reply_threshold",
-  "server_do_not_query_address", "server_do_not_query_localhost",
-  "server_access_control", "server_module_conf",
-  "server_val_override_date", "server_val_sig_skew_min",
-  "server_val_sig_skew_max", "server_cache_max_ttl",
-  "server_cache_max_negative_ttl", "server_cache_min_ttl",
-  "server_bogus_ttl", "server_val_clean_additional",
-  "server_val_permissive_mode", "server_ignore_cd_flag",
-  "server_val_log_level", "server_val_nsec3_keysize_iterations",
-  "server_add_holddown", "server_del_holddown", "server_keep_missing",
+  "server_insecure_lan_zones", "server_rrset_cache_size",
+  "server_rrset_cache_slabs", "server_infra_host_ttl",
+  "server_infra_lame_ttl", "server_infra_cache_numhosts",
+  "server_infra_cache_lame_size", "server_infra_cache_slabs",
+  "server_infra_cache_min_rtt", "server_target_fetch_policy",
+  "server_harden_short_bufsize", "server_harden_large_queries",
+  "server_harden_glue", "server_harden_dnssec_stripped",
+  "server_harden_below_nxdomain", "server_harden_referral_path",
+  "server_harden_algo_downgrade", "server_use_caps_for_id",
+  "server_caps_whitelist", "server_private_address",
+  "server_private_domain", "server_prefetch", "server_prefetch_key",
+  "server_unwanted_reply_threshold", "server_do_not_query_address",
+  "server_do_not_query_localhost", "server_access_control",
+  "server_module_conf", "server_val_override_date",
+  "server_val_sig_skew_min", "server_val_sig_skew_max",
+  "server_cache_max_ttl", "server_cache_max_negative_ttl",
+  "server_cache_min_ttl", "server_bogus_ttl",
+  "server_val_clean_additional", "server_val_permissive_mode",
+  "server_ignore_cd_flag", "server_val_log_level",
+  "server_val_nsec3_keysize_iterations", "server_add_holddown",
+  "server_del_holddown", "server_keep_missing",
   "server_permit_small_holddown", "server_key_cache_size",
   "server_key_cache_slabs", "server_neg_cache_size", "server_local_zone",
   "server_local_data", "server_local_data_ptr", "server_minimal_responses",
@@ -982,7 +986,7 @@ static const yytype_uint16 yytoknum[] =
      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
      395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
      405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
-     415,   416,   417,   418,   419
+     415,   416,   417,   418,   419,   420
 };
 # endif
 
@@ -1001,20 +1005,20 @@ static const yytype_uint16 yytoknum[] =
 static const yytype_int16 yypact[] =
 {
      -81,   118,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -12,    89,    47,   -13,
-      24,   -80,    18,    19,    20,    25,    26,    80,   109,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   143,   144,
-     145,   146,   147,   149,   150,   151,   152,   153,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   199,   200,   201,
-     202,   203,   204,   205,   206,   207,   208,   209,   211,   212,
+     -81,   -81,   -81,   -81,   -81,   -81,   -12,    39,    47,    40,
+      36,   -80,    18,    19,    20,    24,    25,    26,    69,    72,
+      73,    74,    75,    80,   109,   120,   129,   130,   144,   145,
+     146,   147,   149,   150,   151,   152,   153,   155,   156,   157,
+     158,   159,   161,   162,   163,   164,   165,   166,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
      213,   215,   216,   217,   218,   219,   220,   221,   222,   223,
      224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
      234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   249,   250,   251,   252,   253,   254,
+     244,   245,   246,   247,   248,   250,   251,   252,   253,   254,
      255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     265,   266,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
@@ -1026,28 +1030,29 @@ static const yytype_int16 yypact[] =
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   266,   267,   268,   269,   270,   -81,   -81,   -81,   -81,
-     -81,   -81,   271,   272,   273,   274,   -81,   -81,   -81,   -81,
-     -81,   275,   276,   277,   278,   279,   280,   281,   282,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     -81,   -81,   -81,   267,   268,   269,   270,   271,   -81,   -81,
+     -81,   -81,   -81,   -81,   272,   273,   274,   275,   -81,   -81,
+     -81,   -81,   -81,   276,   277,   278,   279,   280,   281,   282,
+     283,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   296,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   295,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   297,   298,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   296,   297,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   298,   299,
+     -81,   299,   300,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81
+     -81,   -81
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1055,8 +1060,8 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       2,     0,     1,    10,   132,   140,   275,   321,   294,     3,
-      12,   134,   142,   277,   296,   323,     4,     5,     6,     8,
+       2,     0,     1,    10,   133,   141,   277,   323,   296,     3,
+      12,   135,   143,   279,   298,   325,     4,     5,     6,     8,
        9,     7,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -1069,40 +1074,41 @@ static const yytype_uint16 yydefact[] =
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    11,    13,    14,    72,    75,    84,    15,    23,    63,
-      16,    76,    77,    34,    56,    71,    17,    18,    19,    20,
-      21,    22,   106,   107,   108,   109,   110,    73,    62,    88,
-     105,    24,    25,    26,    27,    28,    64,    78,    79,    94,
-      50,    60,    51,    89,    44,    45,    46,    47,    98,   102,
-     114,   121,    99,    57,    29,    30,    31,    86,   115,   116,
-      32,    33,    35,    36,    38,    39,    37,   119,    40,    41,
-      42,    48,    67,   103,    81,   120,    74,   128,    82,    83,
-     100,   101,    87,    43,    65,    68,    49,    52,    90,    91,
-      66,   129,    92,    53,    54,    55,   104,    93,    61,    95,
-      96,    97,   130,    58,    59,    80,    69,    70,    85,   111,
-     112,   113,   117,   118,   122,   124,   123,   125,   126,   127,
-     131,     0,     0,     0,     0,     0,   133,   135,   136,   137,
-     139,   138,     0,     0,     0,     0,   141,   143,   144,   145,
-     146,     0,     0,     0,     0,     0,     0,     0,     0,   276,
-     278,   280,   279,   285,   281,   282,   283,   284,     0,     0,
+       0,     0,    11,    13,    14,    72,    75,    84,    15,    23,
+      63,    16,    76,    77,    34,    56,    71,    17,    18,    19,
+      20,    21,    22,   106,   107,   108,   109,   110,    73,    62,
+      88,   105,    24,    25,    26,    27,    28,    64,    78,    79,
+      94,    50,    60,    51,    89,    44,    45,    46,    47,    98,
+     102,   114,   122,    99,    57,    29,    30,    31,    86,   115,
+     116,   117,    32,    33,    35,    36,    38,    39,    37,   120,
+      40,    41,    42,    48,    67,   103,    81,   121,    74,   129,
+      82,    83,   100,   101,    87,    43,    65,    68,    49,    52,
+      90,    91,    66,   130,    92,    53,    54,    55,   104,    93,
+      61,    95,    96,    97,   131,    58,    59,    80,    69,    70,
+      85,   111,   112,   113,   118,   119,   123,   125,   124,   126,
+     127,   128,   132,     0,     0,     0,     0,     0,   134,   136,
+     137,   138,   140,   139,     0,     0,     0,     0,   142,   144,
+     145,   146,   147,     0,     0,     0,     0,     0,     0,     0,
+       0,   278,   280,   282,   281,   287,   283,   284,   285,   286,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     295,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,     0,   322,   324,   148,   147,   152,   155,
-     153,   161,   162,   163,   164,   165,   166,   176,   177,   178,
-     179,   180,   199,   200,   201,   205,   206,   158,   207,   208,
-     211,   209,   210,   213,   214,   215,   228,   189,   190,   191,
-     192,   216,   231,   185,   187,   232,   238,   239,   240,   159,
-     198,   248,   249,   186,   243,   173,   154,   181,   229,   235,
-     217,     0,     0,   252,   160,   149,   172,   221,   150,   156,
-     157,   182,   183,   250,   219,   223,   224,   151,   253,   202,
-     227,   174,   188,   233,   234,   237,   242,   184,   246,   244,
-     245,   193,   197,   225,   226,   194,   195,   218,   241,   175,
-     167,   168,   169,   170,   171,   254,   255,   256,   203,   204,
-     212,   257,   258,   220,   196,   259,   261,   260,     0,     0,
-     264,   222,   236,   247,   265,   266,   267,   268,   270,   269,
-     271,   272,   273,   274,   286,   288,   287,   290,   291,   292,
-     293,   289,   309,   310,   311,   312,   313,   314,   315,   316,
-     317,   318,   319,   320,   325,   230,   251,   262,   263
+       0,     0,   297,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,     0,   324,   326,   149,   148,
+     153,   156,   154,   162,   163,   164,   165,   166,   167,   177,
+     178,   179,   180,   181,   200,   201,   202,   207,   208,   159,
+     209,   210,   213,   211,   212,   215,   216,   217,   230,   190,
+     191,   192,   193,   218,   233,   186,   188,   234,   240,   241,
+     242,   160,   199,   250,   251,   187,   245,   174,   155,   182,
+     231,   237,   219,     0,     0,   254,   161,   150,   173,   223,
+     151,   157,   158,   183,   184,   252,   221,   225,   226,   152,
+     255,   203,   229,   175,   189,   235,   236,   239,   244,   185,
+     248,   246,   247,   194,   198,   227,   228,   195,   196,   220,
+     243,   176,   168,   169,   170,   171,   172,   256,   257,   258,
+     204,   205,   206,   214,   259,   260,   222,   197,   261,   263,
+     262,     0,     0,   266,   224,   238,   249,   267,   268,   269,
+     270,   272,   271,   273,   274,   275,   276,   288,   290,   289,
+     292,   293,   294,   295,   291,   311,   312,   313,   314,   315,
+     316,   317,   318,   319,   320,   321,   322,   327,   232,   253,
+     264,   265
 };
 
   /* YYPGOTO[NTERM-NUM].  */
@@ -1124,29 +1130,31 @@ static const yytype_int8 yypgoto[] =
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,     9,    10,    16,   141,    11,    17,   266,    12,
-      18,   276,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
-     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
-     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
-     260,   267,   268,   269,   270,   271,   277,   278,   279,   280,
-      13,    19,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,    14,    20,   310,   311,   312,   313,   314,   315,   316,
-     317,   318,   319,   320,   321,   322,    15,    21,   324,   325
+      -1,     1,     9,    10,    16,   142,    11,    17,   268,    12,
+      18,   278,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   269,   270,   271,   272,   273,   279,   280,   281,
+     282,    13,    19,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,    14,    20,   312,   313,   314,   315,   316,   317,
+     318,   319,   320,   321,   322,   323,   324,    15,    21,   326,
+     327
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1156,79 +1164,81 @@ static const yytype_uint16 yytable[] =
 {
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,   323,   326,   327,
-     328,    49,    50,    51,     0,   329,   330,    52,    53,    54,
+      42,    43,    44,    45,    46,    47,    48,   325,   328,   329,
+     330,    49,    50,    51,   331,   332,   333,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,   281,   282,
-     283,   284,   285,   286,   287,   288,   272,    93,    94,    95,
-     331,    96,    97,    98,   273,   274,    99,   100,   101,   102,
+      85,    86,    87,    88,    89,    90,    91,    92,   263,   334,
+     264,   265,   335,   336,   337,   338,   274,    93,    94,    95,
+     339,    96,    97,    98,   275,   276,    99,   100,   101,   102,
      103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,     2,   332,
-     121,   122,   123,   124,   125,   126,   127,   128,   261,     3,
-     262,   263,   333,   334,   335,   336,   337,   338,   339,   340,
-     341,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   342,   343,   344,   345,   346,     4,   347,
-     348,   349,   350,   351,     5,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,   308,   309,   275,   352,   353,
-     354,   355,   356,   357,   358,   359,   360,   361,   362,   363,
-     364,   264,   365,   366,   367,   368,   369,   370,   371,   372,
-     373,   374,   375,   376,   377,   378,   379,   380,     6,   381,
-     382,   383,   384,   385,   386,   387,   388,   389,   390,   391,
-     265,   392,   393,   394,     7,   395,   396,   397,   398,   399,
-     400,   401,   402,   403,   404,   405,   406,   407,   408,   409,
-     410,   411,   412,   413,   414,   415,   416,   417,   418,   419,
-     420,   421,   422,   423,   424,   425,   426,   427,     8,   428,
-     429,   430,   431,   432,   433,   434,   435,   436,   437,   438,
-     439,   440,   441,   442,   443,   444,   445,   446,   447,   448,
-     449,   450,   451,   452,   453,   454,   455,   456,   457,   458,
-     459,   460,   461,   462,   463,   464,   465,   466,   467,   468,
-     469,   470,   471,   472,   473,   474,   475,   476,   477,   478
+     113,   114,   115,   116,   117,   118,   119,   120,     2,   340,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,     3,
+     341,   283,   284,   285,   286,   287,   288,   289,   290,   342,
+     343,   266,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   344,   345,   346,   347,     4,   348,
+     349,   350,   351,   352,     5,   353,   354,   355,   356,   357,
+     267,   358,   359,   360,   361,   362,   363,   277,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
+     364,   365,   366,   367,   368,   369,   370,   371,   372,   373,
+     374,   375,   376,   377,   378,   379,   380,   381,     6,   382,
+     383,   384,   385,   386,   387,   388,   389,   390,   391,   392,
+     393,   394,   395,   396,     7,   397,   398,   399,   400,   401,
+     402,   403,   404,   405,   406,   407,   408,   409,   410,   411,
+     412,   413,   414,   415,   416,   417,   418,   419,   420,   421,
+     422,   423,   424,   425,   426,   427,   428,   429,   430,     8,
+     431,   432,   433,   434,   435,   436,   437,   438,   439,   440,
+     441,   442,   443,   444,   445,   446,   447,   448,   449,   450,
+     451,   452,   453,   454,   455,   456,   457,   458,   459,   460,
+     461,   462,   463,   464,   465,   466,   467,   468,   469,   470,
+     471,   472,   473,   474,   475,   476,   477,   478,   479,   480,
+     481
 };
 
-static const yytype_int16 yycheck[] =
+static const yytype_uint8 yycheck[] =
 {
       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,   107,    10,    10,
-      10,    43,    44,    45,    -1,    10,    10,    49,    50,    51,
+      10,    43,    44,    45,    10,    10,    10,    49,    50,    51,
       52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
       62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    91,    92,
-      93,    94,    95,    96,    97,    98,    39,    99,   100,   101,
+      82,    83,    84,    85,    86,    87,    88,    89,    39,    10,
+      41,    42,    10,    10,    10,    10,    39,    99,   100,   101,
       10,   103,   104,   105,    47,    48,   108,   109,   110,   111,
      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
      122,   123,   124,   125,   126,   127,   128,   129,     0,    10,
-     132,   133,   134,   135,   136,   137,   138,   139,    39,    11,
-      41,    42,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,    10,    10,    10,    10,    10,    40,    10,
-      10,    10,    10,    10,    46,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   130,    10,    10,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,    11,
+      10,    91,    92,    93,    94,    95,    96,    97,    98,    10,
+      10,   102,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,    10,    10,    10,    10,    40,    10,
+      10,    10,    10,    10,    46,    10,    10,    10,    10,    10,
+     131,    10,    10,    10,    10,    10,    10,   130,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,   102,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    90,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-     131,    10,    10,    10,   106,    10,    10,    10,    10,    10,
+      10,    10,    10,    10,   106,    10,    10,    10,    10,    10,
+      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
+      10,    10,    10,    10,    10,    10,    10,    10,    10,   141,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,   140,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    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,   166,     0,    11,    40,    46,    90,   106,   140,   167,
-     168,   171,   174,   305,   316,   331,   169,   172,   175,   306,
-     317,   332,    12,    13,    14,    15,    16,    17,    18,    19,
+       0,   167,     0,    11,    40,    46,    90,   106,   141,   168,
+     169,   172,   175,   307,   318,   333,   170,   173,   176,   308,
+     319,   334,    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,    43,
       44,    45,    49,    50,    51,    52,    53,    54,    55,    56,
@@ -1238,9 +1248,9 @@ static const yytype_uint16 yystos[] =
       87,    88,    89,    99,   100,   101,   103,   104,   105,   108,
      109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
      119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   132,   133,   134,   135,   136,   137,   138,   139,   153,
+     129,   132,   133,   134,   135,   136,   137,   138,   139,   140,
      154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   170,   177,   178,   179,   180,   181,   182,   183,   184,
+     164,   165,   171,   178,   179,   180,   181,   182,   183,   184,
      185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
      195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
      205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
@@ -1252,13 +1262,14 @@ static const yytype_uint16 yystos[] =
      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,    39,    41,    42,   102,   131,   173,   296,   297,   298,
-     299,   300,    39,    47,    48,   130,   176,   301,   302,   303,
-     304,    91,    92,    93,    94,    95,    96,    97,    98,   307,
-     308,   309,   310,   311,   312,   313,   314,   315,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
-     328,   329,   330,   107,   333,   334,    10,    10,    10,    10,
+     295,   296,   297,    39,    41,    42,   102,   131,   174,   298,
+     299,   300,   301,   302,    39,    47,    48,   130,   177,   303,
+     304,   305,   306,    91,    92,    93,    94,    95,    96,    97,
+      98,   309,   310,   311,   312,   313,   314,   315,   316,   317,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   320,   321,   322,   323,   324,   325,   326,   327,
+     328,   329,   330,   331,   332,   107,   335,   336,    10,    10,
+      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
@@ -1273,27 +1284,27 @@ static const yytype_uint16 yystos[] =
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,    10
+      10,    10
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   165,   166,   166,   167,   167,   167,   167,   167,   167,
-     168,   169,   169,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   171,   172,   172,   173,   173,   173,   173,   173,
-     174,   175,   175,   176,   176,   176,   176,   177,   178,   179,
+       0,   166,   167,   167,   168,   168,   168,   168,   168,   168,
+     169,   170,   170,   171,   171,   171,   171,   171,   171,   171,
+     171,   171,   171,   171,   171,   171,   171,   171,   171,   171,
+     171,   171,   171,   171,   171,   171,   171,   171,   171,   171,
+     171,   171,   171,   171,   171,   171,   171,   171,   171,   171,
+     171,   171,   171,   171,   171,   171,   171,   171,   171,   171,
+     171,   171,   171,   171,   171,   171,   171,   171,   171,   171,
+     171,   171,   171,   171,   171,   171,   171,   171,   171,   171,
+     171,   171,   171,   171,   171,   171,   171,   171,   171,   171,
+     171,   171,   171,   171,   171,   171,   171,   171,   171,   171,
+     171,   171,   171,   171,   171,   171,   171,   171,   171,   171,
+     171,   171,   171,   171,   171,   171,   171,   171,   171,   171,
+     171,   171,   171,   171,   171,   171,   171,   171,   171,   171,
+     171,   171,   171,   172,   173,   173,   174,   174,   174,   174,
+     174,   175,   176,   176,   177,   177,   177,   177,   178,   179,
      180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
      190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
      200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
@@ -1306,12 +1317,12 @@ static const yytype_uint16 yyr1[] =
      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,   306,   307,   307,
-     307,   307,   307,   307,   307,   307,   308,   309,   310,   311,
-     312,   313,   314,   315,   316,   317,   317,   318,   318,   318,
-     318,   318,   318,   318,   318,   318,   318,   318,   318,   319,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   308,
+     309,   309,   309,   309,   309,   309,   309,   309,   310,   311,
+     312,   313,   314,   315,   316,   317,   318,   319,   319,   320,
+     320,   320,   320,   320,   320,   320,   320,   320,   320,   320,
      320,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     330,   331,   332,   332,   333,   334
+     330,   331,   332,   333,   334,   334,   335,   336
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1330,8 +1341,8 @@ static const yytype_uint8 yyr2[] =
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     2,     0,     1,     1,     1,     1,     1,
-       1,     2,     0,     1,     1,     1,     1,     2,     2,     2,
+       1,     1,     1,     1,     2,     0,     1,     1,     1,     1,
+       1,     1,     2,     0,     1,     1,     1,     1,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -1340,16 +1351,16 @@ static const yytype_uint8 yyr2[] =
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       3,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     3,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     3,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     3,     3,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     1,     2,     0,     1,     1,
-       1,     1,     1,     1,     1,     1,     2,     2,     2,     2,
-       2,     2,     2,     2,     1,     2,     0,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     1,     2,     0,     1,     2
+       2,     2,     2,     3,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     3,     3,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     1,     2,     0,
+       1,     1,     1,     1,     1,     1,     1,     1,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     0,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     1,     2,     0,     1,     2
 };
 
 
@@ -2026,15 +2037,15 @@ yyreduce:
   switch (yyn)
     {
         case 10:
-#line 137 "./util/configparser.y" /* yacc.c:1646  */
+#line 138 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(server:)\n")); 
        }
-#line 2034 "util/configparser.c" /* yacc.c:1646  */
+#line 2045 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 132:
-#line 195 "./util/configparser.y" /* yacc.c:1646  */
+  case 133:
+#line 197 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_stub* s;
                OUTYY(("\nP(stub_zone:)\n")); 
@@ -2045,11 +2056,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2049 "util/configparser.c" /* yacc.c:1646  */
+#line 2060 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 140:
-#line 211 "./util/configparser.y" /* yacc.c:1646  */
+  case 141:
+#line 213 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_stub* s;
                OUTYY(("\nP(forward_zone:)\n")); 
@@ -2060,11 +2071,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2064 "util/configparser.c" /* yacc.c:1646  */
+#line 2075 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 147:
-#line 227 "./util/configparser.y" /* yacc.c:1646  */
+  case 148:
+#line 229 "./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)
@@ -2072,11 +2083,11 @@ yyreduce:
                else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2076 "util/configparser.c" /* yacc.c:1646  */
+#line 2087 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 148:
-#line 236 "./util/configparser.y" /* yacc.c:1646  */
+  case 149:
+#line 238 "./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)
@@ -2084,11 +2095,11 @@ yyreduce:
                else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2088 "util/configparser.c" /* yacc.c:1646  */
+#line 2099 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 149:
-#line 245 "./util/configparser.y" /* yacc.c:1646  */
+  case 150:
+#line 247 "./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)
@@ -2098,11 +2109,11 @@ yyreduce:
                else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2102 "util/configparser.c" /* yacc.c:1646  */
+#line 2113 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 150:
-#line 256 "./util/configparser.y" /* yacc.c:1646  */
+  case 151:
+#line 258 "./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)
@@ -2110,11 +2121,11 @@ yyreduce:
                else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2114 "util/configparser.c" /* yacc.c:1646  */
+#line 2125 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 151:
-#line 265 "./util/configparser.y" /* yacc.c:1646  */
+  case 152:
+#line 267 "./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)
@@ -2122,11 +2133,11 @@ yyreduce:
                else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2126 "util/configparser.c" /* yacc.c:1646  */
+#line 2137 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 152:
-#line 274 "./util/configparser.y" /* yacc.c:1646  */
+  case 153:
+#line 276 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2134,11 +2145,11 @@ yyreduce:
                else cfg_parser->cfg->port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2138 "util/configparser.c" /* yacc.c:1646  */
+#line 2149 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 153:
-#line 283 "./util/configparser.y" /* yacc.c:1646  */
+  case 154:
+#line 285 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->num_ifs == 0)
@@ -2150,11 +2161,11 @@ yyreduce:
                else
                        cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
        }
-#line 2154 "util/configparser.c" /* yacc.c:1646  */
+#line 2165 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 154:
-#line 296 "./util/configparser.y" /* yacc.c:1646  */
+  case 155:
+#line 298 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->num_out_ifs == 0)
@@ -2168,11 +2179,11 @@ yyreduce:
                        cfg_parser->cfg->out_ifs[
                                cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
        }
-#line 2172 "util/configparser.c" /* yacc.c:1646  */
+#line 2183 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 155:
-#line 311 "./util/configparser.y" /* yacc.c:1646  */
+  case 156:
+#line 313 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2180,11 +2191,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2184 "util/configparser.c" /* yacc.c:1646  */
+#line 2195 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 156:
-#line 320 "./util/configparser.y" /* yacc.c:1646  */
+  case 157:
+#line 322 "./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, 
@@ -2192,11 +2203,11 @@ yyreduce:
                        yyerror("port number or range (\"low-high\") expected");
                free((yyvsp[0].str));
        }
-#line 2196 "util/configparser.c" /* yacc.c:1646  */
+#line 2207 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 157:
-#line 329 "./util/configparser.y" /* yacc.c:1646  */
+  case 158:
+#line 331 "./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, 
@@ -2204,11 +2215,11 @@ yyreduce:
                        yyerror("port number or range (\"low-high\") expected");
                free((yyvsp[0].str));
        }
-#line 2208 "util/configparser.c" /* yacc.c:1646  */
+#line 2219 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 158:
-#line 338 "./util/configparser.y" /* yacc.c:1646  */
+  case 159:
+#line 340 "./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)
@@ -2216,11 +2227,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2220 "util/configparser.c" /* yacc.c:1646  */
+#line 2231 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 159:
-#line 347 "./util/configparser.y" /* yacc.c:1646  */
+  case 160:
+#line 349 "./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)
@@ -2228,11 +2239,11 @@ yyreduce:
                else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2232 "util/configparser.c" /* yacc.c:1646  */
+#line 2243 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 160:
-#line 356 "./util/configparser.y" /* yacc.c:1646  */
+  case 161:
+#line 358 "./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)
@@ -2240,11 +2251,11 @@ yyreduce:
                else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2244 "util/configparser.c" /* yacc.c:1646  */
+#line 2255 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 161:
-#line 365 "./util/configparser.y" /* yacc.c:1646  */
+  case 162:
+#line 367 "./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)
@@ -2252,11 +2263,11 @@ yyreduce:
                else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2256 "util/configparser.c" /* yacc.c:1646  */
+#line 2267 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 162:
-#line 374 "./util/configparser.y" /* yacc.c:1646  */
+  case 163:
+#line 376 "./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)
@@ -2264,11 +2275,11 @@ yyreduce:
                else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2268 "util/configparser.c" /* yacc.c:1646  */
+#line 2279 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 163:
-#line 383 "./util/configparser.y" /* yacc.c:1646  */
+  case 164:
+#line 385 "./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)
@@ -2276,11 +2287,11 @@ yyreduce:
                else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2280 "util/configparser.c" /* yacc.c:1646  */
+#line 2291 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 164:
-#line 392 "./util/configparser.y" /* yacc.c:1646  */
+  case 165:
+#line 394 "./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)
@@ -2288,11 +2299,11 @@ yyreduce:
                else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2292 "util/configparser.c" /* yacc.c:1646  */
+#line 2303 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 165:
-#line 401 "./util/configparser.y" /* yacc.c:1646  */
+  case 166:
+#line 403 "./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)
@@ -2300,11 +2311,11 @@ yyreduce:
                 else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
                 free((yyvsp[0].str));
        }
-#line 2304 "util/configparser.c" /* yacc.c:1646  */
+#line 2315 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 166:
-#line 410 "./util/configparser.y" /* yacc.c:1646  */
+  case 167:
+#line 412 "./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)
@@ -2312,11 +2323,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2316 "util/configparser.c" /* yacc.c:1646  */
+#line 2327 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 167:
-#line 419 "./util/configparser.y" /* yacc.c:1646  */
+  case 168:
+#line 421 "./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)
@@ -2324,11 +2335,11 @@ yyreduce:
                else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2328 "util/configparser.c" /* yacc.c:1646  */
+#line 2339 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 168:
-#line 428 "./util/configparser.y" /* yacc.c:1646  */
+  case 169:
+#line 430 "./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)
@@ -2336,31 +2347,31 @@ yyreduce:
                else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2340 "util/configparser.c" /* yacc.c:1646  */
+#line 2351 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 169:
-#line 437 "./util/configparser.y" /* yacc.c:1646  */
+  case 170:
+#line 439 "./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 2350 "util/configparser.c" /* yacc.c:1646  */
+#line 2361 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 170:
-#line 444 "./util/configparser.y" /* yacc.c:1646  */
+  case 171:
+#line 446 "./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 2360 "util/configparser.c" /* yacc.c:1646  */
+#line 2371 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 171:
-#line 451 "./util/configparser.y" /* yacc.c:1646  */
+  case 172:
+#line 453 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2368,11 +2379,11 @@ yyreduce:
                else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2372 "util/configparser.c" /* yacc.c:1646  */
+#line 2383 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 172:
-#line 460 "./util/configparser.y" /* yacc.c:1646  */
+  case 173:
+#line 462 "./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)
@@ -2380,11 +2391,11 @@ yyreduce:
                else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2384 "util/configparser.c" /* yacc.c:1646  */
+#line 2395 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 173:
-#line 469 "./util/configparser.y" /* yacc.c:1646  */
+  case 174:
+#line 471 "./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)
@@ -2397,11 +2408,11 @@ yyreduce:
 #endif
                free((yyvsp[0].str));
        }
-#line 2401 "util/configparser.c" /* yacc.c:1646  */
+#line 2412 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 174:
-#line 483 "./util/configparser.y" /* yacc.c:1646  */
+  case 175:
+#line 485 "./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)
@@ -2409,11 +2420,11 @@ yyreduce:
                else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2413 "util/configparser.c" /* yacc.c:1646  */
+#line 2424 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 175:
-#line 492 "./util/configparser.y" /* yacc.c:1646  */
+  case 176:
+#line 494 "./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)
@@ -2421,145 +2432,145 @@ yyreduce:
                else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2425 "util/configparser.c" /* yacc.c:1646  */
+#line 2436 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 176:
-#line 501 "./util/configparser.y" /* yacc.c:1646  */
+  case 177:
+#line 503 "./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 2435 "util/configparser.c" /* yacc.c:1646  */
+#line 2446 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 177:
-#line 508 "./util/configparser.y" /* yacc.c:1646  */
+  case 178:
+#line 510 "./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 2445 "util/configparser.c" /* yacc.c:1646  */
+#line 2456 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 178:
-#line 515 "./util/configparser.y" /* yacc.c:1646  */
+  case 179:
+#line 517 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->directory);
                cfg_parser->cfg->directory = (yyvsp[0].str);
        }
-#line 2455 "util/configparser.c" /* yacc.c:1646  */
+#line 2466 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 179:
-#line 522 "./util/configparser.y" /* yacc.c:1646  */
+  case 180:
+#line 524 "./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 2466 "util/configparser.c" /* yacc.c:1646  */
+#line 2477 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 180:
-#line 530 "./util/configparser.y" /* yacc.c:1646  */
+  case 181:
+#line 532 "./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 2476 "util/configparser.c" /* yacc.c:1646  */
+#line 2487 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 181:
-#line 537 "./util/configparser.y" /* yacc.c:1646  */
+  case 182:
+#line 539 "./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 2486 "util/configparser.c" /* yacc.c:1646  */
+#line 2497 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 182:
-#line 544 "./util/configparser.y" /* yacc.c:1646  */
+  case 183:
+#line 546 "./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 2496 "util/configparser.c" /* yacc.c:1646  */
+#line 2507 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 183:
-#line 551 "./util/configparser.y" /* yacc.c:1646  */
+  case 184:
+#line 553 "./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 2506 "util/configparser.c" /* yacc.c:1646  */
+#line 2517 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 184:
-#line 558 "./util/configparser.y" /* yacc.c:1646  */
+  case 185:
+#line 560 "./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 2517 "util/configparser.c" /* yacc.c:1646  */
+#line 2528 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 185:
-#line 566 "./util/configparser.y" /* yacc.c:1646  */
+  case 186:
+#line 568 "./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 2528 "util/configparser.c" /* yacc.c:1646  */
+#line 2539 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 186:
-#line 574 "./util/configparser.y" /* yacc.c:1646  */
+  case 187:
+#line 576 "./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 2539 "util/configparser.c" /* yacc.c:1646  */
+#line 2550 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 187:
-#line 582 "./util/configparser.y" /* yacc.c:1646  */
+  case 188:
+#line 584 "./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 2549 "util/configparser.c" /* yacc.c:1646  */
+#line 2560 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 188:
-#line 589 "./util/configparser.y" /* yacc.c:1646  */
+  case 189:
+#line 591 "./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 2559 "util/configparser.c" /* yacc.c:1646  */
+#line 2570 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 189:
-#line 596 "./util/configparser.y" /* yacc.c:1646  */
+  case 190:
+#line 598 "./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)
@@ -2567,11 +2578,11 @@ yyreduce:
                else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2571 "util/configparser.c" /* yacc.c:1646  */
+#line 2582 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 190:
-#line 605 "./util/configparser.y" /* yacc.c:1646  */
+  case 191:
+#line 607 "./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)
@@ -2579,53 +2590,53 @@ yyreduce:
                else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2583 "util/configparser.c" /* yacc.c:1646  */
+#line 2594 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 191:
-#line 614 "./util/configparser.y" /* yacc.c:1646  */
+  case 192:
+#line 616 "./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 2593 "util/configparser.c" /* yacc.c:1646  */
+#line 2604 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 192:
-#line 621 "./util/configparser.y" /* yacc.c:1646  */
+  case 193:
+#line 623 "./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 2603 "util/configparser.c" /* yacc.c:1646  */
+#line 2614 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 193:
-#line 628 "./util/configparser.y" /* yacc.c:1646  */
+  case 194:
+#line 630 "./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 2614 "util/configparser.c" /* yacc.c:1646  */
+#line 2625 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 194:
-#line 636 "./util/configparser.y" /* yacc.c:1646  */
+  case 195:
+#line 638 "./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 2625 "util/configparser.c" /* yacc.c:1646  */
+#line 2636 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 195:
-#line 644 "./util/configparser.y" /* yacc.c:1646  */
+  case 196:
+#line 646 "./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)
@@ -2634,11 +2645,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 2638 "util/configparser.c" /* yacc.c:1646  */
+#line 2649 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 196:
-#line 654 "./util/configparser.y" /* yacc.c:1646  */
+  case 197:
+#line 656 "./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)
@@ -2647,11 +2658,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 2651 "util/configparser.c" /* yacc.c:1646  */
+#line 2662 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 197:
-#line 664 "./util/configparser.y" /* yacc.c:1646  */
+  case 198:
+#line 666 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2663,11 +2674,11 @@ yyreduce:
                else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2667 "util/configparser.c" /* yacc.c:1646  */
+#line 2678 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 198:
-#line 677 "./util/configparser.y" /* yacc.c:1646  */
+  case 199:
+#line 679 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2677,22 +2688,22 @@ yyreduce:
                else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2681 "util/configparser.c" /* yacc.c:1646  */
+#line 2692 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 199:
-#line 688 "./util/configparser.y" /* yacc.c:1646  */
+  case 200:
+#line 690 "./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 2692 "util/configparser.c" /* yacc.c:1646  */
+#line 2703 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 200:
-#line 696 "./util/configparser.y" /* yacc.c:1646  */
+  case 201:
+#line 698 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2704,11 +2715,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 2708 "util/configparser.c" /* yacc.c:1646  */
+#line 2719 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 201:
-#line 709 "./util/configparser.y" /* yacc.c:1646  */
+  case 202:
+#line 711 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2716,11 +2727,11 @@ yyreduce:
                else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2720 "util/configparser.c" /* yacc.c:1646  */
+#line 2731 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 202:
-#line 718 "./util/configparser.y" /* yacc.c:1646  */
+  case 203:
+#line 720 "./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)
@@ -2728,11 +2739,11 @@ yyreduce:
                else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2732 "util/configparser.c" /* yacc.c:1646  */
+#line 2743 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 203:
-#line 727 "./util/configparser.y" /* yacc.c:1646  */
+  case 204:
+#line 729 "./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)
@@ -2740,11 +2751,11 @@ yyreduce:
                else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2744 "util/configparser.c" /* yacc.c:1646  */
+#line 2755 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 204:
-#line 736 "./util/configparser.y" /* yacc.c:1646  */
+  case 205:
+#line 738 "./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)
@@ -2753,22 +2764,35 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2757 "util/configparser.c" /* yacc.c:1646  */
+#line 2768 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 205:
-#line 746 "./util/configparser.y" /* yacc.c:1646  */
+  case 206:
+#line 748 "./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)
+                       yyerror("expected yes or no.");
+               else cfg_parser->cfg->insecure_lan_zones = 
+                       (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
+       }
+#line 2781 "util/configparser.c" /* yacc.c:1646  */
+    break;
+
+  case 207:
+#line 758 "./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 2768 "util/configparser.c" /* yacc.c:1646  */
+#line 2792 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 206:
-#line 754 "./util/configparser.y" /* yacc.c:1646  */
+  case 208:
+#line 766 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2780,11 +2804,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 2784 "util/configparser.c" /* yacc.c:1646  */
+#line 2808 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 207:
-#line 767 "./util/configparser.y" /* yacc.c:1646  */
+  case 209:
+#line 779 "./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)
@@ -2792,22 +2816,22 @@ yyreduce:
                else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2796 "util/configparser.c" /* yacc.c:1646  */
+#line 2820 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 208:
-#line 776 "./util/configparser.y" /* yacc.c:1646  */
+  case 210:
+#line 788 "./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 2807 "util/configparser.c" /* yacc.c:1646  */
+#line 2831 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 209:
-#line 784 "./util/configparser.y" /* yacc.c:1646  */
+  case 211:
+#line 796 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2815,22 +2839,22 @@ yyreduce:
                else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2819 "util/configparser.c" /* yacc.c:1646  */
+#line 2843 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 210:
-#line 793 "./util/configparser.y" /* yacc.c:1646  */
+  case 212:
+#line 805 "./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 2830 "util/configparser.c" /* yacc.c:1646  */
+#line 2854 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 211:
-#line 801 "./util/configparser.y" /* yacc.c:1646  */
+  case 213:
+#line 813 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2842,11 +2866,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 2846 "util/configparser.c" /* yacc.c:1646  */
+#line 2870 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 212:
-#line 814 "./util/configparser.y" /* yacc.c:1646  */
+  case 214:
+#line 826 "./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)
@@ -2854,21 +2878,21 @@ yyreduce:
                else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2858 "util/configparser.c" /* yacc.c:1646  */
+#line 2882 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 213:
-#line 823 "./util/configparser.y" /* yacc.c:1646  */
+  case 215:
+#line 835 "./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 2868 "util/configparser.c" /* yacc.c:1646  */
+#line 2892 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 214:
-#line 830 "./util/configparser.y" /* yacc.c:1646  */
+  case 216:
+#line 842 "./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)
@@ -2877,11 +2901,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2881 "util/configparser.c" /* yacc.c:1646  */
+#line 2905 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 215:
-#line 840 "./util/configparser.y" /* yacc.c:1646  */
+  case 217:
+#line 852 "./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)
@@ -2890,11 +2914,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2894 "util/configparser.c" /* yacc.c:1646  */
+#line 2918 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 216:
-#line 850 "./util/configparser.y" /* yacc.c:1646  */
+  case 218:
+#line 862 "./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)
@@ -2903,11 +2927,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2907 "util/configparser.c" /* yacc.c:1646  */
+#line 2931 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 217:
-#line 860 "./util/configparser.y" /* yacc.c:1646  */
+  case 219:
+#line 872 "./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)
@@ -2916,11 +2940,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2920 "util/configparser.c" /* yacc.c:1646  */
+#line 2944 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 218:
-#line 870 "./util/configparser.y" /* yacc.c:1646  */
+  case 220:
+#line 882 "./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)
@@ -2929,11 +2953,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2933 "util/configparser.c" /* yacc.c:1646  */
+#line 2957 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 219:
-#line 880 "./util/configparser.y" /* yacc.c:1646  */
+  case 221:
+#line 892 "./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)
@@ -2942,11 +2966,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2946 "util/configparser.c" /* yacc.c:1646  */
+#line 2970 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 220:
-#line 890 "./util/configparser.y" /* yacc.c:1646  */
+  case 222:
+#line 902 "./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)
@@ -2955,11 +2979,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2959 "util/configparser.c" /* yacc.c:1646  */
+#line 2983 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 221:
-#line 900 "./util/configparser.y" /* yacc.c:1646  */
+  case 223:
+#line 912 "./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)
@@ -2968,41 +2992,41 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2972 "util/configparser.c" /* yacc.c:1646  */
+#line 2996 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 222:
-#line 910 "./util/configparser.y" /* yacc.c:1646  */
+  case 224:
+#line 922 "./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 2982 "util/configparser.c" /* yacc.c:1646  */
+#line 3006 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 223:
-#line 917 "./util/configparser.y" /* yacc.c:1646  */
+  case 225:
+#line 929 "./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 2992 "util/configparser.c" /* yacc.c:1646  */
+#line 3016 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 224:
-#line 924 "./util/configparser.y" /* yacc.c:1646  */
+  case 226:
+#line 936 "./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 3002 "util/configparser.c" /* yacc.c:1646  */
+#line 3026 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 225:
-#line 931 "./util/configparser.y" /* yacc.c:1646  */
+  case 227:
+#line 943 "./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)
@@ -3010,11 +3034,11 @@ yyreduce:
                else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3014 "util/configparser.c" /* yacc.c:1646  */
+#line 3038 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 226:
-#line 940 "./util/configparser.y" /* yacc.c:1646  */
+  case 228:
+#line 952 "./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)
@@ -3022,11 +3046,11 @@ yyreduce:
                else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3026 "util/configparser.c" /* yacc.c:1646  */
+#line 3050 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 227:
-#line 949 "./util/configparser.y" /* yacc.c:1646  */
+  case 229:
+#line 961 "./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)
@@ -3034,21 +3058,21 @@ yyreduce:
                else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3038 "util/configparser.c" /* yacc.c:1646  */
+#line 3062 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 228:
-#line 958 "./util/configparser.y" /* yacc.c:1646  */
+  case 230:
+#line 970 "./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 3048 "util/configparser.c" /* yacc.c:1646  */
+#line 3072 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 229:
-#line 965 "./util/configparser.y" /* yacc.c:1646  */
+  case 231:
+#line 977 "./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)
@@ -3057,11 +3081,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3061 "util/configparser.c" /* yacc.c:1646  */
+#line 3085 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 230:
-#line 975 "./util/configparser.y" /* yacc.c:1646  */
+  case 232:
+#line 987 "./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 &&
@@ -3077,21 +3101,21 @@ yyreduce:
                                fatal_exit("out of memory adding acl");
                }
        }
-#line 3081 "util/configparser.c" /* yacc.c:1646  */
+#line 3105 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 231:
-#line 992 "./util/configparser.y" /* yacc.c:1646  */
+  case 233:
+#line 1004 "./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 3091 "util/configparser.c" /* yacc.c:1646  */
+#line 3115 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 232:
-#line 999 "./util/configparser.y" /* yacc.c:1646  */
+  case 234:
+#line 1011 "./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) {
@@ -3108,11 +3132,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3112 "util/configparser.c" /* yacc.c:1646  */
+#line 3136 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 233:
-#line 1017 "./util/configparser.y" /* yacc.c:1646  */
+  case 235:
+#line 1029 "./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) {
@@ -3124,11 +3148,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3128 "util/configparser.c" /* yacc.c:1646  */
+#line 3152 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 234:
-#line 1030 "./util/configparser.y" /* yacc.c:1646  */
+  case 236:
+#line 1042 "./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) {
@@ -3140,11 +3164,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3144 "util/configparser.c" /* yacc.c:1646  */
+#line 3168 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 235:
-#line 1043 "./util/configparser.y" /* yacc.c:1646  */
+  case 237:
+#line 1055 "./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)
@@ -3152,11 +3176,11 @@ yyreduce:
                else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3156 "util/configparser.c" /* yacc.c:1646  */
+#line 3180 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 236:
-#line 1052 "./util/configparser.y" /* yacc.c:1646  */
+  case 238:
+#line 1064 "./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)
@@ -3164,11 +3188,11 @@ yyreduce:
                else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3168 "util/configparser.c" /* yacc.c:1646  */
+#line 3192 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 237:
-#line 1061 "./util/configparser.y" /* yacc.c:1646  */
+  case 239:
+#line 1073 "./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)
@@ -3176,11 +3200,11 @@ yyreduce:
                else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3180 "util/configparser.c" /* yacc.c:1646  */
+#line 3204 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 238:
-#line 1070 "./util/configparser.y" /* yacc.c:1646  */
+  case 240:
+#line 1082 "./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)
@@ -3188,11 +3212,11 @@ yyreduce:
                else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3192 "util/configparser.c" /* yacc.c:1646  */
+#line 3216 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 239:
-#line 1079 "./util/configparser.y" /* yacc.c:1646  */
+  case 241:
+#line 1091 "./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)
@@ -3201,11 +3225,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3205 "util/configparser.c" /* yacc.c:1646  */
+#line 3229 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 240:
-#line 1089 "./util/configparser.y" /* yacc.c:1646  */
+  case 242:
+#line 1101 "./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)
@@ -3214,11 +3238,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3218 "util/configparser.c" /* yacc.c:1646  */
+#line 3242 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 241:
-#line 1099 "./util/configparser.y" /* yacc.c:1646  */
+  case 243:
+#line 1111 "./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)
@@ -3226,11 +3250,11 @@ yyreduce:
                else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3230 "util/configparser.c" /* yacc.c:1646  */
+#line 3254 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 242:
-#line 1108 "./util/configparser.y" /* yacc.c:1646  */
+  case 244:
+#line 1120 "./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)
@@ -3238,21 +3262,21 @@ yyreduce:
                else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3242 "util/configparser.c" /* yacc.c:1646  */
+#line 3266 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 243:
-#line 1117 "./util/configparser.y" /* yacc.c:1646  */
+  case 245:
+#line 1129 "./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 3252 "util/configparser.c" /* yacc.c:1646  */
+#line 3276 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 244:
-#line 1124 "./util/configparser.y" /* yacc.c:1646  */
+  case 246:
+#line 1136 "./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)
@@ -3260,11 +3284,11 @@ yyreduce:
                else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3264 "util/configparser.c" /* yacc.c:1646  */
+#line 3288 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 245:
-#line 1133 "./util/configparser.y" /* yacc.c:1646  */
+  case 247:
+#line 1145 "./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)
@@ -3272,11 +3296,11 @@ yyreduce:
                else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3276 "util/configparser.c" /* yacc.c:1646  */
+#line 3300 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 246:
-#line 1142 "./util/configparser.y" /* yacc.c:1646  */
+  case 248:
+#line 1154 "./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)
@@ -3284,11 +3308,11 @@ yyreduce:
                else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3288 "util/configparser.c" /* yacc.c:1646  */
+#line 3312 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 247:
-#line 1151 "./util/configparser.y" /* yacc.c:1646  */
+  case 249:
+#line 1163 "./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)
@@ -3297,22 +3321,22 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3301 "util/configparser.c" /* yacc.c:1646  */
+#line 3325 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 248:
-#line 1160 "./util/configparser.y" /* yacc.c:1646  */
+  case 250:
+#line 1172 "./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 3312 "util/configparser.c" /* yacc.c:1646  */
+#line 3336 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 249:
-#line 1168 "./util/configparser.y" /* yacc.c:1646  */
+  case 251:
+#line 1180 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3324,22 +3348,22 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3328 "util/configparser.c" /* yacc.c:1646  */
+#line 3352 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 250:
-#line 1181 "./util/configparser.y" /* yacc.c:1646  */
+  case 252:
+#line 1193 "./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 3339 "util/configparser.c" /* yacc.c:1646  */
+#line 3363 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 251:
-#line 1189 "./util/configparser.y" /* yacc.c:1646  */
+  case 253:
+#line 1201 "./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 &&
@@ -3362,21 +3386,21 @@ yyreduce:
                                fatal_exit("out of memory adding local-zone");
                }
        }
-#line 3366 "util/configparser.c" /* yacc.c:1646  */
+#line 3390 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 252:
-#line 1213 "./util/configparser.y" /* yacc.c:1646  */
+  case 254:
+#line 1225 "./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 3376 "util/configparser.c" /* yacc.c:1646  */
+#line 3400 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 253:
-#line 1220 "./util/configparser.y" /* yacc.c:1646  */
+  case 255:
+#line 1232 "./util/configparser.y" /* yacc.c:1646  */
     {
                char* ptr;
                OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -3390,11 +3414,11 @@ yyreduce:
                        yyerror("local-data-ptr could not be reversed");
                }
        }
-#line 3394 "util/configparser.c" /* yacc.c:1646  */
+#line 3418 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 254:
-#line 1235 "./util/configparser.y" /* yacc.c:1646  */
+  case 256:
+#line 1247 "./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)
@@ -3403,11 +3427,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3407 "util/configparser.c" /* yacc.c:1646  */
+#line 3431 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 255:
-#line 1245 "./util/configparser.y" /* yacc.c:1646  */
+  case 257:
+#line 1257 "./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)
@@ -3416,31 +3440,31 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3420 "util/configparser.c" /* yacc.c:1646  */
+#line 3444 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 256:
-#line 1255 "./util/configparser.y" /* yacc.c:1646  */
+  case 258:
+#line 1267 "./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 3430 "util/configparser.c" /* yacc.c:1646  */
+#line 3454 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 257:
-#line 1262 "./util/configparser.y" /* yacc.c:1646  */
+  case 259:
+#line 1274 "./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 3440 "util/configparser.c" /* yacc.c:1646  */
+#line 3464 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 258:
-#line 1269 "./util/configparser.y" /* yacc.c:1646  */
+  case 260:
+#line 1281 "./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)
@@ -3448,11 +3472,11 @@ yyreduce:
                else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3452 "util/configparser.c" /* yacc.c:1646  */
+#line 3476 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 259:
-#line 1278 "./util/configparser.y" /* yacc.c:1646  */
+  case 261:
+#line 1290 "./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)
@@ -3460,22 +3484,22 @@ yyreduce:
                else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3464 "util/configparser.c" /* yacc.c:1646  */
+#line 3488 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 260:
-#line 1287 "./util/configparser.y" /* yacc.c:1646  */
+  case 262:
+#line 1299 "./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 3475 "util/configparser.c" /* yacc.c:1646  */
+#line 3499 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 261:
-#line 1295 "./util/configparser.y" /* yacc.c:1646  */
+  case 263:
+#line 1307 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3487,11 +3511,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3491 "util/configparser.c" /* yacc.c:1646  */
+#line 3515 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 262:
-#line 1308 "./util/configparser.y" /* yacc.c:1646  */
+  case 264:
+#line 1320 "./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) {
@@ -3503,11 +3527,11 @@ yyreduce:
                                        "ratelimit-for-domain");
                }
        }
-#line 3507 "util/configparser.c" /* yacc.c:1646  */
+#line 3531 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 263:
-#line 1321 "./util/configparser.y" /* yacc.c:1646  */
+  case 265:
+#line 1333 "./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) {
@@ -3519,11 +3543,11 @@ yyreduce:
                                        "ratelimit-below-domain");
                }
        }
-#line 3523 "util/configparser.c" /* yacc.c:1646  */
+#line 3547 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 264:
-#line 1334 "./util/configparser.y" /* yacc.c:1646  */
+  case 266:
+#line 1346 "./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)
@@ -3531,11 +3555,11 @@ yyreduce:
                else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3535 "util/configparser.c" /* yacc.c:1646  */
+#line 3559 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 265:
-#line 1343 "./util/configparser.y" /* yacc.c:1646  */
+  case 267:
+#line 1355 "./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)
@@ -3544,11 +3568,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3548 "util/configparser.c" /* yacc.c:1646  */
+#line 3572 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 266:
-#line 1353 "./util/configparser.y" /* yacc.c:1646  */
+  case 268:
+#line 1365 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->stubs->name)
@@ -3557,31 +3581,31 @@ yyreduce:
                free(cfg_parser->cfg->stubs->name);
                cfg_parser->cfg->stubs->name = (yyvsp[0].str);
        }
-#line 3561 "util/configparser.c" /* yacc.c:1646  */
+#line 3585 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 267:
-#line 1363 "./util/configparser.y" /* yacc.c:1646  */
+  case 269:
+#line 1375 "./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 3571 "util/configparser.c" /* yacc.c:1646  */
+#line 3595 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 268:
-#line 1370 "./util/configparser.y" /* yacc.c:1646  */
+  case 270:
+#line 1382 "./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 3581 "util/configparser.c" /* yacc.c:1646  */
+#line 3605 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 269:
-#line 1377 "./util/configparser.y" /* yacc.c:1646  */
+  case 271:
+#line 1389 "./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)
@@ -3589,11 +3613,11 @@ yyreduce:
                else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3593 "util/configparser.c" /* yacc.c:1646  */
+#line 3617 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 270:
-#line 1386 "./util/configparser.y" /* yacc.c:1646  */
+  case 272:
+#line 1398 "./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)
@@ -3602,11 +3626,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3606 "util/configparser.c" /* yacc.c:1646  */
+#line 3630 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 271:
-#line 1396 "./util/configparser.y" /* yacc.c:1646  */
+  case 273:
+#line 1408 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->forwards->name)
@@ -3615,31 +3639,31 @@ yyreduce:
                free(cfg_parser->cfg->forwards->name);
                cfg_parser->cfg->forwards->name = (yyvsp[0].str);
        }
-#line 3619 "util/configparser.c" /* yacc.c:1646  */
+#line 3643 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 272:
-#line 1406 "./util/configparser.y" /* yacc.c:1646  */
+  case 274:
+#line 1418 "./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 3629 "util/configparser.c" /* yacc.c:1646  */
+#line 3653 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 273:
-#line 1413 "./util/configparser.y" /* yacc.c:1646  */
+  case 275:
+#line 1425 "./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 3639 "util/configparser.c" /* yacc.c:1646  */
+#line 3663 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 274:
-#line 1420 "./util/configparser.y" /* yacc.c:1646  */
+  case 276:
+#line 1432 "./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)
@@ -3647,19 +3671,19 @@ yyreduce:
                else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3651 "util/configparser.c" /* yacc.c:1646  */
+#line 3675 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 275:
-#line 1429 "./util/configparser.y" /* yacc.c:1646  */
+  case 277:
+#line 1441 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(remote-control:)\n")); 
        }
-#line 3659 "util/configparser.c" /* yacc.c:1646  */
+#line 3683 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 286:
-#line 1440 "./util/configparser.y" /* yacc.c:1646  */
+  case 288:
+#line 1452 "./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)
@@ -3668,11 +3692,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3672 "util/configparser.c" /* yacc.c:1646  */
+#line 3696 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 287:
-#line 1450 "./util/configparser.y" /* yacc.c:1646  */
+  case 289:
+#line 1462 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3680,21 +3704,21 @@ yyreduce:
                else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3684 "util/configparser.c" /* yacc.c:1646  */
+#line 3708 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 288:
-#line 1459 "./util/configparser.y" /* yacc.c:1646  */
+  case 290:
+#line 1471 "./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 3694 "util/configparser.c" /* yacc.c:1646  */
+#line 3718 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 289:
-#line 1466 "./util/configparser.y" /* yacc.c:1646  */
+  case 291:
+#line 1478 "./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)
@@ -3703,122 +3727,122 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3707 "util/configparser.c" /* yacc.c:1646  */
+#line 3731 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 290:
-#line 1476 "./util/configparser.y" /* yacc.c:1646  */
+  case 292:
+#line 1488 "./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 3717 "util/configparser.c" /* yacc.c:1646  */
+#line 3741 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 291:
-#line 1483 "./util/configparser.y" /* yacc.c:1646  */
+  case 293:
+#line 1495 "./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 3727 "util/configparser.c" /* yacc.c:1646  */
+#line 3751 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 292:
-#line 1490 "./util/configparser.y" /* yacc.c:1646  */
+  case 294:
+#line 1502 "./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 3737 "util/configparser.c" /* yacc.c:1646  */
+#line 3761 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 293:
-#line 1497 "./util/configparser.y" /* yacc.c:1646  */
+  case 295:
+#line 1509 "./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 3747 "util/configparser.c" /* yacc.c:1646  */
+#line 3771 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 294:
-#line 1504 "./util/configparser.y" /* yacc.c:1646  */
+  case 296:
+#line 1516 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("\nP(dnstap:)\n"));
        }
-#line 3755 "util/configparser.c" /* yacc.c:1646  */
+#line 3779 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 309:
-#line 1521 "./util/configparser.y" /* yacc.c:1646  */
+  case 311:
+#line 1533 "./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 3766 "util/configparser.c" /* yacc.c:1646  */
+#line 3790 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 310:
-#line 1529 "./util/configparser.y" /* yacc.c:1646  */
+  case 312:
+#line 1541 "./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 3776 "util/configparser.c" /* yacc.c:1646  */
+#line 3800 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 311:
-#line 1536 "./util/configparser.y" /* yacc.c:1646  */
+  case 313:
+#line 1548 "./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 3787 "util/configparser.c" /* yacc.c:1646  */
+#line 3811 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 312:
-#line 1544 "./util/configparser.y" /* yacc.c:1646  */
+  case 314:
+#line 1556 "./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 3798 "util/configparser.c" /* yacc.c:1646  */
+#line 3822 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 313:
-#line 1552 "./util/configparser.y" /* yacc.c:1646  */
+  case 315:
+#line 1564 "./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 3808 "util/configparser.c" /* yacc.c:1646  */
+#line 3832 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 314:
-#line 1559 "./util/configparser.y" /* yacc.c:1646  */
+  case 316:
+#line 1571 "./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 3818 "util/configparser.c" /* yacc.c:1646  */
+#line 3842 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 315:
-#line 1566 "./util/configparser.y" /* yacc.c:1646  */
+  case 317:
+#line 1578 "./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)
@@ -3826,11 +3850,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_resolver_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 3830 "util/configparser.c" /* yacc.c:1646  */
+#line 3854 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 316:
-#line 1575 "./util/configparser.y" /* yacc.c:1646  */
+  case 318:
+#line 1587 "./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)
@@ -3838,11 +3862,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_resolver_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 3842 "util/configparser.c" /* yacc.c:1646  */
+#line 3866 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 317:
-#line 1584 "./util/configparser.y" /* yacc.c:1646  */
+  case 319:
+#line 1596 "./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)
@@ -3850,11 +3874,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_client_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 3854 "util/configparser.c" /* yacc.c:1646  */
+#line 3878 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 318:
-#line 1593 "./util/configparser.y" /* yacc.c:1646  */
+  case 320:
+#line 1605 "./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)
@@ -3862,11 +3886,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_client_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 3866 "util/configparser.c" /* yacc.c:1646  */
+#line 3890 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 319:
-#line 1602 "./util/configparser.y" /* yacc.c:1646  */
+  case 321:
+#line 1614 "./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)
@@ -3874,11 +3898,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_forwarder_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 3878 "util/configparser.c" /* yacc.c:1646  */
+#line 3902 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 320:
-#line 1611 "./util/configparser.y" /* yacc.c:1646  */
+  case 322:
+#line 1623 "./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)
@@ -3886,29 +3910,29 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_forwarder_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 3890 "util/configparser.c" /* yacc.c:1646  */
+#line 3914 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 321:
-#line 1620 "./util/configparser.y" /* yacc.c:1646  */
+  case 323:
+#line 1632 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(python:)\n")); 
        }
-#line 3898 "util/configparser.c" /* yacc.c:1646  */
+#line 3922 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 325:
-#line 1629 "./util/configparser.y" /* yacc.c:1646  */
+  case 327:
+#line 1641 "./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 3908 "util/configparser.c" /* yacc.c:1646  */
+#line 3932 "util/configparser.c" /* yacc.c:1646  */
     break;
 
 
-#line 3912 "util/configparser.c" /* yacc.c:1646  */
+#line 3936 "util/configparser.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -4136,7 +4160,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 1634 "./util/configparser.y" /* yacc.c:1906  */
+#line 1646 "./util/configparser.y" /* yacc.c:1906  */
 
 
 /* parse helper routines could be here */
index 85cf7ed7ca86817ea85136cecffbac1b53085465..1981efe3bb2416672fc2e854b00e9e00079d3c1a 100644 (file)
@@ -179,34 +179,35 @@ extern int yydebug;
     VAR_MAX_UDP_SIZE = 389,
     VAR_DELAY_CLOSE = 390,
     VAR_UNBLOCK_LAN_ZONES = 391,
-    VAR_INFRA_CACHE_MIN_RTT = 392,
-    VAR_DNS64_PREFIX = 393,
-    VAR_DNS64_SYNTHALL = 394,
-    VAR_DNSTAP = 395,
-    VAR_DNSTAP_ENABLE = 396,
-    VAR_DNSTAP_SOCKET_PATH = 397,
-    VAR_DNSTAP_SEND_IDENTITY = 398,
-    VAR_DNSTAP_SEND_VERSION = 399,
-    VAR_DNSTAP_IDENTITY = 400,
-    VAR_DNSTAP_VERSION = 401,
-    VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 402,
-    VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 403,
-    VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 404,
-    VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 405,
-    VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 406,
-    VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 407,
-    VAR_HARDEN_ALGO_DOWNGRADE = 408,
-    VAR_IP_TRANSPARENT = 409,
-    VAR_RATELIMIT = 410,
-    VAR_RATELIMIT_SLABS = 411,
-    VAR_RATELIMIT_SIZE = 412,
-    VAR_RATELIMIT_FOR_DOMAIN = 413,
-    VAR_RATELIMIT_BELOW_DOMAIN = 414,
-    VAR_RATELIMIT_FACTOR = 415,
-    VAR_CAPS_WHITELIST = 416,
-    VAR_CACHE_MAX_NEGATIVE_TTL = 417,
-    VAR_PERMIT_SMALL_HOLDDOWN = 418,
-    VAR_QNAME_MINIMISATION = 419
+    VAR_INSECURE_LAN_ZONES = 392,
+    VAR_INFRA_CACHE_MIN_RTT = 393,
+    VAR_DNS64_PREFIX = 394,
+    VAR_DNS64_SYNTHALL = 395,
+    VAR_DNSTAP = 396,
+    VAR_DNSTAP_ENABLE = 397,
+    VAR_DNSTAP_SOCKET_PATH = 398,
+    VAR_DNSTAP_SEND_IDENTITY = 399,
+    VAR_DNSTAP_SEND_VERSION = 400,
+    VAR_DNSTAP_IDENTITY = 401,
+    VAR_DNSTAP_VERSION = 402,
+    VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 403,
+    VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 404,
+    VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 405,
+    VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 406,
+    VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 407,
+    VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 408,
+    VAR_HARDEN_ALGO_DOWNGRADE = 409,
+    VAR_IP_TRANSPARENT = 410,
+    VAR_RATELIMIT = 411,
+    VAR_RATELIMIT_SLABS = 412,
+    VAR_RATELIMIT_SIZE = 413,
+    VAR_RATELIMIT_FOR_DOMAIN = 414,
+    VAR_RATELIMIT_BELOW_DOMAIN = 415,
+    VAR_RATELIMIT_FACTOR = 416,
+    VAR_CAPS_WHITELIST = 417,
+    VAR_CACHE_MAX_NEGATIVE_TTL = 418,
+    VAR_PERMIT_SMALL_HOLDDOWN = 419,
+    VAR_QNAME_MINIMISATION = 420
   };
 #endif
 /* Tokens.  */
@@ -344,34 +345,35 @@ extern int yydebug;
 #define VAR_MAX_UDP_SIZE 389
 #define VAR_DELAY_CLOSE 390
 #define VAR_UNBLOCK_LAN_ZONES 391
-#define VAR_INFRA_CACHE_MIN_RTT 392
-#define VAR_DNS64_PREFIX 393
-#define VAR_DNS64_SYNTHALL 394
-#define VAR_DNSTAP 395
-#define VAR_DNSTAP_ENABLE 396
-#define VAR_DNSTAP_SOCKET_PATH 397
-#define VAR_DNSTAP_SEND_IDENTITY 398
-#define VAR_DNSTAP_SEND_VERSION 399
-#define VAR_DNSTAP_IDENTITY 400
-#define VAR_DNSTAP_VERSION 401
-#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 402
-#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 403
-#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 404
-#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 405
-#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 406
-#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 407
-#define VAR_HARDEN_ALGO_DOWNGRADE 408
-#define VAR_IP_TRANSPARENT 409
-#define VAR_RATELIMIT 410
-#define VAR_RATELIMIT_SLABS 411
-#define VAR_RATELIMIT_SIZE 412
-#define VAR_RATELIMIT_FOR_DOMAIN 413
-#define VAR_RATELIMIT_BELOW_DOMAIN 414
-#define VAR_RATELIMIT_FACTOR 415
-#define VAR_CAPS_WHITELIST 416
-#define VAR_CACHE_MAX_NEGATIVE_TTL 417
-#define VAR_PERMIT_SMALL_HOLDDOWN 418
-#define VAR_QNAME_MINIMISATION 419
+#define VAR_INSECURE_LAN_ZONES 392
+#define VAR_INFRA_CACHE_MIN_RTT 393
+#define VAR_DNS64_PREFIX 394
+#define VAR_DNS64_SYNTHALL 395
+#define VAR_DNSTAP 396
+#define VAR_DNSTAP_ENABLE 397
+#define VAR_DNSTAP_SOCKET_PATH 398
+#define VAR_DNSTAP_SEND_IDENTITY 399
+#define VAR_DNSTAP_SEND_VERSION 400
+#define VAR_DNSTAP_IDENTITY 401
+#define VAR_DNSTAP_VERSION 402
+#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 403
+#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 404
+#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 405
+#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 406
+#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 407
+#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 408
+#define VAR_HARDEN_ALGO_DOWNGRADE 409
+#define VAR_IP_TRANSPARENT 410
+#define VAR_RATELIMIT 411
+#define VAR_RATELIMIT_SLABS 412
+#define VAR_RATELIMIT_SIZE 413
+#define VAR_RATELIMIT_FOR_DOMAIN 414
+#define VAR_RATELIMIT_BELOW_DOMAIN 415
+#define VAR_RATELIMIT_FACTOR 416
+#define VAR_CAPS_WHITELIST 417
+#define VAR_CACHE_MAX_NEGATIVE_TTL 418
+#define VAR_PERMIT_SMALL_HOLDDOWN 419
+#define VAR_QNAME_MINIMISATION 420
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -382,7 +384,7 @@ union YYSTYPE
 
        char*   str;
 
-#line 386 "util/configparser.h" /* yacc.c:1909  */
+#line 388 "util/configparser.h" /* yacc.c:1909  */
 };
 
 typedef union YYSTYPE YYSTYPE;
index 5bc81e86b420040d359227fe4c03e79618d627cc..ea7acdb597ed076f514ed9c7d4771061f0c20ef7 100644 (file)
@@ -107,7 +107,8 @@ extern struct config_parser_state* cfg_parser;
 %token VAR_IGNORE_CD_FLAG VAR_LOG_QUERIES VAR_TCP_UPSTREAM VAR_SSL_UPSTREAM
 %token VAR_SSL_SERVICE_KEY VAR_SSL_SERVICE_PEM VAR_SSL_PORT VAR_FORWARD_FIRST
 %token VAR_STUB_FIRST VAR_MINIMAL_RESPONSES VAR_RRSET_ROUNDROBIN
-%token VAR_MAX_UDP_SIZE VAR_DELAY_CLOSE VAR_UNBLOCK_LAN_ZONES
+%token VAR_MAX_UDP_SIZE VAR_DELAY_CLOSE
+%token VAR_UNBLOCK_LAN_ZONES VAR_INSECURE_LAN_ZONES
 %token VAR_INFRA_CACHE_MIN_RTT
 %token VAR_DNS64_PREFIX VAR_DNS64_SYNTHALL
 %token VAR_DNSTAP VAR_DNSTAP_ENABLE VAR_DNSTAP_SOCKET_PATH
@@ -182,7 +183,8 @@ content_server: server_num_threads | server_verbosity | server_port |
        server_log_queries | server_tcp_upstream | server_ssl_upstream |
        server_ssl_service_key | server_ssl_service_pem | server_ssl_port |
        server_minimal_responses | server_rrset_roundrobin | server_max_udp_size |
-       server_so_reuseport | server_delay_close | server_unblock_lan_zones |
+       server_so_reuseport | server_delay_close |
+       server_unblock_lan_zones | server_insecure_lan_zones |
        server_dns64_prefix | server_dns64_synthall |
        server_infra_cache_min_rtt | server_harden_algo_downgrade |
        server_ip_transparent | server_ratelimit | server_ratelimit_slabs |
@@ -742,6 +744,16 @@ server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG
                free($2);
        }
        ;
+server_insecure_lan_zones: VAR_INSECURE_LAN_ZONES STRING_ARG
+       {
+               OUTYY(("P(server_insecure_lan_zones:%s)\n", $2));
+               if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+                       yyerror("expected yes or no.");
+               else cfg_parser->cfg->insecure_lan_zones = 
+                       (strcmp($2, "yes")==0);
+               free($2);
+       }
+       ;
 server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG
        {
                OUTYY(("P(server_rrset_cache_size:%s)\n", $2));
index 845b54a2e85ef7316618e28e55410fc263a00194..bc9f8b8773f98900da828c864852a14d2364cb51 100644 (file)
@@ -48,6 +48,7 @@
 #include "util/log.h"
 #include "util/net_help.h"
 #include "util/config_file.h"
+#include "util/as112.h"
 #include "sldns/sbuffer.h"
 #include "sldns/rrdef.h"
 #include "sldns/str2wire.h"
@@ -1044,8 +1045,18 @@ int
 anchors_apply_cfg(struct val_anchors* anchors, struct config_file* cfg)
 {
        struct config_strlist* f;
+       const char** zstr;
        char* nm;
        sldns_buffer* parsebuf = sldns_buffer_new(65535);
+       if(cfg->insecure_lan_zones) {
+               for(zstr = as112_zones; *zstr; zstr++) {
+                       if(!anchor_insert_insecure(anchors, *zstr)) {
+                               log_err("error in insecure-lan-zones: %s", *zstr);
+                               sldns_buffer_free(parsebuf);
+                               return 0;
+                       }
+               }
+       }
        for(f = cfg->domain_insecure; f; f = f->next) {
                if(!f->str || f->str[0] == 0) /* empty "" */
                        continue;