]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- configure --enable-systemd and lets unbound use systemd sockets if
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 3 Jan 2017 13:43:29 +0000 (13:43 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 3 Jan 2017 13:43:29 +0000 (13:43 +0000)
  you enable use-systemd: yes in unbound.conf.
  Also there are contrib/unbound.socket and contrib/unbound.service:
  systemd files for unbound, install them in /usr/lib/systemd/system.
  Contributed by Sami Kerola and Pavel Odintsov.

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

24 files changed:
aclocal.m4
config.h.in
configure
configure.ac
contrib/README
contrib/unbound.service.in [new file with mode: 0644]
contrib/unbound.socket.in [new file with mode: 0644]
daemon/daemon.c
daemon/remote.c
daemon/unbound.c
doc/Changelog
doc/example.conf.in
doc/unbound.conf.5.in
services/listen_dnsport.c
services/listen_dnsport.h
services/outside_network.c
systemd.m4 [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

index ea5d6e9f8684b1ddaa8a9591873c8ad4a7be7307..f21da5394f730c21c0a4fbc0cf3894606f09184a 100644 (file)
@@ -9044,3 +9044,329 @@ m4_ifndef([_LT_PROG_F77],               [AC_DEFUN([_LT_PROG_F77])])
 m4_ifndef([_LT_PROG_FC],               [AC_DEFUN([_LT_PROG_FC])])
 m4_ifndef([_LT_PROG_CXX],              [AC_DEFUN([_LT_PROG_CXX])])
 
+dnl pkg.m4 - Macros to locate and utilise pkg-config.   -*- Autoconf -*-
+dnl serial 11 (pkg-config-0.29.1)
+dnl
+dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful, but
+dnl WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+dnl 02111-1307, USA.
+dnl
+dnl As a special exception to the GNU General Public License, if you
+dnl distribute this file as part of a program that contains a
+dnl configuration script generated by Autoconf, you may include it under
+dnl the same distribution terms that you use for the rest of that
+dnl program.
+
+dnl PKG_PREREQ(MIN-VERSION)
+dnl -----------------------
+dnl Since: 0.29
+dnl
+dnl Verify that the version of the pkg-config macros are at least
+dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's
+dnl installed version of pkg-config, this checks the developer's version
+dnl of pkg.m4 when generating configure.
+dnl
+dnl To ensure that this macro is defined, also add:
+dnl m4_ifndef([PKG_PREREQ],
+dnl     [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])])
+dnl
+dnl See the "Since" comment for each macro you use to see what version
+dnl of the macros you require.
+m4_defun([PKG_PREREQ],
+[m4_define([PKG_MACROS_VERSION], [0.29.1])
+m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
+    [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
+])dnl PKG_PREREQ
+
+dnl PKG_PROG_PKG_CONFIG([MIN-VERSION])
+dnl ----------------------------------
+dnl Since: 0.16
+dnl
+dnl Search for the pkg-config tool and set the PKG_CONFIG variable to
+dnl first found in the path. Checks that the version of pkg-config found
+dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is
+dnl used since that's the first version where most current features of
+dnl pkg-config existed.
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
+m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
+AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
+AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+       AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+       _pkg_min_version=m4_default([$1], [0.9.0])
+       AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+               AC_MSG_RESULT([yes])
+       else
+               AC_MSG_RESULT([no])
+               PKG_CONFIG=""
+       fi
+fi[]dnl
+])dnl PKG_PROG_PKG_CONFIG
+
+dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------------------------------
+dnl Since: 0.18
+dnl
+dnl Check to see whether a particular set of modules exists. Similar to
+dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
+dnl
+dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+dnl only at the first occurence in configure.ac, so if the first place
+dnl it's called might be skipped (such as if it is within an "if", you
+dnl have to call PKG_CHECK_EXISTS manually
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+  m4_default([$2], [:])
+m4_ifvaln([$3], [else
+  $3])dnl
+fi])
+
+dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+dnl ---------------------------------------------
+dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting
+dnl pkg_failed based on the result.
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+    pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+    PKG_CHECK_EXISTS([$3],
+                     [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes ],
+                    [pkg_failed=yes])
+ else
+    pkg_failed=untried
+fi[]dnl
+])dnl _PKG_CONFIG
+
+dnl _PKG_SHORT_ERRORS_SUPPORTED
+dnl ---------------------------
+dnl Internal check to see if pkg-config supports short errors.
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi[]dnl
+])dnl _PKG_SHORT_ERRORS_SUPPORTED
+
+
+dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl   [ACTION-IF-NOT-FOUND])
+dnl --------------------------------------------------------------
+dnl Since: 0.4.0
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES might not happen, you should be sure to include an
+dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+       AC_MSG_RESULT([no])
+        _PKG_SHORT_ERRORS_SUPPORTED
+        if test $_pkg_short_errors_supported = yes; then
+               $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
+        else 
+               $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+       m4_default([$4], [AC_MSG_ERROR(
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT])[]dnl
+        ])
+elif test $pkg_failed = untried; then
+       AC_MSG_RESULT([no])
+       m4_default([$4], [AC_MSG_FAILURE(
+[The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
+        ])
+else
+       $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+       $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+        AC_MSG_RESULT([yes])
+       $3
+fi[]dnl
+])dnl PKG_CHECK_MODULES
+
+
+dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl   [ACTION-IF-NOT-FOUND])
+dnl ---------------------------------------------------------------------
+dnl Since: 0.29
+dnl
+dnl Checks for existence of MODULES and gathers its build flags with
+dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags
+dnl and VARIABLE-PREFIX_LIBS from --libs.
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to
+dnl include an explicit call to PKG_PROG_PKG_CONFIG in your
+dnl configure.ac.
+AC_DEFUN([PKG_CHECK_MODULES_STATIC],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+_save_PKG_CONFIG=$PKG_CONFIG
+PKG_CONFIG="$PKG_CONFIG --static"
+PKG_CHECK_MODULES($@)
+PKG_CONFIG=$_save_PKG_CONFIG[]dnl
+])dnl PKG_CHECK_MODULES_STATIC
+
+
+dnl PKG_INSTALLDIR([DIRECTORY])
+dnl -------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable pkgconfigdir as the location where a module
+dnl should install pkg-config .pc files. By default the directory is
+dnl $libdir/pkgconfig, but the default can be changed by passing
+dnl DIRECTORY. The user can override through the --with-pkgconfigdir
+dnl parameter.
+AC_DEFUN([PKG_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+    [pkg-config installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([pkgconfigdir],
+    [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
+    [with_pkgconfigdir=]pkg_default)
+AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+])dnl PKG_INSTALLDIR
+
+
+dnl PKG_NOARCH_INSTALLDIR([DIRECTORY])
+dnl --------------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable noarch_pkgconfigdir as the location where a
+dnl module should install arch-independent pkg-config .pc files. By
+dnl default the directory is $datadir/pkgconfig, but the default can be
+dnl changed by passing DIRECTORY. The user can override through the
+dnl --with-noarch-pkgconfigdir parameter.
+AC_DEFUN([PKG_NOARCH_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+    [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([noarch-pkgconfigdir],
+    [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,
+    [with_noarch_pkgconfigdir=]pkg_default)
+AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+])dnl PKG_NOARCH_INSTALLDIR
+
+
+dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
+dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------
+dnl Since: 0.28
+dnl
+dnl Retrieves the value of the pkg-config variable for the given module.
+AC_DEFUN([PKG_CHECK_VAR],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
+
+_PKG_CONFIG([$1], [variable="][$3]["], [$2])
+AS_VAR_COPY([$1], [pkg_cv_][$1])
+
+AS_VAR_IF([$1], [""], [$5], [$4])dnl
+])dnl PKG_CHECK_VAR
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
index 2484199bc74b35e63c0071fb36c3e6f8d8209e9a..3a4f47b5ca79b4e5093aefedd72e170f7693e765 100644 (file)
 /* Define to 1 if you have the <syslog.h> header file. */
 #undef HAVE_SYSLOG_H
 
+/* Define to 1 if systemd should be used */
+#undef HAVE_SYSTEMD
+
 /* Define to 1 if you have the <sys/param.h> header file. */
 #undef HAVE_SYS_PARAM_H
 
index 14702491b2533167ce5a4f5d60e2e6b308b95c44..97b32e6af11c8f86282c0731a0b7dab92184bc4f 100755 (executable)
--- a/configure
+++ b/configure
@@ -658,6 +658,15 @@ WIN_DAEMON_SRC
 WINAPPS
 WINDRES
 CHECKLOCK_OBJ
+USE_SYSTEMD_FALSE
+USE_SYSTEMD_TRUE
+SYSTEMD_DAEMON_LIBS
+SYSTEMD_DAEMON_CFLAGS
+SYSTEMD_LIBS
+SYSTEMD_CFLAGS
+PKG_CONFIG_LIBDIR
+PKG_CONFIG_PATH
+PKG_CONFIG
 staticexe
 PC_LIBEVENT_DEPENDENCY
 UNBOUND_EVENT_UNINSTALL
@@ -841,6 +850,7 @@ enable_tfo_server
 with_libevent
 with_libexpat
 enable_static_exe
+enable_systemd
 enable_lock_checks
 enable_allsymbols
 enable_dnstap
@@ -862,7 +872,14 @@ CPP
 YACC
 YFLAGS
 LT_SYS_LIBRARY_PATH
-PYTHON_VERSION'
+PYTHON_VERSION
+PKG_CONFIG
+PKG_CONFIG_PATH
+PKG_CONFIG_LIBDIR
+SYSTEMD_CFLAGS
+SYSTEMD_LIBS
+SYSTEMD_DAEMON_CFLAGS
+SYSTEMD_DAEMON_LIBS'
 
 
 # Initialize some variables set by options.
@@ -1508,6 +1525,7 @@ Optional Features:
   --enable-tfo-server     Enable TCP Fast Open for server mode
   --enable-static-exe     enable to compile executables statically against
                           (event) libs, for debug purposes
+  --enable-systemd        compile with systemd support
   --enable-lock-checks    enable to check lock and unlock calls, for debug
                           purposes
   --enable-allsymbols     export all symbols from libunbound and link binaries
@@ -1591,6 +1609,19 @@ Some influential environment variables:
               The installed Python version to use, for example '2.3'. This
               string will be appended to the Python interpreter canonical
               name.
+  PKG_CONFIG  path to pkg-config utility
+  PKG_CONFIG_PATH
+              directories to add to pkg-config's search path
+  PKG_CONFIG_LIBDIR
+              path overriding pkg-config's built-in search path
+  SYSTEMD_CFLAGS
+              C compiler flags for SYSTEMD, overriding pkg-config
+  SYSTEMD_LIBS
+              linker flags for SYSTEMD, overriding pkg-config
+  SYSTEMD_DAEMON_CFLAGS
+              C compiler flags for SYSTEMD_DAEMON, overriding pkg-config
+  SYSTEMD_DAEMON_LIBS
+              linker flags for SYSTEMD_DAEMON, overriding pkg-config
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
@@ -18468,6 +18499,315 @@ if test x_$enable_static_exe = x_yes; then
        fi
 fi
 
+# Include systemd.m4 - begin
+#   macros for configuring systemd
+#   Copyright 2015, Sami Kerola, CloudFlare.
+#   BSD licensed.
+# Check whether --enable-systemd was given.
+if test "${enable_systemd+set}" = set; then :
+  enableval=$enable_systemd;
+else
+  enable_systemd=no
+fi
+
+have_systemd=no
+
+
+
+
+
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+       if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PKG_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
+  fi
+else
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+       _pkg_min_version=0.9.0
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       else
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+               PKG_CONFIG=""
+       fi
+fi
+if test "x$enable_systemd" != xno; then :
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SYSTEMD" >&5
+$as_echo_n "checking for SYSTEMD... " >&6; }
+
+if test -n "$SYSTEMD_CFLAGS"; then
+    pkg_cv_SYSTEMD_CFLAGS="$SYSTEMD_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libsystemd") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_SYSTEMD_CFLAGS=`$PKG_CONFIG --cflags "libsystemd" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$SYSTEMD_LIBS"; then
+    pkg_cv_SYSTEMD_LIBS="$SYSTEMD_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libsystemd") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_SYSTEMD_LIBS=`$PKG_CONFIG --libs "libsystemd" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               SYSTEMD_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libsystemd" 2>&1`
+        else
+               SYSTEMD_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libsystemd" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$SYSTEMD_PKG_ERRORS" >&5
+
+       have_systemd=no
+elif test $pkg_failed = untried; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+       have_systemd=no
+else
+       SYSTEMD_CFLAGS=$pkg_cv_SYSTEMD_CFLAGS
+       SYSTEMD_LIBS=$pkg_cv_SYSTEMD_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       have_systemd=yes
+fi
+               if test "x$have_systemd" != "xyes"; then :
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SYSTEMD_DAEMON" >&5
+$as_echo_n "checking for SYSTEMD_DAEMON... " >&6; }
+
+if test -n "$SYSTEMD_DAEMON_CFLAGS"; then
+    pkg_cv_SYSTEMD_DAEMON_CFLAGS="$SYSTEMD_DAEMON_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd-daemon\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libsystemd-daemon") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_SYSTEMD_DAEMON_CFLAGS=`$PKG_CONFIG --cflags "libsystemd-daemon" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$SYSTEMD_DAEMON_LIBS"; then
+    pkg_cv_SYSTEMD_DAEMON_LIBS="$SYSTEMD_DAEMON_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd-daemon\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libsystemd-daemon") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_SYSTEMD_DAEMON_LIBS=`$PKG_CONFIG --libs "libsystemd-daemon" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               SYSTEMD_DAEMON_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libsystemd-daemon" 2>&1`
+        else
+               SYSTEMD_DAEMON_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libsystemd-daemon" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$SYSTEMD_DAEMON_PKG_ERRORS" >&5
+
+       have_systemd_daemon=no
+elif test $pkg_failed = untried; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+       have_systemd_daemon=no
+else
+       SYSTEMD_DAEMON_CFLAGS=$pkg_cv_SYSTEMD_DAEMON_CFLAGS
+       SYSTEMD_DAEMON_LIBS=$pkg_cv_SYSTEMD_DAEMON_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       have_systemd_daemon=yes
+fi
+               if test "x$have_systemd_daemon" = "xyes"; then :
+  have_systemd=yes
+fi
+
+fi
+       case $enable_systemd:$have_systemd in #(
+  yes:no) :
+    as_fn_error $? "systemd enabled but libsystemd not found" "$LINENO" 5 ;; #(
+  *:yes) :
+
+$as_echo "#define HAVE_SYSTEMD 1" >>confdefs.h
+
+               LIBS="$LIBS $SYSTEMD_LIBS"
+
+        ;; #(
+  *) :
+     ;;
+esac
+
+fi
+ if test "x$have_systemd" = xyes; then
+  USE_SYSTEMD_TRUE=
+  USE_SYSTEMD_FALSE='#'
+else
+  USE_SYSTEMD_TRUE='#'
+  USE_SYSTEMD_FALSE=
+fi
+
+
+# Include systemd.m4 - end
+
 # set lock checking if requested
 # Check whether --enable-lock_checks was given.
 if test "${enable_lock_checks+set}" = set; then :
@@ -19991,7 +20331,7 @@ version=1.6.1
 date=`date +'%b %e, %Y'`
 
 
-ac_config_files="$ac_config_files Makefile doc/example.conf doc/libunbound.3 doc/unbound.8 doc/unbound-anchor.8 doc/unbound-checkconf.8 doc/unbound.conf.5 doc/unbound-control.8 doc/unbound-host.1 smallapp/unbound-control-setup.sh dnstap/dnstap_config.h contrib/libunbound.pc"
+ac_config_files="$ac_config_files Makefile doc/example.conf doc/libunbound.3 doc/unbound.8 doc/unbound-anchor.8 doc/unbound-checkconf.8 doc/unbound.conf.5 doc/unbound-control.8 doc/unbound-host.1 smallapp/unbound-control-setup.sh dnstap/dnstap_config.h contrib/libunbound.pc contrib/unbound.socket contrib/unbound.service"
 
 ac_config_headers="$ac_config_headers config.h"
 
@@ -20104,6 +20444,10 @@ LIBOBJS=$ac_libobjs
 LTLIBOBJS=$ac_ltlibobjs
 
 
+if test -z "${USE_SYSTEMD_TRUE}" && test -z "${USE_SYSTEMD_FALSE}"; then
+  as_fn_error $? "conditional \"USE_SYSTEMD\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 
 : "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
@@ -20990,6 +21334,8 @@ do
     "smallapp/unbound-control-setup.sh") CONFIG_FILES="$CONFIG_FILES smallapp/unbound-control-setup.sh" ;;
     "dnstap/dnstap_config.h") CONFIG_FILES="$CONFIG_FILES dnstap/dnstap_config.h" ;;
     "contrib/libunbound.pc") CONFIG_FILES="$CONFIG_FILES contrib/libunbound.pc" ;;
+    "contrib/unbound.socket") CONFIG_FILES="$CONFIG_FILES contrib/unbound.socket" ;;
+    "contrib/unbound.service") CONFIG_FILES="$CONFIG_FILES contrib/unbound.service" ;;
     "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
 
   *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
index cf4c2c182bbcb522e627b201117b07c3a5fff7c0..abb37360c8508316a79099ace8a1ecab6d09e644 100644 (file)
@@ -1054,6 +1054,10 @@ if test x_$enable_static_exe = x_yes; then
        fi
 fi
 
+# Include systemd.m4 - begin
+sinclude(systemd.m4)
+# Include systemd.m4 - end
+
 # set lock checking if requested
 AC_ARG_ENABLE(lock_checks, AC_HELP_STRING([--enable-lock-checks],
        [ enable to check lock and unlock calls, for debug purposes ]), 
@@ -1602,6 +1606,6 @@ dnl if this is a distro tarball, that was already done by makedist.sh
 AC_SUBST(version, [VERSION_MAJOR.VERSION_MINOR.VERSION_MICRO])
 AC_SUBST(date, [`date +'%b %e, %Y'`])
 
-AC_CONFIG_FILES([Makefile doc/example.conf doc/libunbound.3 doc/unbound.8 doc/unbound-anchor.8 doc/unbound-checkconf.8 doc/unbound.conf.5 doc/unbound-control.8 doc/unbound-host.1 smallapp/unbound-control-setup.sh dnstap/dnstap_config.h contrib/libunbound.pc])
+AC_CONFIG_FILES([Makefile doc/example.conf doc/libunbound.3 doc/unbound.8 doc/unbound-anchor.8 doc/unbound-checkconf.8 doc/unbound.conf.5 doc/unbound-control.8 doc/unbound-host.1 smallapp/unbound-control-setup.sh dnstap/dnstap_config.h contrib/libunbound.pc contrib/unbound.socket contrib/unbound.service])
 AC_CONFIG_HEADER([config.h])
 AC_OUTPUT
index 8eae9b5b7cfc025230f4c389ce7f0bc66d97e65e..7ccae735d79712cee08cebf847ab79e832df0ff7 100644 (file)
@@ -29,3 +29,5 @@ distribution but may be helpful.
   Patch from Stephane Lapie for ASAHI Net.
 * unbound_smf22.tar.gz: Solaris SMF installation/removal scripts.
   Contributed by Yuri Voinov.
+* unbound.socket and unbound.service: systemd files for unbound, install them
+  in /usr/lib/systemd/system.  Contributed by Sami Kerola and Pavel Odintsov.
diff --git a/contrib/unbound.service.in b/contrib/unbound.service.in
new file mode 100644 (file)
index 0000000..b33c370
--- /dev/null
@@ -0,0 +1,8 @@
+[Service]
+Type=notify
+NotifyAccess=main
+ExecStart=/home/vagrant/unbound_systemd/unbound
+ExecReload=/bin/kill -HUP $MAINPID
+
+[Install]
+WantedBy=multi-user.target
diff --git a/contrib/unbound.socket.in b/contrib/unbound.socket.in
new file mode 100644 (file)
index 0000000..162fb3e
--- /dev/null
@@ -0,0 +1,6 @@
+[Socket]
+ListenDatagram=127.0.0.1:1153
+ListenStream=127.0.0.1:1153
+# ListenStream=@UNBOUND_RUN_DIR@/control
+[Install]
+WantedBy=sockets.target
index 88c695be31637129dd9c4ccdf0bb19987b583fd9..4cae4380065aa533dd360f5e81665e7db97c39fa 100644 (file)
 #include "sldns/keyraw.h"
 #include <signal.h>
 
+#ifdef HAVE_SYSTEMD
+#include <systemd/sd-daemon.h>
+#endif
+
 /** How many quit requests happened. */
 static int sig_record_quit = 0;
 /** How many reload requests happened. */
@@ -175,8 +179,15 @@ static void
 signal_handling_playback(struct worker* wrk)
 {
 #ifdef SIGHUP
-       if(sig_record_reload)
+       if(sig_record_reload) {
+# ifdef HAVE_SYSTEMD
+               sd_notify(0, "RELOADING=1");
+# endif
                worker_sighandler(SIGHUP, wrk);
+# ifdef HAVE_SYSTEMD
+               sd_notify(0, "READY=1");
+# endif
+       }
 #endif
        if(sig_record_quit)
                worker_sighandler(SIGTERM, wrk);
@@ -595,8 +606,14 @@ daemon_fork(struct daemon* daemon)
        signal_handling_playback(daemon->workers[0]);
 
        /* Start resolver service on main thread. */
+#ifdef HAVE_SYSTEMD
+       sd_notify(0, "READY=1");
+#endif
        log_info("start of service (%s).", PACKAGE_STRING);
        worker_work(daemon->workers[0]);
+#ifdef HAVE_SYSTEMD
+       sd_notify(0, "STOPPING=1");
+#endif
        log_info("service stopped (%s).", PACKAGE_STRING);
 
        /* we exited! a signal happened! Stop other threads */
index d4ac833e33d0d8445706dd5675240d5d762da557..c066fc9de024c09c1bd480959ac4238d8124ff5c 100644 (file)
@@ -381,7 +381,7 @@ add_open(const char* ip, int nr, struct listen_port** list, int noproto_is_err,
 
        if(ip[0] == '/') {
                /* This looks like a local socket */
-               fd = create_local_accept_sock(ip, &noproto);
+               fd = create_local_accept_sock(ip, &noproto, cfg->use_systemd);
                /*
                 * Change socket ownership and permissions so users other
                 * than root can access it provided they are in the same
@@ -424,7 +424,7 @@ add_open(const char* ip, int nr, struct listen_port** list, int noproto_is_err,
 
                /* open fd */
                fd = create_tcp_accept_sock(res, 1, &noproto, 0,
-                       cfg->ip_transparent, 0, cfg->ip_freebind);
+                       cfg->ip_transparent, 0, cfg->ip_freebind, cfg->use_systemd);
                freeaddrinfo(res);
        }
 
index df95042549228cea77e4081cab5f0edd74c16ab5..ba7337d8907adb4252aa648c36e65b5c7f9e7972 100644 (file)
@@ -264,6 +264,11 @@ apply_settings(struct daemon* daemon, struct config_file* cfg,
        }
        daemon_apply_cfg(daemon, cfg);
        checkrlimits(cfg);
+
+       if (cfg->use_systemd && cfg->do_daemonize) {
+               log_warn("use-systemd and do-daemonize should not be enabled at the same time");
+       }
+
        log_ident_set_fromdefault(cfg, log_default_identity);
 }
 
index cb24a0a736dc1f0c8c2365073c42e6a2ee873d05..f1ec796ab3b80d35b4b0ce67c8ba17323eb079aa 100644 (file)
@@ -1,3 +1,10 @@
+3 January 2017: Wouter
+       - configure --enable-systemd and lets unbound use systemd sockets if
+         you enable use-systemd: yes in unbound.conf.
+         Also there are contrib/unbound.socket and contrib/unbound.service:
+         systemd files for unbound, install them in /usr/lib/systemd/system.
+         Contributed by Sami Kerola and Pavel Odintsov.
+
 2 January 2017: Wouter
        - Fix #1194: Cross build fails when $host isn't `uname` for getentropy.
 
index a8d61d3a26a930accde047fc6d77b314e4b5c9a2..1c42eba2345ae5d86ffe287990da11269e41e0fa 100644 (file)
@@ -200,7 +200,11 @@ server:
        # Default is 0, system default MSS.
        # outgoing-tcp-mss: 0
 
+       # Use systemd socket activation for UDP, TCP, and control sockets.
+       # use-systemd: no
+
        # Detach from the terminal, run in background, "yes" or "no".
+       # Set the value to "no" when unbound runs as systemd service.
        # do-daemonize: yes
 
        # control which clients are allowed to make (recursive) queries
index 755558acc8d23ae7c2288d3e6e6c4f64a68d3844..12efc16520b058cd6e7e71ca2f94a702aa314a22 100644 (file)
@@ -413,9 +413,14 @@ turned off.
 The port number on which to provide TCP SSL service, default 853, only
 interfaces configured with that port number as @number get the SSL service.
 .TP
+.B use\-systemd: \fI<yes or no>
+Enable or disable systemd socket activation.
+Default is no.
+.TP
 .B do\-daemonize: \fI<yes or no>
 Enable or disable whether the unbound server forks into the background as
-a daemon. Default is yes.
+a daemon.  Set the value to \fIno\fR when unbound runs as systemd service.
+Default is yes.
 .TP
 .B access\-control: \fI<IP netblock> <action>
 The netblock is given as an IP4 or IP6 address with /size appended for a 
index 129700fb85b9c50322b9a6406f8a72db67b5258c..9bf4290eb8aba2e3dd183736c6a88d61a5d97155 100644 (file)
 #include <sys/un.h>
 #endif
 
+#ifdef HAVE_SYSTEMD
+#include <systemd/sd-daemon.h>
+#endif
+
 /** number of queued TCP connections for listen() */
 #define TCP_BACKLOG 256 
 
@@ -96,11 +100,71 @@ verbose_print_addr(struct addrinfo *addr)
        }
 }
 
+#ifdef HAVE_SYSTEMD
+static int
+systemd_get_activated(int family, int socktype, int listen,
+                     struct sockaddr *addr, socklen_t addrlen,
+                     const char *path)
+{
+       int i = 0;
+       int r = 0;
+       int s = -1;
+       const char* listen_pid, *listen_fds;
+
+       /* We should use "listen" option only for stream protocols. For UDP it should be -1 */
+
+       if((r = sd_booted()) < 1) {
+               if(r == 0)
+                       log_warn("systemd is not running");
+               else
+                       log_err("systemd sd_booted(): %s", strerror(-r));
+               return -1;
+       }
+
+       listen_pid = getenv("LISTEN_PID");
+       listen_fds = getenv("LISTEN_FDS");
+
+       if (!listen_pid) {
+               log_warn("Systemd mandatory ENV variable is not defined: LISTEN_PID");
+               return -1;
+       }
+
+       if (!listen_fds) {
+               log_warn("Systemd mandatory ENV variable is not defined: LISTEN_FDS");
+               return -1;
+       }
+
+       if((r = sd_listen_fds(0)) < 1) {
+               if(r == 0)
+                       log_warn("systemd: did not return socket, check unit configuration");
+               else
+                       log_err("systemd sd_listen_fds(): %s", strerror(-r));
+               return -1;
+       }
+       
+       for(i = 0; i < r; i++) {
+               if(sd_is_socket(SD_LISTEN_FDS_START + i, family, socktype, listen)) {
+                       s = SD_LISTEN_FDS_START + i;
+                       break;
+               }
+       }
+       if (s == -1) {
+               if (addr)
+                       log_err_addr("systemd sd_listen_fds()",
+                                    "no such socket",
+                                    (struct sockaddr_storage *)addr, addrlen);
+               else
+                       log_err("systemd sd_listen_fds(): %s", path);
+       }
+       return s;
+}
+#endif
+
 int
 create_udp_sock(int family, int socktype, struct sockaddr* addr,
         socklen_t addrlen, int v6only, int* inuse, int* noproto,
        int rcv, int snd, int listen, int* reuseport, int transparent,
-       int freebind)
+       int freebind, int use_systemd)
 {
        int s;
 #if defined(SO_REUSEADDR) || defined(SO_REUSEPORT) || defined(IPV6_USE_MIN_MTU)  || defined(IP_TRANSPARENT) || defined(IP_BINDANY) || defined(IP_FREEBIND)
@@ -123,6 +187,14 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
 #endif
 #if !defined(IP_FREEBIND)
        (void)freebind;
+#endif
+#ifdef HAVE_SYSTEMD
+       int got_fd_from_systemd = 0;
+
+       if (!use_systemd
+           || (use_systemd
+               && (s = systemd_get_activated(family, socktype, -1, addr,
+                                             addrlen, NULL)) == -1)) {
 #endif
        if((s = socket(family, socktype, 0)) == -1) {
                *inuse = 0;
@@ -144,6 +216,11 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
                *noproto = 0;
                return -1;
        }
+#ifdef HAVE_SYSTEMD
+       } else {
+               got_fd_from_systemd = 1;
+       }
+#endif
        if(listen) {
 #ifdef SO_REUSEADDR
                if(setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void*)&on, 
@@ -465,7 +542,11 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
                }
 #  endif /* IPv4 MTU */
        }
-       if(bind(s, (struct sockaddr*)addr, addrlen) != 0) {
+       if(
+#ifdef HAVE_SYSTEMD
+               !got_fd_from_systemd &&
+#endif
+               bind(s, (struct sockaddr*)addr, addrlen) != 0) {
                *noproto = 0;
                *inuse = 0;
 #ifndef USE_WINSOCK
@@ -488,7 +569,7 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
                                (struct sockaddr_storage*)addr, addrlen);
                }
                closesocket(s);
-#endif
+#endif /* USE_WINSOCK */
                return -1;
        }
        if(!fd_set_nonblock(s)) {
@@ -506,12 +587,15 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
 
 int
 create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
-       int* reuseport, int transparent, int mss, int freebind)
+       int* reuseport, int transparent, int mss, int freebind, int use_systemd)
 {
        int s;
 #if defined(SO_REUSEADDR) || defined(SO_REUSEPORT) || defined(IPV6_V6ONLY) || defined(IP_TRANSPARENT) || defined(IP_BINDANY) || defined(IP_FREEBIND)
        int on = 1;
 #endif
+#ifdef HAVE_SYSTEMD
+       int got_fd_from_systemd = 0;
+#endif
 #ifdef USE_TCP_FASTOPEN
        int qlen;
 #endif
@@ -523,6 +607,13 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
 #endif
        verbose_print_addr(addr);
        *noproto = 0;
+#ifdef HAVE_SYSTEMD
+       if (!use_systemd ||
+           (use_systemd
+            && (s = systemd_get_activated(addr->ai_family, addr->ai_socktype, 1,
+                                          addr->ai_addr, addr->ai_addrlen,
+                                          NULL)) == -1)) {
+#endif
        if((s = socket(addr->ai_family, addr->ai_socktype, 0)) == -1) {
 #ifndef USE_WINSOCK
                if(errno == EAFNOSUPPORT || errno == EPROTONOSUPPORT) {
@@ -560,6 +651,11 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
                log_warn(" setsockopt(TCP_MAXSEG) unsupported");
 #endif /* defined(IPPROTO_TCP) && defined(TCP_MAXSEG) */
        }
+#ifdef HAVE_SYSTEMD
+       } else {
+               got_fd_from_systemd = 1;
+    }
+#endif
 #ifdef SO_REUSEADDR
        if(setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void*)&on, 
                (socklen_t)sizeof(on)) < 0) {
@@ -637,7 +733,11 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
                (addr->ai_family==AF_INET6?"V6":""), strerror(errno));
        }
 #endif /* IP_TRANSPARENT || IP_BINDANY */
-       if(bind(s, addr->ai_addr, addr->ai_addrlen) != 0) {
+       if(
+#ifdef HAVE_SYSTEMD
+               !got_fd_from_systemd &&
+#endif
+        bind(s, addr->ai_addr, addr->ai_addrlen) != 0) {
 #ifndef USE_WINSOCK
                /* detect freebsd jail with no ipv6 permission */
                if(addr->ai_family==AF_INET6 && errno==EINVAL)
@@ -695,8 +795,15 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
 }
 
 int
-create_local_accept_sock(const char *path, int* noproto)
+create_local_accept_sock(const char *path, int* noproto, int use_systemd)
 {
+#ifdef HAVE_SYSTEMD
+       int ret;
+
+       if (use_systemd && (ret = systemd_get_activated(AF_LOCAL, SOCK_STREAM, 1, NULL, 0, path)) != -1)
+               return ret;
+       else {
+#endif
 #ifdef HAVE_SYS_UN_H
        int s;
        struct sockaddr_un usock;
@@ -751,6 +858,9 @@ err:
 #endif
        return -1;
 
+#ifdef HAVE_SYSTEMD
+       }
+#endif
 #else
        (void)path;
        log_err("Local sockets are not supported");
@@ -766,7 +876,7 @@ err:
 static int
 make_sock(int stype, const char* ifname, const char* port, 
        struct addrinfo *hints, int v6only, int* noip6, size_t rcv, size_t snd,
-       int* reuseport, int transparent, int tcp_mss, int freebind)
+       int* reuseport, int transparent, int tcp_mss, int freebind, int use_systemd)
 {
        struct addrinfo *res = NULL;
        int r, s, inuse, noproto;
@@ -794,7 +904,7 @@ make_sock(int stype, const char* ifname, const char* port,
                s = create_udp_sock(res->ai_family, res->ai_socktype,
                        (struct sockaddr*)res->ai_addr, res->ai_addrlen,
                        v6only, &inuse, &noproto, (int)rcv, (int)snd, 1,
-                       reuseport, transparent, freebind);
+                       reuseport, transparent, freebind, use_systemd);
                if(s == -1 && inuse) {
                        log_err("bind: address already in use");
                } else if(s == -1 && noproto && hints->ai_family == AF_INET6){
@@ -802,7 +912,7 @@ make_sock(int stype, const char* ifname, const char* port,
                }
        } else  {
                s = create_tcp_accept_sock(res, v6only, &noproto, reuseport,
-                       transparent, tcp_mss, freebind);
+                       transparent, tcp_mss, freebind, use_systemd);
                if(s == -1 && noproto && hints->ai_family == AF_INET6){
                        *noip6 = 1;
                }
@@ -815,7 +925,7 @@ make_sock(int stype, const char* ifname, const char* port,
 static int
 make_sock_port(int stype, const char* ifname, const char* port, 
        struct addrinfo *hints, int v6only, int* noip6, size_t rcv, size_t snd,
-       int* reuseport, int transparent, int tcp_mss, int freebind)
+       int* reuseport, int transparent, int tcp_mss, int freebind, int use_systemd)
 {
        char* s = strchr(ifname, '@');
        if(s) {
@@ -837,10 +947,10 @@ make_sock_port(int stype, const char* ifname, const char* port,
                (void)strlcpy(p, s+1, sizeof(p));
                p[strlen(s+1)]=0;
                return make_sock(stype, newif, p, hints, v6only, noip6,
-                       rcv, snd, reuseport, transparent, tcp_mss, freebind);
+                       rcv, snd, reuseport, transparent, tcp_mss, freebind, use_systemd);
        }
        return make_sock(stype, ifname, port, hints, v6only, noip6, rcv, snd,
-               reuseport, transparent, tcp_mss, freebind);
+               reuseport, transparent, tcp_mss, freebind, use_systemd);
 }
 
 /**
@@ -937,13 +1047,14 @@ set_recvpktinfo(int s, int family)
  * @param transparent: set IP_TRANSPARENT socket option.
  * @param tcp_mss: maximum segment size of tcp socket. default if zero.
  * @param freebind: set IP_FREEBIND socket option.
+ * @param use_systemd: if true, fetch sockets from systemd.
  * @return: returns false on error.
  */
 static int
 ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, 
        struct addrinfo *hints, const char* port, struct listen_port** list,
        size_t rcv, size_t snd, int ssl_port, int* reuseport, int transparent,
-       int tcp_mss, int freebind)
+       int tcp_mss, int freebind, int use_systemd)
 {
        int s, noip6=0;
        if(!do_udp && !do_tcp)
@@ -951,7 +1062,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp,
        if(do_auto) {
                if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, 
                        &noip6, rcv, snd, reuseport, transparent,
-                       tcp_mss, freebind)) == -1) {
+                       tcp_mss, freebind, use_systemd)) == -1) {
                        if(noip6) {
                                log_warn("IPv6 protocol not available");
                                return 1;
@@ -979,7 +1090,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp,
                /* regular udp socket */
                if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, 
                        &noip6, rcv, snd, reuseport, transparent,
-                       tcp_mss, freebind)) == -1) {
+                       tcp_mss, freebind, use_systemd)) == -1) {
                        if(noip6) {
                                log_warn("IPv6 protocol not available");
                                return 1;
@@ -1001,7 +1112,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp,
                        (!strchr(ifname, '@') && atoi(port) == ssl_port));
                if((s = make_sock_port(SOCK_STREAM, ifname, port, hints, 1, 
                        &noip6, 0, 0, reuseport, transparent, tcp_mss,
-                       freebind)) == -1) {
+                       freebind, use_systemd)) == -1) {
                        if(noip6) {
                                /*log_warn("IPv6 protocol not available");*/
                                return 1;
@@ -1159,7 +1270,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport)
                                cfg->so_rcvbuf, cfg->so_sndbuf,
                                cfg->ssl_port, reuseport,
                                cfg->ip_transparent,
-                               cfg->tcp_mss, cfg->ip_freebind)) {
+                               cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd)) {
                                listening_ports_free(list);
                                return NULL;
                        }
@@ -1172,7 +1283,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport)
                                cfg->so_rcvbuf, cfg->so_sndbuf,
                                cfg->ssl_port, reuseport,
                                cfg->ip_transparent,
-                               cfg->tcp_mss, cfg->ip_freebind)) {
+                               cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd)) {
                                listening_ports_free(list);
                                return NULL;
                        }
@@ -1187,7 +1298,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport)
                                cfg->so_rcvbuf, cfg->so_sndbuf,
                                cfg->ssl_port, reuseport,
                                cfg->ip_transparent,
-                               cfg->tcp_mss, cfg->ip_freebind)) {
+                               cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd)) {
                                listening_ports_free(list);
                                return NULL;
                        }
@@ -1200,7 +1311,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport)
                                cfg->so_rcvbuf, cfg->so_sndbuf,
                                cfg->ssl_port, reuseport,
                                cfg->ip_transparent,
-                               cfg->tcp_mss, cfg->ip_freebind)) {
+                               cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd)) {
                                listening_ports_free(list);
                                return NULL;
                        }
index fbaa48321d0fc8551b74cd3cc57caeedf174512a..4f2834b9c72f98b0f99394283daabc94ba2b7d14 100644 (file)
@@ -191,11 +191,12 @@ void listen_start_accept(struct listen_dnsport* listen);
  *     listening UDP port.  Set to false on return if it failed to do so.
  * @param transparent: set IP_TRANSPARENT socket option.
  * @param freebind: set IP_FREEBIND socket option.
+ * @param use_systemd: if true, fetch sockets from systemd.
  * @return: the socket. -1 on error.
  */
 int create_udp_sock(int family, int socktype, struct sockaddr* addr, 
        socklen_t addrlen, int v6only, int* inuse, int* noproto, int rcv,
-       int snd, int listen, int* reuseport, int transparent, int freebind);
+       int snd, int listen, int* reuseport, int transparent, int freebind, int use_systemd);
 
 /**
  * Create and bind TCP listening socket
@@ -207,18 +208,20 @@ int create_udp_sock(int family, int socktype, struct sockaddr* addr,
  * @param transparent: set IP_TRANSPARENT socket option.
  * @param mss: maximum segment size of the socket. if zero, leaves the default. 
  * @param freebind: set IP_FREEBIND socket option.
+ * @param use_systemd: if true, fetch sockets from systemd.
  * @return: the socket. -1 on error.
  */
 int create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
-       int* reuseport, int transparent, int mss, int freebind);
+       int* reuseport, int transparent, int mss, int freebind, int use_systemd);
 
 /**
  * Create and bind local listening socket
  * @param path: path to the socket.
  * @param noproto: on error, this is set true if cause is that local sockets
  *     are not supported.
+ * @param use_systemd: if true, fetch sockets from systemd.
  * @return: the socket. -1 on error.
  */
-int create_local_accept_sock(const char* path, int* noproto);
+int create_local_accept_sock(const char* path, int* noproto, int use_systemd);
 
 #endif /* LISTEN_DNSPORT_H */
index eba0195207001604ac19da0f76579f2299fe5dc1..0e993bd3d30f7c8dbb07b5dbd3d8439da2a1c6e3 100644 (file)
@@ -966,13 +966,13 @@ udp_sockport(struct sockaddr_storage* addr, socklen_t addrlen, int pfxlen,
                }
                fd = create_udp_sock(AF_INET6, SOCK_DGRAM, 
                        (struct sockaddr*)&sa, addrlen, 1, inuse, &noproto,
-                       0, 0, 0, NULL, 0, freebind);
+                       0, 0, 0, NULL, 0, freebind, 0);
        } else {
                struct sockaddr_in* sa = (struct sockaddr_in*)addr;
                sa->sin_port = (in_port_t)htons((uint16_t)port);
                fd = create_udp_sock(AF_INET, SOCK_DGRAM, 
                        (struct sockaddr*)addr, addrlen, 1, inuse, &noproto,
-                       0, 0, 0, NULL, 0, 0);
+                       0, 0, 0, NULL, 0, 0, 0);
        }
        return fd;
 }
diff --git a/systemd.m4 b/systemd.m4
new file mode 100644 (file)
index 0000000..5538224
--- /dev/null
@@ -0,0 +1,27 @@
+#   macros for configuring systemd
+#   Copyright 2015, Sami Kerola, CloudFlare.
+#   BSD licensed.
+AC_ARG_ENABLE([systemd],
+       [AS_HELP_STRING([--enable-systemd], [compile with systemd support])],
+       [], [enable_systemd=no])
+have_systemd=no
+AS_IF([test "x$enable_systemd" != xno], [
+       dnl systemd v209 or newer
+       PKG_CHECK_MODULES([SYSTEMD], [libsystemd], [have_systemd=yes], [have_systemd=no])
+       dnl old systemd library
+       AS_IF([test "x$have_systemd" != "xyes"], [
+               PKG_CHECK_MODULES([SYSTEMD_DAEMON], [libsystemd-daemon],
+                       [have_systemd_daemon=yes], [have_systemd_daemon=no])
+               AS_IF([test "x$have_systemd_daemon" = "xyes"],
+                       [have_systemd=yes])
+       ])
+       AS_CASE([$enable_systemd:$have_systemd],
+       [yes:no],
+               [AC_MSG_ERROR([systemd enabled but libsystemd not found])],
+       [*:yes],
+               [AC_DEFINE([HAVE_SYSTEMD], [1], [Define to 1 if systemd should be used])
+               LIBS="$LIBS $SYSTEMD_LIBS"
+               ]
+       )
+])
+AM_CONDITIONAL([USE_SYSTEMD], [test "x$have_systemd" = xyes])
index 881c85f599dbc303e7f1eed777b3b3c34169c9a9..50f8b3032a2e4e74bf412573309deb82fed1ccea 100644 (file)
@@ -158,6 +158,7 @@ config_create(void)
        cfg->donotqueryaddrs = NULL;
        cfg->donotquery_localhost = 1;
        cfg->root_hints = NULL;
+       cfg->use_systemd = 0;
        cfg->do_daemonize = 1;
        cfg->if_automatic = 0;
        cfg->so_rcvbuf = 0;
@@ -386,6 +387,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
        else S_STR("ssl-service-pem:", ssl_service_pem)
        else S_NUMBER_NONZERO("ssl-port:", ssl_port)
        else S_YNO("interface-automatic:", if_automatic)
+       else S_YNO("use-systemd:", use_systemd)
        else S_YNO("do-daemonize:", do_daemonize)
        else S_NUMBER_NONZERO("port:", port)
        else S_NUMBER_NONZERO("outgoing-range:", outgoing_num_ports)
@@ -727,6 +729,7 @@ config_get_option(struct config_file* cfg, const char* opt,
        else O_STR(opt, "ssl-service-key", ssl_service_key)
        else O_STR(opt, "ssl-service-pem", ssl_service_pem)
        else O_DEC(opt, "ssl-port", ssl_port)
+       else O_YNO(opt, "use-systemd", use_systemd)
        else O_YNO(opt, "do-daemonize", do_daemonize)
        else O_STR(opt, "chroot", chrootdir)
        else O_STR(opt, "username", username)
index 071b408e7c34c70b478d3b8035aa90b966674e6f..e4ed22895fb482cf7d1ab9abed7e2348357950fe 100644 (file)
@@ -344,6 +344,9 @@ struct config_file {
        /** Python script file */
        char* python_script;
 
+       /** Use systemd socket activation. */
+       int use_systemd;
+
        /** daemonize, i.e. fork into the background. */
        int do_daemonize;
 
index c4f83b9bc3f93571b4cc4ab819da7100f58fcb65..338f4919253b53d2d5e93f854c15d3b572d893b4 100644 (file)
@@ -10,7 +10,7 @@
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 6
-#define YY_FLEX_SUBMINOR_VERSION 1
+#define YY_FLEX_SUBMINOR_VERSION 0
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -89,13 +89,25 @@ typedef unsigned int flex_uint32_t;
 
 #endif /* ! FLEXINT_H */
 
-/* TODO: this is always defined, so inline it */
-#define yyconst const
+#ifdef __cplusplus
 
-#if defined(__GNUC__) && __GNUC__ >= 3
-#define yynoreturn __attribute__((__noreturn__))
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else  /* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif /* defined (__STDC__) */
+#endif /* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
 #else
-#define yynoreturn
+#define yyconst
 #endif
 
 /* Returned upon end-of-file. */
@@ -156,7 +168,7 @@ typedef struct yy_buffer_state *YY_BUFFER_STATE;
 typedef size_t yy_size_t;
 #endif
 
-extern int yyleng;
+extern yy_size_t yyleng;
 
 extern FILE *yyin, *yyout;
 
@@ -172,7 +184,7 @@ extern FILE *yyin, *yyout;
        do \
                { \
                /* Undo effects of setting up yytext. */ \
-        int yyless_macro_arg = (n); \
+        yy_size_t yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
                *yy_cp = (yy_hold_char); \
                YY_RESTORE_YY_MORE_OFFSET \
@@ -195,12 +207,12 @@ struct yy_buffer_state
        /* Size of input buffer in bytes, not including room for EOB
         * characters.
         */
-       int yy_buf_size;
+       yy_size_t yy_buf_size;
 
        /* Number of characters read into yy_ch_buf, not including EOB
         * characters.
         */
-       int yy_n_chars;
+       yy_size_t yy_n_chars;
 
        /* Whether we "own" the buffer - i.e., we know we created it,
         * and can realloc() it to grow it, and should free() it to
@@ -223,7 +235,7 @@ struct yy_buffer_state
 
     int yy_bs_lineno; /**< The line count. */
     int yy_bs_column; /**< The column count. */
-
+    
        /* Whether to try to fill the input buffer when we reach the
         * end of it.
         */
@@ -251,7 +263,7 @@ struct yy_buffer_state
 /* Stack of input buffers. */
 static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
 static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
-static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
 
 /* We provide macros for accessing buffer states in case in the
  * future we want to put the buffer states in a more general
@@ -270,11 +282,11 @@ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
 
 /* yy_hold_char holds the character lost when yytext is formed. */
 static char yy_hold_char;
-static int yy_n_chars;         /* number of characters read into yy_ch_buf */
-int yyleng;
+static yy_size_t yy_n_chars;           /* number of characters read into yy_ch_buf */
+yy_size_t yyleng;
 
 /* Points to current character in buffer. */
-static char *yy_c_buf_p = NULL;
+static char *yy_c_buf_p = (char *) 0;
 static int yy_init = 0;                /* whether we need to initialize */
 static int yy_start = 0;       /* start state number */
 
@@ -299,7 +311,7 @@ static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file  );
 
 YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size  );
 YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str  );
-YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len  );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len  );
 
 void *yyalloc (yy_size_t  );
 void *yyrealloc (void *,yy_size_t  );
@@ -333,7 +345,7 @@ void yyfree (void *  );
 
 typedef unsigned char YY_CHAR;
 
-FILE *yyin = NULL, *yyout = NULL;
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
 
 typedef int yy_state_type;
 
@@ -350,7 +362,10 @@ extern char *yytext;
 static yy_state_type yy_get_previous_state (void );
 static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
 static int yy_get_next_buffer (void );
-static void yynoreturn yy_fatal_error (yyconst char* msg  );
+#if defined(__GNUC__) && __GNUC__ >= 3
+__attribute__((__noreturn__))
+#endif
+static void yy_fatal_error (yyconst char msg[]  );
 
 /* Done after the current pattern has been matched and before the
  * corresponding action - sets up yytext.
@@ -358,13 +373,13 @@ static void yynoreturn yy_fatal_error (yyconst char* msg  );
 #define YY_DO_BEFORE_ACTION \
        (yytext_ptr) = yy_bp; \
        (yytext_ptr) -= (yy_more_len); \
-       yyleng = (int) (yy_cp - (yytext_ptr)); \
+       yyleng = (size_t) (yy_cp - (yytext_ptr)); \
        (yy_hold_char) = *yy_cp; \
        *yy_cp = '\0'; \
        (yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 197
-#define YY_END_OF_BUFFER 198
+#define YY_NUM_RULES 198
+#define YY_END_OF_BUFFER 199
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -372,223 +387,223 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[1956] =
+static yyconst flex_int16_t yy_accept[1961] =
     {   0,
-        1,    1,  179,  179,  183,  183,  187,  187,  191,  191,
-        1,    1,  198,  195,    1,  177,  177,  196,    2,  196,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      179,  180,  180,  181,  196,  183,  184,  184,  185,  196,
-      190,  187,  188,  188,  189,  196,  191,  192,  192,  193,
-      196,  194,  178,    2,  182,  196,  194,  195,    0,    1,
-        2,    2,    2,    2,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  179,    0,
-      183,    0,  190,    0,  187,  191,    0,  194,    0,    2,
-        2,  194,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-
-      195,  195,  195,  195,  195,  195,  195,  195,  194,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  194,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,   76,
-      195,  195,  195,  195,  195,  195,    8,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,   87,  194,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  194,  195,  195,
-      195,  195,  195,   36,  195,  195,  195,  195,  195,  195,
-
-      195,  195,  195,  195,  157,  195,   14,   15,  195,   18,
-       17,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  143,  195,  195,  195,  195,
-      195,  195,  195,  195,    3,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  194,  195,
-
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  186,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,   39,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,   40,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,   20,  195,  195,  195,  195,  195,
-
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,   95,  195,  186,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  111,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-       94,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,   74,  195,  195,  195,  195,  195,  195,  195,  195,
-
-      195,  195,  195,  195,  195,  195,  195,   25,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,   37,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-       38,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,   27,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      171,  195,  195,  195,  195,  195,  195,  195,   31,  195,
-       32,  195,  195,  195,   77,  195,   78,  195,  195,   75,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,    7,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      150,  195,  195,  195,  195,   97,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-       28,  195,  195,  195,  195,  195,  195,  126,  195,  125,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,   16,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,   41,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,   80,   79,  195,
-      195,  195,  195,  195,  195,  195,  195,  121,  195,  195,
-      195,  195,  195,  195,  195,   88,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-       59,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,   63,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,   35,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  124,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,    6,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  117,  195,  195,  195,  195,  195,  195,
-
-      195,  195,  195,  136,  195,  118,  195,  195,  148,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,   26,
-      195,  195,  195,  195,   83,  195,   84,  195,   82,  195,
-      195,  195,  195,  195,  195,  195,   93,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  119,
-      195,  195,  195,  195,  195,  122,  195,  147,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,   73,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,   33,  195,  195,
-       22,  195,  195,  195,  195,   19,  195,  102,  195,  195,
-
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,   48,   50,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  158,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,   85,  195,  195,
-      195,  195,  195,  195,  195,   92,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,   96,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  142,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      110,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-
-      195,  195,  195,  195,  106,  195,  112,  195,  195,  195,
-      195,  195,   91,  195,  195,   69,  195,  134,  195,  195,
-      195,  195,  195,  149,  195,  195,  195,  195,  195,  195,
-      195,  163,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  109,  195,  195,  195,  195,  195,
-       51,   52,  195,  195,   34,   58,  113,  195,  127,  195,
-      151,  123,  195,  195,   44,  195,  115,  195,  195,  195,
-      195,  195,    9,  195,  195,  195,   72,  195,  195,  195,
-      195,  173,  195,  133,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,   98,  162,  195,  195,  195,
-      195,  195,  195,  195,  195,  144,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  114,  195,  195,   43,   45,  195,  195,  195,
-      195,  195,  195,  195,   71,  195,  195,  195,  195,  172,
-      195,  195,  195,  195,  138,   23,   24,  195,  195,  195,
-      195,  195,  195,  195,  195,   68,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  140,  137,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,   42,
-
-      195,  195,  195,  195,  195,  195,  195,  195,   13,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,   12,
-      195,  195,   21,  195,  195,  195,  176,  195,   46,  195,
-      146,  139,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  105,  104,  195,  195,  195,  195,
-      141,  135,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,   53,  195,  195,  195,  145,  195,  195,  195,
-      195,  195,  195,  195,  195,   47,  195,  195,   81,  195,
-       99,  101,  128,  195,  195,  195,  103,  195,  195,  152,
-
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      159,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  129,  195,  195,  195,   29,  195,
-      195,  195,  195,    4,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  155,  195,  195,  195,  195,
-      195,  195,  195,  195,  161,  195,  195,  132,  195,  195,
-      195,  195,  195,  195,  195,  195,   56,  195,   30,  156,
-      195,   11,  195,  195,  195,  195,  195,  195,  130,   60,
-      195,  195,  195,  108,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  160,   89,  195,   86,  195,  195,
-
-      195,   62,   66,   61,  195,   54,  195,   10,  195,  195,
-      195,  174,  195,  195,  107,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,   67,   65,
-      195,   55,  195,  120,  195,  195,  131,  195,  195,  195,
-      195,  100,   49,  195,  195,  195,  195,  195,  195,  195,
-       90,   64,   57,  195,  175,  195,  195,  195,  154,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,   70,  195,
-      153,  170,  195,  195,  195,  195,  195,  195,    5,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      116,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  166,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  164,  195,  167,  168,  195,  195,  195,
-      195,  195,  165,  169,    0
+        1,    1,  180,  180,  184,  184,  188,  188,  192,  192,
+        1,    1,  199,  196,    1,  178,  178,  197,    2,  197,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      180,  181,  181,  182,  197,  184,  185,  185,  186,  197,
+      191,  188,  189,  189,  190,  197,  192,  193,  193,  194,
+      197,  195,  179,    2,  183,  197,  195,  196,    0,    1,
+        2,    2,    2,    2,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  180,    0,
+      184,    0,  191,    0,  188,  192,    0,  195,    0,    2,
+        2,  195,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+
+      196,  196,  196,  196,  196,  196,  196,  196,  195,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  195,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,   77,
+      196,  196,  196,  196,  196,  196,    8,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,   88,  195,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  195,  196,  196,
+      196,  196,  196,   37,  196,  196,  196,  196,  196,  196,
+
+      196,  196,  196,  196,  158,  196,   14,   15,  196,   18,
+       17,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  144,  196,  196,  196,  196,
+      196,  196,  196,  196,    3,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  195,  196,
+
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  187,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,   40,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,   41,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,   20,  196,  196,  196,  196,  196,
+
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,   96,  196,  187,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  112,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,   95,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,   75,  196,  196,  196,  196,  196,  196,  196,
+
+      196,  196,  196,  196,  196,  196,  196,  196,   25,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,   38,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,   39,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,   28,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  172,  196,  196,  196,  196,  196,  196,  196,
+       32,  196,   33,  196,  196,  196,   78,  196,   79,  196,
+      196,   76,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,    7,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  151,  196,  196,  196,  196,   98,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,   29,  196,  196,  196,  196,  196,  196,
+      127,  196,  126,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+       16,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+       42,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+       81,   80,  196,  196,  196,  196,  196,  196,  196,  196,
+      122,  196,  196,  196,  196,  196,  196,  196,  196,   89,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,   60,  196,  196,  196,  196,  196,
+
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+       64,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,   36,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  125,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,    6,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,   26,
+      196,  196,  196,  196,  196,  196,  196,  196,  118,  196,
+
+      196,  196,  196,  196,  196,  196,  196,  196,  137,  196,
+      119,  196,  196,  149,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,   27,  196,  196,  196,  196,   84,
+      196,   85,  196,   83,  196,  196,  196,  196,  196,  196,
+      196,   94,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  120,  196,  196,  196,  196,  196,
+      123,  196,  148,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,   74,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,   34,  196,  196,   22,  196,  196,  196,  196,
+
+       19,  196,  103,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,   49,   51,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  159,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,   86,  196,  196,  196,  196,  196,  196,  196,
+       93,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+       97,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  143,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  111,  196,  196,  196,  196,
+
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  107,
+      196,  113,  196,  196,  196,  196,  196,   92,  196,  196,
+       70,  196,  135,  196,  196,  196,  196,  196,  150,  196,
+      196,  196,  196,  196,  196,  196,  164,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  110,
+      196,  196,  196,  196,  196,   52,   53,  196,  196,   35,
+       59,  114,  196,  128,  196,  152,  124,  196,  196,   45,
+      196,  116,  196,  196,  196,  196,  196,    9,  196,  196,
+      196,   73,  196,  196,  196,  196,  174,  196,  134,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+       99,  163,  196,  196,  196,  196,  196,  196,  196,  196,
+      145,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  115,  196,  196,
+       44,   46,  196,  196,  196,  196,  196,  196,  196,   72,
+      196,  196,  196,  196,  173,  196,  196,  196,  196,  139,
+       23,   24,  196,  196,  196,  196,  196,  196,  196,  196,
+       69,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  141,  138,  196,  196,  196,  196,  196,
+
+      196,  196,  196,  196,   43,  196,  196,  196,  196,  196,
+      196,  196,  196,   13,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,   12,  196,  196,   21,  196,  196,
+      196,  177,  196,   47,  196,  147,  140,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  106,
+      105,  196,  196,  196,  196,  142,  136,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,   54,  196,  196,
+      196,  146,  196,  196,  196,  196,  196,  196,  196,  196,
+       48,  196,  196,   82,  196,  100,  102,  129,  196,  196,
+
+      196,  104,  196,  196,  153,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  160,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  130,
+      196,  196,  196,   30,  196,  196,  196,  196,    4,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      156,  196,  196,  196,  196,  196,  196,  196,  196,  162,
+      196,  196,  133,  196,  196,  196,  196,  196,  196,  196,
+      196,   57,  196,   31,  157,  196,   11,  196,  196,  196,
+      196,  196,  196,  131,   61,  196,  196,  196,  109,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  161,
+
+       90,  196,   87,  196,  196,  196,   63,   67,   62,  196,
+       55,  196,   10,  196,  196,  196,  175,  196,  196,  108,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,   68,   66,  196,   56,  196,  121,  196,
+      196,  132,  196,  196,  196,  196,  101,   50,  196,  196,
+      196,  196,  196,  196,  196,   91,   65,   58,  196,  176,
+      196,  196,  196,  155,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,   71,  196,  154,  171,  196,  196,  196,
+      196,  196,  196,    5,  196,  196,  196,  196,  196,  196,
+
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  117,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  167,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  196,  165,  196,
+      168,  169,  196,  196,  196,  196,  196,  166,  170,    0
     } ;
 
 static yyconst YY_CHAR yy_ec[256] =
@@ -631,15 +646,15 @@ static yyconst YY_CHAR yy_meta[40] =
         1,    1,    1,    1,    1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_uint16_t yy_base[1970] =
+static yyconst flex_uint16_t yy_base[1975] =
     {   0,
         0,    0,   37,   40,   44,   51,   63,   75,   56,   68,
-       87,  108, 2263, 2182,   50, 3865, 3865, 3865,  129,   94,
+       87,  108, 1941, 1871,   50, 3872, 3872, 3872,  129,   94,
        70,  104,  130,   90,  109,  106,  127,  111,   84,  122,
       146,  148,   50,  170,  136,  158,  152,  180,  168,  191,
-     1746, 3865, 3865, 3865,   70, 1530, 3865, 3865, 3865,   42,
-     1355, 1349, 3865, 3865, 3865,  210, 1187, 3865, 3865, 3865,
-      141,  955, 3865,  214, 3865,  218,  140,  911,  224,  167,
+     1674, 3872, 3872, 3872,   70, 1503, 3872, 3872, 3872,   42,
+     1423, 1366, 3872, 3872, 3872,  210, 1187, 3872, 3872, 3872,
+      141,  955, 3872,  214, 3872,  218,  140,  911,  224,  167,
         0,  235,    0,    0,   92,  162,  164,  174,  193,  217,
       230,  219,  103,  178,  233,  225,  220,  221,  241,  243,
       244,  189,  249,  247,  256,  245,  252,  255,  254,  260,
@@ -669,12 +684,12 @@ static yyconst flex_uint16_t yy_base[1970] =
       692,  694,  702,  698,  700,  709,  699,  710,  711,  703,
       713,  712,  718,  720,  721,  723,  724,  725,  736,  728,
       734,  731,  741,  739,  744,  750,  748,  742,  756,  759,
-      758,  746,  760,  761,  764,  765,  770,  763,  771, 3865,
-      776,  774,  778,  779,  780,  781, 3865,  783,  782,  785,
+      758,  746,  760,  761,  764,  765,  770,  763,  771, 3872,
+      776,  774,  778,  779,  780,  781, 3872,  783,  782,  785,
       792,  789,  791,  797,  809,  811,  790,  794,  810,  807,
       808,  816,  817,  837,  819,  821,  818,  825,  823,  824,
       827,  833,  841,  831,  835,  849,  848,  850,  852,  851,
-      854,  855,  859, 3865,  862,  874,  868,  861,  871,  875,
+      854,  855,  859, 3872,  862,  874,  868,  861,  871,  875,
       877,  878,  886,  882,  885,  887,  891,  889,  893,  900,
 
       897,  904,  906,  913,  915,  917,  923,  898,  920,  907,
@@ -686,392 +701,394 @@ static yyconst flex_uint16_t yy_base[1970] =
      1025, 1029, 1027, 1032, 1030, 1034, 1035, 1042, 1038, 1039,
      1051, 1055, 1049, 1041, 1054, 1044, 1056, 1061, 1062, 1064,
      1072, 1073, 1065, 1074, 1066, 1076, 1079, 1080, 1084, 1082,
-     1089, 1091, 1093, 3865, 1099, 1095, 1097, 1096, 1098, 1109,
+     1089, 1091, 1093, 3872, 1099, 1095, 1097, 1096, 1098, 1109,
 
-     1103, 1105, 1106, 1132, 3865, 1107, 3865, 3865, 1112, 3865,
-     3865, 1117, 1113, 1114, 1120, 1130, 1155, 1128, 1124, 1127,
+     1103, 1105, 1106, 1132, 3872, 1107, 3872, 3872, 1112, 3872,
+     3872, 1117, 1113, 1114, 1120, 1130, 1155, 1128, 1124, 1127,
      1135, 1140, 1136, 1145, 1134, 1147, 1153, 1160, 1161, 1168,
      1150, 1164, 1171, 1172, 1175, 1177, 1165, 1178, 1181, 1183,
      1193, 1194, 1195, 1185, 1197, 1199, 1200, 1201, 1202, 1203,
-     1211, 1204, 1208, 1217, 1214, 3865, 1215, 1219, 1220, 1221,
-     1225, 1227,  403, 1229, 3865, 1230, 1231, 1234, 1237, 1238,
+     1211, 1204, 1208, 1217, 1214, 3872, 1215, 1219, 1220, 1221,
+     1225, 1227,  403, 1229, 3872, 1230, 1231, 1234, 1237, 1238,
      1239, 1241, 1243, 1244, 1245, 1249, 1253, 1252, 1248, 1268,
      1256, 1261, 1274, 1277, 1278, 1270, 1271, 1279, 1273, 1280,
-     1290, 1288, 1286, 1287, 1297, 1293, 1296, 1298, 1302, 1299,
-
-     1303, 1305, 1306, 1308, 1309, 1331, 1310, 1315, 1312, 1318,
-     1317, 1320, 1323, 1325, 1332, 1333, 1326, 1344, 1345, 1348,
-     1351, 1353, 1354, 1361, 1358, 1373, 1363, 1364, 1366, 1365,
-     1370, 1378, 1368, 1382, 1384, 1386, 1387, 3865, 1393, 1394,
-     1389, 1398, 1395, 1400, 1401, 1404, 1402, 1406, 1407, 1409,
-     1410, 1417, 1412, 1416, 1424, 3865, 1421, 1423, 1422, 1428,
-     1429, 1438, 1427, 1444, 1447, 1435, 3865, 1439, 1451, 1452,
-     1454, 1449, 1458, 1459, 1460, 1461, 1462, 1465, 1466, 1467,
-     1469, 1468, 1470, 1486, 1473, 1477, 1487, 1479, 1488, 1489,
-     1491, 1498, 1494, 1496, 3865, 1492, 1500, 1502, 1505, 1511,
-
-     1519, 1508, 1516, 1512, 1518, 1521, 1524, 1522, 1525, 1526,
-     1527, 3865, 1528,  186, 1529, 1535, 1536, 1542, 1544, 1541,
-     1548, 1549, 1551, 1554, 1555, 1538, 1560, 1558, 1561, 1569,
-     1562, 1564, 1566, 1571, 1574, 1578, 1577, 1579, 1585, 1581,
-     1586, 1587, 1589, 1596, 1590, 3865, 1594, 1597, 1600, 1602,
-     1603, 1604, 1605, 1607, 1610, 1612, 1613, 1614, 1616, 1623,
-     3865, 1625, 1624, 1627, 1622, 1628, 1634, 1644, 1637, 1640,
-     1647, 1645, 1641, 1657, 1659, 1661, 1653, 1663, 1664, 1667,
-     1669, 1670, 1655, 1677, 1680, 1678, 1681, 1686, 1687, 1651,
-     1671, 3865, 1689, 1679, 1690, 1692, 1710, 1697, 1696, 1691,
-
-     1698, 1707, 1703, 1713, 1718, 1714, 1720, 3865, 1722, 1723,
-     1724, 1727, 1730, 1732, 1734, 1733, 1736, 1737, 1740, 1741,
-     1742, 1751, 1744, 1753, 1748, 3865, 1761, 1763, 1760, 1769,
-     1766, 1767, 1768, 1771, 1772, 1773, 1774, 1781, 1780, 1778,
-     1777, 1783, 1784, 1782, 1787, 1788, 1790, 1804, 1791, 1805,
-     3865, 1796, 1818, 1799, 1811, 1807, 1816, 1825, 1822, 1821,
-     1823, 1824, 1827, 1828, 1829, 1831, 1834, 1835, 1836, 1837,
-     1840, 1841, 1843, 1844, 1852, 1839, 1859, 1848, 1860, 1861,
-     1862, 1865, 1867, 1875, 1878, 1879, 1881, 3865, 1884, 1885,
-     1874, 1888, 1877, 1871, 1899, 1901, 1887, 1895, 1897, 1902,
-
-     1903, 1904, 1911, 1905, 1908, 1912, 1913, 1909, 1915, 1918,
-     1919, 1926, 1925, 1935, 1938, 1917, 1939, 1940, 1941, 1942,
-     3865, 1930, 1946, 1951, 1953, 1947, 1955, 1963, 3865, 1959,
-     3865, 1962, 1968, 1971, 3865, 1973, 3865, 1979, 1960, 3865,
-     1980, 1981, 1970, 1964, 1974, 1986, 1984, 1993, 1987, 1994,
-     1990, 1997, 1996, 1998, 2001, 3865, 2003, 2004, 2005, 2009,
-     2011, 2013, 2014, 2015, 2018, 2021, 2020, 2031, 2027, 2035,
-     3865, 2028, 2037, 2029, 2039, 3865, 2032, 2040, 2043, 2044,
-     2051, 2058, 2060, 2050, 2061, 2046, 2049, 2067, 2072, 2063,
-     2068, 2070, 2079, 2075, 2082, 2076, 2078, 2085, 2086, 2088,
-
-     2089, 2092, 2093, 2096, 2097, 2100, 2094, 2098, 2101, 2102,
-     3865, 2104, 2111, 2105, 2117, 2113, 2119, 3865, 2121, 3865,
-     2126, 2128, 2129, 2133, 2130, 2131, 2134, 2143, 2139, 2142,
-     2145, 2147, 2149, 2150, 2156, 2157, 2154, 3865, 2158, 2159,
-     2160, 2163, 2165, 2164, 2171, 2175, 2176, 3865, 2185, 2178,
-     2188, 2195, 2191, 2181, 2203, 2189, 2204, 3865, 3865, 2192,
-     2200, 2199, 2205, 2206, 2214, 2210, 2215, 3865, 2216, 2217,
-     2219, 2222, 2229, 2228, 2218, 3865, 2220, 2231, 2232, 2238,
-     2239, 2240, 2242, 2248, 2244, 2247, 2249, 2254, 2257, 2259,
-     3865, 2262, 2263, 2269, 2264, 2266, 2270, 2273, 2274, 2275,
-
-     2277, 2278, 2281, 2283, 2292, 2284, 2288, 2290, 2294, 2291,
-     2301, 2295, 2303, 2304, 2314, 2312, 3865, 2318, 2306, 2322,
-     2319, 2321, 2325, 2328, 2327, 2329, 2330, 2336, 2332, 3865,
-     2333, 2334, 2338, 2335, 2342, 2345, 2348, 2353, 2357, 3865,
-     2351, 2359, 2362, 2364, 2363, 2366, 2367, 2369, 2373, 3865,
-     2374, 2380, 2376, 2378, 2386, 2387, 2384, 2388, 2390, 2391,
-     2394, 2397, 2398, 2400, 2402, 2403, 2405, 2406, 2407, 2408,
-     2410, 2414, 2427, 2419, 2432, 2415, 2424, 2417, 2434, 2440,
-     2446, 2447, 2433, 2443, 2449, 2448, 2450, 2451, 2452, 2458,
-     2456, 2462, 2461, 3865, 2464, 2465, 2469, 2471, 2472, 2474,
-
-     2476, 2479, 2475, 3865, 2482, 3865, 2483, 2488, 3865, 2489,
-     2491, 2493, 2494, 2496, 2497, 2495, 2502, 2509, 2498, 3865,
-     2505, 2508, 2510, 2511, 3865, 2522, 3865, 2515, 3865, 2518,
-     2523, 2529, 1246, 2527, 2530, 2535, 3865, 2536, 2525, 2538,
-     2540, 2541, 2542, 2544, 2546, 2547, 2548, 2550, 2551, 3865,
-     2552, 2553, 2559, 2560, 2561, 3865, 2566, 3865, 2564, 2580,
-     2567, 2569, 2581, 2582, 2584, 2572, 2576, 2591, 2592, 2585,
-     2594, 3865, 2588, 2595, 2600, 2603, 2601, 2605, 2611, 2608,
-     2610, 2614, 2615, 2617, 2621, 2622, 2618, 3865, 2623, 2629,
-     3865, 2632, 2633, 2636, 2635, 3865, 2637, 3865, 2638, 2640,
-
-     2639, 2641, 2647, 2648, 2659, 2642, 2652, 2660, 2649, 2668,
-     2666, 2669, 3865, 3865, 2671, 2672, 2676, 2677, 2673, 2679,
-     2687, 2683, 2691, 3865, 2680, 2693, 2684, 2686, 2694, 2692,
-     2695, 2703, 2696, 2704, 2708, 2706, 2709, 3865, 2712, 2714,
-     2715, 2716, 2717, 2718, 2720, 3865, 2722, 2723, 2727, 2729,
-     2733, 2724, 2745, 2748, 2734, 2742, 2751, 2753, 2757, 2754,
-     2759, 2760, 2762, 2764, 2765, 3865, 2766, 2768, 2769, 2775,
-     2772, 2770, 2777, 2781, 2786, 2779, 2787, 2789, 2792, 3865,
-     2783, 2793, 2794, 2795, 2801, 2796, 2805, 2806, 2810, 2812,
-     3865, 2807, 2813, 2814, 2817, 2820, 2822, 2823, 2825, 2824,
-
-     2826, 2829, 2836, 2834, 3865, 2837, 3865, 2842, 2844, 2852,
-     2849, 2846, 3865, 2848, 2853, 3865, 2855, 3865, 2856, 2860,
-     2854, 2861, 2870, 3865, 2872, 2864, 2875, 2877, 2879, 2880,
-     2881, 3865, 2883, 2885, 2891, 2892, 2884, 2886, 2894, 2896,
-     2895, 2898, 2907, 2905, 3865, 2901, 2909, 2918, 2912, 2919,
-     3865, 3865, 2910, 2922, 3865, 3865, 3865, 2926, 3865, 2916,
-     3865, 3865, 2927, 2929, 3865, 2931, 3865, 2938, 2935, 2937,
-     2939, 2940, 3865, 2941, 2942, 2944, 3865, 2946, 2952, 2948,
-     2949, 3865, 2951, 3865, 2957, 2956, 2959, 2963, 2970, 2972,
-     2975, 2965, 2967, 2978, 2976, 2980, 2981, 2982, 2983, 2990,
-
-     2986, 2984, 2991, 2994, 2996, 2998, 2999, 2997, 3001, 3002,
-     3004, 3008, 3015, 3017, 3021, 3865, 3865, 3005, 3018, 3023,
-     3026, 3028, 3027, 3030, 3031, 3865, 3034, 3029, 3035, 3042,
-     3039, 3040, 3041, 3044, 3043, 3051, 3057, 3055, 3056, 3061,
-     3063, 3064, 3865, 3065, 3066, 3865, 3865, 3067, 3069, 3076,
-     3077, 3070, 3079, 3082, 3865, 3081, 3089, 3091, 3094, 3865,
-     3098, 3083, 3100, 3104, 3865, 3865, 3865, 3105, 3095, 3101,
-     3109, 3108, 3110, 3111, 3112, 3865, 3116, 3119, 3121, 3122,
-     3128, 3133, 3129, 3134, 3140, 3138, 3142, 3145, 3865, 3865,
-     3146, 3152, 3149, 3150, 3148, 3151, 3154, 3156, 3158, 3865,
-
-     3160, 3164, 3165, 3167, 3168, 3172, 3173, 3175, 3865, 3171,
-     3176, 3178, 3186, 3179, 3182, 3188, 3194, 3187, 3199, 3865,
-     3200, 3189, 3865, 3201, 3203, 3206, 3865, 3207, 3865, 3211,
-     3865, 3865, 3212, 3213, 3216, 3219, 3224, 3226, 3228, 3218,
-     3220, 3235, 3238, 3229, 3865, 3865, 3244, 3231, 3240, 3247,
-     3865, 3865, 3245, 3241, 3248, 3249, 3251, 3252, 3256, 3257,
-     3260, 3261, 3262, 3264, 3269, 3272, 3273, 3274, 3275, 3277,
-     3279, 3282, 3865, 3284, 3287, 3291, 3865, 3285, 3293, 3300,
-     3289, 3295, 3312, 3305, 3297, 3865, 3308, 3309, 3865, 3313,
-     3865, 3865, 3865, 3314, 3315, 3320, 3865, 3322, 3324, 3865,
-
-     3331, 3323, 3326, 3339, 3333, 3335, 3337, 3341, 3342, 3344,
-     3865, 3345, 3347, 3349, 3350, 3352, 3351, 3353, 3357, 3358,
-     3365, 3359, 3372, 3361, 3865, 3374, 3378, 3379, 3865, 3382,
-     3368, 3375, 3383, 3865, 3386, 3389, 3390, 3392, 3394, 3395,
-     3396, 3397, 3400, 3401, 3405, 3865, 3407, 3409, 3410, 3411,
-     3415, 3423, 3420, 3422, 3865, 3425, 3426, 3865, 3428, 3430,
-     3432, 3431, 3440, 3442, 3444, 3447, 3865, 3449, 3865, 3865,
-     3450, 3865, 3454, 3455, 3456, 3457, 3459, 3460, 3865, 3865,
-     3462, 3464, 3467, 3865, 3461, 3468, 3473, 3471, 3474, 3475,
-     3479, 3480, 3484, 3485, 3865, 3865, 3486, 3865, 3492, 3500,
-
-     3503, 3865, 3865, 3865, 3502, 3865, 3504, 3865, 3510, 3494,
-     3511, 3865, 3514, 3515, 3865, 3516, 3487, 3517, 3520, 3522,
-     3523, 3524, 3526, 3527, 3531, 3532, 3533, 3539, 3865, 3865,
-     3543, 3865, 3545, 3865, 3546, 3551, 3865, 3477, 3553, 3547,
-     3557, 3865, 3865, 3558, 3540, 3559, 3560, 3563, 3566, 3564,
-     3865, 3865, 3865, 3567, 3865, 3568, 3569, 3571, 3865, 3575,
-     3574, 3576, 3578, 3577, 3579, 3583, 3581, 3591, 3588, 3600,
-     3603, 3605, 3606, 3592, 3594, 3612, 3608, 3614, 3865, 3615,
-     3865, 3865, 3616, 3623, 3624, 3620, 3625, 3621, 3865, 3627,
-     3626, 3629, 3631, 3628, 3632, 3643, 3633, 3649, 3646, 3653,
-
-     3654, 3636, 3661, 3663, 3657, 3660, 3665, 3671, 3667, 3668,
-     3865, 3669, 3670, 3672, 3675, 3676, 3673, 3680, 3682, 3692,
-     3685, 3687, 3695, 3697, 3698, 3700, 3701, 3703, 3702, 3865,
-     3704, 3706, 3710, 3712, 3715, 3713, 3717, 3718, 3723, 3726,
-     3725, 3728, 3730, 3865, 3734, 3865, 3865, 3735, 3738, 3741,
-     3743, 3745, 3865, 3865, 3865, 3773, 3780, 3787, 3794, 3801,
-       94, 3808, 3815, 3822, 3829, 3836, 3843, 3850, 3857
+     1290, 1292, 1286, 1287, 1293, 1296, 1298, 1299, 1302, 1303,
+
+     1305, 1306, 1307, 1308, 1310, 1332, 1311, 1315, 1313, 1314,
+     1320, 1321, 1329, 1326, 1333, 1323, 1342, 1344, 1345, 1338,
+     1346, 1351, 1354, 1361, 1363, 1368, 1358, 1366, 1364, 1372,
+     1379, 1377, 1373, 1375, 1383, 1386, 1388, 3872, 1395, 1393,
+     1391, 1398, 1404, 1400, 1397, 1403, 1401, 1406, 1407, 1408,
+     1409, 1414, 1418, 1421, 1424, 3872, 1420, 1422, 1427, 1431,
+     1432, 1441, 1425, 1443, 1450, 1435, 3872, 1433, 1452, 1453,
+     1455, 1456, 1459, 1460, 1461, 1462, 1463, 1464, 1466, 1467,
+     1468, 1469, 1476, 1478, 1483, 1473, 1486, 1487, 1488, 1490,
+     1493, 1499, 1495, 1496, 3872, 1497, 1508, 1498, 1502, 1517,
+
+     1518, 1504, 1516, 1523, 1520, 1524, 1525, 1530, 1527, 1531,
+     1528, 1529, 3872, 1532,  186, 1534, 1535, 1533, 1541, 1549,
+     1552, 1555, 1542, 1558, 1559, 1546, 1543, 1563, 1565, 1566,
+     1568, 1569, 1571, 1573, 1574, 1575, 1577, 1581, 1578, 1584,
+     1586, 1590, 1591, 1593, 1595, 1597, 3872, 1598, 1601, 1603,
+     1605, 1606, 1607, 1608, 1609, 1611, 1613, 1617, 1615, 1619,
+     1625, 3872, 1627, 1626, 1629, 1633, 1636, 1635, 1643, 1644,
+     1645, 1648, 1651, 1646, 1657, 1660, 1662, 1656, 1666, 1668,
+     1670, 1672, 1673, 1658, 1680, 1683, 1681, 1650, 1688, 1684,
+     1691, 1682, 3872, 1690, 1692, 1695, 1696, 1715, 1698, 1699,
+
+     1701, 1703, 1711, 1716, 1700, 1722, 1723, 1727, 3872, 1728,
+     1719, 1729, 1733, 1730, 1736, 1737, 1739, 1741, 1743, 1744,
+     1745, 1746, 1754, 1747, 1752, 1757, 1756, 3872, 1766, 1767,
+     1768, 1775, 1771, 1759, 1772, 1777, 1774, 1779, 1781, 1787,
+     1786, 1785, 1784, 1789, 1790, 1788, 1792, 1793, 1797, 1810,
+     1795, 1798, 3872, 1801, 1824, 1812, 1814, 1813, 1816, 1831,
+     1825, 1827, 1828, 1832, 1833, 1834, 1835, 1836, 1837, 1842,
+     1840, 1843, 1848, 1846, 1849, 1844, 1845, 1865, 1852, 1866,
+     1867, 1854, 1868, 1870, 1873, 1880, 1882, 1885, 1887, 3872,
+     1890, 1879, 1881, 1892, 1893, 1894, 1901, 1903, 1895, 1904,
+
+     1905, 1906, 1908, 1910, 1914, 1911, 1912, 1917, 1918, 1919,
+     1920, 1925, 1921, 1926, 1934, 1939, 1942, 1944, 1943, 1945,
+     1949, 1951, 3872, 1935, 1959, 1960, 1963, 1950, 1952, 1966,
+     3872, 1964, 3872, 1969, 1975, 1978, 3872, 1980, 3872, 1984,
+     1971, 3872, 1985, 1989, 1977, 1981, 1986, 1991, 1993, 1995,
+     1997, 1998, 2002, 1999, 2004, 2005, 2007, 2011, 3872, 2013,
+     2010, 2017, 2019, 2022, 2014, 2023, 2024, 2025, 2030, 2035,
+     2041, 2029, 2042, 3872, 2038, 2047, 2039, 2044, 3872, 2048,
+     2053, 2051, 2055, 2056, 2065, 2061, 2064, 2071, 2057, 2067,
+     2083, 2068, 2077, 2079, 2080, 2086, 2084, 2090, 2087, 2088,
+
+     2092, 2094, 2096, 2097, 2101, 2102, 2103, 2105, 2109, 2106,
+     2107, 2108, 2111, 3872, 2113, 2119, 2120, 2123, 2125, 2128,
+     3872, 2131, 3872, 2129, 2139, 2133, 2140, 2141, 2143, 2142,
+     2147, 2149, 2153, 2163, 2150, 2155, 2160, 2165, 2164, 2169,
+     3872, 2166, 2167, 2171, 2173, 2174, 2177, 2175, 2184, 2186,
+     3872, 2192, 2188, 2194, 2200, 2197, 2198, 2207, 2201, 2208,
+     3872, 3872, 2205, 2212, 2209, 2210, 2213, 2221, 2215, 2219,
+     3872, 2226, 2223, 2229, 2230, 2234, 2236, 2238, 2227, 3872,
+     2240, 2245, 2242, 2246, 2248, 2249, 2251, 2257, 2254, 2258,
+     2259, 2263, 2264, 2269, 3872, 2272, 2271, 2274, 2275, 2278,
+
+     2279, 2281, 2282, 2284, 2285, 2286, 2290, 2292, 2300, 2296,
+     2299, 2301, 2303, 2304, 2309, 2298, 2311, 2312, 2320, 2322,
+     3872, 2328, 2313, 2332, 2314, 2330, 2333, 2340, 2336, 2326,
+     2337, 2343, 2341, 3872, 2342, 2344, 2352, 2345, 2353, 2347,
+     2358, 2359, 2363, 3872, 2364, 2369, 2366, 2370, 2374, 2372,
+     2375, 2378, 2379, 3872, 2382, 2389, 2385, 2386, 2396, 2397,
+     2400, 2401, 2394, 2388, 2390, 2402, 2407, 2411, 2412, 2415,
+     2413, 2417, 2418, 2419, 2420, 2421, 2425, 2431, 2435, 2422,
+     2427, 2432, 2444, 2446, 2454, 2455, 2437, 2448, 2456, 3872,
+     2457, 2458, 2459, 2440, 2466, 2464, 2472, 2468, 3872, 2470,
+
+     2474, 2477, 2479, 2481, 2482, 2484, 2485, 2483, 3872, 2490,
+     3872, 2493, 2487, 3872, 2494, 2498, 2500, 2502, 2503, 2504,
+     2505, 2507, 2513, 2510, 3872, 2514, 2516, 2518, 2519, 3872,
+     2530, 3872, 2517, 3872, 2522, 2525, 2536, 1246, 2540, 2542,
+     2546, 3872, 2543, 2532, 2547, 2549, 2535, 2551, 2553, 2554,
+     2538, 2555, 2557, 2559, 3872, 2562, 2569, 2560, 2568, 2574,
+     3872, 2575, 3872, 2572, 2583, 2561, 2580, 2588, 2589, 2591,
+     2592, 2593, 2600, 2597, 2598, 2599, 3872, 2601, 2603, 2605,
+     2608, 2606, 2612, 2619, 2618, 2622, 2615, 2616, 2629, 2634,
+     2626, 2630, 3872, 2636, 2638, 3872, 2637, 2639, 2640, 2644,
+
+     3872, 2645, 3872, 2646, 2647, 2648, 2654, 2656, 2657, 2665,
+     2649, 2667, 2669, 2670, 2677, 2653, 2675, 3872, 3872, 2679,
+     2680, 2682, 2684, 2686, 2687, 2693, 2691, 2700, 3872, 2690,
+     2692, 2694, 2701, 2702, 2703, 2704, 2709, 2706, 2711, 2713,
+     2712, 2714, 3872, 2722, 2719, 2723, 2724, 2725, 2727, 2728,
+     3872, 2730, 2731, 2732, 2736, 2735, 2751, 2754, 2756, 2744,
+     2757, 2761, 2763, 2765, 2758, 2767, 2768, 2772, 2774, 2769,
+     3872, 2775, 2779, 2776, 2782, 2783, 2784, 2737, 2791, 2794,
+     2785, 2787, 2789, 2797, 3872, 2798, 2799, 2800, 2805, 2811,
+     2806, 2813, 2803, 2816, 2814, 3872, 2819, 2821, 2820, 2824,
+
+     2827, 2828, 2830, 2832, 2834, 2840, 2836, 2844, 2838, 3872,
+     2841, 3872, 2846, 2851, 2858, 2856, 2854, 3872, 2860, 2859,
+     3872, 2866, 3872, 2864, 2872, 2862, 2869, 2871, 3872, 2880,
+     2873, 2883, 2885, 2886, 2888, 2889, 3872, 2891, 2893, 2899,
+     2901, 2892, 2894, 2902, 2904, 2903, 2905, 2918, 2909, 3872,
+     2911, 2917, 2924, 2920, 2929, 3872, 3872, 2921, 2925, 3872,
+     3872, 3872, 2933, 3872, 2930, 3872, 3872, 2934, 2937, 3872,
+     2941, 3872, 2943, 2944, 2942, 2946, 2947, 3872, 2950, 2949,
+     2954, 3872, 2951, 2962, 2955, 2956, 3872, 2964, 3872, 2965,
+     2972, 2966, 2976, 2978, 2983, 2985, 2967, 2975, 2986, 2988,
+
+     2989, 2990, 2991, 2992, 2995, 2997, 2998, 2999, 3003, 3004,
+     3007, 3008, 3005, 3011, 3010, 3013, 3015, 3023, 3026, 3030,
+     3872, 3872, 3017, 3027, 3033, 3034, 3035, 3036, 3039, 3040,
+     3872, 3043, 3038, 3046, 3051, 3048, 3049, 3050, 3053, 3052,
+     3060, 3066, 3062, 3070, 3065, 3072, 3073, 3872, 3074, 3075,
+     3872, 3872, 3076, 3078, 3087, 3082, 3088, 3090, 3091, 3872,
+     3092, 3098, 3100, 3101, 3872, 3104, 3105, 3109, 3111, 3872,
+     3872, 3872, 3112, 3115, 3116, 3117, 3118, 3120, 3119, 3122,
+     3872, 3121, 3127, 3128, 3131, 3135, 3140, 3141, 3142, 3149,
+     3145, 3152, 3154, 3872, 3872, 3143, 3160, 3157, 3158, 3159,
+
+     3162, 3164, 3165, 3166, 3872, 3171, 3175, 3167, 3169, 3179,
+     3181, 3183, 3186, 3872, 3173, 3176, 3187, 3194, 3189, 3191,
+     3197, 3199, 3202, 3204, 3872, 3203, 3205, 3872, 3207, 3213,
+     3214, 3872, 3215, 3872, 3220, 3872, 3872, 3217, 3221, 3224,
+     3225, 3231, 3233, 3235, 3226, 3236, 3243, 3240, 3241, 3872,
+     3872, 3247, 3248, 3249, 3256, 3872, 3872, 3252, 3258, 3254,
+     3260, 3253, 3263, 3262, 3264, 3266, 3265, 3267, 3269, 3279,
+     3272, 3281, 3282, 3285, 3287, 3289, 3290, 3872, 3292, 3294,
+     3293, 3872, 3295, 3300, 3301, 3303, 3304, 3321, 3314, 3306,
+     3872, 3308, 3318, 3872, 3307, 3872, 3872, 3872, 3323, 3324,
+
+     3322, 3872, 3329, 3335, 3872, 3338, 3333, 3326, 3345, 3341,
+     3343, 3347, 3349, 3350, 3352, 3872, 3353, 3354, 3356, 3357,
+     3359, 3358, 3360, 3361, 3366, 3368, 3364, 3378, 3379, 3872,
+     3382, 3384, 3386, 3872, 3388, 3385, 3371, 3389, 3872, 3392,
+     3395, 3396, 3400, 3402, 3397, 3403, 3404, 3407, 3410, 3411,
+     3872, 3414, 3417, 3419, 3420, 3421, 3428, 3427, 3430, 3872,
+     3432, 3433, 3872, 3435, 3436, 3439, 3438, 3447, 3449, 3451,
+     3454, 3872, 3456, 3872, 3872, 3457, 3872, 3461, 3462, 3463,
+     3464, 3466, 3467, 3872, 3872, 3469, 3471, 3474, 3872, 3468,
+     3475, 3480, 3478, 3481, 3482, 3486, 3487, 3491, 3492, 3872,
+
+     3872, 3493, 3872, 3499, 3507, 3510, 3872, 3872, 3872, 3509,
+     3872, 3511, 3872, 3517, 3501, 3518, 3872, 3521, 3522, 3872,
+     3523, 3494, 3524, 3527, 3529, 3530, 3531, 3533, 3534, 3538,
+     3539, 3540, 3546, 3872, 3872, 3550, 3872, 3552, 3872, 3553,
+     3558, 3872, 3484, 3560, 3554, 3564, 3872, 3872, 3565, 3547,
+     3566, 3567, 3570, 3573, 3571, 3872, 3872, 3872, 3574, 3872,
+     3575, 3576, 3578, 3872, 3582, 3581, 3583, 3585, 3584, 3586,
+     3590, 3588, 3598, 3595, 3607, 3610, 3612, 3613, 3599, 3601,
+     3619, 3615, 3621, 3872, 3622, 3872, 3872, 3623, 3630, 3631,
+     3627, 3632, 3628, 3872, 3634, 3633, 3636, 3638, 3635, 3639,
+
+     3650, 3640, 3656, 3653, 3660, 3661, 3643, 3668, 3670, 3664,
+     3667, 3672, 3678, 3674, 3675, 3872, 3676, 3677, 3679, 3682,
+     3683, 3680, 3687, 3689, 3699, 3692, 3694, 3702, 3704, 3705,
+     3707, 3708, 3710, 3709, 3872, 3711, 3713, 3717, 3719, 3722,
+     3720, 3724, 3725, 3730, 3733, 3732, 3735, 3737, 3872, 3741,
+     3872, 3872, 3742, 3745, 3748, 3750, 3752, 3872, 3872, 3872,
+     3780, 3787, 3794, 3801, 3808,   94, 3815, 3822, 3829, 3836,
+     3843, 3850, 3857, 3864
     } ;
 
-static yyconst flex_int16_t yy_def[1970] =
+static yyconst flex_int16_t yy_def[1975] =
     {   0,
-     1955,    1, 1956, 1956, 1957, 1957, 1958, 1958, 1959, 1959,
-     1960, 1960, 1955, 1961, 1955, 1955, 1955, 1955, 1962, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1963, 1955, 1955, 1955, 1963, 1964, 1955, 1955, 1955, 1964,
-     1965, 1955, 1955, 1955, 1955, 1965, 1966, 1955, 1955, 1955,
-     1966, 1967, 1955, 1968, 1955, 1967, 1967, 1961, 1961, 1955,
-     1969, 1962, 1969, 1962, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1963, 1963,
-     1964, 1964, 1965, 1965, 1955, 1966, 1966, 1967, 1967, 1968,
-     1968, 1967, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1967, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1967, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955,
-     1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1955, 1967, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1967, 1961, 1961,
-     1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
-
-     1961, 1961, 1961, 1961, 1955, 1961, 1955, 1955, 1961, 1955,
-     1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1967, 1961,
-
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961,
-
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1955, 1961, 1967, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961,
-     1955, 1961, 1961, 1961, 1955, 1961, 1955, 1961, 1961, 1955,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1955, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1955, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1955,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1955, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
-
-     1961, 1961, 1961, 1955, 1961, 1955, 1961, 1961, 1955, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955,
-     1961, 1961, 1961, 1961, 1955, 1961, 1955, 1961, 1955, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955,
-     1961, 1961, 1961, 1961, 1961, 1955, 1961, 1955, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961,
-     1955, 1961, 1961, 1961, 1961, 1955, 1961, 1955, 1961, 1961,
-
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-
-     1961, 1961, 1961, 1961, 1955, 1961, 1955, 1961, 1961, 1961,
-     1961, 1961, 1955, 1961, 1961, 1955, 1961, 1955, 1961, 1961,
-     1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961,
-     1955, 1955, 1961, 1961, 1955, 1955, 1955, 1961, 1955, 1961,
-     1955, 1955, 1961, 1961, 1955, 1961, 1955, 1961, 1961, 1961,
-     1961, 1961, 1955, 1961, 1961, 1961, 1955, 1961, 1961, 1961,
-     1961, 1955, 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1955, 1955, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1955, 1961, 1961, 1955, 1955, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1955,
-     1961, 1961, 1961, 1961, 1955, 1955, 1955, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1955,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955,
-
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955,
-     1961, 1961, 1955, 1961, 1961, 1961, 1955, 1961, 1955, 1961,
-     1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1955, 1955, 1961, 1961, 1961, 1961,
-     1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1955, 1961, 1961, 1961, 1955, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1955, 1961,
-     1955, 1955, 1955, 1961, 1961, 1961, 1955, 1961, 1961, 1955,
-
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1955, 1961,
-     1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1955, 1961, 1961, 1955, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961, 1955, 1955,
-     1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1955,
-     1961, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1955, 1955, 1961, 1955, 1961, 1961,
-
-     1961, 1955, 1955, 1955, 1961, 1955, 1961, 1955, 1961, 1961,
-     1961, 1955, 1961, 1961, 1955, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1955,
-     1961, 1955, 1961, 1955, 1961, 1961, 1955, 1961, 1961, 1961,
-     1961, 1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1955, 1955, 1955, 1961, 1955, 1961, 1961, 1961, 1955, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961,
-     1955, 1955, 1961, 1961, 1961, 1961, 1961, 1961, 1955, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1955, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1955,
-     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961,
-     1961, 1961, 1961, 1955, 1961, 1955, 1955, 1961, 1961, 1961,
-     1961, 1961, 1955, 1955,    0, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955
+     1960,    1, 1961, 1961, 1962, 1962, 1963, 1963, 1964, 1964,
+     1965, 1965, 1960, 1966, 1960, 1960, 1960, 1960, 1967, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1968, 1960, 1960, 1960, 1968, 1969, 1960, 1960, 1960, 1969,
+     1970, 1960, 1960, 1960, 1960, 1970, 1971, 1960, 1960, 1960,
+     1971, 1972, 1960, 1973, 1960, 1972, 1972, 1966, 1966, 1960,
+     1974, 1967, 1974, 1967, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1968, 1968,
+     1969, 1969, 1970, 1970, 1960, 1971, 1971, 1972, 1972, 1973,
+     1973, 1972, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1972, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1972, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1960,
+     1966, 1966, 1966, 1966, 1966, 1966, 1960, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1960, 1972, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1972, 1966, 1966,
+     1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966, 1966, 1966,
+
+     1966, 1966, 1966, 1966, 1960, 1966, 1960, 1960, 1966, 1960,
+     1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1972, 1966,
+
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1960, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1960, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966, 1966,
+
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1960, 1966, 1972, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1960, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1960, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1960, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1960,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1960, 1966, 1960, 1966, 1966, 1966, 1960, 1966, 1960, 1966,
+     1966, 1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1960, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966, 1960, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966, 1966, 1966,
+     1960, 1966, 1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1960, 1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1960,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966, 1966,
+
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1960,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1960, 1966,
+
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1960, 1966,
+     1960, 1966, 1966, 1960, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966, 1960,
+     1966, 1960, 1966, 1960, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966, 1966,
+     1960, 1966, 1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1960, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1960, 1966, 1966, 1960, 1966, 1966, 1966, 1966,
+
+     1960, 1966, 1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1960, 1960, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1960, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966,
+
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1960,
+     1966, 1960, 1966, 1966, 1966, 1966, 1966, 1960, 1966, 1966,
+     1960, 1966, 1960, 1966, 1966, 1966, 1966, 1966, 1960, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1960, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1960,
+     1966, 1966, 1966, 1966, 1966, 1960, 1960, 1966, 1966, 1960,
+     1960, 1960, 1966, 1960, 1966, 1960, 1960, 1966, 1966, 1960,
+     1966, 1960, 1966, 1966, 1966, 1966, 1966, 1960, 1966, 1966,
+     1966, 1960, 1966, 1966, 1966, 1966, 1960, 1966, 1960, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1960, 1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1960, 1966, 1966,
+     1960, 1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1960,
+     1966, 1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966, 1960,
+     1960, 1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1960, 1960, 1966, 1966, 1966, 1966, 1966,
+
+     1966, 1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1960, 1966, 1966, 1960, 1966, 1966,
+     1966, 1960, 1966, 1960, 1966, 1960, 1960, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1960,
+     1960, 1966, 1966, 1966, 1966, 1960, 1960, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1960, 1966, 1966,
+     1966, 1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1960, 1966, 1966, 1960, 1966, 1960, 1960, 1960, 1966, 1966,
+
+     1966, 1960, 1966, 1966, 1960, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1960,
+     1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966, 1960, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1960,
+     1966, 1966, 1960, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1960, 1966, 1960, 1960, 1966, 1960, 1966, 1966, 1966,
+     1966, 1966, 1966, 1960, 1960, 1966, 1966, 1966, 1960, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1960,
+
+     1960, 1966, 1960, 1966, 1966, 1966, 1960, 1960, 1960, 1966,
+     1960, 1966, 1960, 1966, 1966, 1966, 1960, 1966, 1966, 1960,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1960, 1960, 1966, 1960, 1966, 1960, 1966,
+     1966, 1960, 1966, 1966, 1966, 1966, 1960, 1960, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1960, 1960, 1960, 1966, 1960,
+     1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1960, 1966, 1960, 1960, 1966, 1966, 1966,
+     1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966, 1966, 1966,
+
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1960, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1960, 1966,
+     1960, 1960, 1966, 1966, 1966, 1966, 1966, 1960, 1960,    0,
+     1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960,
+     1960, 1960, 1960, 1960
     } ;
 
-static yyconst flex_uint16_t yy_nxt[3905] =
+static yyconst flex_uint16_t yy_nxt[3912] =
     {   0,
        14,   15,   16,   17,   18,   19,   18,   14,   14,   14,
        14,   18,   20,   21,   14,   22,   23,   24,   25,   14,
@@ -1212,300 +1229,301 @@ static yyconst flex_uint16_t yy_nxt[3905] =
       673,   69,   69,   69,  679,  671,   69,  675,  682,   69,
        69,   69,  680,   69,  677,   69,   69,   69,   69,  688,
        69,   69,  687,  681,   69,   69,  694,  683,   69,  684,
-      691,  686,  685,   69,  689, 1343,  690,  692,  693,  695,
+      691,  686,  685,   69,  689, 1348,  690,  692,  693,  695,
        69,  698,   69,   69,  699,   69,   69,  697,  696,   69,
-       69,   69,   69,  705,  700,  702,  703,  706,   69,   69,
-
-       69,  701,   69,  707,  710,   69,  704,  712,   69,   69,
-       69,   69,  709,  714,  139,   69,  708,   69,   69,  716,
-       69,   69,   69,  727,   69,  711,  715,   69,  713,   69,
-       69,  728,   69,  731,  719,   69,  717,   69,   69,  729,
-      733,  720,  718,   69,   69,   69,  721,  732,  722,  736,
-      135,  734,  723,  737,  724,  730,   69,   69,  735,  725,
-       69,  738,  740,   69,  726,   69,   69,  134,  745,  746,
-       69,  739,  744,   69,  741,   69,   69,   69,   69,  743,
-       69,  753,   69,  756,  742,   69,  747,  752,  758,  755,
-       69,  748,  754,  749,   69,  757,   69,  761,   69,   69,
-
-      763,   69,  767,  762,  750,   69,   69,   69,  759,  764,
-       69,  751,   69,   69,   69,  760,   69,  768,   69,   69,
-      765,   69,   69,  766,   69,  770,  774,  772,   69,   69,
-      771,  779,  769,   69,   69,   69,   69,  778,  773,   69,
-       69,   69,  775,  776,  777,  783,  784,   69,  786,  782,
-       69,   69,  780,  781,  788,  785,   69,  787,  791,   69,
-      789,   69,  792,   69,   69,  793,   69,  790,  794,  795,
-       69,   69,   69,   69,   69,  796,  800,   69,   69,   69,
-       69,   69,   69,  803,  804,   69,  798,  805,  807,   69,
-      797,   69,  799,  802,  809,  801,  806,  808,   69,   69,
-
-       69,   69,  811,   69,   69,  816,   69,  810,   69,  812,
-       69,  817,   69,  818,   69,  820,  815,   69,  823,  813,
-       69,  814,  819,   69,   69,  821,  824,  826,   69,  822,
-       69,   69,  830,   69,   69,  825,   69,   69,   69,   69,
-       69,   69,  132,  827,  828,  829,  832,   69,   69,  839,
-       69,  840,  831,   69,   69,  836,   69,  833,  841,  835,
-       69,   69,  837,   69,  834,  842,   69,   69,  838,  847,
-       69,  845,   69,   69,   69,  843,   69,  844,   69,  848,
-      851,   69,  846,   69,  854,  849,   69,  856,  852,   69,
-       69,   69,  850,   69,  853,  857,  858,   69,   69,   69,
-
-      860,   69,   69,  855,  863,  859,   69,  862,   69,   69,
-      867,  861,   69,  865,   69,   69,   69,   69,  868,   69,
-      864,  866,   69,  872,   69,   69,   69,  869,   69,  873,
-      871,  877,  881,  870,   69,   69,   69,   69,  874,   69,
-       69,  878,  876,  875,  880,  885,   69,  883,  879,   69,
-      882,  887,   69,   69,  884,  888,   69,   69,  886,   69,
-      891,  914,  893,   69,  894,   69,  890,   69,  889,   69,
-      892,   69,  895,   69,  897,   69,   69,  899,  896,   69,
-      898,   69,   69,   69,  904,  903,  901,  905,  900,   69,
-       69,   69,   69,   69,  915,  906,  902,  907,   69,   69,
-
-      913,   69,   69,   69,   69,  916,  917,  908,   69,   69,
-       69,  924,  909,  919,  910,   69,  911,  920,  912,   69,
-      918,  921,   69,  922,  925,   69,   69,  923,  926,  929,
-       69,  931,   69,  927,   69,   69,   69,  932,  935,   69,
-      933,  930,   69,  937,   69,   69,   69,  940,   69,   69,
-      928,  938,   69,   69,   69,  934,   69,  942,  130,  944,
-       69,  943,  936,   69,  945,   69,  939,  948,  949,  941,
-      950,  947,   69,   69,  946,   69,  952,  951,   69,   69,
-       69,   69,  956,   69,   69,   69,   69,  953,  960,   69,
-       69,  955,   69,   69,   69,   69,   69,  966,  954,   69,
-
-       69,  964,   69,   69,  957,  958,  961,  970,   69,  959,
-      963,   69,  962,  965,  967,  971,   69,   69,  969,   69,
-      977,  979,  973,   69,  968,  975,  972,  974,   69,  976,
-       69,  978,  981,   69,   69,   69,   69,   69,  982,   69,
-       69,   69,  980,   69,  983,  987,   69,   69,   69,   69,
-      990,   69,   69,   69,  984,   69,   69,  986,  999,  988,
-       69,  993,  985,  989,   69,  991,  994,  992,  995,  998,
-      996,   69,   69,   69,   69,  997, 1000,   69, 1001,   69,
-     1004, 1002, 1007,   69, 1006, 1008,   69,   69, 1003,   69,
-       69,   69, 1009,   69, 1010, 1011,   69,   69, 1005,   69,
-
-       69, 1012, 1016, 1015, 1013, 1014, 1017,   69, 1019,   69,
-     1018,   69, 1020,   69,   69,   69,   69,   69, 1027, 1021,
-       69,   69, 1026,   69,   69,   69, 1022,   69, 1023,   69,
-       69,   69, 1035, 1040, 1025, 1032, 1028,   69,   69, 1029,
-     1024, 1036,   69, 1030, 1031, 1034, 1038,   69, 1033, 1037,
-       69,   69,   69,   69,   69, 1039, 1044, 1048,   69,   69,
-     1045, 1042, 1047,   69, 1041,   69, 1043,   69, 1049, 1050,
-     1053,   69,   69, 1046,   69,   69,   69, 1051, 1057, 1055,
-       69, 1056,   69,   69, 1058,   69,   69, 1052, 1060, 1054,
-     1059,   69,   69,   69, 1062, 1061,   69, 1063,   69,   69,
-
-     1065, 1064,   69, 1066, 1068,   69,   69, 1070,   69,   69,
-       69, 1067, 1073,   69, 1076,   69,   69,   69, 1075, 1069,
-     1072,   69, 1079,   69, 1071,   69,   69,   69, 1080, 1074,
-       69, 1078,   69,   69, 1077, 1085, 1083, 1086, 1087,   69,
-       69,   69, 1089,   69,   69, 1081, 1082,   69, 1091,   69,
-     1084,   69,   69, 1095, 1090,   69,   69, 1093,   69, 1088,
-     1092,   69,   69,   69, 1106, 1101, 1098, 1096, 1094, 1099,
-       69, 1103,   69,   69, 1107,   69, 1097, 1102, 1104,   69,
-       69, 1100,   69, 1105,   69, 1108, 1112,   69,   69, 1114,
-       69,   69, 1113, 1109,   69, 1116, 1117,   69,   69, 1110,
-
-       69,   69, 1111, 1118,   69,   69,   69, 1125,   69,   69,
-       69, 1115,   69,   69,   69, 1130,   69,   69, 1119, 1122,
-     1123, 1120, 1124,   69, 1121,   69, 1126, 1128, 1131,   69,
-     1127,   69, 1132,   69, 1134, 1129, 1133, 1135,   69, 1140,
-       69,   69,   69,   69, 1141,   69,   69, 1136, 1137, 1149,
-     1142,   69, 1144, 1138,   69,   69, 1150,   69, 1143,   69,
-     1148,   69,   69, 1139, 1146, 1145,   69, 1147,   69,   69,
-       69,   69,   69, 1159, 1152,   69,   69,   69, 1156, 1151,
-     1153, 1162, 1154,   69, 1163, 1155, 1161,   69,   69, 1158,
-       69, 1160, 1168,   69,   69, 1157, 1165,   69, 1164, 1166,
-
-       69,   69, 1171,   69,   69, 1170, 1167,   69, 1169, 1172,
-     1174,   69,   69, 1173, 1175,   69,   69,   69,   69, 1176,
-     1179, 1183,   69, 1178, 1180, 1177,   69,   69,   69,   69,
-       69,   69,   69, 1187,   69, 1181, 1188, 1182, 1184, 1189,
-       69,   69, 1194,   69,   69, 1185, 1190, 1193, 1186, 1191,
-       69,   69,   69, 1192,   69, 1200,   69, 1196, 1195,   69,
-       69,   69, 1955, 1197, 1198, 1204,   69, 1203, 1201,   69,
-     1206,   69, 1205, 1199,   69,   69,   69, 1202,   69, 1207,
-     1209,   69,   69, 1211, 1208,   69,   69,   69, 1210,   69,
-       69, 1212, 1215,   69, 1220,   69,   69, 1213, 1216, 1221,
-
-       69, 1214,   69,   69,   69, 1225,   69,   69, 1219, 1955,
-     1218, 1217, 1227,   69, 1229,   69,   69, 1222,   69, 1223,
-     1230, 1231, 1224, 1226,   69, 1233,   69, 1232, 1228, 1235,
-       69,   69, 1237,   69,   69, 1239, 1234,   69, 1238,   69,
-       69,   69,   69, 1246,   69,   69,   69,   69,   69, 1250,
-       69, 1240, 1241, 1242,   69, 1252, 1236,   69, 1243, 1248,
-       69, 1244, 1245,   69, 1247,   69, 1255, 1249, 1256,   69,
-     1258,   69, 1257, 1251,   69,   69,   69, 1253,   69,   69,
-     1263,   69, 1254, 1260, 1261,   69,   69, 1267,   69, 1259,
-       69, 1266,   69, 1270, 1271, 1272,   69, 1269,   69,   69,
-
-       69, 1265,   69,   69, 1262, 1273,   69, 1264, 1268,   69,
-       69, 1274,   69, 1278,   69,   69, 1281,   69,   69,   69,
-       69, 1277,   69, 1275, 1285, 1276,   69,   69, 1286,   69,
-     1279,   69, 1282, 1955, 1284, 1287,   69, 1283, 1288,   69,
-     1280, 1295, 1289, 1291,   69,   69,   69, 1290, 1292, 1294,
-     1293, 1296,   69, 1297, 1299,   69, 1302, 1298,   69,   69,
-       69,   69,   69,   69,   69, 1307, 1304, 1301,   69, 1309,
-       69, 1300, 1303,   69,   69, 1305,   69,   69, 1312, 1311,
-     1313,   69, 1314,   69,   69, 1310,   69,   69,   69, 1306,
-     1308,   69, 1316, 1317,   69,   69, 1319, 1318, 1321, 1320,
-
-       69,   69, 1324,   69, 1315,   69,   69,   69,   69,   69,
-       69, 1329, 1322, 1323,   69, 1326, 1331,   69, 1333, 1330,
-       69,   69,   69,   69, 1332, 1325, 1327,   69, 1328, 1334,
-       69, 1336, 1337, 1338,   69,   69, 1342,   69, 1335,   69,
-     1344,   69,   69, 1339, 1345, 1340, 1346,   69,   69, 1341,
-       69, 1349,   69,   69,   69, 1347,   69, 1348,   69,   69,
-       69, 1350,   69,   69,   69,   69, 1352, 1360, 1353, 1359,
-     1354,   69,   69,   69, 1351, 1356,   69, 1362,   69,   69,
-     1363,   69, 1357, 1358,   69, 1355, 1368, 1364,   69, 1361,
-     1365, 1366,   69,   69,   69, 1369,   69,   69, 1374, 1370,
-
-       69, 1371, 1372,   69,   69, 1367,   69,   69, 1373, 1375,
-     1376, 1380,   69,   69, 1377,   69, 1381,   69, 1384, 1378,
-       69, 1379,   69,   69, 1386, 1385,   69,   69, 1382,   69,
-       69, 1390, 1391,   69,   69,   69, 1388, 1383, 1387, 1389,
-     1394,   69, 1393, 1392,   69,   69, 1395,   69,   69,   69,
-       69,   69,   69,   69,   69, 1400, 1401, 1396, 1405,   69,
-       69,   69, 1404, 1399,   69, 1397, 1398, 1402, 1409, 1406,
-     1407,   69,   69, 1408, 1411, 1412, 1403, 1410,   69, 1413,
-       69,   69, 1416,   69,   69,   69, 1414, 1418,   69,   69,
-     1419,   69,   69, 1417, 1422,   69,   69, 1420,   69,   69,
-
-     1423, 1415, 1424,   69,   69,   69,   69,   69,   69, 1421,
-     1426, 1429, 1433, 1428, 1432,   69,   69, 1425,   69, 1427,
-       69,   69, 1430, 1431,   69, 1435,   69,   69,   69,   69,
-       69, 1434,   69, 1445,   69,   69,   69, 1450, 1446,   69,
-     1437,   69, 1443, 1438, 1436,   69,   69, 1441, 1955, 1439,
-     1442, 1440, 1447, 1444,   69, 1448, 1451,   69, 1449, 1452,
-       69, 1453, 1455,   69, 1456,   69,   69, 1454, 1457,   69,
-     1459,   69,   69, 1461,   69, 1462,   69,   69,   69, 1465,
-       69,   69,   69, 1464,   69, 1458, 1467,   69, 1469,   69,
-     1460,   69, 1470,   69, 1471,   69, 1463, 1473,   69,   69,
-
-     1466,   69, 1468, 1477,   69,   69,   69,   69,   69, 1472,
-     1474, 1481, 1482,   69, 1475, 1478, 1484,   69,   69,   69,
-     1476, 1480,   69, 1486,   69,   69,   69, 1483, 1479,   69,
-     1489, 1488,   69, 1487,   69,   69,   69,   69,   69, 1493,
-     1494,   69, 1491, 1499, 1485, 1496,   69, 1497,   69,   69,
-     1500, 1490, 1495, 1492,   69, 1498,   69, 1503,   69, 1504,
-       69,   69, 1505, 1502,   69,   69,   69,   69,   69, 1501,
-     1506, 1512,   69,   69, 1510, 1509,   69, 1513, 1507, 1511,
-     1508, 1516,   69, 1517,   69, 1515, 1514,   69, 1519,   69,
-     1518,   69,   69,   69, 1523,   69,   69,   69,   69, 1524,
-
-     1525, 1520, 1526,   69,   69, 1521,   69,   69,   69, 1527,
-       69, 1522, 1531,   69, 1534, 1533, 1528,   69, 1529,   69,
-     1530,   69,   69, 1535,   69, 1538, 1537, 1532,   69, 1536,
-       69,   69, 1539, 1540,   69, 1542, 1541, 1543,   69,   69,
-     1546,   69, 1547,   69, 1545, 1548, 1544,   69, 1549,   69,
-       69,   69,   69,   69,   69, 1555,   69, 1552,   69, 1557,
-       69,   69, 1560,   69,   69, 1550, 1554, 1556,   69,   69,
-     1562,   69, 1553, 1551, 1561,   69, 1559,   69, 1558,   69,
-     1564, 1565,   69, 1566,   69, 1563, 1567,   69,   69, 1568,
-       69, 1570,   69,   69,   69,   69,   69, 1569,   69, 1574,
-
-     1571, 1576,   69,   69, 1572, 1573,   69, 1577,   69,   69,
-       69,   69, 1583,   69,   69, 1575,   69,   69, 1584, 1580,
-       69, 1587, 1578, 1579, 1582, 1588, 1589,   69, 1590,   69,
-       69, 1585, 1581,   69, 1591,   69, 1586, 1592,   69,   69,
-       69,   69,   69,   69, 1599, 1600,   69,   69, 1593, 1596,
-     1601,   69,   69,   69,   69,   69,   69, 1594, 1595, 1597,
-     1598, 1603, 1609,   69, 1610, 1602, 1604,   69,   69,   69,
-     1605, 1606, 1607,   69, 1608,   69,   69,   69,   69,   69,
-     1614,   69,   69, 1612, 1619, 1611, 1616, 1620,   69,   69,
-     1623,   69, 1613,   69,   69,   69, 1615, 1617, 1624, 1618,
-
-     1622,   69, 1627,   69, 1621, 1626,   69,   69, 1625, 1629,
-       69, 1631,   69,   69, 1630, 1632,   69,   69, 1633, 1628,
-       69,   69,   69,   69,   69, 1637, 1635, 1638,   69, 1634,
-     1636,   69, 1640,   69,   69, 1955, 1642, 1955, 1643, 1645,
-       69,   69, 1639, 1641, 1646,   69,   69, 1649, 1647, 1644,
-       69, 1648,   69, 1651,   69, 1650, 1652,   69,   69, 1654,
-       69,   69,   69,   69,   69, 1655,   69, 1656,   69, 1657,
-       69, 1653,   69, 1660, 1659, 1662,   69,   69, 1658,   69,
-       69, 1663, 1661,   69,   69,   69, 1668,   69,   69, 1666,
-       69,   69, 1665, 1667,   69, 1664, 1669, 1673,   69,   69,
-
-       69,   69, 1670, 1675, 1676, 1677,   69, 1678, 1671, 1672,
-     1674,   69,   69,   69, 1681,   69, 1679, 1682,   69,   69,
-     1685, 1680, 1686,   69,   69,   69, 1688, 1689,   69, 1683,
-       69,   69,   69, 1684, 1690, 1691,   69, 1692,   69, 1693,
-       69,   69, 1696,   69, 1687, 1698, 1695,   69, 1694, 1697,
-       69, 1699,   69,   69, 1703, 1700,   69,   69, 1702,   69,
-       69,   69, 1704,   69,   69, 1707, 1701, 1711,   69,   69,
-     1705, 1706,   69,   69,   69, 1715,   69, 1716, 1710, 1708,
-     1713,   69, 1717, 1709,   69,   69,   69,   69, 1712,   69,
-     1719,   69, 1714, 1955,   69, 1725,   69,   69, 1722,   69,
-
-     1718,   69, 1726,   69, 1729,   69, 1720,   69, 1727,   69,
-     1731, 1723,   69, 1721, 1724, 1728, 1730,   69, 1736, 1733,
-       69,   69, 1732, 1734,   69,   69,   69,   69, 1741, 1737,
-     1735, 1740,   69, 1738,   69,   69,   69, 1744,   69, 1743,
-     1745, 1742, 1746,   69, 1747,   69, 1749,   69, 1753,   69,
-     1739,   69, 1751,   69,   69, 1755,   69,   69, 1748,   69,
-     1758,   69,   69,   69,   69,   69, 1750, 1752, 1760,   69,
-       69,   69, 1761,   69, 1757, 1759, 1756,   69, 1764, 1754,
-       69, 1762, 1765, 1767,   69, 1769,   69,   69, 1763, 1770,
-       69,   69, 1768, 1772,   69,   69, 1771, 1766,   69, 1776,
-
-     1773,   69,   69, 1779,   69, 1780,   69,   69,   69,   69,
-     1774, 1784,   69,   69, 1775, 1777, 1785,   69, 1786,   69,
-     1782,   69,   69,   69, 1778, 1789, 1781,   69, 1790, 1783,
-     1792, 1787,   69, 1795,   69,   69, 1796,   69,   69, 1798,
-       69, 1788,   69,   69,   69, 1955, 1791, 1799, 1801, 1793,
-     1794, 1802,   69, 1803,   69, 1804,   69, 1797, 1800,   69,
-     1806,   69,   69, 1807, 1805, 1808,   69,   69,   69,   69,
-     1812,   69,   69,   69,   69, 1815,   69, 1813, 1811,   69,
-       69, 1809, 1814,   69, 1816,   69,   69,   69, 1810,   69,
-     1819,   69,   69, 1817, 1821, 1820,   69,   69,   69,   69,
-
-     1818, 1856, 1827, 1829,   69, 1822,   69, 1823, 1840, 1824,
-     1825, 1830,   69, 1832,   69,   69,   69, 1826, 1828, 1831,
-     1833, 1834,   69,   69, 1835, 1837,   69,   69,   69,   69,
-     1841, 1842,   69, 1843,   69,   69,   69, 1836,   69,   69,
-     1844, 1955, 1838,   69,   69,   69, 1839, 1861, 1848, 1849,
-     1851,   69,   69, 1846, 1852,   69, 1853,   69,   69,   69,
-     1847, 1845, 1855,   69, 1850,   69, 1857, 1854, 1859,   69,
-       69,   69,   69, 1860, 1858,   69,   69, 1863,   69,   69,
-       69,   69, 1867,   69, 1868, 1862,   69,   69,   69,   69,
-       69,   69, 1866,   69, 1864,   69, 1865, 1870, 1871, 1872,
-
-       69, 1869, 1879,   69,   69, 1875,   69, 1873, 1874, 1880,
-     1877, 1881,   69, 1878, 1882,   69, 1876,   69,   69, 1887,
-       69, 1886, 1883, 1884,   69, 1889,   69,   69,   69, 1885,
-     1892, 1893,   69,   69, 1888,   69,   69,   69,   69,   69,
-       69,   69, 1890,   69,   69,   69, 1894, 1891,   69, 1902,
-     1895, 1955, 1896, 1897, 1899,   69, 1900, 1898,   69, 1901,
-     1903,   69, 1905, 1906, 1904,   69,   69, 1909, 1910,   69,
-     1907, 1908,   69,   69, 1911,   69, 1912,   69, 1915,   69,
-       69,   69,   69,   69,   69,   69, 1918,   69,   69, 1922,
-     1923, 1913,   69, 1917,   69, 1925, 1914,   69, 1916,   69,
-
-     1921, 1919, 1927, 1920,   69, 1926, 1928,   69, 1930,   69,
-       69, 1924,   69,   69,   69,   69,   69, 1931,   69, 1932,
-     1934, 1936,   69, 1937,   69,   69, 1929,   69, 1940,   69,
-       69, 1943, 1933, 1935, 1944,   69, 1946,   69,   69, 1947,
-       69, 1938,   69, 1939, 1941, 1945,   69,   69, 1942, 1948,
-       69, 1949, 1950,   69, 1953,   69, 1954,   69, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1951,
-     1955, 1955, 1952,   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,
-     1955,   72,   72,   72,   72,  129,  129, 1955, 1955, 1955,
-      129,  129,  131,  131, 1955, 1955,  131, 1955,  131,  133,
-     1955, 1955, 1955, 1955, 1955,  133,  136,  136, 1955, 1955,
-     1955,  136,  136,  138, 1955, 1955, 1955, 1955, 1955,  138,
-      140,  140, 1955,  140,  140,  140,  140,   73,   73, 1955,
-       73,   73,   73,   73,   13, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-
-     1955, 1955, 1955, 1955
+       69,   69,   69,  706,  700,  702,  704,  707,   69,   69,
+
+      711,  701,   69,  703,   69,   69,  705,  708,   69,  713,
+       69,   69,  710,  715,  139,   69,  709,   69,   69,   69,
+       69,  717,   69,   69,  728,   69,   69,   69,  712,  714,
+      716,  729,   69,   69,  720,   69,  732,  718,   69,  737,
+      730,   69,  721,  719,   69,   69,  734,  722,  733,  723,
+       69,  731,  735,  724,   69,  725,   69,   69,   69,  736,
+      726,  739,  741,   69,  742,  727,   69,  135,  746,  738,
+       69,  740,  745,   69,  747,   69,   69,  744,   69,  743,
+       69,  748,  753,  754,   69,   69,  749,   69,  750,   69,
+      755,   69,  757,  759,  758,   69,  756,  762,   69,  751,
+
+       69,  760,  764,   69,  763,   69,  752,   69,  765,   69,
+       69,  768,   69,   69,  761,   69,   69,  769,   69,   69,
+       69,   69,  766,  767,  771,  775,   69,  773,  770,  772,
+       69,  780,   69,   69,   69,  134,   69,   69,  774,   69,
+      777,  776,  779,   69,   69,   69,  787,   69,  784,  785,
+      778,  781,  782,   69,  783,   69,  788,  789,  786,  792,
+      790,  791,   69,  793,   69,   69,  794,   69,   69,  795,
+      796,   69,   69,   69,   69,   69,   69,  801,   69,   69,
+       69,   69,  797,  804,  805,   69,  806,  799,   69,  809,
+       69,  798,  803,  800,  808,   69,  802,  807,   69,   69,
+
+       69,  812,   69,  811,  810,   69,  817,   69,   69,   69,
+       69,   69,  818,  819,   69,  132,   69,  813,  816,  814,
+       69,  822,  815,  821,  824,  825,  823,  820,   69,   69,
+       69,  826,   69,  827,  828,   69,   69,   69,  832,   69,
+       69,   69,   69,   69,   69,   69,   69,   69,  841,  831,
+      830,  829,  834,   69,   69,   69,  842,  833,   69,  835,
+      838,   69,  839,  837,   69,  840,  836,   69,  845,  843,
+       69,   69,  844,  848,  849,   69,  847,   69,   69,  853,
+       69,   69,  850,   69,  846,   69,   69,   69,  858,   69,
+       69,  856,  851,   69,  859,  854,   69,  852,   69,  862,
+
+      860,  855,   69,   69,  861,   69,  857,   69,  865,   69,
+       69,  864,  867,   69,  869,   69,  863,   69,   69,   69,
+       69,   69,  870,   69,  866,   69,  874,   69,  868,   69,
+      871,   69,  875,  873,  883,  879,  872,   69,   69,   69,
+      876,   69,  880,  878,  877,   69,  882,   69,   69,  885,
+      889,  881,  884,  887,  890,   69,   69,   69,   69,  888,
+       69,  893,   69,   69,  896,  886,  909,  895,   69,   69,
+       69,  892,   69,  897,   69,  891,  894,  899,   69,  898,
+       69,  901,   69,  900,   69,   69,  130,  906,  905,  903,
+      907,  902,   69,   69,   69,   69,   69,  915,  908,  904,
+
+       69,  916,   69,   69,   69,  917,  918,   69,   69,  910,
+       69,   69,   69,   69,  911,   69,  912,  921,  913,  919,
+      914,  926,  922,   69,  924,  920,  923,   69,   69,  927,
+      925,   69,  928,  931,   69,   69,  935,  930,  933,   69,
+       69,   69,   69,  934,  937,   69,  929,  939,   69,   69,
+      932,   69,  942,   69,  940,   69,   69,   69,   69,   69,
+      936,  944,  938,  946,   69,  945,   69,  947,   69,   69,
+      949,   69,  941,  952,  953,  943,  950,  948,   69,   69,
+       69,  951,  955,   69,   69,  954,   69,   69,  959,   69,
+      957,   69,  956,   69,  963,  958,   69,   69,   69,   69,
+
+       69,   69,   69,  969,   69,   69,  960,   69,  967,   69,
+       69,  961,  964,   69,  973,  976,  962,  966,  965,  968,
+      970,  974,   69,  972,   69,   69,   69,  982,   69,  971,
+      975,  978,  977,  980,  981,  979,   69,   69,  984,   69,
+       69,  985,  983,   69,   69,   69,   69,   69,   69,   69,
+      986,  990,   69,  993,   69,   69,   69,   69,   69,  987,
+       69,   69, 1001,  989,   69,  991,   69,  996,  992, 1003,
+      988,  995,  994,  998,  997, 1000,  999,   69,   69,   69,
+       69, 1006,   69,   69, 1002,   69, 1007, 1010, 1005, 1011,
+     1009,   69,   69,   69,   69, 1015, 1004,   69, 1012,   69,
+
+     1013, 1014,   69, 1008,   69,   69,   69,   69, 1020, 1017,
+     1022, 1016, 1021,   69, 1023,   69,   69,   69,   69, 1018,
+       69, 1030,   69,   69,   69, 1019,   69, 1024, 1029,   69,
+       69,   69,   69,   69, 1038, 1025, 1026,   69,   69, 1028,
+     1960, 1039, 1031, 1032, 1027, 1035,   69,   69, 1033, 1034,
+     1041,   69, 1037, 1036,   69,   69,   69,   69, 1040, 1042,
+     1043,   69,   69,   69,   69, 1047, 1045, 1050, 1044, 1048,
+     1051,   69,   69, 1056, 1046,   69,   69, 1052,   69, 1053,
+     1054,   69, 1049,   69, 1055, 1060, 1058,   69, 1059,   69,
+       69, 1061,   69,   69, 1057, 1062,   69,   69,   69, 1063,
+
+     1064,   69, 1065,   69, 1066,   69, 1071,   69, 1069,   69,
+       69,   69, 1068, 1072,   69, 1074,   69,   69, 1067,   69,
+     1070, 1077,   69,   69, 1080,   69,   69, 1076, 1079,   69,
+     1073,   69, 1083, 1075,   69,   69,   69,   69, 1078, 1084,
+     1081,   69,   69, 1082, 1089, 1087, 1085,   69, 1091, 1093,
+       69,   69, 1090,   69,   69, 1086,   69, 1088, 1095,   69,
+       69, 1092, 1097,   69, 1094,   69, 1099,   69,   69,   69,
+     1096, 1102, 1105,   69, 1103, 1100,   69,   69, 1106,   69,
+       69, 1112, 1110,   69, 1098, 1107, 1104, 1101, 1108,   69,
+     1111,   69,   69, 1116, 1109,   69,   69, 1118,   69,   69,
+
+       69, 1117,   69, 1121,   69, 1120,   69, 1113,   69,   69,
+     1114, 1122, 1115,   69,   69,   69, 1129,   69,   69,   69,
+       69,   69, 1119,   69, 1134,   69, 1123, 1127, 1126, 1124,
+     1128,   69,   69, 1125, 1132,   69, 1135,   69, 1130, 1131,
+       69,   69, 1137,   69, 1133,   69, 1138, 1136, 1145, 1139,
+     1144,   69,   69,   69,   69,   69, 1140, 1146, 1141,   69,
+     1153,   69,   69, 1142, 1148,   69, 1143,   69, 1150, 1147,
+     1152, 1151,   69, 1149, 1154,   69,   69,   69,   69,   69,
+     1156,   69, 1155,   69, 1163,   69,   69,   69, 1167,   69,
+     1157, 1158, 1159, 1160, 1166, 1165,   69, 1162,   69, 1172,
+
+       69, 1164, 1168, 1161,   69, 1169,   69, 1175, 1170,   69,
+       69, 1174,   69,   69, 1178, 1176, 1171,   69, 1173,   69,
+       69,   69,   69, 1180,   69,   69, 1179,   69, 1187, 1181,
+     1177,   69, 1183,   69, 1184,   69, 1182, 1190,   69,   69,
+     1185,   69,   69, 1188, 1186, 1192,   69, 1193,   69, 1189,
+       69, 1194,   69, 1195,   69, 1191, 1199,   69,   69, 1196,
+       69,   69, 1197,   69, 1205, 1201,   69, 1198, 1200,   69,
+       69,   69, 1202, 1203, 1209,   69,   69, 1208, 1206, 1210,
+     1211,   69, 1204,   69,   69, 1214,   69,   69, 1207, 1212,
+       69,   69, 1213,   69,   69, 1216,   69,   69,   69, 1215,
+
+     1217, 1220,   69, 1225,   69, 1218, 1221, 1226,   69, 1219,
+       69,   69,   69,   69, 1230,   69,   69, 1224, 1223, 1222,
+     1232,   69, 1234,   69,   69,   69,   69, 1236, 1235, 1227,
+     1228, 1233,   69, 1229,   69, 1238, 1231, 1237,   69, 1240,
+       69, 1242,   69, 1239,   69,   69, 1243, 1244,   69,   69,
+     1251, 1241,   69,   69,   69,   69,   69,   69, 1249,   69,
+     1245, 1246, 1247, 1255,   69,   69, 1257, 1248, 1253, 1250,
+       69,   69, 1260, 1252, 1261,   69,   69, 1254,   69, 1258,
+     1263,   69,   69, 1256,   69, 1262,   69,   69, 1268, 1265,
+       69,   69, 1259, 1264,   69, 1266, 1272,   69,   69, 1271,
+
+       69,   69,   69, 1275, 1276, 1274,   69, 1270,   69,   69,
+     1267, 1277,   69,   69,   69, 1279, 1269, 1273, 1278,   69,
+     1280, 1281, 1283,   69,   69,   69, 1282,   69, 1286,   69,
+       69,   69,   69,   69,   69, 1290, 1293,   69, 1291,   69,
+     1287, 1284, 1292,   69,   69, 1289, 1296,   69, 1288,   69,
+     1285, 1300,   69, 1298, 1294, 1297,   69, 1301,   69, 1295,
+       69, 1302, 1304, 1307, 1299, 1303,   69,   69,   69,   69,
+       69,   69, 1306, 1312, 1309, 1305,   69, 1311,   69, 1314,
+       69, 1308,   69, 1310,   69, 1316,   69, 1317, 1318,   69,
+     1319,   69, 1315,   69,   69,   69,   69,   69, 1313,   69,
+
+     1321, 1322,   69, 1323, 1324,   69,   69, 1325, 1326, 1329,
+       69, 1327,   69, 1320,   69,   69,   69,   69, 1328,   69,
+     1336, 1334,   69, 1331, 1335,   69,   69, 1338,   69,   69,
+       69,   69, 1330, 1332,   69, 1333, 1337,   69, 1339, 1341,
+     1342, 1343,   69, 1347,   69, 1344, 1340,   69,   69, 1345,
+       69, 1346,   69, 1349,   69,   69, 1350, 1351,   69,   69,
+     1354,   69, 1352,   69, 1353,   69,   69,   69, 1356,   69,
+     1355,   69,   69,   69,   69, 1357, 1360, 1358, 1359, 1364,
+       69,   69, 1361, 1365,   69, 1367,   69,   69, 1960, 1362,
+     1366, 1363,   69, 1368, 1371,   69, 1369, 1373, 1370, 1372,
+
+       69,   69, 1374,   69,   69,   69, 1375, 1379, 1376,   69,
+       69,   69,   69,   69, 1380,   69, 1385,   69,   69, 1382,
+       69, 1386, 1377, 1381,   69, 1378, 1389,   69,   69, 1384,
+       69,   69, 1383, 1387,   69, 1390, 1391, 1393,   69, 1392,
+     1394,   69,   69, 1395, 1388, 1396,   69, 1397,   69,   69,
+       69,   69,   69, 1399, 1398, 1400,   69,   69,   69,   69,
+       69,   69, 1401, 1405, 1406,   69,   69, 1410,   69,   69,
+     1403, 1402, 1404, 1419, 1407, 1409, 1412,   69, 1411,   69,
+     1413,   69,   69, 1414, 1417, 1408, 1415,   69, 1418,   69,
+     1421,   69,   69, 1423,   69, 1416,   69, 1424,   69,   69,
+
+     1427, 1422,   69,   69,   69,   69,   69, 1420, 1428, 1431,
+     1425, 1429,   69,   69,   69,   69,   69, 1426,   69, 1434,
+     1437,   69, 1438,   69,   69,   69,   69, 1430, 1433, 1432,
+     1440,   69, 1436, 1435,   69,   69,   69,   69, 1439,   69,
+       69, 1450,   69,   69,   69, 1442, 1451,   69,   69,   69,
+     1441, 1448, 1475, 1443, 1444, 1446,   69, 1452, 1447, 1445,
+     1454, 1449, 1453,   69, 1455, 1456,   69, 1457,   69,   69,
+       69, 1458, 1460,   69, 1461,   69, 1462,   69, 1464,   69,
+       69,   69, 1459, 1466,   69, 1467,   69,   69,   69, 1463,
+     1470,   69, 1469, 1472,   69,   69,   69,   69, 1465,   69,
+
+     1468,   69, 1474,   69, 1476, 1478,   69, 1471, 1482,   69,
+       69,   69,   69, 1473, 1480,   69, 1479,   69,   69, 1477,
+     1481, 1486, 1487,   69, 1489,   69,   69, 1485,   69, 1491,
+     1483,   69,   69,   69, 1484, 1492,   69, 1488, 1494,   69,
+       69, 1490,   69, 1493,   69, 1498,   69, 1499,   69, 1496,
+       69, 1504,   69,   69, 1505, 1501,   69, 1495,   69, 1500,
+     1497, 1502, 1503,   69, 1508, 1509,   69, 1507,   69, 1510,
+       69,   69,   69, 1506,   69, 1960,   69, 1511,   69, 1517,
+     1515,   69, 1521,   69,   69,   69, 1512, 1514, 1513, 1518,
+     1516, 1522,   69, 1520, 1519,   69, 1524,   69,   69, 1523,
+
+       69,   69, 1528,   69,   69,   69,   69, 1529, 1530, 1525,
+     1531,   69, 1526,   69,   69,   69,   69,   69, 1532, 1527,
+     1536,   69, 1538,   69, 1533, 1539, 1534, 1540, 1535,   69,
+       69, 1543,   69,   69, 1542, 1537,   69,   69, 1547, 1541,
+     1544,   69,   69, 1545, 1548,   69,   69, 1546, 1551,   69,
+     1553, 1550, 1552,   69,   69,   69,   69, 1554,   69,   69,
+     1549,   69,   69,   69, 1557, 1560,   69,   69,   69, 1562,
+     1555, 1960, 1561, 1559,   69, 1565,   69,   69,   69,   69,
+     1556, 1558, 1566, 1564,   69, 1563, 1567,   69,   69, 1570,
+       69, 1573, 1568, 1569, 1571,   69, 1572,   69,   69, 1575,
+
+       69,   69,   69,   69,   69, 1574, 1581,   69, 1579,   69,
+       69,   69, 1576, 1577, 1578,   69,   69,   69, 1582,   69,
+       69, 1588,   69,   69, 1580,   69, 1589,   69, 1585,   69,
+     1592, 1584, 1593, 1587, 1594,   69, 1583, 1595,   69,   69,
+     1586, 1590,   69, 1596, 1591,   69,   69,   69,   69, 1597,
+       69,   69,   69, 1604, 1605,   69, 1601, 1598,   69, 1606,
+       69,   69,   69,   69,   69,   69, 1600, 1599, 1602, 1603,
+     1608, 1614,   69, 1615,   69, 1609, 1607,   69,   69, 1610,
+     1611, 1612,   69, 1613,   69,   69,   69,   69,   69, 1619,
+       69, 1960, 1616, 1624,   69, 1621, 1618, 1617, 1625,   69,
+
+       69, 1628,   69,   69,   69, 1620, 1622, 1629, 1623, 1626,
+       69, 1632,   69,   69, 1631, 1634,   69,   69, 1627, 1630,
+     1636,   69, 1637,   69,   69, 1638, 1633,   69,   69,   69,
+       69,   69,   69,   69,   69, 1642, 1635, 1643, 1641,   69,
+       69, 1640, 1645,   69, 1647, 1648, 1650,   69, 1646, 1639,
+     1644, 1651,   69,   69,   69,   69, 1654,   69, 1649, 1653,
+     1652,   69, 1655, 1656,   69, 1657,   69, 1659, 1658,   69,
+       69,   69,   69, 1660,   69, 1661,   69,   69,   69,   69,
+     1662,   69, 1665,   69, 1664,   69, 1667,   69,   69, 1663,
+     1666,   69, 1668,   69, 1670,   69, 1673, 1669,   69,   69,
+
+     1671,   69, 1672,   69, 1675, 1678,   69, 1674, 1676,   69,
+     1682,   69, 1680, 1681,   69,   69,   69,   69, 1677,   69,
+     1679, 1684, 1683, 1687, 1685,   69,   69,   69, 1690,   69,
+     1686, 1691,   69,   69, 1693, 1694,   69,   69,   69, 1688,
+     1695, 1689, 1696,   69, 1697,   69, 1698,   69,   69, 1692,
+     1701, 1702,   69,   69, 1704,   69, 1699, 1703, 1705,   69,
+       69,   69, 1700, 1708,   69,   69,   69, 1707,   69, 1709,
+       69, 1712,   69, 1716,   69,   69,   69,   69,   69,   69,
+     1720,   69, 1721, 1706,   69, 1714, 1718, 1710, 1711, 1715,
+     1713,   69, 1722,   69,   69, 1717, 1719,   69, 1724,   69,
+
+     1723,   69,   69, 1730,   69,   69,   69,   69, 1727, 1731,
+     1732, 1734,   69,   69, 1725,   69,   69, 1735,   69,   69,
+       69, 1728, 1729, 1726, 1736, 1733,   69, 1741, 1738, 1742,
+       69, 1737, 1739,   69,   69,   69,   69, 1746,   69, 1740,
+     1745,   69, 1743, 1747, 1744,   69, 1748,   69, 1749, 1751,
+       69, 1750, 1754,   69, 1752,   69, 1758,   69, 1753,   69,
+     1756,   69,   69, 1760,   69,   69,   69, 1763,   69,   69,
+       69,   69,   69,   69, 1755, 1765,   69, 1757,   69, 1766,
+       69, 1762, 1764,   69, 1761, 1770, 1769, 1759, 1767, 1772,
+       69,   69, 1768, 1774,   69, 1775,   69,   69,   69, 1777,
+
+       69,   69, 1771, 1776,   69, 1781, 1779,   69,   69,   69,
+     1773, 1784,   69, 1785,   69,   69,   69, 1778, 1789,   69,
+     1780, 1782,   69,   69, 1791, 1790,   69, 1787, 1786,   69,
+     1783,   69,   69,   69, 1794, 1797, 1788, 1795, 1792,   69,
+       69, 1800,   69, 1801,   69,   69, 1803,   69,   69, 1793,
+       69,   69, 1796, 1804, 1960, 1806, 1798, 1799, 1807,   69,
+     1808,   69, 1809,   69, 1802, 1805,   69, 1811,   69,   69,
+     1812, 1810, 1813,   69,   69,   69,   69, 1817,   69,   69,
+       69,   69, 1820,   69, 1818, 1816,   69,   69, 1814, 1819,
+       69, 1821,   69,   69,   69, 1815,   69, 1824,   69,   69,
+
+     1822, 1826, 1825,   69,   69,   69,   69, 1823, 1861, 1832,
+     1834,   69, 1827,   69, 1828, 1845, 1829, 1830, 1835,   69,
+     1837,   69,   69,   69, 1831, 1833, 1836, 1838, 1839,   69,
+       69, 1840, 1842,   69,   69,   69,   69, 1846, 1847,   69,
+     1848,   69,   69,   69, 1841,   69,   69, 1849, 1960, 1843,
+       69,   69,   69, 1844, 1866, 1853, 1854, 1856,   69,   69,
+     1851, 1857,   69, 1858,   69,   69,   69, 1852, 1850, 1860,
+       69, 1855,   69, 1862, 1859, 1864,   69,   69,   69,   69,
+     1865, 1863,   69,   69, 1868,   69,   69,   69,   69, 1872,
+       69, 1873, 1867,   69,   69,   69,   69,   69,   69, 1871,
+
+       69, 1869,   69, 1870, 1875, 1876, 1877,   69, 1874, 1884,
+       69,   69, 1880,   69, 1878, 1879, 1885, 1882, 1886,   69,
+     1883, 1887,   69, 1881,   69,   69, 1892,   69, 1891, 1888,
+     1889,   69, 1894,   69,   69,   69, 1890, 1897, 1898,   69,
+       69, 1893,   69,   69,   69,   69,   69,   69,   69, 1895,
+       69,   69,   69, 1899, 1896,   69, 1907, 1900, 1960, 1901,
+     1902, 1904,   69, 1905, 1903,   69, 1906, 1908,   69, 1910,
+     1911, 1909,   69,   69, 1914, 1915,   69, 1912, 1913,   69,
+       69, 1916,   69, 1917,   69, 1920,   69,   69,   69,   69,
+       69,   69,   69, 1923,   69,   69, 1927, 1928, 1918,   69,
+
+     1922,   69, 1930, 1919,   69, 1921,   69, 1926, 1924, 1932,
+     1925,   69, 1931, 1933,   69, 1935,   69,   69, 1929,   69,
+       69,   69,   69,   69, 1936,   69, 1937, 1939, 1941,   69,
+     1942,   69,   69, 1934,   69, 1945,   69,   69, 1948, 1938,
+     1940, 1949,   69, 1951,   69,   69, 1952,   69, 1943,   69,
+     1944, 1946, 1950,   69,   69, 1947, 1953,   69, 1954, 1955,
+       69, 1958,   69, 1959,   69, 1960, 1960, 1960, 1960, 1960,
+     1960, 1960, 1960, 1960, 1960, 1960, 1956, 1960, 1960, 1957,
+       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, 1960,   72,   72,
+       72,   72,  129,  129, 1960, 1960, 1960,  129,  129,  131,
+      131, 1960, 1960,  131, 1960,  131,  133, 1960, 1960, 1960,
+     1960, 1960,  133,  136,  136, 1960, 1960, 1960,  136,  136,
+      138, 1960, 1960, 1960, 1960, 1960,  138,  140,  140, 1960,
+      140,  140,  140,  140,   73,   73, 1960,   73,   73,   73,
+       73,   13, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960,
+     1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960,
+     1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960,
+
+     1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960,
+     1960
     } ;
 
-static yyconst flex_int16_t yy_chk[3905] =
+static yyconst flex_int16_t yy_chk[3912] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1516,7 +1534,7 @@ static yyconst flex_int16_t yy_chk[3905] =
         9,  161,   33,    6,    7,    7,    7,    7,    9,    7,
        10,   10,   10,   45,   45,    7,    8,    8,    8,    8,
        10,    8,   21,   33,  161,   21,   21,    8,   11,   11,
-       11,   11,   11,   11, 1961,   20,   29,   20,   20,   11,
+       11,   11,   11,   11, 1966,   20,   29,   20,   20,   11,
 
        20,   29,   24,   21,   75,   20,   24,   75,   11,   12,
        12,   12,   12,   12,   12,   83,   22,   22,   26,   26,
@@ -1527,7 +1545,7 @@ static yyconst flex_int16_t yy_chk[3905] =
        32,   32,   35,  103,   37,   32,   67,   31,   70,   37,
        36,   36,   70,   31,   76,   36,   77,   31,   76,   37,
        39,   32,   34,   37,   37,   36,   78,   34,   36,   78,
-       84,   34,   38,   38,   39,   38,   77,   34,  714,   39,
+       84,   34,   38,   38,   39,   38,   77,   34,  715,   39,
 
        34,   92,   78,   40,   40,   79,   92,   34,   40,   84,
        38,   56,   40,   56,   56,   64,   56,   64,   64,   66,
@@ -1644,299 +1662,300 @@ static yyconst flex_int16_t yy_chk[3905] =
       553,  549,  551,  551,  554,  552,  555,  557,  553,  554,
       547,  558,  559,  560,  550,  559,  557,  561,  561,  562,
       558,  564,  566,  567,  564,  555,  568,  560,  567,  569,
-      570,  571,  564,  572,  562,  573,  574,  575, 1233,  573,
+      570,  571,  564,  572,  562,  573,  574,  575, 1238,  573,
       579,  576,  572,  566,  578,  577,  579,  568,  581,  569,
-      576,  571,  570,  582,  574, 1233,  575,  577,  578,  580,
+      576,  571,  570,  582,  574, 1238,  575,  577,  578,  580,
       580,  583,  586,  587,  584,  589,  583,  582,  581,  584,
       585,  588,  590,  590,  585,  587,  588,  591,  593,  594,
 
-      592,  586,  591,  592,  595,  596,  589,  597,  597,  595,
-      598,  600,  594,  599,  599,  601,  593,  602,  603,  601,
-      604,  605,  607,  607,  609,  596,  600,  608,  598,  611,
-      610,  608,  612,  611,  604,  613,  602,  614,  617,  609,
-      613,  605,  603,  606,  615,  616,  606,  612,  606,  616,
-       52,  614,  606,  617,  606,  610,  618,  619,  615,  606,
-      620,  618,  619,  621,  606,  622,  623,   51,  624,  625,
-      625,  618,  623,  624,  620,  627,  628,  630,  629,  622,
-      633,  628,  631,  631,  621,  626,  626,  627,  633,  630,
-      632,  626,  629,  626,  634,  632,  635,  636,  636,  637,
-
-      639,  641,  643,  637,  626,  639,  640,  643,  634,  640,
-      642,  626,  644,  645,  647,  635,  646,  644,  648,  649,
-      641,  650,  651,  642,  653,  646,  650,  648,  654,  652,
-      647,  655,  645,  657,  659,  658,  655,  654,  649,  663,
-      660,  661,  651,  652,  653,  660,  661,  666,  663,  659,
-      662,  668,  657,  658,  665,  662,  664,  664,  669,  665,
-      666,  672,  669,  669,  670,  670,  671,  668,  670,  671,
-      673,  674,  675,  676,  677,  672,  676,  678,  679,  680,
-      682,  681,  683,  679,  680,  685,  674,  681,  683,  686,
-      673,  688,  675,  678,  685,  677,  682,  684,  684,  687,
-
-      689,  690,  687,  691,  696,  692,  693,  686,  694,  688,
-      692,  693,  697,  694,  698,  697,  691,  699,  700,  689,
-      702,  690,  696,  700,  704,  698,  701,  703,  703,  699,
-      705,  701,  707,  706,  708,  702,  707,  709,  710,  711,
-      713,  715,   46,  704,  705,  706,  709,  716,  717,  718,
-      726,  719,  708,  720,  718,  715,  719,  710,  720,  713,
-      721,  722,  716,  723,  711,  721,  724,  725,  717,  726,
-      728,  724,  727,  729,  731,  722,  732,  723,  733,  727,
-      730,  730,  725,  734,  733,  728,  735,  735,  731,  737,
-      736,  738,  729,  740,  732,  736,  737,  739,  741,  742,
-
-      739,  743,  745,  734,  742,  738,  747,  741,  744,  748,
-      747,  740,  749,  744,  750,  751,  752,  753,  748,  754,
-      743,  745,  755,  752,  756,  757,  758,  749,  759,  753,
-      751,  757,  762,  750,  765,  760,  763,  762,  754,  764,
-      766,  758,  756,  755,  760,  766,  767,  764,  759,  769,
-      763,  768,  770,  773,  765,  768,  768,  772,  767,  771,
-      771,  790,  773,  790,  774,  777,  770,  783,  769,  774,
-      772,  775,  775,  776,  777,  778,  779,  779,  776,  780,
-      778,  781,  782,  791,  784,  783,  781,  785,  780,  784,
-      786,  794,  785,  787,  791,  786,  782,  787,  788,  789,
-
-      789,  793,  795,  800,  796,  793,  794,  788,  799,  798,
-      801,  800,  788,  796,  788,  803,  788,  797,  788,  802,
-      795,  797,  797,  798,  801,  804,  806,  799,  802,  805,
-      805,  807,  807,  803,  809,  810,  811,  809,  812,  812,
-      810,  806,  813,  814,  814,  816,  815,  817,  817,  818,
-      804,  815,  819,  820,  821,  811,  823,  819,   41,  821,
-      825,  820,  813,  822,  822,  824,  816,  825,  827,  818,
-      828,  824,  829,  827,  823,  828,  830,  829,  831,  832,
-      833,  830,  834,  834,  835,  836,  837,  831,  838,  841,
-      840,  833,  839,  838,  844,  842,  843,  843,  832,  845,
-
-      846,  841,  847,  849,  835,  836,  839,  847,  852,  837,
-      840,  854,  839,  842,  844,  848,  848,  850,  846,  856,
-      854,  856,  850,  855,  845,  853,  849,  852,  857,  853,
-      853,  855,  858,  860,  859,  861,  862,  858,  859,  863,
-      864,  865,  857,  866,  860,  864,  867,  868,  869,  870,
-      867,  876,  871,  872,  861,  873,  874,  863,  876,  865,
-      878,  870,  862,  866,  875,  868,  871,  869,  872,  875,
-      873,  877,  879,  880,  881,  874,  877,  882,  878,  883,
-      881,  879,  884,  894,  883,  885,  891,  884,  880,  893,
-      885,  886,  886,  887,  887,  889,  889,  890,  882,  897,
-
-      892,  890,  894,  893,  891,  892,  895,  898,  896,  899,
-      895,  895,  896,  896,  900,  901,  902,  904,  903,  897,
-      905,  908,  902,  903,  906,  907,  898,  909,  899,  916,
-      910,  911,  911,  916,  901,  908,  904,  913,  912,  905,
-      900,  912,  922,  906,  907,  910,  914,  914,  909,  913,
-      915,  917,  918,  919,  920,  915,  920,  923,  923,  926,
-      920,  918,  922,  924,  917,  925,  919,  927,  924,  925,
-      928,  930,  939,  920,  932,  928,  944,  926,  934,  932,
-      933,  933,  943,  934,  936,  936,  945,  927,  939,  930,
-      938,  938,  941,  942,  942,  941,  947,  943,  946,  949,
-
-      945,  944,  951,  946,  948,  948,  950,  950,  953,  952,
-      954,  947,  953,  955,  957,  957,  958,  959,  955,  949,
-      952,  960,  960,  961,  951,  962,  963,  964,  961,  954,
-      965,  959,  967,  966,  958,  966,  964,  967,  968,  969,
-      972,  974,  970,  968,  977,  962,  963,  970,  973,  973,
-      965,  975,  978,  978,  972,  979,  980,  975,  986,  969,
-      974,  987,  984,  981,  987,  982,  981,  979,  977,  981,
-      982,  984,  983,  985,  988,  990,  980,  983,  985,  988,
-      991,  981,  992,  986,  989,  989,  993,  994,  996,  995,
-      997,  993,  994,  990,  995,  997,  998,  998,  999,  991,
-
-     1000, 1001,  992,  999, 1002, 1003, 1007, 1006, 1004, 1005,
-     1008,  996, 1006, 1009, 1010, 1012, 1012, 1014, 1000, 1003,
-     1004, 1001, 1005, 1013, 1002, 1016, 1007, 1009, 1013, 1015,
-     1008, 1017, 1014, 1019, 1016, 1010, 1015, 1016, 1021, 1022,
-     1022, 1023, 1025, 1026, 1023, 1024, 1027, 1017, 1019, 1030,
-     1024, 1029, 1026, 1019, 1030, 1028, 1031, 1031, 1025, 1032,
-     1029, 1033, 1034, 1021, 1028, 1027, 1037, 1028, 1035, 1036,
-     1039, 1040, 1041, 1041, 1033, 1042, 1044, 1043, 1037, 1032,
-     1034, 1044, 1035, 1045, 1045, 1036, 1043, 1046, 1047, 1040,
-     1050, 1042, 1049, 1054,   14, 1039, 1046, 1049, 1045, 1046,
-
-     1051, 1056, 1052, 1053, 1060, 1051, 1047, 1052, 1050, 1053,
-     1055, 1062, 1061, 1054, 1056, 1055, 1057, 1063, 1064, 1057,
-     1061, 1065, 1066, 1060, 1062, 1057, 1065, 1067, 1069, 1070,
-     1075, 1071, 1077, 1070, 1072, 1063, 1071, 1064, 1066, 1072,
-     1074, 1073, 1078, 1078, 1079, 1067, 1073, 1077, 1069, 1074,
-     1080, 1081, 1082, 1075, 1083, 1084, 1085, 1080, 1079, 1086,
-     1084, 1087,   13, 1081, 1082, 1088, 1088, 1087, 1085, 1089,
-     1090, 1090, 1089, 1083, 1092, 1093, 1095, 1086, 1096, 1092,
-     1094, 1094, 1097, 1096, 1093, 1098, 1099, 1100, 1095, 1101,
-     1102, 1097, 1100, 1103, 1104, 1104, 1106, 1098, 1101, 1105,
-
-     1107, 1099, 1108, 1110, 1105, 1109, 1109, 1112, 1103,    0,
-     1102, 1101, 1111, 1111, 1113, 1113, 1114, 1106, 1119, 1107,
-     1114, 1115, 1108, 1110, 1116, 1118, 1115, 1116, 1112, 1120,
-     1118, 1121, 1122, 1122, 1120, 1124, 1119, 1123, 1123, 1125,
-     1124, 1126, 1127, 1128, 1129, 1131, 1132, 1134, 1128, 1133,
-     1133, 1125, 1125, 1125, 1135, 1135, 1121, 1136, 1125, 1131,
-     1137, 1126, 1127, 1141, 1129, 1138, 1138, 1132, 1139, 1139,
-     1142, 1142, 1141, 1134, 1143, 1145, 1144, 1136, 1146, 1147,
-     1147, 1148, 1137, 1144, 1145, 1149, 1151, 1152, 1153, 1143,
-     1154, 1151, 1152, 1155, 1156, 1157, 1157, 1154, 1155, 1156,
-
-     1158, 1149, 1159, 1160, 1146, 1158, 1161, 1148, 1153, 1162,
-     1163, 1159, 1164, 1163, 1165, 1166, 1166, 1167, 1168, 1169,
-     1170, 1162, 1171, 1160, 1170, 1161, 1172, 1176, 1171, 1178,
-     1164, 1174, 1167,    0, 1169, 1172, 1177, 1168, 1173, 1173,
-     1165, 1179, 1174, 1175, 1175, 1183, 1179, 1174, 1176, 1178,
-     1177, 1180, 1180, 1181, 1182, 1184, 1185, 1181, 1181, 1182,
-     1186, 1185, 1187, 1188, 1189, 1190, 1187, 1184, 1191, 1192,
-     1190, 1183, 1186, 1193, 1192, 1188, 1195, 1196, 1196, 1195,
-     1197, 1197, 1198, 1198, 1199, 1193, 1200, 1203, 1201, 1189,
-     1191, 1202, 1200, 1201, 1205, 1207, 1203, 1202, 1207, 1205,
-
-     1208, 1210, 1211, 1211, 1199, 1212, 1213, 1216, 1214, 1215,
-     1219, 1216, 1208, 1210, 1217, 1213, 1218, 1221, 1221, 1217,
-     1222, 1218, 1223, 1224, 1219, 1212, 1214, 1228, 1215, 1221,
-     1230, 1223, 1224, 1226, 1226, 1231, 1232, 1239, 1222, 1234,
-     1234, 1232, 1235, 1228, 1235, 1230, 1236, 1236, 1238, 1231,
-     1240, 1240, 1241, 1242, 1243, 1238, 1244, 1239, 1245, 1246,
-     1247, 1241, 1248, 1249, 1251, 1252, 1243, 1252, 1244, 1251,
-     1245, 1253, 1254, 1255, 1242, 1247, 1259, 1254, 1257, 1261,
-     1255, 1262, 1248, 1249, 1266, 1246, 1262, 1257, 1267, 1253,
-     1259, 1260, 1260, 1263, 1264, 1263, 1265, 1270, 1268, 1264,
-
-     1273, 1265, 1266, 1268, 1269, 1261, 1271, 1274, 1267, 1269,
-     1270, 1275, 1275, 1277, 1271, 1276, 1276, 1278, 1279, 1273,
-     1280, 1274, 1281, 1279, 1281, 1280, 1282, 1283, 1277, 1284,
-     1287, 1284, 1285, 1285, 1286, 1289, 1283, 1278, 1282, 1283,
-     1289, 1290, 1287, 1286, 1292, 1293, 1290, 1295, 1294, 1297,
-     1299, 1301, 1300, 1302, 1306, 1297, 1299, 1292, 1303, 1303,
-     1304, 1309, 1302, 1295, 1307, 1293, 1294, 1300, 1307, 1304,
-     1305, 1305, 1308, 1306, 1309, 1310, 1301, 1308, 1311, 1310,
-     1310, 1312, 1315, 1315, 1316, 1319, 1311, 1317, 1317, 1318,
-     1318, 1320, 1325, 1316, 1321, 1322, 1327, 1319, 1328, 1321,
-
-     1322, 1312, 1323, 1323, 1330, 1326, 1329, 1331, 1333, 1320,
-     1326, 1329, 1333, 1328, 1332, 1332, 1334, 1325, 1336, 1327,
-     1335, 1337, 1330, 1331, 1339, 1335, 1340, 1341, 1342, 1343,
-     1344, 1334, 1345, 1347, 1347, 1348, 1352, 1352, 1348, 1349,
-     1337, 1350, 1344, 1339, 1336, 1351, 1355, 1342,    0, 1340,
-     1343, 1341, 1349, 1345, 1356, 1350, 1353, 1353, 1351, 1354,
-     1354, 1355, 1357, 1357, 1358, 1358, 1360, 1356, 1359, 1359,
-     1361, 1361, 1362, 1363, 1363, 1364, 1364, 1365, 1367, 1368,
-     1368, 1369, 1372, 1367, 1371, 1360, 1370, 1370, 1372, 1373,
-     1362, 1376, 1373, 1374, 1374, 1381, 1365, 1375, 1375, 1377,
-
-     1369, 1378, 1371, 1379, 1379, 1382, 1383, 1384, 1386, 1374,
-     1376, 1384, 1385, 1385, 1377, 1381, 1387, 1387, 1388, 1392,
-     1378, 1383, 1389, 1389, 1390, 1393, 1394, 1386, 1382, 1395,
-     1393, 1392, 1396, 1390, 1397, 1398, 1400, 1399, 1401, 1397,
-     1398, 1402, 1395, 1403, 1388, 1400, 1404, 1401, 1403, 1406,
-     1404, 1394, 1399, 1396, 1408, 1402, 1409, 1409, 1412, 1410,
-     1414, 1411, 1411, 1408, 1410, 1415, 1421, 1417, 1419, 1406,
-     1411, 1419, 1420, 1422, 1415, 1414, 1426, 1420, 1412, 1417,
-     1412, 1423, 1423, 1425, 1425, 1422, 1421, 1427, 1427, 1428,
-     1426, 1429, 1430, 1431, 1431, 1433, 1437, 1434, 1438, 1433,
-
-     1434, 1428, 1435, 1435, 1436, 1429, 1439, 1441, 1440, 1436,
-     1442, 1430, 1440, 1446, 1443, 1442, 1437, 1444, 1438, 1443,
-     1439, 1447, 1453, 1444, 1449, 1448, 1447, 1441, 1460, 1446,
-     1448, 1450, 1449, 1450, 1454, 1454, 1453, 1458, 1458, 1463,
-     1464, 1464, 1466, 1466, 1463, 1468, 1460, 1469, 1469, 1470,
-     1468, 1471, 1472, 1474, 1475, 1476, 1476, 1472, 1478, 1479,
-     1480, 1481, 1483, 1483, 1479, 1470, 1475, 1478, 1486, 1485,
-     1486, 1487, 1474, 1471, 1485, 1488, 1481, 1492, 1480, 1493,
-     1488, 1489, 1489, 1490, 1490, 1487, 1491, 1491, 1495, 1492,
-     1494, 1494, 1496, 1497, 1498, 1499, 1502, 1493, 1501, 1498,
-
-     1495, 1500, 1500, 1503, 1496, 1497, 1504, 1501, 1505, 1508,
-     1506, 1507, 1507, 1509, 1510, 1499, 1511, 1518, 1508, 1504,
-     1512, 1511, 1502, 1503, 1506, 1512, 1513, 1513, 1514, 1514,
-     1519, 1509, 1505, 1515, 1515, 1520, 1510, 1518, 1521, 1523,
-     1522, 1528, 1524, 1525, 1525, 1527, 1527, 1529, 1519, 1522,
-     1528, 1531, 1532, 1533, 1530, 1535, 1534, 1520, 1521, 1523,
-     1524, 1530, 1536, 1536, 1537, 1529, 1531, 1538, 1539, 1537,
-     1532, 1533, 1534, 1540, 1535, 1541, 1542, 1544, 1545, 1548,
-     1541, 1549, 1552, 1539, 1549, 1538, 1544, 1550, 1550, 1551,
-     1553, 1553, 1540, 1556, 1554, 1562, 1542, 1545, 1554, 1548,
-
-     1552, 1557, 1558, 1558, 1551, 1557, 1559, 1569, 1556, 1561,
-     1561, 1563, 1563, 1570, 1562, 1564, 1564, 1568, 1568, 1559,
-     1572, 1571, 1573, 1574, 1575, 1572, 1570, 1573, 1577, 1569,
-     1571, 1578, 1575, 1579, 1580,    0, 1578,    0, 1579, 1581,
-     1581, 1583, 1574, 1577, 1582, 1582, 1584, 1585, 1583, 1580,
-     1586, 1584, 1585, 1587, 1587, 1586, 1588, 1588, 1591, 1592,
-     1595, 1593, 1594, 1596, 1592, 1593, 1597, 1594, 1598, 1595,
-     1599, 1591, 1601, 1598, 1597, 1601, 1602, 1603, 1596, 1604,
-     1605, 1602, 1599, 1610, 1606, 1607, 1607, 1608, 1611, 1605,
-     1612, 1614, 1604, 1606, 1615, 1603, 1608, 1613, 1613, 1618,
-
-     1616, 1622, 1610, 1615, 1616, 1617, 1617, 1618, 1611, 1612,
-     1614, 1619, 1621, 1624, 1622, 1625, 1619, 1624, 1626, 1628,
-     1628, 1621, 1630, 1630, 1633, 1634, 1634, 1635, 1635, 1625,
-     1640, 1636, 1641, 1626, 1636, 1637, 1637, 1638, 1638, 1639,
-     1639, 1644, 1642, 1648, 1633, 1644, 1641, 1642, 1640, 1643,
-     1643, 1647, 1649, 1654, 1650, 1647, 1647, 1653, 1649, 1650,
-     1655, 1656, 1653, 1657, 1658, 1655, 1648, 1659, 1659, 1660,
-     1654, 1654, 1661, 1662, 1663, 1663, 1664, 1664, 1658, 1656,
-     1661, 1665, 1665, 1657, 1666, 1667, 1668, 1669, 1660, 1670,
-     1667, 1671, 1662,    0, 1672, 1674, 1674, 1678, 1670, 1675,
-
-     1666, 1681, 1675, 1676, 1679, 1679, 1668, 1682, 1676, 1685,
-     1681, 1671, 1680, 1669, 1672, 1678, 1680, 1684, 1685, 1683,
-     1687, 1688, 1682, 1683, 1683, 1690, 1694, 1695, 1695, 1687,
-     1684, 1694, 1696, 1688, 1698, 1702, 1699, 1699, 1703, 1698,
-     1699, 1696, 1701, 1701, 1702, 1705, 1704, 1706, 1708, 1707,
-     1690, 1704, 1706, 1708, 1709, 1710, 1710, 1712, 1703, 1713,
-     1714, 1714, 1715, 1717, 1716, 1718, 1705, 1707, 1716, 1719,
-     1720, 1722, 1717, 1724, 1713, 1715, 1712, 1721, 1720, 1709,
-     1731, 1718, 1721, 1723, 1723, 1726, 1726, 1732, 1719, 1727,
-     1727, 1728, 1724, 1730, 1730, 1733, 1728, 1722, 1735, 1735,
-
-     1731, 1736, 1737, 1738, 1738, 1739, 1739, 1740, 1741, 1742,
-     1732, 1743, 1743, 1744, 1733, 1736, 1744, 1745, 1745, 1747,
-     1741, 1748, 1749, 1750, 1737, 1749, 1740, 1751, 1750, 1742,
-     1752, 1747, 1753, 1754, 1754, 1752, 1756, 1756, 1757, 1759,
-     1759, 1748, 1760, 1762, 1761,    0, 1751, 1760, 1762, 1753,
-     1753, 1763, 1763, 1764, 1764, 1765, 1765, 1757, 1761, 1766,
-     1768, 1768, 1771, 1771, 1766, 1773, 1773, 1774, 1775, 1776,
-     1777, 1777, 1778, 1785, 1781, 1782, 1782, 1778, 1776, 1783,
-     1786, 1774, 1781, 1788, 1783, 1787, 1789, 1790, 1775, 1838,
-     1787, 1791, 1792, 1785, 1789, 1788, 1793, 1794, 1797, 1817,
-
-     1786, 1838, 1794, 1799, 1799, 1790, 1810, 1791, 1817, 1792,
-     1792, 1800, 1800, 1805, 1805, 1801, 1807, 1793, 1797, 1801,
-     1807, 1809, 1809, 1811, 1810, 1813, 1813, 1814, 1816, 1818,
-     1818, 1819, 1819, 1820, 1820, 1821, 1822, 1811, 1823, 1824,
-     1821,    0, 1814, 1825, 1826, 1827, 1816, 1845, 1825, 1826,
-     1828, 1828, 1845, 1823, 1831, 1831, 1833, 1833, 1835, 1840,
-     1824, 1822, 1836, 1836, 1827, 1839, 1839, 1835, 1841, 1841,
-     1844, 1846, 1847, 1844, 1840, 1848, 1850, 1847, 1849, 1854,
-     1856, 1857, 1854, 1858, 1856, 1846, 1861, 1860, 1862, 1864,
-     1863, 1865, 1850, 1867, 1848, 1866, 1849, 1858, 1860, 1861,
-
-     1869, 1857, 1868, 1868, 1874, 1864, 1875, 1862, 1863, 1869,
-     1866, 1870, 1870, 1867, 1871, 1871, 1865, 1872, 1873, 1876,
-     1877, 1875, 1872, 1873, 1876, 1878, 1878, 1880, 1883, 1874,
-     1884, 1885, 1886, 1888, 1877, 1884, 1885, 1887, 1891, 1890,
-     1894, 1892, 1880, 1893, 1895, 1897, 1886, 1883, 1902, 1895,
-     1887,    0, 1888, 1890, 1892, 1896, 1893, 1891, 1899, 1894,
-     1896, 1898, 1898, 1899, 1897, 1900, 1901, 1902, 1903, 1905,
-     1900, 1901, 1906, 1903, 1904, 1904, 1905, 1907, 1908, 1909,
-     1910, 1912, 1913, 1908, 1914, 1917, 1912, 1915, 1916, 1916,
-     1917, 1906, 1918, 1910, 1919, 1919, 1907, 1921, 1909, 1922,
-
-     1915, 1913, 1921, 1914, 1920, 1920, 1922, 1923, 1924, 1924,
-     1925, 1918, 1926, 1927, 1929, 1928, 1931, 1925, 1932, 1926,
-     1928, 1931, 1933, 1932, 1934, 1936, 1923, 1935, 1935, 1937,
-     1938, 1938, 1927, 1929, 1939, 1939, 1941, 1941, 1940, 1942,
-     1942, 1933, 1943, 1934, 1936, 1940, 1945, 1948, 1937, 1943,
-     1949, 1945, 1948, 1950, 1951, 1951, 1952, 1952,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0, 1949,
-        0,    0, 1950, 1956, 1956, 1956, 1956, 1956, 1956, 1956,
-     1957, 1957, 1957, 1957, 1957, 1957, 1957, 1958, 1958, 1958,
-     1958, 1958, 1958, 1958, 1959, 1959, 1959, 1959, 1959, 1959,
-
-     1959, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1962, 1962,
-        0, 1962, 1962, 1962, 1962, 1963, 1963,    0,    0,    0,
-     1963, 1963, 1964, 1964,    0,    0, 1964,    0, 1964, 1965,
-        0,    0,    0,    0,    0, 1965, 1966, 1966,    0,    0,
-        0, 1966, 1966, 1967,    0,    0,    0,    0,    0, 1967,
-     1968, 1968,    0, 1968, 1968, 1968, 1968, 1969, 1969,    0,
-     1969, 1969, 1969, 1969, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
-
-     1955, 1955, 1955, 1955
+      595,  586,  591,  587,  592,  595,  589,  592,  596,  597,
+      597,  598,  594,  599,  599,  600,  593,  601,  602,  603,
+      604,  601,  605,  607,  607,  609,  610,  608,  596,  598,
+      600,  608,  611,  612,  604,  616,  611,  602,  614,  616,
+      609,  613,  605,  603,  606,  615,  613,  606,  612,  606,
+      620,  610,  614,  606,  617,  606,  618,  619,  621,  615,
+      606,  618,  619,  622,  620,  606,  623,   52,  624,  617,
+      627,  618,  623,  624,  625,  625,  629,  622,  628,  621,
+      626,  626,  627,  628,  630,  633,  626,  634,  626,  632,
+      629,  631,  631,  633,  632,  635,  630,  636,  636,  626,
+
+      637,  634,  639,  641,  637,  640,  626,  639,  640,  645,
+      642,  643,  644,  647,  635,  646,  643,  644,  648,  649,
+      650,  651,  641,  642,  646,  650,  652,  648,  645,  647,
+      653,  655,  657,  654,  658,   51,  655,  663,  649,  659,
+      652,  651,  654,  660,  661,  668,  663,  666,  660,  661,
+      653,  657,  658,  662,  659,  664,  664,  665,  662,  669,
+      666,  668,  665,  669,  669,  670,  670,  671,  672,  670,
+      671,  673,  674,  675,  676,  677,  678,  676,  679,  680,
+      681,  682,  672,  679,  680,  686,  681,  674,  683,  684,
+      684,  673,  678,  675,  683,  685,  677,  682,  687,  688,
+
+      689,  687,  690,  686,  685,  691,  692,  693,  694,  696,
+      698,  692,  693,  694,  699,   46,  702,  688,  691,  689,
+      697,  698,  690,  697,  700,  701,  699,  696,  703,  700,
+      701,  702,  705,  703,  704,  704,  706,  707,  708,  709,
+      711,  712,  708,  710,  714,  718,  716,  717,  719,  707,
+      706,  705,  710,  719,  723,  727,  720,  709,  726,  711,
+      716,  720,  717,  714,  721,  718,  712,  722,  723,  721,
+      724,  725,  722,  726,  727,  728,  725,  729,  730,  731,
+      731,  732,  728,  733,  724,  734,  735,  736,  736,  737,
+      739,  734,  729,  738,  737,  732,  740,  730,  741,  740,
+
+      738,  733,  742,  743,  739,  744,  735,  745,  743,  746,
+      748,  742,  745,  749,  748,  750,  741,  751,  752,  753,
+      754,  755,  749,  756,  744,  757,  753,  759,  746,  758,
+      750,  760,  754,  752,  763,  758,  751,  761,  764,  763,
+      755,  765,  759,  757,  756,  766,  761,  768,  767,  765,
+      769,  760,  764,  767,  769,  769,  770,  771,  774,  768,
+      772,  772,  788,  773,  775,  766,  788,  774,  778,  775,
+      784,  771,  776,  776,  777,  770,  773,  778,  779,  777,
+      780,  780,  781,  779,  782,  783,   41,  785,  784,  782,
+      786,  781,  785,  787,  792,  786,  790,  790,  787,  783,
+
+      789,  791,  794,  791,  795,  792,  794,  796,  797,  789,
+      799,  800,  805,  801,  789,  802,  789,  797,  789,  795,
+      789,  801,  798,  803,  799,  796,  798,  798,  804,  802,
+      800,  811,  803,  806,  806,  807,  811,  805,  808,  808,
+      810,  812,  814,  810,  813,  813,  804,  815,  815,  816,
+      807,  817,  818,  818,  816,  819,  820,  821,  822,  824,
+      812,  820,  814,  822,  825,  821,  823,  823,  827,  826,
+      825,  834,  817,  829,  830,  819,  826,  824,  829,  830,
+      831,  827,  832,  833,  835,  831,  837,  832,  836,  836,
+      834,  838,  833,  839,  840,  835,  843,  842,  841,  840,
+
+      846,  844,  845,  845,  847,  848,  837,  851,  843,  849,
+      852,  838,  841,  854,  849,  852,  839,  842,  841,  844,
+      846,  850,  850,  848,  856,  858,  857,  858,  859,  847,
+      851,  855,  854,  856,  857,  855,  855,  861,  860,  862,
+      863,  861,  859,  860,  864,  865,  866,  867,  868,  869,
+      862,  866,  871,  869,  870,  872,  876,  877,  874,  863,
+      873,  875,  877,  865,  879,  867,  882,  872,  868,  879,
+      864,  871,  870,  874,  873,  876,  875,  878,  880,  881,
+      883,  882,  884,   14,  878,  885,  883,  886,  881,  887,
+      885,  892,  886,  893,  887,  892,  880,  888,  888,  889,
+
+      889,  891,  891,  884,  894,  895,  896,  899,  897,  894,
+      898,  893,  897,  897,  898,  898,  900,  901,  902,  895,
+      903,  905,  904,  906,  907,  896,  905,  899,  904,  908,
+      909,  910,  911,  913,  913,  900,  901,  912,  914,  903,
+       13,  914,  906,  907,  902,  910,  915,  924,  908,  909,
+      916,  916,  912,  911,  917,  919,  918,  920,  915,  917,
+      918,  921,  928,  922,  929,  922,  920,  924,  919,  922,
+      925,  925,  926,  930,  921,  927,  932,  926,  930,  927,
+      928,  934,  922,  941,  929,  936,  934,  935,  935,  945,
+      936,  938,  938,  946,  932,  940,  940,  943,  947,  941,
+
+      943,  944,  944,  948,  945,  949,  950,  950,  948,  951,
+      952,  954,  947,  951,  953,  953,  955,  956,  946,  957,
+      949,  956,  961,  958,  960,  960,  965,  955,  958,  962,
+      952,  963,  963,  954,  964,  966,  967,  968,  957,  964,
+      961,  972,  969,  962,  969,  967,  965,  970,  971,  973,
+      975,  977,  970,  971,  973,  966,  978,  968,  976,  976,
+      980,  972,  978,  982,  975,  981,  981,  983,  984,  989,
+      977,  984,  985,  986,  984,  982,  987,  985,  986,  990,
+      992,  992,  990,  988,  980,  987,  984,  983,  988,  993,
+      991,  994,  995,  996,  989,  991,  997,  998,  996,  999,
+
+     1000,  997,  998, 1001, 1001, 1000, 1002,  993, 1003, 1004,
+      994, 1002,  995, 1005, 1006, 1007, 1009, 1008, 1010, 1011,
+     1012, 1009,  999, 1013, 1015, 1015, 1003, 1007, 1006, 1004,
+     1008, 1016, 1017, 1005, 1012, 1018, 1016, 1019, 1010, 1011,
+     1020, 1024, 1018, 1022, 1013, 1026, 1019, 1017, 1026, 1019,
+     1025, 1025, 1027, 1028, 1030, 1029, 1020, 1027, 1022, 1031,
+     1033, 1032, 1035, 1022, 1029, 1033, 1024, 1036, 1031, 1028,
+     1032, 1031, 1037, 1030, 1034, 1034, 1039, 1038, 1042, 1043,
+     1036, 1040, 1035, 1044, 1044, 1045, 1046, 1048, 1048, 1047,
+     1037, 1038, 1039, 1040, 1047, 1046, 1049, 1043, 1050, 1052,
+
+     1053, 1045, 1048, 1042, 1052, 1049, 1054, 1055, 1049, 1056,
+     1057, 1054, 1055, 1059, 1058, 1056, 1050, 1063, 1053, 1058,
+     1060, 1065, 1066, 1060, 1064, 1067, 1059, 1069, 1068, 1060,
+     1057, 1070, 1064, 1068, 1065, 1073, 1063, 1072, 1072, 1079,
+     1066, 1074, 1075, 1069, 1067, 1074, 1076, 1075, 1077, 1070,
+     1078, 1076, 1081, 1077, 1083, 1073, 1082, 1082, 1084, 1078,
+     1085, 1086, 1079, 1087, 1088, 1084, 1089, 1081, 1083, 1088,
+     1090, 1091, 1085, 1086, 1092, 1092, 1093, 1091, 1089, 1093,
+     1094, 1094, 1087, 1097, 1096, 1098, 1098, 1099, 1090, 1096,
+     1100, 1101, 1097, 1102, 1103, 1100, 1104, 1105, 1106, 1099,
+
+     1101, 1104, 1107, 1108, 1108, 1102, 1105, 1109, 1110, 1103,
+     1116, 1111, 1109, 1112, 1113, 1113, 1114, 1107, 1106, 1105,
+     1115, 1115, 1117, 1117, 1118, 1123, 1125, 1119, 1118, 1110,
+     1111, 1116, 1119, 1112, 1120, 1122, 1114, 1120, 1130, 1124,
+     1122, 1126, 1126, 1123, 1124, 1127, 1127, 1128, 1129, 1131,
+     1132, 1125, 1128, 1133, 1135, 1132, 1136, 1138, 1130, 1140,
+     1129, 1129, 1129, 1137, 1137, 1139, 1139, 1129, 1135, 1131,
+     1141, 1142, 1142, 1133, 1143, 1143, 1145, 1136, 1147, 1140,
+     1146, 1146, 1148, 1138, 1150, 1145, 1149, 1151, 1151, 1148,
+     1152, 1153, 1141, 1147, 1155, 1149, 1156, 1157, 1158, 1155,
+
+     1164, 1156, 1165, 1159, 1160, 1158, 1163, 1153, 1159, 1160,
+     1150, 1161, 1161, 1162, 1166, 1163, 1152, 1157, 1162, 1167,
+     1164, 1165, 1167, 1168, 1169, 1171, 1166, 1170, 1170, 1172,
+     1173, 1174, 1175, 1176, 1180, 1174, 1177, 1177, 1175, 1181,
+     1171, 1168, 1176, 1178, 1182, 1173, 1179, 1179, 1172, 1187,
+     1169, 1183, 1194, 1181, 1178, 1180, 1183, 1184, 1184, 1178,
+     1188, 1185, 1186, 1189, 1182, 1185, 1185, 1186, 1189, 1191,
+     1192, 1193, 1188, 1195, 1192, 1187, 1196, 1194, 1195, 1197,
+     1198, 1191, 1200, 1193, 1197, 1200, 1201, 1201, 1202, 1202,
+     1203, 1203, 1198, 1204, 1205, 1208, 1206, 1207, 1196, 1213,
+
+     1205, 1206, 1210, 1207, 1208, 1212, 1215, 1210, 1212, 1216,
+     1216, 1213, 1217, 1204, 1218, 1219, 1220, 1221, 1215, 1222,
+     1223, 1221, 1224, 1218, 1222, 1223, 1226, 1226, 1227, 1233,
+     1228, 1229, 1217, 1219, 1235, 1220, 1224, 1236, 1226, 1228,
+     1229, 1231, 1231, 1237, 1244, 1233, 1227, 1247, 1237, 1235,
+     1251, 1236, 1239, 1239, 1240, 1243, 1240, 1241, 1241, 1245,
+     1245, 1246, 1243, 1248, 1244, 1249, 1250, 1252, 1247, 1253,
+     1246, 1254, 1258, 1266, 1256, 1248, 1251, 1249, 1250, 1256,
+     1259, 1257, 1252, 1257, 1264, 1259, 1260, 1262,    0, 1253,
+     1258, 1254, 1267, 1260, 1265, 1265, 1262, 1267, 1264, 1266,
+
+     1268, 1269, 1268, 1270, 1271, 1272, 1269, 1273, 1270, 1274,
+     1275, 1276, 1273, 1278, 1274, 1279, 1280, 1280, 1282, 1276,
+     1281, 1281, 1271, 1275, 1283, 1272, 1284, 1287, 1288, 1279,
+     1285, 1284, 1278, 1282, 1286, 1285, 1286, 1288, 1291, 1287,
+     1288, 1289, 1292, 1289, 1283, 1290, 1290, 1291, 1294, 1297,
+     1295, 1298, 1299, 1294, 1292, 1295, 1300, 1302, 1304, 1305,
+     1306, 1311, 1297, 1302, 1304, 1316, 1307, 1308, 1308, 1309,
+     1299, 1298, 1300, 1316, 1305, 1307, 1310, 1310, 1309, 1312,
+     1311, 1313, 1314, 1312, 1315, 1306, 1313, 1317, 1315, 1315,
+     1320, 1320, 1321, 1322, 1322, 1314, 1323, 1323, 1324, 1325,
+
+     1326, 1321, 1330, 1327, 1331, 1326, 1332, 1317, 1327, 1331,
+     1324, 1328, 1328, 1333, 1334, 1335, 1336, 1325, 1338, 1334,
+     1337, 1337, 1338, 1339, 1341, 1340, 1342, 1330, 1333, 1332,
+     1340, 1345, 1336, 1335, 1344, 1346, 1347, 1348, 1339, 1349,
+     1350, 1352, 1352, 1353, 1354, 1342, 1353, 1356, 1355, 1378,
+     1341, 1349, 1378, 1344, 1345, 1347, 1360, 1354, 1348, 1346,
+     1356, 1350, 1355, 1357, 1357, 1358, 1358, 1359, 1359, 1361,
+     1365, 1360, 1362, 1362, 1363, 1363, 1364, 1364, 1366, 1366,
+     1367, 1370, 1361, 1368, 1368, 1369, 1369, 1372, 1374, 1365,
+     1373, 1373, 1372, 1375, 1375, 1376, 1377, 1381, 1367, 1382,
+
+     1370, 1383, 1377, 1379, 1379, 1380, 1380, 1374, 1384, 1384,
+     1386, 1387, 1388, 1376, 1382, 1393, 1381, 1389, 1391, 1379,
+     1383, 1389, 1390, 1390, 1392, 1392, 1395, 1388, 1394, 1394,
+     1386, 1397, 1399, 1398, 1387, 1395, 1400, 1391, 1398, 1401,
+     1402, 1393, 1403, 1397, 1404, 1402, 1405, 1403, 1407, 1400,
+     1409, 1408, 1406, 1411, 1409, 1405, 1408, 1399, 1413, 1404,
+     1401, 1406, 1407, 1414, 1414, 1415, 1417, 1413, 1416, 1416,
+     1415, 1420, 1419, 1411, 1426,    0, 1424, 1416, 1422, 1424,
+     1420, 1427, 1428, 1428, 1425, 1431, 1417, 1419, 1417, 1425,
+     1422, 1430, 1430, 1427, 1426, 1432, 1432, 1433, 1434, 1431,
+
+     1435, 1436, 1436, 1438, 1442, 1439, 1443, 1438, 1439, 1433,
+     1440, 1440, 1434, 1441, 1444, 1446, 1445, 1447, 1441, 1435,
+     1445, 1449, 1447, 1451, 1442, 1448, 1443, 1449, 1444, 1452,
+     1448, 1453, 1454, 1458, 1452, 1446, 1453, 1459, 1459, 1451,
+     1454, 1455, 1465, 1455, 1463, 1463, 1468, 1458, 1469, 1469,
+     1473, 1468, 1471, 1471, 1475, 1473, 1474, 1474, 1476, 1477,
+     1465, 1480, 1479, 1483, 1477, 1481, 1481, 1485, 1486, 1484,
+     1475,    0, 1483, 1480, 1484, 1488, 1488, 1490, 1492, 1497,
+     1476, 1479, 1490, 1486, 1491, 1485, 1491, 1498, 1493, 1494,
+     1494, 1497, 1492, 1493, 1495, 1495, 1496, 1496, 1499, 1499,
+
+     1500, 1501, 1502, 1503, 1504, 1498, 1505, 1505, 1503, 1506,
+     1507, 1508, 1500, 1501, 1502, 1509, 1510, 1513, 1506, 1511,
+     1512, 1512, 1515, 1514, 1504, 1516, 1513, 1517, 1509, 1523,
+     1516, 1508, 1517, 1511, 1518, 1518, 1507, 1519, 1519, 1524,
+     1510, 1514, 1520, 1520, 1515, 1525, 1526, 1527, 1528, 1523,
+     1533, 1529, 1530, 1530, 1532, 1532, 1527, 1524, 1534, 1533,
+     1536, 1537, 1538, 1535, 1540, 1539, 1526, 1525, 1528, 1529,
+     1535, 1541, 1541, 1542, 1543, 1536, 1534, 1545, 1542, 1537,
+     1538, 1539, 1544, 1540, 1546, 1547, 1549, 1550, 1553, 1546,
+     1554,    0, 1543, 1554, 1556, 1549, 1545, 1544, 1555, 1555,
+
+     1557, 1558, 1558, 1559, 1561, 1547, 1550, 1559, 1553, 1556,
+     1562, 1563, 1563, 1564, 1562, 1566, 1566, 1567, 1557, 1561,
+     1568, 1568, 1569, 1569, 1573, 1573, 1564, 1574, 1575, 1576,
+     1577, 1579, 1578, 1582, 1580, 1577, 1567, 1578, 1576, 1583,
+     1584, 1575, 1580, 1585, 1583, 1584, 1586, 1586, 1582, 1574,
+     1579, 1587, 1587, 1588, 1589, 1596, 1590, 1591, 1585, 1589,
+     1588, 1590, 1591, 1592, 1592, 1593, 1593, 1597, 1596, 1598,
+     1599, 1600, 1597, 1598, 1601, 1599, 1602, 1603, 1604, 1608,
+     1600, 1609, 1603, 1606, 1602, 1615, 1606, 1607, 1616, 1601,
+     1604, 1610, 1607, 1611, 1609, 1612, 1612, 1608, 1613, 1617,
+
+     1610, 1619, 1611, 1620, 1615, 1618, 1618, 1613, 1616, 1621,
+     1622, 1622, 1620, 1621, 1623, 1626, 1624, 1627, 1617, 1629,
+     1619, 1624, 1623, 1629, 1626, 1630, 1631, 1633, 1633, 1638,
+     1627, 1635, 1635, 1639, 1639, 1640, 1640, 1641, 1645, 1630,
+     1641, 1631, 1642, 1642, 1643, 1643, 1644, 1644, 1646, 1638,
+     1647, 1648, 1648, 1649, 1652, 1647, 1645, 1649, 1652, 1652,
+     1653, 1654, 1646, 1655, 1658, 1662, 1660, 1654, 1655, 1658,
+     1659, 1660, 1661, 1664, 1664, 1663, 1665, 1667, 1666, 1668,
+     1668, 1669, 1669, 1653, 1671, 1662, 1666, 1659, 1659, 1663,
+     1661, 1670, 1670, 1672, 1673, 1665, 1667, 1674, 1672, 1675,
+
+     1671, 1676, 1677, 1679, 1679, 1681, 1680, 1683, 1675, 1680,
+     1681, 1684, 1684, 1685, 1673, 1686, 1687, 1685, 1690, 1695,
+     1692, 1676, 1677, 1674, 1686, 1683, 1689, 1690, 1688, 1692,
+     1693, 1687, 1688, 1688, 1701, 1699, 1700, 1700, 1708, 1689,
+     1699, 1703, 1693, 1701, 1695, 1707, 1703, 1704, 1704, 1706,
+     1706, 1704, 1709, 1710, 1707, 1711, 1713, 1709, 1708, 1712,
+     1711, 1713, 1714, 1715, 1715, 1717, 1718, 1719, 1719, 1720,
+     1722, 1721, 1723, 1724, 1710, 1721, 1727, 1712, 1725, 1722,
+     1726, 1718, 1720, 1737, 1717, 1726, 1725, 1714, 1723, 1728,
+     1728, 1729, 1724, 1731, 1731, 1732, 1732, 1736, 1733, 1735,
+
+     1735, 1738, 1727, 1733, 1740, 1740, 1737, 1741, 1742, 1745,
+     1729, 1743, 1743, 1744, 1744, 1746, 1747, 1736, 1748, 1748,
+     1738, 1741, 1749, 1750, 1750, 1749, 1752, 1746, 1745, 1753,
+     1742, 1754, 1755, 1756, 1754, 1757, 1747, 1755, 1752, 1758,
+     1757, 1759, 1759, 1761, 1761, 1762, 1764, 1764, 1765, 1753,
+     1767, 1766, 1756, 1765,    0, 1767, 1758, 1758, 1768, 1768,
+     1769, 1769, 1770, 1770, 1762, 1766, 1771, 1773, 1773, 1776,
+     1776, 1771, 1778, 1778, 1779, 1780, 1781, 1782, 1782, 1783,
+     1790, 1786, 1787, 1787, 1783, 1781, 1788, 1791, 1779, 1786,
+     1793, 1788, 1792, 1794, 1795, 1780, 1843, 1792, 1796, 1797,
+
+     1790, 1794, 1793, 1798, 1799, 1802, 1822, 1791, 1843, 1799,
+     1804, 1804, 1795, 1815, 1796, 1822, 1797, 1797, 1805, 1805,
+     1810, 1810, 1806, 1812, 1798, 1802, 1806, 1812, 1814, 1814,
+     1816, 1815, 1818, 1818, 1819, 1821, 1823, 1823, 1824, 1824,
+     1825, 1825, 1826, 1827, 1816, 1828, 1829, 1826,    0, 1819,
+     1830, 1831, 1832, 1821, 1850, 1830, 1831, 1833, 1833, 1850,
+     1828, 1836, 1836, 1838, 1838, 1840, 1845, 1829, 1827, 1841,
+     1841, 1832, 1844, 1844, 1840, 1846, 1846, 1849, 1851, 1852,
+     1849, 1845, 1853, 1855, 1852, 1854, 1859, 1861, 1862, 1859,
+     1863, 1861, 1851, 1866, 1865, 1867, 1869, 1868, 1870, 1855,
+
+     1872, 1853, 1871, 1854, 1863, 1865, 1866, 1874, 1862, 1873,
+     1873, 1879, 1869, 1880, 1867, 1868, 1874, 1871, 1875, 1875,
+     1872, 1876, 1876, 1870, 1877, 1878, 1881, 1882, 1880, 1877,
+     1878, 1881, 1883, 1883, 1885, 1888, 1879, 1889, 1890, 1891,
+     1893, 1882, 1889, 1890, 1892, 1896, 1895, 1899, 1897, 1885,
+     1898, 1900, 1902, 1891, 1888, 1907, 1900, 1892,    0, 1893,
+     1895, 1897, 1901, 1898, 1896, 1904, 1899, 1901, 1903, 1903,
+     1904, 1902, 1905, 1906, 1907, 1908, 1910, 1905, 1906, 1911,
+     1908, 1909, 1909, 1910, 1912, 1913, 1914, 1915, 1917, 1918,
+     1913, 1919, 1922, 1917, 1920, 1921, 1921, 1922, 1911, 1923,
+
+     1915, 1924, 1924, 1912, 1926, 1914, 1927, 1920, 1918, 1926,
+     1919, 1925, 1925, 1927, 1928, 1929, 1929, 1930, 1923, 1931,
+     1932, 1934, 1933, 1936, 1930, 1937, 1931, 1933, 1936, 1938,
+     1937, 1939, 1941, 1928, 1940, 1940, 1942, 1943, 1943, 1932,
+     1934, 1944, 1944, 1946, 1946, 1945, 1947, 1947, 1938, 1948,
+     1939, 1941, 1945, 1950, 1953, 1942, 1948, 1954, 1950, 1953,
+     1955, 1956, 1956, 1957, 1957,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0, 1954,    0,    0, 1955,
+     1961, 1961, 1961, 1961, 1961, 1961, 1961, 1962, 1962, 1962,
+     1962, 1962, 1962, 1962, 1963, 1963, 1963, 1963, 1963, 1963,
+
+     1963, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1965, 1965,
+     1965, 1965, 1965, 1965, 1965, 1967, 1967,    0, 1967, 1967,
+     1967, 1967, 1968, 1968,    0,    0,    0, 1968, 1968, 1969,
+     1969,    0,    0, 1969,    0, 1969, 1970,    0,    0,    0,
+        0,    0, 1970, 1971, 1971,    0,    0,    0, 1971, 1971,
+     1972,    0,    0,    0,    0,    0, 1972, 1973, 1973,    0,
+     1973, 1973, 1973, 1973, 1974, 1974,    0, 1974, 1974, 1974,
+     1974, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960,
+     1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960,
+     1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960,
+
+     1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960,
+     1960
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -2147,7 +2166,7 @@ static void config_end_include(void)
 #define YY_NO_INPUT 1
 #endif
 
-#line 2149 "<stdout>"
+#line 2168 "<stdout>"
 
 #define INITIAL 0
 #define quotedstring 1
@@ -2191,7 +2210,7 @@ FILE *yyget_out (void );
 
 void yyset_out  (FILE * _out_str  );
 
-                       int yyget_leng (void );
+yy_size_t yyget_leng (void );
 
 char *yyget_text (void );
 
@@ -2248,7 +2267,7 @@ static int input (void );
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
+#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
 #endif
 
 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
@@ -2272,7 +2291,7 @@ static int input (void );
        else \
                { \
                errno=0; \
-               while ( (result = (int) fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+               while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
                        { \
                        if( errno != EINTR) \
                                { \
@@ -2370,7 +2389,7 @@ YY_DECL
        {
 #line 207 "./util/configlexer.lex"
 
-#line 2372 "<stdout>"
+#line 2391 "<stdout>"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -2403,13 +2422,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 >= 1956 )
+                               if ( yy_current_state >= 1961 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
-                       yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
+                       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 3865 );
+               while ( yy_base[yy_current_state] != 3872 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -2564,12 +2583,12 @@ YY_RULE_SETUP
 case 26:
 YY_RULE_SETUP
 #line 236 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DO_DAEMONIZE) }
+{ YDVAR(1, VAR_USE_SYSTEMD) }
        YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 237 "./util/configlexer.lex"
-{ YDVAR(1, VAR_INTERFACE) }
+{ YDVAR(1, VAR_DO_DAEMONIZE) }
        YY_BREAK
 case 28:
 YY_RULE_SETUP
@@ -2579,785 +2598,790 @@ YY_RULE_SETUP
 case 29:
 YY_RULE_SETUP
 #line 239 "./util/configlexer.lex"
-{ YDVAR(1, VAR_OUTGOING_INTERFACE) }
+{ YDVAR(1, VAR_INTERFACE) }
        YY_BREAK
 case 30:
 YY_RULE_SETUP
 #line 240 "./util/configlexer.lex"
-{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) }
+{ YDVAR(1, VAR_OUTGOING_INTERFACE) }
        YY_BREAK
 case 31:
 YY_RULE_SETUP
 #line 241 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SO_RCVBUF) }
+{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) }
        YY_BREAK
 case 32:
 YY_RULE_SETUP
 #line 242 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SO_SNDBUF) }
+{ YDVAR(1, VAR_SO_RCVBUF) }
        YY_BREAK
 case 33:
 YY_RULE_SETUP
 #line 243 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SO_REUSEPORT) }
+{ YDVAR(1, VAR_SO_SNDBUF) }
        YY_BREAK
 case 34:
 YY_RULE_SETUP
 #line 244 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IP_TRANSPARENT) }
+{ YDVAR(1, VAR_SO_REUSEPORT) }
        YY_BREAK
 case 35:
 YY_RULE_SETUP
 #line 245 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IP_FREEBIND) }
+{ YDVAR(1, VAR_IP_TRANSPARENT) }
        YY_BREAK
 case 36:
 YY_RULE_SETUP
 #line 246 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CHROOT) }
+{ YDVAR(1, VAR_IP_FREEBIND) }
        YY_BREAK
 case 37:
 YY_RULE_SETUP
 #line 247 "./util/configlexer.lex"
-{ YDVAR(1, VAR_USERNAME) }
+{ YDVAR(1, VAR_CHROOT) }
        YY_BREAK
 case 38:
 YY_RULE_SETUP
 #line 248 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DIRECTORY) }
+{ YDVAR(1, VAR_USERNAME) }
        YY_BREAK
 case 39:
 YY_RULE_SETUP
 #line 249 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOGFILE) }
+{ YDVAR(1, VAR_DIRECTORY) }
        YY_BREAK
 case 40:
 YY_RULE_SETUP
 #line 250 "./util/configlexer.lex"
-{ YDVAR(1, VAR_PIDFILE) }
+{ YDVAR(1, VAR_LOGFILE) }
        YY_BREAK
 case 41:
 YY_RULE_SETUP
 #line 251 "./util/configlexer.lex"
-{ YDVAR(1, VAR_ROOT_HINTS) }
+{ YDVAR(1, VAR_PIDFILE) }
        YY_BREAK
 case 42:
 YY_RULE_SETUP
 #line 252 "./util/configlexer.lex"
-{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) }
+{ YDVAR(1, VAR_ROOT_HINTS) }
        YY_BREAK
 case 43:
 YY_RULE_SETUP
 #line 253 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MSG_BUFFER_SIZE) }
+{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) }
        YY_BREAK
 case 44:
 YY_RULE_SETUP
 #line 254 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MSG_CACHE_SIZE) }
+{ YDVAR(1, VAR_MSG_BUFFER_SIZE) }
        YY_BREAK
 case 45:
 YY_RULE_SETUP
 #line 255 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MSG_CACHE_SLABS) }
+{ YDVAR(1, VAR_MSG_CACHE_SIZE) }
        YY_BREAK
 case 46:
 YY_RULE_SETUP
 #line 256 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RRSET_CACHE_SIZE) }
+{ YDVAR(1, VAR_MSG_CACHE_SLABS) }
        YY_BREAK
 case 47:
 YY_RULE_SETUP
 #line 257 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RRSET_CACHE_SLABS) }
+{ YDVAR(1, VAR_RRSET_CACHE_SIZE) }
        YY_BREAK
 case 48:
 YY_RULE_SETUP
 #line 258 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CACHE_MAX_TTL) }
+{ YDVAR(1, VAR_RRSET_CACHE_SLABS) }
        YY_BREAK
 case 49:
 YY_RULE_SETUP
 #line 259 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) }
+{ YDVAR(1, VAR_CACHE_MAX_TTL) }
        YY_BREAK
 case 50:
 YY_RULE_SETUP
 #line 260 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CACHE_MIN_TTL) }
+{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) }
        YY_BREAK
 case 51:
 YY_RULE_SETUP
 #line 261 "./util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_HOST_TTL) }
+{ YDVAR(1, VAR_CACHE_MIN_TTL) }
        YY_BREAK
 case 52:
 YY_RULE_SETUP
 #line 262 "./util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_LAME_TTL) }
+{ YDVAR(1, VAR_INFRA_HOST_TTL) }
        YY_BREAK
 case 53:
 YY_RULE_SETUP
 #line 263 "./util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_SLABS) }
+{ YDVAR(1, VAR_INFRA_LAME_TTL) }
        YY_BREAK
 case 54:
 YY_RULE_SETUP
 #line 264 "./util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
+{ YDVAR(1, VAR_INFRA_CACHE_SLABS) }
        YY_BREAK
 case 55:
 YY_RULE_SETUP
 #line 265 "./util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
+{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
        YY_BREAK
 case 56:
 YY_RULE_SETUP
 #line 266 "./util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) }
+{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
        YY_BREAK
 case 57:
 YY_RULE_SETUP
 #line 267 "./util/configlexer.lex"
-{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
+{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) }
        YY_BREAK
 case 58:
 YY_RULE_SETUP
 #line 268 "./util/configlexer.lex"
-{ YDVAR(1, VAR_JOSTLE_TIMEOUT) }
+{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
        YY_BREAK
 case 59:
 YY_RULE_SETUP
 #line 269 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DELAY_CLOSE) }
+{ YDVAR(1, VAR_JOSTLE_TIMEOUT) }
        YY_BREAK
 case 60:
 YY_RULE_SETUP
 #line 270 "./util/configlexer.lex"
-{ YDVAR(1, VAR_TARGET_FETCH_POLICY) }
+{ YDVAR(1, VAR_DELAY_CLOSE) }
        YY_BREAK
 case 61:
 YY_RULE_SETUP
 #line 271 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
+{ YDVAR(1, VAR_TARGET_FETCH_POLICY) }
        YY_BREAK
 case 62:
 YY_RULE_SETUP
 #line 272 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
+{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
        YY_BREAK
 case 63:
 YY_RULE_SETUP
 #line 273 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_GLUE) }
+{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
        YY_BREAK
 case 64:
 YY_RULE_SETUP
 #line 274 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) }
+{ YDVAR(1, VAR_HARDEN_GLUE) }
        YY_BREAK
 case 65:
 YY_RULE_SETUP
 #line 275 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) }
+{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) }
        YY_BREAK
 case 66:
 YY_RULE_SETUP
 #line 276 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
+{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) }
        YY_BREAK
 case 67:
 YY_RULE_SETUP
 #line 277 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) }
+{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
        YY_BREAK
 case 68:
 YY_RULE_SETUP
 #line 278 "./util/configlexer.lex"
-{ YDVAR(1, VAR_USE_CAPS_FOR_ID) }
+{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) }
        YY_BREAK
 case 69:
 YY_RULE_SETUP
 #line 279 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CAPS_WHITELIST) }
+{ YDVAR(1, VAR_USE_CAPS_FOR_ID) }
        YY_BREAK
 case 70:
 YY_RULE_SETUP
 #line 280 "./util/configlexer.lex"
-{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
+{ YDVAR(1, VAR_CAPS_WHITELIST) }
        YY_BREAK
 case 71:
 YY_RULE_SETUP
 #line 281 "./util/configlexer.lex"
-{ YDVAR(1, VAR_PRIVATE_ADDRESS) }
+{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
        YY_BREAK
 case 72:
 YY_RULE_SETUP
 #line 282 "./util/configlexer.lex"
-{ YDVAR(1, VAR_PRIVATE_DOMAIN) }
+{ YDVAR(1, VAR_PRIVATE_ADDRESS) }
        YY_BREAK
 case 73:
 YY_RULE_SETUP
 #line 283 "./util/configlexer.lex"
-{ YDVAR(1, VAR_PREFETCH_KEY) }
+{ YDVAR(1, VAR_PRIVATE_DOMAIN) }
        YY_BREAK
 case 74:
 YY_RULE_SETUP
 #line 284 "./util/configlexer.lex"
-{ YDVAR(1, VAR_PREFETCH) }
+{ YDVAR(1, VAR_PREFETCH_KEY) }
        YY_BREAK
 case 75:
 YY_RULE_SETUP
 #line 285 "./util/configlexer.lex"
-{ YDVAR(0, VAR_STUB_ZONE) }
+{ YDVAR(1, VAR_PREFETCH) }
        YY_BREAK
 case 76:
 YY_RULE_SETUP
 #line 286 "./util/configlexer.lex"
-{ YDVAR(1, VAR_NAME) }
+{ YDVAR(0, VAR_STUB_ZONE) }
        YY_BREAK
 case 77:
 YY_RULE_SETUP
 #line 287 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_ADDR) }
+{ YDVAR(1, VAR_NAME) }
        YY_BREAK
 case 78:
 YY_RULE_SETUP
 #line 288 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_HOST) }
+{ YDVAR(1, VAR_STUB_ADDR) }
        YY_BREAK
 case 79:
 YY_RULE_SETUP
 #line 289 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_PRIME) }
+{ YDVAR(1, VAR_STUB_HOST) }
        YY_BREAK
 case 80:
 YY_RULE_SETUP
 #line 290 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_FIRST) }
+{ YDVAR(1, VAR_STUB_PRIME) }
        YY_BREAK
 case 81:
 YY_RULE_SETUP
 #line 291 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) }
+{ YDVAR(1, VAR_STUB_FIRST) }
        YY_BREAK
 case 82:
 YY_RULE_SETUP
 #line 292 "./util/configlexer.lex"
-{ YDVAR(0, VAR_FORWARD_ZONE) }
+{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) }
        YY_BREAK
 case 83:
 YY_RULE_SETUP
 #line 293 "./util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_ADDR) }
+{ YDVAR(0, VAR_FORWARD_ZONE) }
        YY_BREAK
 case 84:
 YY_RULE_SETUP
 #line 294 "./util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_HOST) }
+{ YDVAR(1, VAR_FORWARD_ADDR) }
        YY_BREAK
 case 85:
 YY_RULE_SETUP
 #line 295 "./util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_FIRST) }
+{ YDVAR(1, VAR_FORWARD_HOST) }
        YY_BREAK
 case 86:
 YY_RULE_SETUP
 #line 296 "./util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
+{ YDVAR(1, VAR_FORWARD_FIRST) }
        YY_BREAK
 case 87:
 YY_RULE_SETUP
 #line 297 "./util/configlexer.lex"
-{ YDVAR(0, VAR_VIEW) }
+{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
        YY_BREAK
 case 88:
 YY_RULE_SETUP
 #line 298 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VIEW_FIRST) }
+{ YDVAR(0, VAR_VIEW) }
        YY_BREAK
 case 89:
 YY_RULE_SETUP
 #line 299 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
+{ YDVAR(1, VAR_VIEW_FIRST) }
        YY_BREAK
 case 90:
 YY_RULE_SETUP
 #line 300 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
+{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
        YY_BREAK
 case 91:
 YY_RULE_SETUP
 #line 301 "./util/configlexer.lex"
-{ YDVAR(2, VAR_ACCESS_CONTROL) }
+{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
        YY_BREAK
 case 92:
 YY_RULE_SETUP
 #line 302 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_IDENTITY) }
+{ YDVAR(2, VAR_ACCESS_CONTROL) }
        YY_BREAK
 case 93:
 YY_RULE_SETUP
 #line 303 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_VERSION) }
+{ YDVAR(1, VAR_HIDE_IDENTITY) }
        YY_BREAK
 case 94:
 YY_RULE_SETUP
 #line 304 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IDENTITY) }
+{ YDVAR(1, VAR_HIDE_VERSION) }
        YY_BREAK
 case 95:
 YY_RULE_SETUP
 #line 305 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VERSION) }
+{ YDVAR(1, VAR_IDENTITY) }
        YY_BREAK
 case 96:
 YY_RULE_SETUP
 #line 306 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MODULE_CONF) }
+{ YDVAR(1, VAR_VERSION) }
        YY_BREAK
 case 97:
 YY_RULE_SETUP
 #line 307 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DLV_ANCHOR) }
+{ YDVAR(1, VAR_MODULE_CONF) }
        YY_BREAK
 case 98:
 YY_RULE_SETUP
 #line 308 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
+{ YDVAR(1, VAR_DLV_ANCHOR) }
        YY_BREAK
 case 99:
 YY_RULE_SETUP
 #line 309 "./util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
+{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
        YY_BREAK
 case 100:
 YY_RULE_SETUP
 #line 310 "./util/configlexer.lex"
-{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
+{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
        YY_BREAK
 case 101:
 YY_RULE_SETUP
 #line 311 "./util/configlexer.lex"
-{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
+{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
        YY_BREAK
 case 102:
 YY_RULE_SETUP
 #line 312 "./util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR) }
+{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
        YY_BREAK
 case 103:
 YY_RULE_SETUP
 #line 313 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
+{ YDVAR(1, VAR_TRUST_ANCHOR) }
        YY_BREAK
 case 104:
 YY_RULE_SETUP
 #line 314 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
+{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
        YY_BREAK
 case 105:
 YY_RULE_SETUP
 #line 315 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
        YY_BREAK
 case 106:
 YY_RULE_SETUP
 #line 316 "./util/configlexer.lex"
-{ YDVAR(1, VAR_BOGUS_TTL) }
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
        YY_BREAK
 case 107:
 YY_RULE_SETUP
 #line 317 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
+{ YDVAR(1, VAR_BOGUS_TTL) }
        YY_BREAK
 case 108:
 YY_RULE_SETUP
 #line 318 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
+{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
        YY_BREAK
 case 109:
 YY_RULE_SETUP
 #line 319 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IGNORE_CD_FLAG) }
+{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
        YY_BREAK
 case 110:
 YY_RULE_SETUP
 #line 320 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SERVE_EXPIRED) }
+{ YDVAR(1, VAR_IGNORE_CD_FLAG) }
        YY_BREAK
 case 111:
 YY_RULE_SETUP
 #line 321 "./util/configlexer.lex"
-{ YDVAR(1, VAR_FAKE_DSA) }
+{ YDVAR(1, VAR_SERVE_EXPIRED) }
        YY_BREAK
 case 112:
 YY_RULE_SETUP
 #line 322 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_LOG_LEVEL) }
+{ YDVAR(1, VAR_FAKE_DSA) }
        YY_BREAK
 case 113:
 YY_RULE_SETUP
 #line 323 "./util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
+{ YDVAR(1, VAR_VAL_LOG_LEVEL) }
        YY_BREAK
 case 114:
 YY_RULE_SETUP
 #line 324 "./util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
+{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
        YY_BREAK
 case 115:
 YY_RULE_SETUP
 #line 325 "./util/configlexer.lex"
-{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
+{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
        YY_BREAK
 case 116:
 YY_RULE_SETUP
 #line 326 "./util/configlexer.lex"
-{ 
-                                 YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
+{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
        YY_BREAK
 case 117:
 YY_RULE_SETUP
-#line 328 "./util/configlexer.lex"
-{ YDVAR(1, VAR_ADD_HOLDDOWN) }
+#line 327 "./util/configlexer.lex"
+{ 
+                                 YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
        YY_BREAK
 case 118:
 YY_RULE_SETUP
 #line 329 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DEL_HOLDDOWN) }
+{ YDVAR(1, VAR_ADD_HOLDDOWN) }
        YY_BREAK
 case 119:
 YY_RULE_SETUP
 #line 330 "./util/configlexer.lex"
-{ YDVAR(1, VAR_KEEP_MISSING) }
+{ YDVAR(1, VAR_DEL_HOLDDOWN) }
        YY_BREAK
 case 120:
 YY_RULE_SETUP
 #line 331 "./util/configlexer.lex"
-{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) }
+{ YDVAR(1, VAR_KEEP_MISSING) }
        YY_BREAK
 case 121:
 YY_RULE_SETUP
 #line 332 "./util/configlexer.lex"
-{ YDVAR(1, VAR_USE_SYSLOG) }
+{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) }
        YY_BREAK
 case 122:
 YY_RULE_SETUP
 #line 333 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_IDENTITY) }
+{ YDVAR(1, VAR_USE_SYSLOG) }
        YY_BREAK
 case 123:
 YY_RULE_SETUP
 #line 334 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_TIME_ASCII) }
+{ YDVAR(1, VAR_LOG_IDENTITY) }
        YY_BREAK
 case 124:
 YY_RULE_SETUP
 #line 335 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_QUERIES) }
+{ YDVAR(1, VAR_LOG_TIME_ASCII) }
        YY_BREAK
 case 125:
 YY_RULE_SETUP
 #line 336 "./util/configlexer.lex"
-{ YDVAR(2, VAR_LOCAL_ZONE) }
+{ YDVAR(1, VAR_LOG_QUERIES) }
        YY_BREAK
 case 126:
 YY_RULE_SETUP
 #line 337 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOCAL_DATA) }
+{ YDVAR(2, VAR_LOCAL_ZONE) }
        YY_BREAK
 case 127:
 YY_RULE_SETUP
 #line 338 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
+{ YDVAR(1, VAR_LOCAL_DATA) }
        YY_BREAK
 case 128:
 YY_RULE_SETUP
 #line 339 "./util/configlexer.lex"
-{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) }
+{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
        YY_BREAK
 case 129:
 YY_RULE_SETUP
 #line 340 "./util/configlexer.lex"
-{ YDVAR(1, VAR_INSECURE_LAN_ZONES) }
+{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) }
        YY_BREAK
 case 130:
 YY_RULE_SETUP
 #line 341 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
+{ YDVAR(1, VAR_INSECURE_LAN_ZONES) }
        YY_BREAK
 case 131:
 YY_RULE_SETUP
 #line 342 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
+{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
        YY_BREAK
 case 132:
 YY_RULE_SETUP
 #line 343 "./util/configlexer.lex"
-{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
+{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
        YY_BREAK
 case 133:
 YY_RULE_SETUP
 #line 344 "./util/configlexer.lex"
-{ YDVAR(0, VAR_REMOTE_CONTROL) }
+{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
        YY_BREAK
 case 134:
 YY_RULE_SETUP
 #line 345 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_ENABLE) }
+{ YDVAR(0, VAR_REMOTE_CONTROL) }
        YY_BREAK
 case 135:
 YY_RULE_SETUP
 #line 346 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_INTERFACE) }
+{ YDVAR(1, VAR_CONTROL_ENABLE) }
        YY_BREAK
 case 136:
 YY_RULE_SETUP
 #line 347 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_PORT) }
+{ YDVAR(1, VAR_CONTROL_INTERFACE) }
        YY_BREAK
 case 137:
 YY_RULE_SETUP
 #line 348 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_USE_CERT) }
+{ YDVAR(1, VAR_CONTROL_PORT) }
        YY_BREAK
 case 138:
 YY_RULE_SETUP
 #line 349 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_KEY_FILE) }
+{ YDVAR(1, VAR_CONTROL_USE_CERT) }
        YY_BREAK
 case 139:
 YY_RULE_SETUP
 #line 350 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_CERT_FILE) }
+{ YDVAR(1, VAR_SERVER_KEY_FILE) }
        YY_BREAK
 case 140:
 YY_RULE_SETUP
 #line 351 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
+{ YDVAR(1, VAR_SERVER_CERT_FILE) }
        YY_BREAK
 case 141:
 YY_RULE_SETUP
 #line 352 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
+{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
        YY_BREAK
 case 142:
 YY_RULE_SETUP
 #line 353 "./util/configlexer.lex"
-{ YDVAR(1, VAR_PYTHON_SCRIPT) }
+{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
        YY_BREAK
 case 143:
 YY_RULE_SETUP
 #line 354 "./util/configlexer.lex"
-{ YDVAR(0, VAR_PYTHON) }
+{ YDVAR(1, VAR_PYTHON_SCRIPT) }
        YY_BREAK
 case 144:
 YY_RULE_SETUP
 #line 355 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DOMAIN_INSECURE) }
+{ YDVAR(0, VAR_PYTHON) }
        YY_BREAK
 case 145:
 YY_RULE_SETUP
 #line 356 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MINIMAL_RESPONSES) }
+{ YDVAR(1, VAR_DOMAIN_INSECURE) }
        YY_BREAK
 case 146:
 YY_RULE_SETUP
 #line 357 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RRSET_ROUNDROBIN) }
+{ YDVAR(1, VAR_MINIMAL_RESPONSES) }
        YY_BREAK
 case 147:
 YY_RULE_SETUP
 #line 358 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_UDP_SIZE) }
+{ YDVAR(1, VAR_RRSET_ROUNDROBIN) }
        YY_BREAK
 case 148:
 YY_RULE_SETUP
 #line 359 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNS64_PREFIX) }
+{ YDVAR(1, VAR_MAX_UDP_SIZE) }
        YY_BREAK
 case 149:
 YY_RULE_SETUP
 #line 360 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNS64_SYNTHALL) }
+{ YDVAR(1, VAR_DNS64_PREFIX) }
        YY_BREAK
 case 150:
 YY_RULE_SETUP
 #line 361 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DEFINE_TAG) }
+{ YDVAR(1, VAR_DNS64_SYNTHALL) }
        YY_BREAK
 case 151:
 YY_RULE_SETUP
 #line 362 "./util/configlexer.lex"
-{ YDVAR(2, VAR_LOCAL_ZONE_TAG) }
+{ YDVAR(1, VAR_DEFINE_TAG) }
        YY_BREAK
 case 152:
 YY_RULE_SETUP
 #line 363 "./util/configlexer.lex"
-{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) }
+{ YDVAR(2, VAR_LOCAL_ZONE_TAG) }
        YY_BREAK
 case 153:
 YY_RULE_SETUP
 #line 364 "./util/configlexer.lex"
-{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) }
+{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) }
        YY_BREAK
 case 154:
 YY_RULE_SETUP
 #line 365 "./util/configlexer.lex"
-{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) }
+{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) }
        YY_BREAK
 case 155:
 YY_RULE_SETUP
 #line 366 "./util/configlexer.lex"
-{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) }
+{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) }
        YY_BREAK
 case 156:
 YY_RULE_SETUP
 #line 367 "./util/configlexer.lex"
-{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) }
+{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) }
        YY_BREAK
 case 157:
 YY_RULE_SETUP
 #line 368 "./util/configlexer.lex"
-{ YDVAR(0, VAR_DNSTAP) }
+{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) }
        YY_BREAK
 case 158:
 YY_RULE_SETUP
 #line 369 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_ENABLE) }
+{ YDVAR(0, VAR_DNSTAP) }
        YY_BREAK
 case 159:
 YY_RULE_SETUP
 #line 370 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
+{ YDVAR(1, VAR_DNSTAP_ENABLE) }
        YY_BREAK
 case 160:
 YY_RULE_SETUP
 #line 371 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
+{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
        YY_BREAK
 case 161:
 YY_RULE_SETUP
 #line 372 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
+{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
        YY_BREAK
 case 162:
 YY_RULE_SETUP
 #line 373 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
+{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
        YY_BREAK
 case 163:
 YY_RULE_SETUP
 #line 374 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_VERSION) }
+{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
        YY_BREAK
 case 164:
 YY_RULE_SETUP
 #line 375 "./util/configlexer.lex"
-{
-               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
+{ YDVAR(1, VAR_DNSTAP_VERSION) }
        YY_BREAK
 case 165:
 YY_RULE_SETUP
-#line 377 "./util/configlexer.lex"
+#line 376 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
        YY_BREAK
 case 166:
 YY_RULE_SETUP
-#line 379 "./util/configlexer.lex"
+#line 378 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
        YY_BREAK
 case 167:
 YY_RULE_SETUP
-#line 381 "./util/configlexer.lex"
+#line 380 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
        YY_BREAK
 case 168:
 YY_RULE_SETUP
-#line 383 "./util/configlexer.lex"
+#line 382 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
        YY_BREAK
 case 169:
 YY_RULE_SETUP
-#line 385 "./util/configlexer.lex"
+#line 384 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
        YY_BREAK
 case 170:
 YY_RULE_SETUP
-#line 387 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
+#line 386 "./util/configlexer.lex"
+{
+               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
        YY_BREAK
 case 171:
 YY_RULE_SETUP
 #line 388 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT) }
+{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
        YY_BREAK
 case 172:
 YY_RULE_SETUP
 #line 389 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_SLABS) }
+{ YDVAR(1, VAR_RATELIMIT) }
        YY_BREAK
 case 173:
 YY_RULE_SETUP
 #line 390 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_SIZE) }
+{ YDVAR(1, VAR_RATELIMIT_SLABS) }
        YY_BREAK
 case 174:
 YY_RULE_SETUP
 #line 391 "./util/configlexer.lex"
-{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
+{ YDVAR(1, VAR_RATELIMIT_SIZE) }
        YY_BREAK
 case 175:
 YY_RULE_SETUP
 #line 392 "./util/configlexer.lex"
-{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
+{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
        YY_BREAK
 case 176:
 YY_RULE_SETUP
 #line 393 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
+{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
        YY_BREAK
 case 177:
-/* rule 177 can match eol */
 YY_RULE_SETUP
 #line 394 "./util/configlexer.lex"
+{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
+       YY_BREAK
+case 178:
+/* rule 178 can match eol */
+YY_RULE_SETUP
+#line 395 "./util/configlexer.lex"
 { LEXOUT(("NL\n")); cfg_parser->line++; }
        YY_BREAK
 /* Quoted strings. Strip leading and ending quotes */
-case 178:
+case 179:
 YY_RULE_SETUP
-#line 397 "./util/configlexer.lex"
+#line 398 "./util/configlexer.lex"
 { BEGIN(quotedstring); LEXOUT(("QS ")); }
        YY_BREAK
 case YY_STATE_EOF(quotedstring):
-#line 398 "./util/configlexer.lex"
+#line 399 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
        else                { BEGIN(val); }
 }
        YY_BREAK
-case 179:
+case 180:
 YY_RULE_SETUP
-#line 403 "./util/configlexer.lex"
+#line 404 "./util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 180:
-/* rule 180 can match eol */
+case 181:
+/* rule 181 can match eol */
 YY_RULE_SETUP
-#line 404 "./util/configlexer.lex"
+#line 405 "./util/configlexer.lex"
 { yyerror("newline inside quoted string, no end \""); 
                          cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 181:
+case 182:
 YY_RULE_SETUP
-#line 406 "./util/configlexer.lex"
+#line 407 "./util/configlexer.lex"
 {
         LEXOUT(("QE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -3370,34 +3394,34 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* Single Quoted strings. Strip leading and ending quotes */
-case 182:
+case 183:
 YY_RULE_SETUP
-#line 418 "./util/configlexer.lex"
+#line 419 "./util/configlexer.lex"
 { BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
        YY_BREAK
 case YY_STATE_EOF(singlequotedstr):
-#line 419 "./util/configlexer.lex"
+#line 420 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
        else                { BEGIN(val); }
 }
        YY_BREAK
-case 183:
+case 184:
 YY_RULE_SETUP
-#line 424 "./util/configlexer.lex"
+#line 425 "./util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 184:
-/* rule 184 can match eol */
+case 185:
+/* rule 185 can match eol */
 YY_RULE_SETUP
-#line 425 "./util/configlexer.lex"
+#line 426 "./util/configlexer.lex"
 { yyerror("newline inside quoted string, no end '"); 
                             cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 185:
+case 186:
 YY_RULE_SETUP
-#line 427 "./util/configlexer.lex"
+#line 428 "./util/configlexer.lex"
 {
         LEXOUT(("SQE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -3410,38 +3434,38 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* include: directive */
-case 186:
+case 187:
 YY_RULE_SETUP
-#line 439 "./util/configlexer.lex"
+#line 440 "./util/configlexer.lex"
 { 
        LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
        YY_BREAK
 case YY_STATE_EOF(include):
-#line 441 "./util/configlexer.lex"
+#line 442 "./util/configlexer.lex"
 {
         yyerror("EOF inside include directive");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 187:
-YY_RULE_SETUP
-#line 445 "./util/configlexer.lex"
-{ LEXOUT(("ISP ")); /* ignore */ }
-       YY_BREAK
 case 188:
-/* rule 188 can match eol */
 YY_RULE_SETUP
 #line 446 "./util/configlexer.lex"
-{ LEXOUT(("NL\n")); cfg_parser->line++;}
+{ LEXOUT(("ISP ")); /* ignore */ }
        YY_BREAK
 case 189:
+/* rule 189 can match eol */
 YY_RULE_SETUP
 #line 447 "./util/configlexer.lex"
-{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
+{ LEXOUT(("NL\n")); cfg_parser->line++;}
        YY_BREAK
 case 190:
 YY_RULE_SETUP
 #line 448 "./util/configlexer.lex"
+{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
+       YY_BREAK
+case 191:
+YY_RULE_SETUP
+#line 449 "./util/configlexer.lex"
 {
        LEXOUT(("Iunquotedstr(%s) ", yytext));
        config_start_include_glob(yytext);
@@ -3449,27 +3473,27 @@ YY_RULE_SETUP
 }
        YY_BREAK
 case YY_STATE_EOF(include_quoted):
-#line 453 "./util/configlexer.lex"
+#line 454 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 191:
+case 192:
 YY_RULE_SETUP
-#line 457 "./util/configlexer.lex"
+#line 458 "./util/configlexer.lex"
 { LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 192:
-/* rule 192 can match eol */
+case 193:
+/* rule 193 can match eol */
 YY_RULE_SETUP
-#line 458 "./util/configlexer.lex"
+#line 459 "./util/configlexer.lex"
 { yyerror("newline before \" in include name"); 
                                  cfg_parser->line++; BEGIN(inc_prev); }
        YY_BREAK
-case 193:
+case 194:
 YY_RULE_SETUP
-#line 460 "./util/configlexer.lex"
+#line 461 "./util/configlexer.lex"
 {
        LEXOUT(("IQE "));
        yytext[yyleng - 1] = '\0';
@@ -3479,7 +3503,7 @@ YY_RULE_SETUP
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(val):
-#line 466 "./util/configlexer.lex"
+#line 467 "./util/configlexer.lex"
 {
        LEXOUT(("LEXEOF "));
        yy_set_bol(1); /* Set beginning of line, so "^" rules match.  */
@@ -3491,33 +3515,33 @@ case YY_STATE_EOF(val):
        }
 }
        YY_BREAK
-case 194:
+case 195:
 YY_RULE_SETUP
-#line 477 "./util/configlexer.lex"
+#line 478 "./util/configlexer.lex"
 { LEXOUT(("unquotedstr(%s) ", yytext)); 
                        if(--num_args == 0) { BEGIN(INITIAL); }
                        yylval.str = strdup(yytext); return STRING_ARG; }
        YY_BREAK
-case 195:
+case 196:
 YY_RULE_SETUP
-#line 481 "./util/configlexer.lex"
+#line 482 "./util/configlexer.lex"
 {
        ub_c_error_msg("unknown keyword '%s'", yytext);
        }
        YY_BREAK
-case 196:
+case 197:
 YY_RULE_SETUP
-#line 485 "./util/configlexer.lex"
+#line 486 "./util/configlexer.lex"
 {
        ub_c_error_msg("stray '%s'", yytext);
        }
        YY_BREAK
-case 197:
+case 198:
 YY_RULE_SETUP
-#line 489 "./util/configlexer.lex"
+#line 490 "./util/configlexer.lex"
 ECHO;
        YY_BREAK
-#line 3519 "<stdout>"
+#line 3543 "<stdout>"
 
        case YY_END_OF_BUFFER:
                {
@@ -3716,7 +3740,7 @@ static int yy_get_next_buffer (void)
 
                        if ( b->yy_is_our_buffer )
                                {
-                               int new_size = b->yy_buf_size * 2;
+                               yy_size_t new_size = b->yy_buf_size * 2;
 
                                if ( new_size <= 0 )
                                        b->yy_buf_size += b->yy_buf_size / 8;
@@ -3729,7 +3753,7 @@ static int yy_get_next_buffer (void)
                                }
                        else
                                /* Can't grow it, we don't own it. */
-                               b->yy_ch_buf = NULL;
+                               b->yy_ch_buf = 0;
 
                        if ( ! b->yy_ch_buf )
                                YY_FATAL_ERROR(
@@ -3771,9 +3795,9 @@ static int yy_get_next_buffer (void)
        else
                ret_val = EOB_ACT_CONTINUE_SCAN;
 
-       if ((int) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+       if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
                /* Extend the array by 50%, plus the number we really need. */
-               int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+               yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
                YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
                if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
                        YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
@@ -3808,10 +3832,10 @@ 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 >= 1956 )
+                       if ( yy_current_state >= 1961 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
-               yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
+               yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                }
 
        return yy_current_state;
@@ -3836,11 +3860,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 >= 1956 )
+               if ( yy_current_state >= 1961 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
-       yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
-       yy_is_jam = (yy_current_state == 1955);
+       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+       yy_is_jam = (yy_current_state == 1960);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -3873,7 +3897,7 @@ static int yy_get_next_buffer (void)
 
                else
                        { /* need more input */
-                       int offset = (yy_c_buf_p) - (yytext_ptr);
+                       yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
                        ++(yy_c_buf_p);
 
                        switch ( yy_get_next_buffer(  ) )
@@ -3897,7 +3921,7 @@ static int yy_get_next_buffer (void)
                                case EOB_ACT_END_OF_FILE:
                                        {
                                        if ( yywrap( ) )
-                                               return 0;
+                                               return EOF;
 
                                        if ( ! (yy_did_buffer_switch_on_eof) )
                                                YY_NEW_FILE;
@@ -4145,7 +4169,7 @@ void yypop_buffer_state (void)
  */
 static void yyensure_buffer_stack (void)
 {
-       int num_to_alloc;
+       yy_size_t num_to_alloc;
     
        if (!(yy_buffer_stack)) {
 
@@ -4159,9 +4183,9 @@ static void yyensure_buffer_stack (void)
                                                                );
                if ( ! (yy_buffer_stack) )
                        YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-
+                                                                 
                memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-
+                               
                (yy_buffer_stack_max) = num_to_alloc;
                (yy_buffer_stack_top) = 0;
                return;
@@ -4190,7 +4214,7 @@ static void yyensure_buffer_stack (void)
  * @param base the character buffer
  * @param size the size in bytes of the character buffer
  * 
- * @return the newly allocated buffer state object.
+ * @return the newly allocated buffer state object. 
  */
 YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
 {
@@ -4200,7 +4224,7 @@ YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
             base[size-2] != YY_END_OF_BUFFER_CHAR ||
             base[size-1] != YY_END_OF_BUFFER_CHAR )
                /* They forgot to leave room for the EOB's. */
-               return NULL;
+               return 0;
 
        b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
        if ( ! b )
@@ -4209,7 +4233,7 @@ YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
        b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
        b->yy_buf_pos = b->yy_ch_buf = base;
        b->yy_is_our_buffer = 0;
-       b->yy_input_file = NULL;
+       b->yy_input_file = 0;
        b->yy_n_chars = b->yy_buf_size;
        b->yy_is_interactive = 0;
        b->yy_at_bol = 1;
@@ -4232,7 +4256,7 @@ YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
 YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
 {
     
-       return yy_scan_bytes(yystr,(int) strlen(yystr) );
+       return yy_scan_bytes(yystr,strlen(yystr) );
 }
 
 /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
@@ -4242,7 +4266,7 @@ YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
  * 
  * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
+YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
 {
        YY_BUFFER_STATE b;
        char *buf;
@@ -4250,7 +4274,7 @@ YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
        yy_size_t i;
     
        /* Get memory for full buffer, including space for trailing EOB's. */
-       n = (yy_size_t) _yybytes_len + 2;
+       n = _yybytes_len + 2;
        buf = (char *) yyalloc(n  );
        if ( ! buf )
                YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
@@ -4276,7 +4300,7 @@ YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
 #define YY_EXIT_FAILURE 2
 #endif
 
-static void yynoreturn yy_fatal_error (yyconst char* msg )
+static void yy_fatal_error (yyconst char* msg )
 {
                        (void) fprintf( stderr, "%s\n", msg );
        exit( YY_EXIT_FAILURE );
@@ -4289,7 +4313,7 @@ static void yynoreturn yy_fatal_error (yyconst char* msg )
        do \
                { \
                /* Undo effects of setting up yytext. */ \
-        int yyless_macro_arg = (n); \
+        yy_size_t yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
                yytext[yyleng] = (yy_hold_char); \
                (yy_c_buf_p) = yytext + yyless_macro_arg; \
@@ -4306,7 +4330,7 @@ static void yynoreturn yy_fatal_error (yyconst char* msg )
  */
 int yyget_lineno  (void)
 {
-    
+        
     return yylineno;
 }
 
@@ -4329,7 +4353,7 @@ FILE *yyget_out  (void)
 /** Get the length of the current token.
  * 
  */
-int yyget_leng  (void)
+yy_size_t yyget_leng  (void)
 {
         return yyleng;
 }
@@ -4385,10 +4409,10 @@ static int yy_init_globals (void)
      * This function is called from yylex_destroy(), so don't allocate here.
      */
 
-    (yy_buffer_stack) = NULL;
+    (yy_buffer_stack) = 0;
     (yy_buffer_stack_top) = 0;
     (yy_buffer_stack_max) = 0;
-    (yy_c_buf_p) = NULL;
+    (yy_c_buf_p) = (char *) 0;
     (yy_init) = 0;
     (yy_start) = 0;
 
@@ -4397,8 +4421,8 @@ static int yy_init_globals (void)
     yyin = stdin;
     yyout = stdout;
 #else
-    yyin = NULL;
-    yyout = NULL;
+    yyin = (FILE *) 0;
+    yyout = (FILE *) 0;
 #endif
 
     /* For future reference: Set errno on error, since we are called by
@@ -4456,7 +4480,7 @@ static int yy_flex_strlen (yyconst char * s )
 
 void *yyalloc (yy_size_t  size )
 {
-                       return malloc(size);
+                       return (void *) malloc( size );
 }
 
 void *yyrealloc  (void * ptr, yy_size_t  size )
@@ -4469,7 +4493,7 @@ void *yyrealloc  (void * ptr, yy_size_t  size )
         * any pointer type to void*, and deal with argument conversions
         * as though doing an assignment.
         */
-       return realloc(ptr, size);
+       return (void *) realloc( (char *) ptr, size );
 }
 
 void yyfree (void * ptr )
@@ -4479,7 +4503,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 489 "./util/configlexer.lex"
+#line 490 "./util/configlexer.lex"
 
 
 
index a42f3adfe426047bc26565c04175abe243dd0f29..7a0710aad8851001f8f8ef374db132a7cbfb1656 100644 (file)
@@ -233,6 +233,7 @@ ssl-upstream{COLON}         { YDVAR(1, VAR_SSL_UPSTREAM) }
 ssl-service-key{COLON}         { YDVAR(1, VAR_SSL_SERVICE_KEY) }
 ssl-service-pem{COLON}         { YDVAR(1, VAR_SSL_SERVICE_PEM) }
 ssl-port{COLON}                        { YDVAR(1, VAR_SSL_PORT) }
+use-systemd{COLON}             { YDVAR(1, VAR_USE_SYSTEMD) }
 do-daemonize{COLON}            { YDVAR(1, VAR_DO_DAEMONIZE) }
 interface{COLON}               { YDVAR(1, VAR_INTERFACE) }
 ip-address{COLON}              { YDVAR(1, VAR_INTERFACE) }
index 1699a9a53ff6222388a1a323a40d9240b40d6af5..2db5fefd191e0820b5b08d1b026a95acd510d31c 100644 (file)
@@ -304,7 +304,8 @@ extern int yydebug;
     VAR_VIEW_FIRST = 435,
     VAR_SERVE_EXPIRED = 436,
     VAR_FAKE_DSA = 437,
-    VAR_LOG_IDENTITY = 438
+    VAR_LOG_IDENTITY = 438,
+    VAR_USE_SYSTEMD = 439
   };
 #endif
 /* Tokens.  */
@@ -489,6 +490,7 @@ extern int yydebug;
 #define VAR_SERVE_EXPIRED 436
 #define VAR_FAKE_DSA 437
 #define VAR_LOG_IDENTITY 438
+#define VAR_USE_SYSTEMD 439
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -499,7 +501,7 @@ union YYSTYPE
 
        char*   str;
 
-#line 503 "util/configparser.c" /* yacc.c:355  */
+#line 505 "util/configparser.c" /* yacc.c:355  */
 };
 
 typedef union YYSTYPE YYSTYPE;
@@ -516,7 +518,7 @@ int yyparse (void);
 
 /* Copy the second part of user declarations.  */
 
-#line 520 "util/configparser.c" /* yacc.c:358  */
+#line 522 "util/configparser.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -758,21 +760,21 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   363
+#define YYLAST   365
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  184
+#define YYNTOKENS  185
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  194
+#define YYNNTS  195
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  371
+#define YYNRULES  373
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  556
+#define YYNSTATES  559
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   438
+#define YYMAXUTOK   439
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -824,51 +826,51 @@ static const yytype_uint8 yytranslate[] =
      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
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   137,   137,   137,   138,   138,   139,   139,   140,   140,
-     140,   145,   150,   151,   152,   152,   152,   153,   153,   154,
-     154,   155,   155,   156,   156,   157,   157,   157,   158,   158,
-     158,   159,   159,   160,   160,   161,   161,   162,   162,   163,
-     163,   164,   164,   165,   165,   166,   166,   167,   167,   167,
-     168,   168,   168,   169,   169,   169,   170,   170,   171,   171,
-     172,   172,   173,   173,   174,   174,   174,   175,   175,   176,
-     176,   177,   177,   177,   178,   178,   179,   179,   180,   180,
-     181,   181,   181,   182,   182,   183,   183,   184,   184,   185,
-     185,   186,   186,   187,   187,   187,   188,   188,   189,   189,
-     189,   190,   190,   190,   191,   191,   191,   192,   192,   192,
-     193,   193,   193,   194,   194,   194,   195,   195,   196,   196,
-     197,   197,   198,   198,   199,   199,   199,   200,   200,   201,
-     201,   202,   202,   203,   203,   204,   204,   204,   205,   205,
-     206,   206,   207,   207,   208,   208,   209,   209,   211,   223,
-     224,   225,   225,   225,   225,   225,   226,   228,   240,   241,
-     242,   242,   242,   242,   243,   245,   259,   260,   261,   261,
-     261,   261,   263,   272,   281,   292,   301,   310,   319,   332,
-     347,   356,   365,   374,   383,   392,   401,   410,   419,   428,
-     437,   446,   455,   464,   473,   482,   489,   496,   505,   514,
-     528,   537,   546,   553,   560,   584,   592,   599,   606,   613,
-     620,   628,   636,   644,   651,   658,   667,   676,   683,   690,
-     698,   706,   716,   726,   736,   749,   760,   768,   781,   790,
-     799,   808,   818,   828,   836,   849,   858,   866,   875,   883,
-     896,   905,   912,   922,   932,   942,   952,   962,   972,   982,
-     992,   999,  1006,  1013,  1022,  1031,  1040,  1047,  1057,  1074,
-    1081,  1099,  1112,  1125,  1134,  1143,  1152,  1161,  1171,  1181,
-    1190,  1199,  1212,  1221,  1228,  1237,  1246,  1255,  1264,  1272,
-    1285,  1293,  1321,  1328,  1343,  1353,  1363,  1370,  1377,  1386,
-    1400,  1419,  1438,  1450,  1462,  1474,  1485,  1494,  1502,  1515,
-    1528,  1541,  1550,  1560,  1570,  1580,  1587,  1594,  1603,  1613,
-    1623,  1633,  1640,  1647,  1656,  1666,  1676,  1705,  1714,  1723,
-    1728,  1729,  1730,  1730,  1730,  1731,  1731,  1731,  1732,  1732,
-    1734,  1744,  1753,  1760,  1770,  1777,  1784,  1791,  1798,  1803,
-    1804,  1805,  1805,  1806,  1806,  1807,  1807,  1808,  1809,  1810,
-    1811,  1812,  1813,  1815,  1823,  1830,  1838,  1846,  1853,  1860,
-    1869,  1878,  1887,  1896,  1905,  1914,  1919,  1920,  1921,  1923,
-    1929,  1939
+       0,   138,   138,   138,   139,   139,   140,   140,   141,   141,
+     141,   146,   151,   152,   153,   153,   153,   154,   154,   155,
+     155,   156,   156,   157,   157,   158,   158,   158,   159,   159,
+     159,   160,   160,   161,   161,   162,   162,   163,   163,   164,
+     164,   165,   165,   166,   166,   167,   167,   168,   168,   168,
+     169,   169,   169,   170,   170,   170,   171,   171,   172,   172,
+     173,   173,   174,   174,   175,   175,   175,   176,   176,   177,
+     177,   178,   178,   178,   179,   179,   180,   180,   181,   181,
+     182,   182,   182,   183,   183,   184,   184,   185,   185,   186,
+     186,   187,   187,   188,   188,   188,   189,   189,   190,   190,
+     190,   191,   191,   191,   192,   192,   192,   193,   193,   193,
+     194,   194,   194,   195,   195,   195,   196,   196,   197,   197,
+     198,   198,   199,   199,   200,   200,   200,   201,   201,   202,
+     202,   203,   203,   204,   204,   205,   205,   205,   206,   206,
+     207,   207,   208,   208,   209,   209,   210,   210,   210,   212,
+     224,   225,   226,   226,   226,   226,   226,   227,   229,   241,
+     242,   243,   243,   243,   243,   244,   246,   260,   261,   262,
+     262,   262,   262,   264,   273,   282,   293,   302,   311,   320,
+     333,   348,   357,   366,   375,   384,   393,   402,   411,   420,
+     429,   438,   447,   456,   465,   474,   483,   490,   497,   506,
+     515,   524,   538,   547,   556,   563,   570,   594,   602,   609,
+     616,   623,   630,   638,   646,   654,   661,   668,   677,   686,
+     693,   700,   708,   716,   726,   736,   746,   759,   770,   778,
+     791,   800,   809,   818,   828,   838,   846,   859,   868,   876,
+     885,   893,   906,   915,   922,   932,   942,   952,   962,   972,
+     982,   992,  1002,  1009,  1016,  1023,  1032,  1041,  1050,  1057,
+    1067,  1084,  1091,  1109,  1122,  1135,  1144,  1153,  1162,  1171,
+    1181,  1191,  1200,  1209,  1222,  1231,  1238,  1247,  1256,  1265,
+    1274,  1282,  1295,  1303,  1331,  1338,  1353,  1363,  1373,  1380,
+    1387,  1396,  1410,  1429,  1448,  1460,  1472,  1484,  1495,  1504,
+    1512,  1525,  1538,  1551,  1560,  1570,  1580,  1590,  1597,  1604,
+    1613,  1623,  1633,  1643,  1650,  1657,  1666,  1676,  1686,  1715,
+    1724,  1733,  1738,  1739,  1740,  1740,  1740,  1741,  1741,  1741,
+    1742,  1742,  1744,  1754,  1763,  1770,  1780,  1787,  1794,  1801,
+    1808,  1813,  1814,  1815,  1815,  1816,  1816,  1817,  1817,  1818,
+    1819,  1820,  1821,  1822,  1823,  1825,  1833,  1840,  1848,  1856,
+    1863,  1870,  1879,  1888,  1897,  1906,  1915,  1924,  1929,  1930,
+    1931,  1933,  1939,  1949
 };
 #endif
 
@@ -942,22 +944,23 @@ static const char *const yytname[] =
   "VAR_LOCAL_ZONE_OVERRIDE", "VAR_ACCESS_CONTROL_TAG_ACTION",
   "VAR_ACCESS_CONTROL_TAG_DATA", "VAR_VIEW", "VAR_ACCESS_CONTROL_VIEW",
   "VAR_VIEW_FIRST", "VAR_SERVE_EXPIRED", "VAR_FAKE_DSA",
-  "VAR_LOG_IDENTITY", "$accept", "toplevelvars", "toplevelvar",
-  "serverstart", "contents_server", "content_server", "stubstart",
-  "contents_stub", "content_stub", "forwardstart", "contents_forward",
-  "content_forward", "viewstart", "contents_view", "content_view",
-  "server_num_threads", "server_verbosity", "server_statistics_interval",
-  "server_statistics_cumulative", "server_extended_statistics",
-  "server_port", "server_interface", "server_outgoing_interface",
-  "server_outgoing_range", "server_outgoing_port_permit",
-  "server_outgoing_port_avoid", "server_outgoing_num_tcp",
-  "server_incoming_num_tcp", "server_interface_automatic", "server_do_ip4",
-  "server_do_ip6", "server_do_udp", "server_do_tcp", "server_prefer_ip6",
-  "server_tcp_mss", "server_outgoing_tcp_mss", "server_tcp_upstream",
-  "server_ssl_upstream", "server_ssl_service_key",
-  "server_ssl_service_pem", "server_ssl_port", "server_do_daemonize",
-  "server_use_syslog", "server_log_time_ascii", "server_log_queries",
-  "server_chroot", "server_username", "server_directory", "server_logfile",
+  "VAR_LOG_IDENTITY", "VAR_USE_SYSTEMD", "$accept", "toplevelvars",
+  "toplevelvar", "serverstart", "contents_server", "content_server",
+  "stubstart", "contents_stub", "content_stub", "forwardstart",
+  "contents_forward", "content_forward", "viewstart", "contents_view",
+  "content_view", "server_num_threads", "server_verbosity",
+  "server_statistics_interval", "server_statistics_cumulative",
+  "server_extended_statistics", "server_port", "server_interface",
+  "server_outgoing_interface", "server_outgoing_range",
+  "server_outgoing_port_permit", "server_outgoing_port_avoid",
+  "server_outgoing_num_tcp", "server_incoming_num_tcp",
+  "server_interface_automatic", "server_do_ip4", "server_do_ip6",
+  "server_do_udp", "server_do_tcp", "server_prefer_ip6", "server_tcp_mss",
+  "server_outgoing_tcp_mss", "server_tcp_upstream", "server_ssl_upstream",
+  "server_ssl_service_key", "server_ssl_service_pem", "server_ssl_port",
+  "server_use_systemd", "server_do_daemonize", "server_use_syslog",
+  "server_log_time_ascii", "server_log_queries", "server_chroot",
+  "server_username", "server_directory", "server_logfile",
   "server_pidfile", "server_root_hints", "server_dlv_anchor_file",
   "server_dlv_anchor", "server_auto_trust_anchor_file",
   "server_trust_anchor_file", "server_trusted_keys_file",
@@ -1046,7 +1049,7 @@ static const yytype_uint16 yytoknum[] =
      405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
      415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
      425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
-     435,   436,   437,   438
+     435,   436,   437,   438,   439
 };
 # endif
 
@@ -1079,7 +1082,7 @@ static const yytype_int16 yypact[] =
      127,   128,   129,   130,   132,   133,   136,   165,   166,   167,
      172,   173,   174,   216,   217,   218,   219,   220,   221,   222,
      223,   224,   228,   232,   233,   256,   257,   258,   259,   269,
-     270,   271,   272,   273,   274,   275,   276,   277,   278,  -130,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
     -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
     -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
     -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
@@ -1093,33 +1096,33 @@ static const yytype_int16 yypact[] =
     -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
     -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
     -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
-    -130,  -130,  -130,  -130,   279,   280,   281,   303,   305,   309,
-    -130,  -130,  -130,  -130,  -130,  -130,  -130,   310,   311,   312,
-     313,   314,  -130,  -130,  -130,  -130,  -130,  -130,   315,   316,
-     317,   318,  -130,  -130,  -130,  -130,  -130,   319,   320,   321,
-     322,   323,   324,   325,   326,  -130,  -130,  -130,  -130,  -130,
-    -130,  -130,  -130,  -130,   327,   328,   329,   330,   331,   332,
-     333,   334,   335,   336,   337,   338,  -130,  -130,  -130,  -130,
-    -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,   339,
+    -130,  -130,  -130,  -130,  -130,  -130,   280,   281,   303,   305,
+     310,   311,  -130,  -130,  -130,  -130,  -130,  -130,  -130,   312,
+     313,   314,   315,   316,  -130,  -130,  -130,  -130,  -130,  -130,
+     317,   318,   319,   320,  -130,  -130,  -130,  -130,  -130,   321,
+     322,   323,   324,   325,   326,   327,   328,  -130,  -130,  -130,
+    -130,  -130,  -130,  -130,  -130,  -130,   329,   330,   331,   332,
+     333,   334,   335,   336,   337,   338,   339,   340,  -130,  -130,
     -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
+    -130,   341,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
     -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
     -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
     -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
     -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
-    -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,   340,   341,
     -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
+     342,   343,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
     -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
     -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
     -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
     -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
-    -130,  -130,  -130,  -130,  -130,  -130,  -130,   342,   343,  -130,
-    -130,  -130,  -130,  -130,  -130,  -130,  -130,   344,   345,   346,
-     347,   348,   349,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
-    -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,   350,  -130,
+    -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,   344,
+     345,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,   346,
+     347,   348,   349,   350,   351,  -130,  -130,  -130,  -130,  -130,
     -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
+    -130,   352,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
     -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
-    -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,   351,   352,
-     353,  -130,  -130,  -130,  -130,  -130
+    -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
+    -130,   353,   354,   355,  -130,  -130,  -130,  -130,  -130
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1127,8 +1130,8 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       2,     0,     1,    11,   148,   157,   319,   365,   338,   165,
-       3,    13,   150,   159,   167,   321,   340,   367,     4,     5,
+       2,     0,     1,    11,   149,   158,   321,   367,   340,   166,
+       3,    13,   151,   160,   168,   323,   342,   369,     4,     5,
        6,    10,     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,
@@ -1142,47 +1145,47 @@ static const yytype_uint16 yydefact[] =
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    12,
-      14,    15,    74,    77,    86,    16,    25,    65,    17,    78,
-      79,    36,    58,    73,    18,    19,    21,    22,    20,    23,
-      24,   108,   109,   110,   111,   112,    75,    64,    90,   107,
-      26,    27,    28,    29,    30,    66,    80,    81,    96,    52,
-      62,    53,    91,    46,    47,    48,    49,   100,   104,   116,
-     124,   135,   101,    59,    31,    32,    33,    88,   117,   118,
-     119,    34,    35,    37,    38,    40,    41,    39,   122,    42,
-      43,    44,    50,    69,   105,    83,   123,    76,   131,    84,
-      85,   102,   103,    89,    45,    67,    70,    51,    54,    92,
-      93,    68,   132,    94,    55,    56,    57,   106,   145,   146,
-      95,    63,    97,    98,    99,   133,    60,    61,    82,    71,
-      72,    87,   113,   114,   115,   120,   121,   136,   137,   139,
-     141,   142,   140,   143,   125,   127,   126,   128,   129,   130,
-     134,   144,   138,   147,     0,     0,     0,     0,     0,     0,
-     149,   151,   152,   153,   155,   156,   154,     0,     0,     0,
-       0,     0,   158,   160,   161,   162,   163,   164,     0,     0,
-       0,     0,   166,   168,   169,   170,   171,     0,     0,     0,
-       0,     0,     0,     0,     0,   320,   322,   324,   323,   329,
-     325,   326,   327,   328,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   339,   341,   342,   343,
-     344,   345,   346,   347,   348,   349,   350,   351,   352,     0,
-     366,   368,   173,   172,   177,   180,   178,   186,   187,   190,
-     188,   189,   191,   192,   202,   203,   204,   205,   206,   226,
-     227,   228,   233,   234,   183,   235,   236,   239,   237,   238,
-     241,   242,   243,   256,   215,   216,   217,   218,   244,   259,
-     211,   213,   260,   266,   267,   268,   184,   225,   278,   279,
-     212,   273,   199,   179,   207,   257,   263,   245,     0,     0,
-     282,   185,   174,   198,   249,   175,   181,   182,   208,   209,
-     280,   247,   251,   252,   176,   283,   229,   255,   200,   214,
-     261,   262,   265,   272,   210,   276,   274,   275,   219,   224,
-     253,   254,   220,   221,   246,   269,   201,   193,   194,   195,
-     196,   197,   284,   285,   286,   230,   231,   232,   240,   287,
-     288,   248,   222,   370,   296,   298,   297,     0,     0,   301,
-     250,   264,   277,   302,   303,   223,   289,     0,     0,     0,
-       0,     0,     0,   270,   271,   371,   304,   305,   306,   309,
-     308,   307,   310,   311,   312,   313,   314,   315,     0,   317,
-     318,   330,   332,   331,   334,   335,   336,   337,   333,   353,
-     354,   355,   356,   357,   358,   359,   360,   361,   362,   363,
-     364,   369,   258,   281,   299,   300,   290,   291,     0,     0,
-       0,   295,   316,   294,   292,   293
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      12,    14,    15,    74,    77,    86,    16,    25,    65,    17,
+      78,    79,    36,    58,    73,    18,    19,    21,    22,    20,
+      23,    24,   108,   109,   110,   111,   112,   148,    75,    64,
+      90,   107,    26,    27,    28,    29,    30,    66,    80,    81,
+      96,    52,    62,    53,    91,    46,    47,    48,    49,   100,
+     104,   116,   124,   135,   101,    59,    31,    32,    33,    88,
+     117,   118,   119,    34,    35,    37,    38,    40,    41,    39,
+     122,    42,    43,    44,    50,    69,   105,    83,   123,    76,
+     131,    84,    85,   102,   103,    89,    45,    67,    70,    51,
+      54,    92,    93,    68,   132,    94,    55,    56,    57,   106,
+     145,   146,    95,    63,    97,    98,    99,   133,    60,    61,
+      82,    71,    72,    87,   113,   114,   115,   120,   121,   136,
+     137,   139,   141,   142,   140,   143,   125,   127,   126,   128,
+     129,   130,   134,   144,   138,   147,     0,     0,     0,     0,
+       0,     0,   150,   152,   153,   154,   156,   157,   155,     0,
+       0,     0,     0,     0,   159,   161,   162,   163,   164,   165,
+       0,     0,     0,     0,   167,   169,   170,   171,   172,     0,
+       0,     0,     0,     0,     0,     0,     0,   322,   324,   326,
+     325,   331,   327,   328,   329,   330,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   341,   343,
+     344,   345,   346,   347,   348,   349,   350,   351,   352,   353,
+     354,     0,   368,   370,   174,   173,   178,   181,   179,   187,
+     188,   191,   189,   190,   192,   193,   204,   205,   206,   207,
+     208,   228,   229,   230,   235,   236,   184,   237,   238,   241,
+     239,   240,   243,   244,   245,   258,   217,   218,   219,   220,
+     246,   261,   213,   215,   262,   268,   269,   270,   185,   227,
+     280,   281,   214,   275,   201,   180,   209,   259,   265,   247,
+       0,     0,   284,   186,   175,   200,   251,   176,   182,   183,
+     210,   211,   282,   249,   253,   254,   177,   285,   231,   257,
+     202,   216,   263,   264,   267,   274,   212,   278,   276,   277,
+     221,   226,   255,   256,   222,   223,   248,   271,   203,   194,
+     195,   196,   197,   198,   286,   287,   288,   232,   233,   234,
+     242,   289,   290,   250,   224,   372,   298,   300,   299,     0,
+       0,   303,   252,   266,   279,   304,   305,   225,   291,     0,
+       0,     0,     0,     0,     0,   272,   273,   373,   199,   306,
+     307,   308,   311,   310,   309,   312,   313,   314,   315,   316,
+     317,     0,   319,   320,   332,   334,   333,   336,   337,   338,
+     339,   335,   355,   356,   357,   358,   359,   360,   361,   362,
+     363,   364,   365,   366,   371,   260,   283,   301,   302,   292,
+     293,     0,     0,     0,   297,   318,   296,   294,   295
 };
 
   /* YYPGOTO[NTERM-NUM].  */
@@ -1207,32 +1210,32 @@ static const yytype_int16 yypgoto[] =
     -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
     -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
     -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,  -130,
-    -130,  -130,  -130,  -130
+    -130,  -130,  -130,  -130,  -130
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,    10,    11,    18,   159,    12,    19,   300,    13,
-      20,   312,    14,    21,   322,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   301,   302,   303,
-     304,   305,   306,   313,   314,   315,   316,   317,   323,   324,
-     325,   326,    15,    22,   335,   336,   337,   338,   339,   340,
-     341,   342,   343,    16,    23,   356,   357,   358,   359,   360,
-     361,   362,   363,   364,   365,   366,   367,   368,    17,    24,
-     370,   371,   292,   293
+      -1,     1,    10,    11,    18,   160,    12,    19,   302,    13,
+      20,   314,    14,    21,   324,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   303,   304,
+     305,   306,   307,   308,   315,   316,   317,   318,   319,   325,
+     326,   327,   328,    15,    22,   337,   338,   339,   340,   341,
+     342,   343,   344,   345,    16,    23,   358,   359,   360,   361,
+     362,   363,   364,   365,   366,   367,   368,   369,   370,    17,
+      24,   372,   373,   294,   295
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1240,43 +1243,43 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_uint16 yytable[] =
 {
-       2,   318,   294,   369,   295,   296,   307,   372,   373,   374,
-       0,     3,   375,   376,   308,   309,   344,   345,   346,   347,
-     348,   349,   350,   351,   352,   353,   354,   355,   327,   328,
-     329,   330,   331,   332,   333,   334,   377,   319,   320,   378,
-     379,     4,   380,   381,   382,   383,   384,     5,   385,   386,
-     387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
-     397,   398,   399,   400,   401,   297,   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,     6,   427,   428,   298,   429,   299,   310,   430,   311,
-     431,   432,   433,   434,   435,   436,   437,     7,   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,   321,   471,   472,     8,     0,   473,    25,    26,    27,
+       2,   320,   296,   371,   297,   298,   309,   374,   375,   376,
+       0,     3,   377,   378,   310,   311,   346,   347,   348,   349,
+     350,   351,   352,   353,   354,   355,   356,   357,   329,   330,
+     331,   332,   333,   334,   335,   336,   379,   321,   322,   380,
+     381,     4,   382,   383,   384,   385,   386,     5,   387,   388,
+     389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+     399,   400,   401,   402,   403,   299,   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,     6,   429,   430,   300,   431,   301,   312,   432,   313,
+     433,   434,   435,   436,   437,   438,   439,     7,   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,   323,   473,   474,     8,     0,   475,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,   474,   475,   476,     9,    53,
-      54,    55,   477,   478,   479,    56,    57,    58,    59,    60,
+      48,    49,    50,    51,    52,   476,   477,   478,     9,    53,
+      54,    55,   479,   480,   481,    56,    57,    58,    59,    60,
       61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
       81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,   480,   481,   482,   483,
-     484,   485,   486,   487,   488,    97,    98,    99,   489,   100,
-     101,   102,   490,   491,   103,   104,   105,   106,   107,   108,
+      91,    92,    93,    94,    95,    96,   482,   483,   484,   485,
+     486,   487,   488,   489,   490,    97,    98,    99,   491,   100,
+     101,   102,   492,   493,   103,   104,   105,   106,   107,   108,
      109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   492,   493,   494,   495,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   496,
-     497,   498,   499,   500,   501,   502,   503,   504,   505,   506,
-     507,   508,   134,   135,   136,   137,   138,   139,   140,   141,
+     119,   120,   121,   122,   123,   124,   494,   495,   496,   497,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   498,
+     499,   500,   501,   502,   503,   504,   505,   506,   507,   508,
+     509,   510,   134,   135,   136,   137,   138,   139,   140,   141,
      142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   509,   155,   510,   156,   157,   158,   511,
-     512,   513,   514,   515,   516,   517,   518,   519,   520,   521,
-     522,   523,   524,   525,   526,   527,   528,   529,   530,   531,
-     532,   533,   534,   535,   536,   537,   538,   539,   540,   541,
-     542,   543,   544,   545,   546,   547,   548,   549,   550,   551,
-     552,   553,   554,   555
+     152,   153,   154,   511,   155,   512,   156,   157,   158,   159,
+     513,   514,   515,   516,   517,   518,   519,   520,   521,   522,
+     523,   524,   525,   526,   527,   528,   529,   530,   531,   532,
+     533,   534,   535,   536,   537,   538,   539,   540,   541,   542,
+     543,   544,   545,   546,   547,   548,   549,   550,   551,   552,
+     553,   554,   555,   556,   557,   558
 };
 
 static const yytype_int16 yycheck[] =
@@ -1312,21 +1315,21 @@ static const yytype_int16 yycheck[] =
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,   157,   158,   159,   160,   161,   162,   163,   164,
      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,    10,   179,    10,   181,   182,   183,    10,
+     175,   176,   177,    10,   179,    10,   181,   182,   183,   184,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    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,   185,     0,    11,    41,    47,    91,   107,   144,   178,
-     186,   187,   190,   193,   196,   346,   357,   372,   188,   191,
-     194,   197,   347,   358,   373,    12,    13,    14,    15,    16,
+       0,   186,     0,    11,    41,    47,    91,   107,   144,   178,
+     187,   188,   191,   194,   197,   348,   359,   374,   189,   192,
+     195,   198,   349,   360,   375,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
       37,    38,    39,    44,    45,    46,    50,    51,    52,    53,
@@ -1339,8 +1342,8 @@ static const yytype_uint16 yystos[] =
      126,   127,   128,   129,   130,   135,   136,   137,   138,   139,
      140,   141,   142,   143,   157,   158,   159,   160,   161,   162,
      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   179,   181,   182,   183,   189,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     173,   174,   175,   176,   177,   179,   181,   182,   183,   184,
+     190,   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,
@@ -1353,15 +1356,15 @@ static const yytype_uint16 yystos[] =
      299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
      309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
      319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
-     329,   330,   376,   377,    40,    42,    43,   103,   132,   134,
-     192,   331,   332,   333,   334,   335,   336,    40,    48,    49,
-     131,   133,   195,   337,   338,   339,   340,   341,    40,    76,
-      77,   180,   198,   342,   343,   344,   345,    92,    93,    94,
-      95,    96,    97,    98,    99,   348,   349,   350,   351,   352,
-     353,   354,   355,   356,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   359,   360,   361,   362,
-     363,   364,   365,   366,   367,   368,   369,   370,   371,   108,
-     374,   375,    10,    10,    10,    10,    10,    10,    10,    10,
+     329,   330,   331,   332,   378,   379,    40,    42,    43,   103,
+     132,   134,   193,   333,   334,   335,   336,   337,   338,    40,
+      48,    49,   131,   133,   196,   339,   340,   341,   342,   343,
+      40,    76,    77,   180,   199,   344,   345,   346,   347,    92,
+      93,    94,    95,    96,    97,    98,    99,   350,   351,   352,
+     353,   354,   355,   356,   357,   358,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   361,   362,
+     363,   364,   365,   366,   367,   368,   369,   370,   371,   372,
+     373,   108,   376,   377,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
@@ -1379,30 +1382,30 @@ static const yytype_uint16 yystos[] =
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10
+      10,    10,    10,    10,    10,    10,    10,    10,    10
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   184,   185,   185,   186,   186,   186,   186,   186,   186,
-     186,   187,   188,   188,   189,   189,   189,   189,   189,   189,
-     189,   189,   189,   189,   189,   189,   189,   189,   189,   189,
-     189,   189,   189,   189,   189,   189,   189,   189,   189,   189,
-     189,   189,   189,   189,   189,   189,   189,   189,   189,   189,
-     189,   189,   189,   189,   189,   189,   189,   189,   189,   189,
-     189,   189,   189,   189,   189,   189,   189,   189,   189,   189,
-     189,   189,   189,   189,   189,   189,   189,   189,   189,   189,
-     189,   189,   189,   189,   189,   189,   189,   189,   189,   189,
-     189,   189,   189,   189,   189,   189,   189,   189,   189,   189,
-     189,   189,   189,   189,   189,   189,   189,   189,   189,   189,
-     189,   189,   189,   189,   189,   189,   189,   189,   189,   189,
-     189,   189,   189,   189,   189,   189,   189,   189,   189,   189,
-     189,   189,   189,   189,   189,   189,   189,   189,   189,   189,
-     189,   189,   189,   189,   189,   189,   189,   189,   190,   191,
-     191,   192,   192,   192,   192,   192,   192,   193,   194,   194,
-     195,   195,   195,   195,   195,   196,   197,   197,   198,   198,
-     198,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+       0,   185,   186,   186,   187,   187,   187,   187,   187,   187,
+     187,   188,   189,   189,   190,   190,   190,   190,   190,   190,
+     190,   190,   190,   190,   190,   190,   190,   190,   190,   190,
+     190,   190,   190,   190,   190,   190,   190,   190,   190,   190,
+     190,   190,   190,   190,   190,   190,   190,   190,   190,   190,
+     190,   190,   190,   190,   190,   190,   190,   190,   190,   190,
+     190,   190,   190,   190,   190,   190,   190,   190,   190,   190,
+     190,   190,   190,   190,   190,   190,   190,   190,   190,   190,
+     190,   190,   190,   190,   190,   190,   190,   190,   190,   190,
+     190,   190,   190,   190,   190,   190,   190,   190,   190,   190,
+     190,   190,   190,   190,   190,   190,   190,   190,   190,   190,
+     190,   190,   190,   190,   190,   190,   190,   190,   190,   190,
+     190,   190,   190,   190,   190,   190,   190,   190,   190,   190,
+     190,   190,   190,   190,   190,   190,   190,   190,   190,   190,
+     190,   190,   190,   190,   190,   190,   190,   190,   190,   191,
+     192,   192,   193,   193,   193,   193,   193,   193,   194,   195,
+     195,   196,   196,   196,   196,   196,   197,   198,   198,   199,
+     199,   199,   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,
@@ -1417,12 +1420,12 @@ static const yytype_uint16 yyr1[] =
      317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
      327,   328,   329,   330,   331,   332,   333,   334,   335,   336,
      337,   338,   339,   340,   341,   342,   343,   344,   345,   346,
-     347,   347,   348,   348,   348,   348,   348,   348,   348,   348,
-     349,   350,   351,   352,   353,   354,   355,   356,   357,   358,
-     358,   359,   359,   359,   359,   359,   359,   359,   359,   359,
-     359,   359,   359,   360,   361,   362,   363,   364,   365,   366,
-     367,   368,   369,   370,   371,   372,   373,   373,   374,   375,
-     376,   377
+     347,   348,   349,   349,   350,   350,   350,   350,   350,   350,
+     350,   350,   351,   352,   353,   354,   355,   356,   357,   358,
+     359,   360,   360,   361,   361,   361,   361,   361,   361,   361,
+     361,   361,   361,   361,   361,   362,   363,   364,   365,   366,
+     367,   368,   369,   370,   371,   372,   373,   374,   375,   375,
+     376,   377,   378,   379
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1442,10 +1445,10 @@ static const yytype_uint8 yyr2[] =
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     2,
-       0,     1,     1,     1,     1,     1,     1,     1,     2,     0,
-       1,     1,     1,     1,     1,     1,     2,     0,     1,     1,
-       1,     1,     2,     2,     2,     2,     2,     2,     2,     2,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       2,     0,     1,     1,     1,     1,     1,     1,     1,     2,
+       0,     1,     1,     1,     1,     1,     1,     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,     2,     2,     2,     2,     2,
@@ -1453,19 +1456,19 @@ static const yytype_uint8 yyr2[] =
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     3,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     3,     2,     2,     2,     2,     2,     2,     2,     2,
-       3,     3,     4,     4,     4,     3,     2,     2,     2,     3,
        3,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     3,     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,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     3,     2,     2,     2,     2,     2,     2,
+       2,     2,     3,     3,     4,     4,     4,     3,     2,     2,
+       2,     3,     3,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     3,     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
 };
 
 
@@ -2142,15 +2145,15 @@ yyreduce:
   switch (yyn)
     {
         case 11:
-#line 146 "./util/configparser.y" /* yacc.c:1646  */
+#line 147 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(server:)\n")); 
        }
-#line 2150 "util/configparser.c" /* yacc.c:1646  */
+#line 2153 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 148:
-#line 212 "./util/configparser.y" /* yacc.c:1646  */
+  case 149:
+#line 213 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_stub* s;
                OUTYY(("\nP(stub_zone:)\n")); 
@@ -2161,11 +2164,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2165 "util/configparser.c" /* yacc.c:1646  */
+#line 2168 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 157:
-#line 229 "./util/configparser.y" /* yacc.c:1646  */
+  case 158:
+#line 230 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_stub* s;
                OUTYY(("\nP(forward_zone:)\n")); 
@@ -2176,11 +2179,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2180 "util/configparser.c" /* yacc.c:1646  */
+#line 2183 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 165:
-#line 246 "./util/configparser.y" /* yacc.c:1646  */
+  case 166:
+#line 247 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_view* s;
                OUTYY(("\nP(view:)\n")); 
@@ -2193,11 +2196,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2197 "util/configparser.c" /* yacc.c:1646  */
+#line 2200 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 172:
-#line 264 "./util/configparser.y" /* yacc.c:1646  */
+  case 173:
+#line 265 "./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)
@@ -2205,11 +2208,11 @@ yyreduce:
                else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2209 "util/configparser.c" /* yacc.c:1646  */
+#line 2212 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 173:
-#line 273 "./util/configparser.y" /* yacc.c:1646  */
+  case 174:
+#line 274 "./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)
@@ -2217,11 +2220,11 @@ yyreduce:
                else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2221 "util/configparser.c" /* yacc.c:1646  */
+#line 2224 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 174:
-#line 282 "./util/configparser.y" /* yacc.c:1646  */
+  case 175:
+#line 283 "./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)
@@ -2231,11 +2234,11 @@ yyreduce:
                else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2235 "util/configparser.c" /* yacc.c:1646  */
+#line 2238 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 175:
-#line 293 "./util/configparser.y" /* yacc.c:1646  */
+  case 176:
+#line 294 "./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)
@@ -2243,11 +2246,11 @@ yyreduce:
                else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2247 "util/configparser.c" /* yacc.c:1646  */
+#line 2250 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 176:
-#line 302 "./util/configparser.y" /* yacc.c:1646  */
+  case 177:
+#line 303 "./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)
@@ -2255,11 +2258,11 @@ yyreduce:
                else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2259 "util/configparser.c" /* yacc.c:1646  */
+#line 2262 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 177:
-#line 311 "./util/configparser.y" /* yacc.c:1646  */
+  case 178:
+#line 312 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2267,11 +2270,11 @@ yyreduce:
                else cfg_parser->cfg->port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2271 "util/configparser.c" /* yacc.c:1646  */
+#line 2274 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 178:
-#line 320 "./util/configparser.y" /* yacc.c:1646  */
+  case 179:
+#line 321 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->num_ifs == 0)
@@ -2283,11 +2286,11 @@ yyreduce:
                else
                        cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
        }
-#line 2287 "util/configparser.c" /* yacc.c:1646  */
+#line 2290 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 179:
-#line 333 "./util/configparser.y" /* yacc.c:1646  */
+  case 180:
+#line 334 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->num_out_ifs == 0)
@@ -2301,11 +2304,11 @@ yyreduce:
                        cfg_parser->cfg->out_ifs[
                                cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
        }
-#line 2305 "util/configparser.c" /* yacc.c:1646  */
+#line 2308 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 180:
-#line 348 "./util/configparser.y" /* yacc.c:1646  */
+  case 181:
+#line 349 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2313,11 +2316,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2317 "util/configparser.c" /* yacc.c:1646  */
+#line 2320 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 181:
-#line 357 "./util/configparser.y" /* yacc.c:1646  */
+  case 182:
+#line 358 "./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, 
@@ -2325,11 +2328,11 @@ yyreduce:
                        yyerror("port number or range (\"low-high\") expected");
                free((yyvsp[0].str));
        }
-#line 2329 "util/configparser.c" /* yacc.c:1646  */
+#line 2332 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 182:
-#line 366 "./util/configparser.y" /* yacc.c:1646  */
+  case 183:
+#line 367 "./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, 
@@ -2337,11 +2340,11 @@ yyreduce:
                        yyerror("port number or range (\"low-high\") expected");
                free((yyvsp[0].str));
        }
-#line 2341 "util/configparser.c" /* yacc.c:1646  */
+#line 2344 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 183:
-#line 375 "./util/configparser.y" /* yacc.c:1646  */
+  case 184:
+#line 376 "./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)
@@ -2349,11 +2352,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2353 "util/configparser.c" /* yacc.c:1646  */
+#line 2356 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 184:
-#line 384 "./util/configparser.y" /* yacc.c:1646  */
+  case 185:
+#line 385 "./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)
@@ -2361,11 +2364,11 @@ yyreduce:
                else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2365 "util/configparser.c" /* yacc.c:1646  */
+#line 2368 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 185:
-#line 393 "./util/configparser.y" /* yacc.c:1646  */
+  case 186:
+#line 394 "./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)
@@ -2373,11 +2376,11 @@ yyreduce:
                else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2377 "util/configparser.c" /* yacc.c:1646  */
+#line 2380 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 186:
-#line 402 "./util/configparser.y" /* yacc.c:1646  */
+  case 187:
+#line 403 "./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)
@@ -2385,11 +2388,11 @@ yyreduce:
                else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2389 "util/configparser.c" /* yacc.c:1646  */
+#line 2392 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 187:
-#line 411 "./util/configparser.y" /* yacc.c:1646  */
+  case 188:
+#line 412 "./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)
@@ -2397,11 +2400,11 @@ yyreduce:
                else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2401 "util/configparser.c" /* yacc.c:1646  */
+#line 2404 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 188:
-#line 420 "./util/configparser.y" /* yacc.c:1646  */
+  case 189:
+#line 421 "./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)
@@ -2409,11 +2412,11 @@ yyreduce:
                else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2413 "util/configparser.c" /* yacc.c:1646  */
+#line 2416 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 189:
-#line 429 "./util/configparser.y" /* yacc.c:1646  */
+  case 190:
+#line 430 "./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)
@@ -2421,11 +2424,11 @@ yyreduce:
                else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2425 "util/configparser.c" /* yacc.c:1646  */
+#line 2428 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 190:
-#line 438 "./util/configparser.y" /* yacc.c:1646  */
+  case 191:
+#line 439 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2433,11 +2436,11 @@ yyreduce:
                else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2437 "util/configparser.c" /* yacc.c:1646  */
+#line 2440 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 191:
-#line 447 "./util/configparser.y" /* yacc.c:1646  */
+  case 192:
+#line 448 "./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)
@@ -2445,11 +2448,11 @@ yyreduce:
                 else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
                 free((yyvsp[0].str));
        }
-#line 2449 "util/configparser.c" /* yacc.c:1646  */
+#line 2452 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 192:
-#line 456 "./util/configparser.y" /* yacc.c:1646  */
+  case 193:
+#line 457 "./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)
@@ -2457,11 +2460,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2461 "util/configparser.c" /* yacc.c:1646  */
+#line 2464 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 193:
-#line 465 "./util/configparser.y" /* yacc.c:1646  */
+  case 194:
+#line 466 "./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)
@@ -2469,11 +2472,11 @@ yyreduce:
                else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2473 "util/configparser.c" /* yacc.c:1646  */
+#line 2476 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 194:
-#line 474 "./util/configparser.y" /* yacc.c:1646  */
+  case 195:
+#line 475 "./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)
@@ -2481,31 +2484,31 @@ yyreduce:
                else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2485 "util/configparser.c" /* yacc.c:1646  */
+#line 2488 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 195:
-#line 483 "./util/configparser.y" /* yacc.c:1646  */
+  case 196:
+#line 484 "./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 2495 "util/configparser.c" /* yacc.c:1646  */
+#line 2498 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 196:
-#line 490 "./util/configparser.y" /* yacc.c:1646  */
+  case 197:
+#line 491 "./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 2505 "util/configparser.c" /* yacc.c:1646  */
+#line 2508 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 197:
-#line 497 "./util/configparser.y" /* yacc.c:1646  */
+  case 198:
+#line 498 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2513,11 +2516,23 @@ yyreduce:
                else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2517 "util/configparser.c" /* yacc.c:1646  */
+#line 2520 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 198:
-#line 506 "./util/configparser.y" /* yacc.c:1646  */
+  case 199:
+#line 507 "./util/configparser.y" /* yacc.c:1646  */
+    {
+               OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
+                       yyerror("expected yes or no.");
+               else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
+       }
+#line 2532 "util/configparser.c" /* yacc.c:1646  */
+    break;
+
+  case 200:
+#line 516 "./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)
@@ -2525,11 +2540,11 @@ yyreduce:
                else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2529 "util/configparser.c" /* yacc.c:1646  */
+#line 2544 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 199:
-#line 515 "./util/configparser.y" /* yacc.c:1646  */
+  case 201:
+#line 525 "./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)
@@ -2542,11 +2557,11 @@ yyreduce:
 #endif
                free((yyvsp[0].str));
        }
-#line 2546 "util/configparser.c" /* yacc.c:1646  */
+#line 2561 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 200:
-#line 529 "./util/configparser.y" /* yacc.c:1646  */
+  case 202:
+#line 539 "./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)
@@ -2554,11 +2569,11 @@ yyreduce:
                else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2558 "util/configparser.c" /* yacc.c:1646  */
+#line 2573 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 201:
-#line 538 "./util/configparser.y" /* yacc.c:1646  */
+  case 203:
+#line 548 "./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)
@@ -2566,31 +2581,31 @@ yyreduce:
                else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2570 "util/configparser.c" /* yacc.c:1646  */
+#line 2585 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 202:
-#line 547 "./util/configparser.y" /* yacc.c:1646  */
+  case 204:
+#line 557 "./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 2580 "util/configparser.c" /* yacc.c:1646  */
+#line 2595 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 203:
-#line 554 "./util/configparser.y" /* yacc.c:1646  */
+  case 205:
+#line 564 "./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 2590 "util/configparser.c" /* yacc.c:1646  */
+#line 2605 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 204:
-#line 561 "./util/configparser.y" /* yacc.c:1646  */
+  case 206:
+#line 571 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->directory);
@@ -2613,115 +2628,115 @@ yyreduce:
                                        d, strerror(errno));
                }
        }
-#line 2617 "util/configparser.c" /* yacc.c:1646  */
+#line 2632 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 205:
-#line 585 "./util/configparser.y" /* yacc.c:1646  */
+  case 207:
+#line 595 "./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 2628 "util/configparser.c" /* yacc.c:1646  */
+#line 2643 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 206:
-#line 593 "./util/configparser.y" /* yacc.c:1646  */
+  case 208:
+#line 603 "./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 2638 "util/configparser.c" /* yacc.c:1646  */
+#line 2653 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 207:
-#line 600 "./util/configparser.y" /* yacc.c:1646  */
+  case 209:
+#line 610 "./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 2648 "util/configparser.c" /* yacc.c:1646  */
+#line 2663 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 208:
-#line 607 "./util/configparser.y" /* yacc.c:1646  */
+  case 210:
+#line 617 "./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 2658 "util/configparser.c" /* yacc.c:1646  */
+#line 2673 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 209:
-#line 614 "./util/configparser.y" /* yacc.c:1646  */
+  case 211:
+#line 624 "./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 2668 "util/configparser.c" /* yacc.c:1646  */
+#line 2683 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 210:
-#line 621 "./util/configparser.y" /* yacc.c:1646  */
+  case 212:
+#line 631 "./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 2679 "util/configparser.c" /* yacc.c:1646  */
+#line 2694 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 211:
-#line 629 "./util/configparser.y" /* yacc.c:1646  */
+  case 213:
+#line 639 "./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 2690 "util/configparser.c" /* yacc.c:1646  */
+#line 2705 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 212:
-#line 637 "./util/configparser.y" /* yacc.c:1646  */
+  case 214:
+#line 647 "./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 2701 "util/configparser.c" /* yacc.c:1646  */
+#line 2716 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 213:
-#line 645 "./util/configparser.y" /* yacc.c:1646  */
+  case 215:
+#line 655 "./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 2711 "util/configparser.c" /* yacc.c:1646  */
+#line 2726 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 214:
-#line 652 "./util/configparser.y" /* yacc.c:1646  */
+  case 216:
+#line 662 "./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 2721 "util/configparser.c" /* yacc.c:1646  */
+#line 2736 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 215:
-#line 659 "./util/configparser.y" /* yacc.c:1646  */
+  case 217:
+#line 669 "./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)
@@ -2729,11 +2744,11 @@ yyreduce:
                else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2733 "util/configparser.c" /* yacc.c:1646  */
+#line 2748 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 216:
-#line 668 "./util/configparser.y" /* yacc.c:1646  */
+  case 218:
+#line 678 "./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)
@@ -2741,53 +2756,53 @@ yyreduce:
                else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2745 "util/configparser.c" /* yacc.c:1646  */
+#line 2760 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 217:
-#line 677 "./util/configparser.y" /* yacc.c:1646  */
+  case 219:
+#line 687 "./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 2755 "util/configparser.c" /* yacc.c:1646  */
+#line 2770 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 218:
-#line 684 "./util/configparser.y" /* yacc.c:1646  */
+  case 220:
+#line 694 "./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 2765 "util/configparser.c" /* yacc.c:1646  */
+#line 2780 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 219:
-#line 691 "./util/configparser.y" /* yacc.c:1646  */
+  case 221:
+#line 701 "./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 2776 "util/configparser.c" /* yacc.c:1646  */
+#line 2791 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 220:
-#line 699 "./util/configparser.y" /* yacc.c:1646  */
+  case 222:
+#line 709 "./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 2787 "util/configparser.c" /* yacc.c:1646  */
+#line 2802 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 221:
-#line 707 "./util/configparser.y" /* yacc.c:1646  */
+  case 223:
+#line 717 "./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)
@@ -2796,11 +2811,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 2800 "util/configparser.c" /* yacc.c:1646  */
+#line 2815 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 222:
-#line 717 "./util/configparser.y" /* yacc.c:1646  */
+  case 224:
+#line 727 "./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)
@@ -2809,11 +2824,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 2813 "util/configparser.c" /* yacc.c:1646  */
+#line 2828 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 223:
-#line 727 "./util/configparser.y" /* yacc.c:1646  */
+  case 225:
+#line 737 "./util/configparser.y" /* yacc.c:1646  */
     {
         OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str)));
         if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2822,11 +2837,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 2826 "util/configparser.c" /* yacc.c:1646  */
+#line 2841 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 224:
-#line 737 "./util/configparser.y" /* yacc.c:1646  */
+  case 226:
+#line 747 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2838,11 +2853,11 @@ yyreduce:
                else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2842 "util/configparser.c" /* yacc.c:1646  */
+#line 2857 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 225:
-#line 750 "./util/configparser.y" /* yacc.c:1646  */
+  case 227:
+#line 760 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2852,22 +2867,22 @@ yyreduce:
                else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2856 "util/configparser.c" /* yacc.c:1646  */
+#line 2871 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 226:
-#line 761 "./util/configparser.y" /* yacc.c:1646  */
+  case 228:
+#line 771 "./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 2867 "util/configparser.c" /* yacc.c:1646  */
+#line 2882 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 227:
-#line 769 "./util/configparser.y" /* yacc.c:1646  */
+  case 229:
+#line 779 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2879,11 +2894,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 2883 "util/configparser.c" /* yacc.c:1646  */
+#line 2898 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 228:
-#line 782 "./util/configparser.y" /* yacc.c:1646  */
+  case 230:
+#line 792 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2891,11 +2906,11 @@ yyreduce:
                else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2895 "util/configparser.c" /* yacc.c:1646  */
+#line 2910 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 229:
-#line 791 "./util/configparser.y" /* yacc.c:1646  */
+  case 231:
+#line 801 "./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)
@@ -2903,11 +2918,11 @@ yyreduce:
                else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2907 "util/configparser.c" /* yacc.c:1646  */
+#line 2922 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 230:
-#line 800 "./util/configparser.y" /* yacc.c:1646  */
+  case 232:
+#line 810 "./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)
@@ -2915,11 +2930,11 @@ yyreduce:
                else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2919 "util/configparser.c" /* yacc.c:1646  */
+#line 2934 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 231:
-#line 809 "./util/configparser.y" /* yacc.c:1646  */
+  case 233:
+#line 819 "./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)
@@ -2928,11 +2943,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2932 "util/configparser.c" /* yacc.c:1646  */
+#line 2947 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 232:
-#line 819 "./util/configparser.y" /* yacc.c:1646  */
+  case 234:
+#line 829 "./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)
@@ -2941,22 +2956,22 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2945 "util/configparser.c" /* yacc.c:1646  */
+#line 2960 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 233:
-#line 829 "./util/configparser.y" /* yacc.c:1646  */
+  case 235:
+#line 839 "./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 2956 "util/configparser.c" /* yacc.c:1646  */
+#line 2971 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 234:
-#line 837 "./util/configparser.y" /* yacc.c:1646  */
+  case 236:
+#line 847 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2968,11 +2983,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 2972 "util/configparser.c" /* yacc.c:1646  */
+#line 2987 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 235:
-#line 850 "./util/configparser.y" /* yacc.c:1646  */
+  case 237:
+#line 860 "./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)
@@ -2980,22 +2995,22 @@ yyreduce:
                else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2984 "util/configparser.c" /* yacc.c:1646  */
+#line 2999 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 236:
-#line 859 "./util/configparser.y" /* yacc.c:1646  */
+  case 238:
+#line 869 "./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 2995 "util/configparser.c" /* yacc.c:1646  */
+#line 3010 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 237:
-#line 867 "./util/configparser.y" /* yacc.c:1646  */
+  case 239:
+#line 877 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3003,22 +3018,22 @@ yyreduce:
                else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3007 "util/configparser.c" /* yacc.c:1646  */
+#line 3022 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 238:
-#line 876 "./util/configparser.y" /* yacc.c:1646  */
+  case 240:
+#line 886 "./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 3018 "util/configparser.c" /* yacc.c:1646  */
+#line 3033 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 239:
-#line 884 "./util/configparser.y" /* yacc.c:1646  */
+  case 241:
+#line 894 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3030,11 +3045,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3034 "util/configparser.c" /* yacc.c:1646  */
+#line 3049 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 240:
-#line 897 "./util/configparser.y" /* yacc.c:1646  */
+  case 242:
+#line 907 "./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)
@@ -3042,21 +3057,21 @@ yyreduce:
                else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3046 "util/configparser.c" /* yacc.c:1646  */
+#line 3061 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 241:
-#line 906 "./util/configparser.y" /* yacc.c:1646  */
+  case 243:
+#line 916 "./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 3056 "util/configparser.c" /* yacc.c:1646  */
+#line 3071 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 242:
-#line 913 "./util/configparser.y" /* yacc.c:1646  */
+  case 244:
+#line 923 "./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)
@@ -3065,11 +3080,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3069 "util/configparser.c" /* yacc.c:1646  */
+#line 3084 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 243:
-#line 923 "./util/configparser.y" /* yacc.c:1646  */
+  case 245:
+#line 933 "./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)
@@ -3078,11 +3093,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3082 "util/configparser.c" /* yacc.c:1646  */
+#line 3097 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 244:
-#line 933 "./util/configparser.y" /* yacc.c:1646  */
+  case 246:
+#line 943 "./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)
@@ -3091,11 +3106,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3095 "util/configparser.c" /* yacc.c:1646  */
+#line 3110 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 245:
-#line 943 "./util/configparser.y" /* yacc.c:1646  */
+  case 247:
+#line 953 "./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)
@@ -3104,11 +3119,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3108 "util/configparser.c" /* yacc.c:1646  */
+#line 3123 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 246:
-#line 953 "./util/configparser.y" /* yacc.c:1646  */
+  case 248:
+#line 963 "./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)
@@ -3117,11 +3132,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3121 "util/configparser.c" /* yacc.c:1646  */
+#line 3136 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 247:
-#line 963 "./util/configparser.y" /* yacc.c:1646  */
+  case 249:
+#line 973 "./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)
@@ -3130,11 +3145,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3134 "util/configparser.c" /* yacc.c:1646  */
+#line 3149 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 248:
-#line 973 "./util/configparser.y" /* yacc.c:1646  */
+  case 250:
+#line 983 "./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)
@@ -3143,11 +3158,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3147 "util/configparser.c" /* yacc.c:1646  */
+#line 3162 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 249:
-#line 983 "./util/configparser.y" /* yacc.c:1646  */
+  case 251:
+#line 993 "./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)
@@ -3156,41 +3171,41 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3160 "util/configparser.c" /* yacc.c:1646  */
+#line 3175 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 250:
-#line 993 "./util/configparser.y" /* yacc.c:1646  */
+  case 252:
+#line 1003 "./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 3170 "util/configparser.c" /* yacc.c:1646  */
+#line 3185 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 251:
-#line 1000 "./util/configparser.y" /* yacc.c:1646  */
+  case 253:
+#line 1010 "./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 3180 "util/configparser.c" /* yacc.c:1646  */
+#line 3195 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 252:
-#line 1007 "./util/configparser.y" /* yacc.c:1646  */
+  case 254:
+#line 1017 "./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 3190 "util/configparser.c" /* yacc.c:1646  */
+#line 3205 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 253:
-#line 1014 "./util/configparser.y" /* yacc.c:1646  */
+  case 255:
+#line 1024 "./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)
@@ -3198,11 +3213,11 @@ yyreduce:
                else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3202 "util/configparser.c" /* yacc.c:1646  */
+#line 3217 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 254:
-#line 1023 "./util/configparser.y" /* yacc.c:1646  */
+  case 256:
+#line 1033 "./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)
@@ -3210,11 +3225,11 @@ yyreduce:
                else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3214 "util/configparser.c" /* yacc.c:1646  */
+#line 3229 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 255:
-#line 1032 "./util/configparser.y" /* yacc.c:1646  */
+  case 257:
+#line 1042 "./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)
@@ -3222,21 +3237,21 @@ yyreduce:
                else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3226 "util/configparser.c" /* yacc.c:1646  */
+#line 3241 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 256:
-#line 1041 "./util/configparser.y" /* yacc.c:1646  */
+  case 258:
+#line 1051 "./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 3236 "util/configparser.c" /* yacc.c:1646  */
+#line 3251 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 257:
-#line 1048 "./util/configparser.y" /* yacc.c:1646  */
+  case 259:
+#line 1058 "./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)
@@ -3245,11 +3260,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3249 "util/configparser.c" /* yacc.c:1646  */
+#line 3264 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 258:
-#line 1058 "./util/configparser.y" /* yacc.c:1646  */
+  case 260:
+#line 1068 "./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 &&
@@ -3265,21 +3280,21 @@ yyreduce:
                                fatal_exit("out of memory adding acl");
                }
        }
-#line 3269 "util/configparser.c" /* yacc.c:1646  */
+#line 3284 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 259:
-#line 1075 "./util/configparser.y" /* yacc.c:1646  */
+  case 261:
+#line 1085 "./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 3279 "util/configparser.c" /* yacc.c:1646  */
+#line 3294 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 260:
-#line 1082 "./util/configparser.y" /* yacc.c:1646  */
+  case 262:
+#line 1092 "./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) {
@@ -3296,11 +3311,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3300 "util/configparser.c" /* yacc.c:1646  */
+#line 3315 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 261:
-#line 1100 "./util/configparser.y" /* yacc.c:1646  */
+  case 263:
+#line 1110 "./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) {
@@ -3312,11 +3327,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3316 "util/configparser.c" /* yacc.c:1646  */
+#line 3331 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 262:
-#line 1113 "./util/configparser.y" /* yacc.c:1646  */
+  case 264:
+#line 1123 "./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) {
@@ -3328,11 +3343,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3332 "util/configparser.c" /* yacc.c:1646  */
+#line 3347 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 263:
-#line 1126 "./util/configparser.y" /* yacc.c:1646  */
+  case 265:
+#line 1136 "./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)
@@ -3340,11 +3355,11 @@ yyreduce:
                else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3344 "util/configparser.c" /* yacc.c:1646  */
+#line 3359 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 264:
-#line 1135 "./util/configparser.y" /* yacc.c:1646  */
+  case 266:
+#line 1145 "./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)
@@ -3352,11 +3367,11 @@ yyreduce:
                else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3356 "util/configparser.c" /* yacc.c:1646  */
+#line 3371 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 265:
-#line 1144 "./util/configparser.y" /* yacc.c:1646  */
+  case 267:
+#line 1154 "./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)
@@ -3364,11 +3379,11 @@ yyreduce:
                else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3368 "util/configparser.c" /* yacc.c:1646  */
+#line 3383 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 266:
-#line 1153 "./util/configparser.y" /* yacc.c:1646  */
+  case 268:
+#line 1163 "./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)
@@ -3376,11 +3391,11 @@ yyreduce:
                else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3380 "util/configparser.c" /* yacc.c:1646  */
+#line 3395 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 267:
-#line 1162 "./util/configparser.y" /* yacc.c:1646  */
+  case 269:
+#line 1172 "./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)
@@ -3389,11 +3404,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3393 "util/configparser.c" /* yacc.c:1646  */
+#line 3408 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 268:
-#line 1172 "./util/configparser.y" /* yacc.c:1646  */
+  case 270:
+#line 1182 "./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)
@@ -3402,11 +3417,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3406 "util/configparser.c" /* yacc.c:1646  */
+#line 3421 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 269:
-#line 1182 "./util/configparser.y" /* yacc.c:1646  */
+  case 271:
+#line 1192 "./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)
@@ -3414,11 +3429,11 @@ yyreduce:
                else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3418 "util/configparser.c" /* yacc.c:1646  */
+#line 3433 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 270:
-#line 1191 "./util/configparser.y" /* yacc.c:1646  */
+  case 272:
+#line 1201 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3426,11 +3441,11 @@ yyreduce:
                else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3430 "util/configparser.c" /* yacc.c:1646  */
+#line 3445 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 271:
-#line 1200 "./util/configparser.y" /* yacc.c:1646  */
+  case 273:
+#line 1210 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3442,11 +3457,11 @@ yyreduce:
 #endif
                free((yyvsp[0].str));
        }
-#line 3446 "util/configparser.c" /* yacc.c:1646  */
+#line 3461 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 272:
-#line 1213 "./util/configparser.y" /* yacc.c:1646  */
+  case 274:
+#line 1223 "./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)
@@ -3454,21 +3469,21 @@ yyreduce:
                else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3458 "util/configparser.c" /* yacc.c:1646  */
+#line 3473 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 273:
-#line 1222 "./util/configparser.y" /* yacc.c:1646  */
+  case 275:
+#line 1232 "./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 3468 "util/configparser.c" /* yacc.c:1646  */
+#line 3483 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 274:
-#line 1229 "./util/configparser.y" /* yacc.c:1646  */
+  case 276:
+#line 1239 "./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)
@@ -3476,11 +3491,11 @@ yyreduce:
                else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3480 "util/configparser.c" /* yacc.c:1646  */
+#line 3495 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 275:
-#line 1238 "./util/configparser.y" /* yacc.c:1646  */
+  case 277:
+#line 1248 "./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)
@@ -3488,11 +3503,11 @@ yyreduce:
                else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3492 "util/configparser.c" /* yacc.c:1646  */
+#line 3507 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 276:
-#line 1247 "./util/configparser.y" /* yacc.c:1646  */
+  case 278:
+#line 1257 "./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)
@@ -3500,11 +3515,11 @@ yyreduce:
                else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3504 "util/configparser.c" /* yacc.c:1646  */
+#line 3519 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 277:
-#line 1256 "./util/configparser.y" /* yacc.c:1646  */
+  case 279:
+#line 1266 "./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)
@@ -3513,22 +3528,22 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3517 "util/configparser.c" /* yacc.c:1646  */
+#line 3532 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 278:
-#line 1265 "./util/configparser.y" /* yacc.c:1646  */
+  case 280:
+#line 1275 "./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 3528 "util/configparser.c" /* yacc.c:1646  */
+#line 3543 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 279:
-#line 1273 "./util/configparser.y" /* yacc.c:1646  */
+  case 281:
+#line 1283 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3540,22 +3555,22 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3544 "util/configparser.c" /* yacc.c:1646  */
+#line 3559 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 280:
-#line 1286 "./util/configparser.y" /* yacc.c:1646  */
+  case 282:
+#line 1296 "./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 3555 "util/configparser.c" /* yacc.c:1646  */
+#line 3570 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 281:
-#line 1294 "./util/configparser.y" /* yacc.c:1646  */
+  case 283:
+#line 1304 "./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 &&
@@ -3582,21 +3597,21 @@ yyreduce:
                                fatal_exit("out of memory adding local-zone");
                }
        }
-#line 3586 "util/configparser.c" /* yacc.c:1646  */
+#line 3601 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 282:
-#line 1322 "./util/configparser.y" /* yacc.c:1646  */
+  case 284:
+#line 1332 "./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 3596 "util/configparser.c" /* yacc.c:1646  */
+#line 3611 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 283:
-#line 1329 "./util/configparser.y" /* yacc.c:1646  */
+  case 285:
+#line 1339 "./util/configparser.y" /* yacc.c:1646  */
     {
                char* ptr;
                OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -3610,11 +3625,11 @@ yyreduce:
                        yyerror("local-data-ptr could not be reversed");
                }
        }
-#line 3614 "util/configparser.c" /* yacc.c:1646  */
+#line 3629 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 284:
-#line 1344 "./util/configparser.y" /* yacc.c:1646  */
+  case 286:
+#line 1354 "./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)
@@ -3623,11 +3638,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3627 "util/configparser.c" /* yacc.c:1646  */
+#line 3642 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 285:
-#line 1354 "./util/configparser.y" /* yacc.c:1646  */
+  case 287:
+#line 1364 "./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)
@@ -3636,31 +3651,31 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3640 "util/configparser.c" /* yacc.c:1646  */
+#line 3655 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 286:
-#line 1364 "./util/configparser.y" /* yacc.c:1646  */
+  case 288:
+#line 1374 "./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 3650 "util/configparser.c" /* yacc.c:1646  */
+#line 3665 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 287:
-#line 1371 "./util/configparser.y" /* yacc.c:1646  */
+  case 289:
+#line 1381 "./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 3660 "util/configparser.c" /* yacc.c:1646  */
+#line 3675 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 288:
-#line 1378 "./util/configparser.y" /* yacc.c:1646  */
+  case 290:
+#line 1388 "./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)
@@ -3668,11 +3683,11 @@ yyreduce:
                else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3672 "util/configparser.c" /* yacc.c:1646  */
+#line 3687 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 289:
-#line 1387 "./util/configparser.y" /* yacc.c:1646  */
+  case 291:
+#line 1397 "./util/configparser.y" /* yacc.c:1646  */
     {
                char* p, *s = (yyvsp[0].str);
                OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
@@ -3685,11 +3700,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3689 "util/configparser.c" /* yacc.c:1646  */
+#line 3704 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 290:
-#line 1401 "./util/configparser.y" /* yacc.c:1646  */
+  case 292:
+#line 1411 "./util/configparser.y" /* yacc.c:1646  */
     {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -3707,11 +3722,11 @@ yyreduce:
                        }
                }
        }
-#line 3711 "util/configparser.c" /* yacc.c:1646  */
+#line 3726 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 291:
-#line 1420 "./util/configparser.y" /* yacc.c:1646  */
+  case 293:
+#line 1430 "./util/configparser.y" /* yacc.c:1646  */
     {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -3729,11 +3744,11 @@ yyreduce:
                        }
                }
        }
-#line 3733 "util/configparser.c" /* yacc.c:1646  */
+#line 3748 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 292:
-#line 1439 "./util/configparser.y" /* yacc.c:1646  */
+  case 294:
+#line 1449 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
                if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions,
@@ -3744,11 +3759,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 3748 "util/configparser.c" /* yacc.c:1646  */
+#line 3763 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 293:
-#line 1451 "./util/configparser.y" /* yacc.c:1646  */
+  case 295:
+#line 1461 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
                if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas,
@@ -3759,11 +3774,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 3763 "util/configparser.c" /* yacc.c:1646  */
+#line 3778 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 294:
-#line 1463 "./util/configparser.y" /* yacc.c:1646  */
+  case 296:
+#line 1473 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
                if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides,
@@ -3774,11 +3789,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 3778 "util/configparser.c" /* yacc.c:1646  */
+#line 3793 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 295:
-#line 1475 "./util/configparser.y" /* yacc.c:1646  */
+  case 297:
+#line 1485 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view,
@@ -3788,11 +3803,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 3792 "util/configparser.c" /* yacc.c:1646  */
+#line 3807 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 296:
-#line 1486 "./util/configparser.y" /* yacc.c:1646  */
+  case 298:
+#line 1496 "./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)
@@ -3800,22 +3815,22 @@ yyreduce:
                else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3804 "util/configparser.c" /* yacc.c:1646  */
+#line 3819 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 297:
-#line 1495 "./util/configparser.y" /* yacc.c:1646  */
+  case 299:
+#line 1505 "./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 3815 "util/configparser.c" /* yacc.c:1646  */
+#line 3830 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 298:
-#line 1503 "./util/configparser.y" /* yacc.c:1646  */
+  case 300:
+#line 1513 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3827,11 +3842,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3831 "util/configparser.c" /* yacc.c:1646  */
+#line 3846 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 299:
-#line 1516 "./util/configparser.y" /* yacc.c:1646  */
+  case 301:
+#line 1526 "./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) {
@@ -3843,11 +3858,11 @@ yyreduce:
                                        "ratelimit-for-domain");
                }
        }
-#line 3847 "util/configparser.c" /* yacc.c:1646  */
+#line 3862 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 300:
-#line 1529 "./util/configparser.y" /* yacc.c:1646  */
+  case 302:
+#line 1539 "./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) {
@@ -3859,11 +3874,11 @@ yyreduce:
                                        "ratelimit-below-domain");
                }
        }
-#line 3863 "util/configparser.c" /* yacc.c:1646  */
+#line 3878 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 301:
-#line 1542 "./util/configparser.y" /* yacc.c:1646  */
+  case 303:
+#line 1552 "./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)
@@ -3871,11 +3886,11 @@ yyreduce:
                else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3875 "util/configparser.c" /* yacc.c:1646  */
+#line 3890 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 302:
-#line 1551 "./util/configparser.y" /* yacc.c:1646  */
+  case 304:
+#line 1561 "./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)
@@ -3884,11 +3899,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3888 "util/configparser.c" /* yacc.c:1646  */
+#line 3903 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 303:
-#line 1561 "./util/configparser.y" /* yacc.c:1646  */
+  case 305:
+#line 1571 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3897,11 +3912,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3901 "util/configparser.c" /* yacc.c:1646  */
+#line 3916 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 304:
-#line 1571 "./util/configparser.y" /* yacc.c:1646  */
+  case 306:
+#line 1581 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->stubs->name)
@@ -3910,31 +3925,31 @@ yyreduce:
                free(cfg_parser->cfg->stubs->name);
                cfg_parser->cfg->stubs->name = (yyvsp[0].str);
        }
-#line 3914 "util/configparser.c" /* yacc.c:1646  */
+#line 3929 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 305:
-#line 1581 "./util/configparser.y" /* yacc.c:1646  */
+  case 307:
+#line 1591 "./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 3924 "util/configparser.c" /* yacc.c:1646  */
+#line 3939 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 306:
-#line 1588 "./util/configparser.y" /* yacc.c:1646  */
+  case 308:
+#line 1598 "./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 3934 "util/configparser.c" /* yacc.c:1646  */
+#line 3949 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 307:
-#line 1595 "./util/configparser.y" /* yacc.c:1646  */
+  case 309:
+#line 1605 "./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)
@@ -3942,11 +3957,11 @@ yyreduce:
                else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3946 "util/configparser.c" /* yacc.c:1646  */
+#line 3961 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 308:
-#line 1604 "./util/configparser.y" /* yacc.c:1646  */
+  case 310:
+#line 1614 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3955,11 +3970,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3959 "util/configparser.c" /* yacc.c:1646  */
+#line 3974 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 309:
-#line 1614 "./util/configparser.y" /* yacc.c:1646  */
+  case 311:
+#line 1624 "./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)
@@ -3968,11 +3983,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3972 "util/configparser.c" /* yacc.c:1646  */
+#line 3987 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 310:
-#line 1624 "./util/configparser.y" /* yacc.c:1646  */
+  case 312:
+#line 1634 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->forwards->name)
@@ -3981,31 +3996,31 @@ yyreduce:
                free(cfg_parser->cfg->forwards->name);
                cfg_parser->cfg->forwards->name = (yyvsp[0].str);
        }
-#line 3985 "util/configparser.c" /* yacc.c:1646  */
+#line 4000 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 311:
-#line 1634 "./util/configparser.y" /* yacc.c:1646  */
+  case 313:
+#line 1644 "./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 3995 "util/configparser.c" /* yacc.c:1646  */
+#line 4010 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 312:
-#line 1641 "./util/configparser.y" /* yacc.c:1646  */
+  case 314:
+#line 1651 "./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 4005 "util/configparser.c" /* yacc.c:1646  */
+#line 4020 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 313:
-#line 1648 "./util/configparser.y" /* yacc.c:1646  */
+  case 315:
+#line 1658 "./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)
@@ -4013,11 +4028,11 @@ yyreduce:
                else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4017 "util/configparser.c" /* yacc.c:1646  */
+#line 4032 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 314:
-#line 1657 "./util/configparser.y" /* yacc.c:1646  */
+  case 316:
+#line 1667 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4026,11 +4041,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4030 "util/configparser.c" /* yacc.c:1646  */
+#line 4045 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 315:
-#line 1667 "./util/configparser.y" /* yacc.c:1646  */
+  case 317:
+#line 1677 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->views->name)
@@ -4039,11 +4054,11 @@ yyreduce:
                free(cfg_parser->cfg->views->name);
                cfg_parser->cfg->views->name = (yyvsp[0].str);
        }
-#line 4043 "util/configparser.c" /* yacc.c:1646  */
+#line 4058 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 316:
-#line 1677 "./util/configparser.y" /* yacc.c:1646  */
+  case 318:
+#line 1687 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
@@ -4071,11 +4086,11 @@ yyreduce:
                                fatal_exit("out of memory adding local-zone");
                }
        }
-#line 4075 "util/configparser.c" /* yacc.c:1646  */
+#line 4090 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 317:
-#line 1706 "./util/configparser.y" /* yacc.c:1646  */
+  case 319:
+#line 1716 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) {
@@ -4083,11 +4098,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 4087 "util/configparser.c" /* yacc.c:1646  */
+#line 4102 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 318:
-#line 1715 "./util/configparser.y" /* yacc.c:1646  */
+  case 320:
+#line 1725 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(view-first:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4095,19 +4110,19 @@ yyreduce:
                else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4099 "util/configparser.c" /* yacc.c:1646  */
+#line 4114 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 319:
-#line 1724 "./util/configparser.y" /* yacc.c:1646  */
+  case 321:
+#line 1734 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(remote-control:)\n")); 
        }
-#line 4107 "util/configparser.c" /* yacc.c:1646  */
+#line 4122 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 330:
-#line 1735 "./util/configparser.y" /* yacc.c:1646  */
+  case 332:
+#line 1745 "./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)
@@ -4116,11 +4131,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4120 "util/configparser.c" /* yacc.c:1646  */
+#line 4135 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 331:
-#line 1745 "./util/configparser.y" /* yacc.c:1646  */
+  case 333:
+#line 1755 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -4128,21 +4143,21 @@ yyreduce:
                else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4132 "util/configparser.c" /* yacc.c:1646  */
+#line 4147 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 332:
-#line 1754 "./util/configparser.y" /* yacc.c:1646  */
+  case 334:
+#line 1764 "./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 4142 "util/configparser.c" /* yacc.c:1646  */
+#line 4157 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 333:
-#line 1761 "./util/configparser.y" /* yacc.c:1646  */
+  case 335:
+#line 1771 "./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)
@@ -4151,122 +4166,122 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4155 "util/configparser.c" /* yacc.c:1646  */
+#line 4170 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 334:
-#line 1771 "./util/configparser.y" /* yacc.c:1646  */
+  case 336:
+#line 1781 "./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 4165 "util/configparser.c" /* yacc.c:1646  */
+#line 4180 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 335:
-#line 1778 "./util/configparser.y" /* yacc.c:1646  */
+  case 337:
+#line 1788 "./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 4175 "util/configparser.c" /* yacc.c:1646  */
+#line 4190 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 336:
-#line 1785 "./util/configparser.y" /* yacc.c:1646  */
+  case 338:
+#line 1795 "./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 4185 "util/configparser.c" /* yacc.c:1646  */
+#line 4200 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 337:
-#line 1792 "./util/configparser.y" /* yacc.c:1646  */
+  case 339:
+#line 1802 "./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 4195 "util/configparser.c" /* yacc.c:1646  */
+#line 4210 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 338:
-#line 1799 "./util/configparser.y" /* yacc.c:1646  */
+  case 340:
+#line 1809 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("\nP(dnstap:)\n"));
        }
-#line 4203 "util/configparser.c" /* yacc.c:1646  */
+#line 4218 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 353:
-#line 1816 "./util/configparser.y" /* yacc.c:1646  */
+  case 355:
+#line 1826 "./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 4214 "util/configparser.c" /* yacc.c:1646  */
+#line 4229 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 354:
-#line 1824 "./util/configparser.y" /* yacc.c:1646  */
+  case 356:
+#line 1834 "./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 4224 "util/configparser.c" /* yacc.c:1646  */
+#line 4239 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 355:
-#line 1831 "./util/configparser.y" /* yacc.c:1646  */
+  case 357:
+#line 1841 "./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 4235 "util/configparser.c" /* yacc.c:1646  */
+#line 4250 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 356:
-#line 1839 "./util/configparser.y" /* yacc.c:1646  */
+  case 358:
+#line 1849 "./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 4246 "util/configparser.c" /* yacc.c:1646  */
+#line 4261 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 357:
-#line 1847 "./util/configparser.y" /* yacc.c:1646  */
+  case 359:
+#line 1857 "./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 4256 "util/configparser.c" /* yacc.c:1646  */
+#line 4271 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 358:
-#line 1854 "./util/configparser.y" /* yacc.c:1646  */
+  case 360:
+#line 1864 "./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 4266 "util/configparser.c" /* yacc.c:1646  */
+#line 4281 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 359:
-#line 1861 "./util/configparser.y" /* yacc.c:1646  */
+  case 361:
+#line 1871 "./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)
@@ -4274,11 +4289,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_resolver_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4278 "util/configparser.c" /* yacc.c:1646  */
+#line 4293 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 360:
-#line 1870 "./util/configparser.y" /* yacc.c:1646  */
+  case 362:
+#line 1880 "./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)
@@ -4286,11 +4301,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_resolver_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4290 "util/configparser.c" /* yacc.c:1646  */
+#line 4305 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 361:
-#line 1879 "./util/configparser.y" /* yacc.c:1646  */
+  case 363:
+#line 1889 "./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)
@@ -4298,11 +4313,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_client_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4302 "util/configparser.c" /* yacc.c:1646  */
+#line 4317 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 362:
-#line 1888 "./util/configparser.y" /* yacc.c:1646  */
+  case 364:
+#line 1898 "./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)
@@ -4310,11 +4325,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_client_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4314 "util/configparser.c" /* yacc.c:1646  */
+#line 4329 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 363:
-#line 1897 "./util/configparser.y" /* yacc.c:1646  */
+  case 365:
+#line 1907 "./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)
@@ -4322,11 +4337,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_forwarder_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4326 "util/configparser.c" /* yacc.c:1646  */
+#line 4341 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 364:
-#line 1906 "./util/configparser.y" /* yacc.c:1646  */
+  case 366:
+#line 1916 "./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)
@@ -4334,29 +4349,29 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_forwarder_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4338 "util/configparser.c" /* yacc.c:1646  */
+#line 4353 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 365:
-#line 1915 "./util/configparser.y" /* yacc.c:1646  */
+  case 367:
+#line 1925 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(python:)\n")); 
        }
-#line 4346 "util/configparser.c" /* yacc.c:1646  */
+#line 4361 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 369:
-#line 1924 "./util/configparser.y" /* yacc.c:1646  */
+  case 371:
+#line 1934 "./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 4356 "util/configparser.c" /* yacc.c:1646  */
+#line 4371 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 370:
-#line 1930 "./util/configparser.y" /* yacc.c:1646  */
+  case 372:
+#line 1940 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str)));
                if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4365,21 +4380,21 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4369 "util/configparser.c" /* yacc.c:1646  */
+#line 4384 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 371:
-#line 1940 "./util/configparser.y" /* yacc.c:1646  */
+  case 373:
+#line 1950 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->log_identity);
                cfg_parser->cfg->log_identity = (yyvsp[0].str);
        }
-#line 4379 "util/configparser.c" /* yacc.c:1646  */
+#line 4394 "util/configparser.c" /* yacc.c:1646  */
     break;
 
 
-#line 4383 "util/configparser.c" /* yacc.c:1646  */
+#line 4398 "util/configparser.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -4607,7 +4622,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 1946 "./util/configparser.y" /* yacc.c:1906  */
+#line 1956 "./util/configparser.y" /* yacc.c:1906  */
 
 
 /* parse helper routines could be here */
index 1e29666dde5d7950261304e2a0dd92ed3ccc2538..d8e85a48c5a860a05dc8b1c4f7718fe4078380fe 100644 (file)
@@ -225,7 +225,8 @@ extern int yydebug;
     VAR_VIEW_FIRST = 435,
     VAR_SERVE_EXPIRED = 436,
     VAR_FAKE_DSA = 437,
-    VAR_LOG_IDENTITY = 438
+    VAR_LOG_IDENTITY = 438,
+    VAR_USE_SYSTEMD = 439
   };
 #endif
 /* Tokens.  */
@@ -410,6 +411,7 @@ extern int yydebug;
 #define VAR_SERVE_EXPIRED 436
 #define VAR_FAKE_DSA 437
 #define VAR_LOG_IDENTITY 438
+#define VAR_USE_SYSTEMD 439
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -420,7 +422,7 @@ union YYSTYPE
 
        char*   str;
 
-#line 424 "util/configparser.h" /* yacc.c:1909  */
+#line 426 "util/configparser.h" /* yacc.c:1909  */
 };
 
 typedef union YYSTYPE YYSTYPE;
index 75be93914837c6a2b6026f64df219e7b6a4db78a..9a19f92a1d49d59dc3cdc666c843b7080fea5b8f 100644 (file)
@@ -132,6 +132,7 @@ extern struct config_parser_state* cfg_parser;
 %token VAR_ACCESS_CONTROL_TAG_DATA VAR_VIEW VAR_ACCESS_CONTROL_VIEW
 %token VAR_VIEW_FIRST VAR_SERVE_EXPIRED VAR_FAKE_DSA
 %token VAR_LOG_IDENTITY
+%token VAR_USE_SYSTEMD
 
 %%
 toplevelvars: /* empty */ | toplevelvars toplevelvar ;
@@ -206,7 +207,7 @@ content_server: server_num_threads | server_verbosity | server_port |
        server_local_zone_override | server_access_control_tag_action |
        server_access_control_tag_data | server_access_control_view |
        server_qname_minimisation_strict | server_serve_expired |
-       server_fake_dsa | server_log_identity
+       server_fake_dsa | server_log_identity | server_use_systemd
        ;
 stubstart: VAR_STUB_ZONE
        {
@@ -502,6 +503,15 @@ server_ssl_port: VAR_SSL_PORT STRING_ARG
                free($2);
        }
        ;
+server_use_systemd: VAR_USE_SYSTEMD STRING_ARG
+       {
+               OUTYY(("P(server_use_systemd:%s)\n", $2));
+               if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+                       yyerror("expected yes or no.");
+               else cfg_parser->cfg->use_systemd = (strcmp($2, "yes")==0);
+               free($2);
+       }
+       ;
 server_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG
        {
                OUTYY(("P(server_do_daemonize:%s)\n", $2));