]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[5680] kea-dhcp4/6 now parse hostname-char-set and hostname-char-replacment params
authorThomas Markwalder <tmark@isc.org>
Mon, 9 Jul 2018 17:36:06 +0000 (13:36 -0400)
committerTomek Mrugalski <tomasz@isc.org>
Fri, 27 Jul 2018 11:54:10 +0000 (13:54 +0200)
Added to parsing and parsing unit tests.
Servers do not yet utilize the values.

Modified:

src/bin/dhcp4/dhcp4_lexer.ll
src/bin/dhcp4/dhcp4_parser.yy

src/bin/dhcp4/tests/config_parser_unittest.cc
src/bin/dhcp4/tests/fqdn_unittest.cc
src/bin/dhcp4/tests/get_config_unittest.

src/bin/dhcp6/dhcp6_lexer.ll
src/bin/dhcp6/dhcp6_parser.yy

src/bin/dhcp6/tests/config_parser_unittest.cc
src/bin/dhcp6/tests/fqdn_unittest.cc
src/bin/dhcp6/tests/get_config_unittest.

21 files changed:
src/bin/d2/d2_lexer.cc
src/bin/d2/location.hh
src/bin/d2/position.hh
src/bin/d2/stack.hh
src/bin/dhcp4/dhcp4_lexer.cc
src/bin/dhcp4/dhcp4_lexer.ll
src/bin/dhcp4/dhcp4_parser.cc
src/bin/dhcp4/dhcp4_parser.h
src/bin/dhcp4/dhcp4_parser.yy
src/bin/dhcp4/tests/config_parser_unittest.cc
src/bin/dhcp4/tests/fqdn_unittest.cc
src/bin/dhcp4/tests/get_config_unittest.cc
src/bin/dhcp6/dhcp6_lexer.cc
src/bin/dhcp6/dhcp6_lexer.ll
src/bin/dhcp6/dhcp6_parser.cc
src/bin/dhcp6/dhcp6_parser.h
src/bin/dhcp6/dhcp6_parser.yy
src/bin/dhcp6/tests/config_parser_unittest.cc
src/bin/dhcp6/tests/fqdn_unittest.cc
src/bin/dhcp6/tests/get_config_unittest.cc
src/lib/dhcpsrv/d2_client_cfg.cc

index 915f94cab71dc6bba6eb9a90dc6c0dc7f1464dba..44cf11c13170d6870db467e3aaba53d6df39aaa8 100644 (file)
@@ -1,27 +1,22 @@
-#line 1 "d2_lexer.cc"
+#line 2 "d2_lexer.cc"
 
-#line 3 "d2_lexer.cc"
+#line 4 "d2_lexer.cc"
 
 #define  YY_INT_ALIGNED short int
 
 /* A lexical scanner generated by flex */
 
 /* %not-for-header */
+
 /* %if-c-only */
 /* %if-not-reentrant */
 #define yy_create_buffer d2_parser__create_buffer
 #define yy_delete_buffer d2_parser__delete_buffer
-#define yy_scan_buffer d2_parser__scan_buffer
-#define yy_scan_string d2_parser__scan_string
-#define yy_scan_bytes d2_parser__scan_bytes
+#define yy_flex_debug d2_parser__flex_debug
 #define yy_init_buffer d2_parser__init_buffer
 #define yy_flush_buffer d2_parser__flush_buffer
 #define yy_load_buffer_state d2_parser__load_buffer_state
 #define yy_switch_to_buffer d2_parser__switch_to_buffer
-#define yypush_buffer_state d2_parser_push_buffer_state
-#define yypop_buffer_state d2_parser_pop_buffer_state
-#define yyensure_buffer_stack d2_parser_ensure_buffer_stack
-#define yy_flex_debug d2_parser__flex_debug
 #define yyin d2_parser_in
 #define yyleng d2_parser_leng
 #define yylex d2_parser_lex
@@ -40,8 +35,8 @@
 
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 6
-#define YY_FLEX_SUBMINOR_VERSION 4
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 37
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
 /* %endif */
 
 /* %if-c-only */
-#ifdef yy_create_buffer
-#define d2_parser__create_buffer_ALREADY_DEFINED
-#else
-#define yy_create_buffer d2_parser__create_buffer
-#endif
-
-#ifdef yy_delete_buffer
-#define d2_parser__delete_buffer_ALREADY_DEFINED
-#else
-#define yy_delete_buffer d2_parser__delete_buffer
-#endif
-
-#ifdef yy_scan_buffer
-#define d2_parser__scan_buffer_ALREADY_DEFINED
-#else
-#define yy_scan_buffer d2_parser__scan_buffer
-#endif
-
-#ifdef yy_scan_string
-#define d2_parser__scan_string_ALREADY_DEFINED
-#else
-#define yy_scan_string d2_parser__scan_string
-#endif
-
-#ifdef yy_scan_bytes
-#define d2_parser__scan_bytes_ALREADY_DEFINED
-#else
-#define yy_scan_bytes d2_parser__scan_bytes
-#endif
-
-#ifdef yy_init_buffer
-#define d2_parser__init_buffer_ALREADY_DEFINED
-#else
-#define yy_init_buffer d2_parser__init_buffer
-#endif
-
-#ifdef yy_flush_buffer
-#define d2_parser__flush_buffer_ALREADY_DEFINED
-#else
-#define yy_flush_buffer d2_parser__flush_buffer
-#endif
-
-#ifdef yy_load_buffer_state
-#define d2_parser__load_buffer_state_ALREADY_DEFINED
-#else
-#define yy_load_buffer_state d2_parser__load_buffer_state
-#endif
-
-#ifdef yy_switch_to_buffer
-#define d2_parser__switch_to_buffer_ALREADY_DEFINED
-#else
-#define yy_switch_to_buffer d2_parser__switch_to_buffer
-#endif
-
-#ifdef yypush_buffer_state
-#define d2_parser_push_buffer_state_ALREADY_DEFINED
-#else
-#define yypush_buffer_state d2_parser_push_buffer_state
-#endif
-
-#ifdef yypop_buffer_state
-#define d2_parser_pop_buffer_state_ALREADY_DEFINED
-#else
-#define yypop_buffer_state d2_parser_pop_buffer_state
-#endif
-
-#ifdef yyensure_buffer_stack
-#define d2_parser_ensure_buffer_stack_ALREADY_DEFINED
-#else
-#define yyensure_buffer_stack d2_parser_ensure_buffer_stack
-#endif
-
-#ifdef yylex
-#define d2_parser_lex_ALREADY_DEFINED
-#else
-#define yylex d2_parser_lex
-#endif
-
-#ifdef yyrestart
-#define d2_parser_restart_ALREADY_DEFINED
-#else
-#define yyrestart d2_parser_restart
-#endif
-
-#ifdef yylex_init
-#define d2_parser_lex_init_ALREADY_DEFINED
-#else
-#define yylex_init d2_parser_lex_init
-#endif
-
-#ifdef yylex_init_extra
-#define d2_parser_lex_init_extra_ALREADY_DEFINED
-#else
-#define yylex_init_extra d2_parser_lex_init_extra
-#endif
-
-#ifdef yylex_destroy
-#define d2_parser_lex_destroy_ALREADY_DEFINED
-#else
-#define yylex_destroy d2_parser_lex_destroy
-#endif
-
-#ifdef yyget_debug
-#define d2_parser_get_debug_ALREADY_DEFINED
-#else
-#define yyget_debug d2_parser_get_debug
-#endif
-
-#ifdef yyset_debug
-#define d2_parser_set_debug_ALREADY_DEFINED
-#else
-#define yyset_debug d2_parser_set_debug
-#endif
-
-#ifdef yyget_extra
-#define d2_parser_get_extra_ALREADY_DEFINED
-#else
-#define yyget_extra d2_parser_get_extra
-#endif
-
-#ifdef yyset_extra
-#define d2_parser_set_extra_ALREADY_DEFINED
-#else
-#define yyset_extra d2_parser_set_extra
-#endif
-
-#ifdef yyget_in
-#define d2_parser_get_in_ALREADY_DEFINED
-#else
-#define yyget_in d2_parser_get_in
-#endif
-
-#ifdef yyset_in
-#define d2_parser_set_in_ALREADY_DEFINED
-#else
-#define yyset_in d2_parser_set_in
-#endif
-
-#ifdef yyget_out
-#define d2_parser_get_out_ALREADY_DEFINED
-#else
-#define yyget_out d2_parser_get_out
-#endif
-
-#ifdef yyset_out
-#define d2_parser_set_out_ALREADY_DEFINED
-#else
-#define yyset_out d2_parser_set_out
-#endif
-
-#ifdef yyget_leng
-#define d2_parser_get_leng_ALREADY_DEFINED
-#else
-#define yyget_leng d2_parser_get_leng
-#endif
-
-#ifdef yyget_text
-#define d2_parser_get_text_ALREADY_DEFINED
-#else
-#define yyget_text d2_parser_get_text
-#endif
-
-#ifdef yyget_lineno
-#define d2_parser_get_lineno_ALREADY_DEFINED
-#else
-#define yyget_lineno d2_parser_get_lineno
-#endif
-
-#ifdef yyset_lineno
-#define d2_parser_set_lineno_ALREADY_DEFINED
-#else
-#define yyset_lineno d2_parser_set_lineno
-#endif
-
-#ifdef yywrap
-#define d2_parser_wrap_ALREADY_DEFINED
-#else
-#define yywrap d2_parser_wrap
-#endif
-
+    
 /* %endif */
 
-#ifdef yyalloc
-#define d2_parser_alloc_ALREADY_DEFINED
-#else
-#define yyalloc d2_parser_alloc
-#endif
-
-#ifdef yyrealloc
-#define d2_parser_realloc_ALREADY_DEFINED
-#else
-#define yyrealloc d2_parser_realloc
-#endif
-
-#ifdef yyfree
-#define d2_parser_free_ALREADY_DEFINED
-#else
-#define yyfree d2_parser_free
-#endif
-
 /* %if-c-only */
 
-#ifdef yytext
-#define d2_parser_text_ALREADY_DEFINED
-#else
-#define yytext d2_parser_text
-#endif
-
-#ifdef yyleng
-#define d2_parser_leng_ALREADY_DEFINED
-#else
-#define yyleng d2_parser_leng
-#endif
-
-#ifdef yyin
-#define d2_parser_in_ALREADY_DEFINED
-#else
-#define yyin d2_parser_in
-#endif
-
-#ifdef yyout
-#define d2_parser_out_ALREADY_DEFINED
-#else
-#define yyout d2_parser_out
-#endif
-
-#ifdef yy_flex_debug
-#define d2_parser__flex_debug_ALREADY_DEFINED
-#else
-#define yy_flex_debug d2_parser__flex_debug
-#endif
-
-#ifdef yylineno
-#define d2_parser_lineno_ALREADY_DEFINED
-#else
-#define yylineno d2_parser_lineno
-#endif
-
 /* %endif */
 
 /* First, we deal with  platform-specific or compiler-specific issues. */
@@ -365,39 +127,50 @@ typedef unsigned int flex_uint32_t;
 #define UINT32_MAX             (4294967295U)
 #endif
 
-#ifndef SIZE_MAX
-#define SIZE_MAX               (~(size_t)0)
-#endif
-
 #endif /* ! C99 */
 
 #endif /* ! FLEXINT_H */
 
 /* %endif */
 
-/* begin standard C++ headers. */
 /* %if-c++-only */
 /* %endif */
 
-/* TODO: this is always defined, so inline it */
-#define yyconst const
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else  /* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
 
-#if defined(__GNUC__) && __GNUC__ >= 3
-#define yynoreturn __attribute__((__noreturn__))
+#define YY_USE_CONST
+
+#endif /* defined (__STDC__) */
+#endif /* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
 #else
-#define yynoreturn
+#define yyconst
 #endif
 
 /* %not-for-header */
+
 /* Returned upon end-of-file. */
 #define YY_NULL 0
 /* %ok-for-header */
 
 /* %not-for-header */
-/* Promotes a possibly negative, possibly signed char to an
- *   integer in range [0..255] for use as an array index.
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
  */
-#define YY_SC_TO_UI(c) ((YY_CHAR) (c))
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
 /* %ok-for-header */
 
 /* %if-reentrant */
@@ -412,29 +185,25 @@ typedef unsigned int flex_uint32_t;
  * definition of BEGIN.
  */
 #define BEGIN (yy_start) = 1 + 2 *
+
 /* Translate the current start state into a value that can be later handed
  * to BEGIN to return to the state.  The YYSTATE alias is for lex
  * compatibility.
  */
 #define YY_START (((yy_start) - 1) / 2)
 #define YYSTATE YY_START
+
 /* Action number for EOF rule of a given start state. */
 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
 /* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart( yyin  )
+#define YY_NEW_FILE d2_parser_restart(d2_parser_in  )
+
 #define YY_END_OF_BUFFER_CHAR 0
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k.
- * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
- * Ditto for the __ia64__ case accordingly.
- */
-#define YY_BUF_SIZE 32768
-#else
 #define YY_BUF_SIZE 16384
-#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -452,35 +221,35 @@ typedef size_t yy_size_t;
 #endif
 
 /* %if-not-reentrant */
-extern int yyleng;
+extern yy_size_t d2_parser_leng;
 /* %endif */
 
 /* %if-c-only */
 /* %if-not-reentrant */
-extern FILE *yyin, *yyout;
+extern FILE *d2_parser_in, *d2_parser_out;
 /* %endif */
 /* %endif */
 
 #define EOB_ACT_CONTINUE_SCAN 0
 #define EOB_ACT_END_OF_FILE 1
 #define EOB_ACT_LAST_MATCH 2
-    
+
     #define YY_LESS_LINENO(n)
-    #define YY_LINENO_REWIND_TO(ptr)
     
 /* Return all but the first "n" matched characters back to the input stream. */
 #define yyless(n) \
        do \
                { \
-               /* Undo effects of setting up yytext. */ \
+               /* Undo effects of setting up d2_parser_text. */ \
         int yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
                *yy_cp = (yy_hold_char); \
                YY_RESTORE_YY_MORE_OFFSET \
                (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
-               YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+               YY_DO_BEFORE_ACTION; /* set up d2_parser_text again */ \
                } \
        while ( 0 )
+
 #define unput(c) yyunput( c, (yytext_ptr)  )
 
 #ifndef YY_STRUCT_YY_BUFFER_STATE
@@ -500,12 +269,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
@@ -528,7 +297,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.
         */
@@ -545,8 +314,8 @@ struct yy_buffer_state
         * possible backing-up.
         *
         * When we actually see the EOF, we change the status to "new"
-        * (via yyrestart()), so that the user can continue scanning by
-        * just pointing yyin at a new input file.
+        * (via d2_parser_restart()), so that the user can continue scanning by
+        * just pointing d2_parser_in at a new input file.
         */
 #define YY_BUFFER_EOF_PENDING 2
 
@@ -555,12 +324,13 @@ struct yy_buffer_state
 
 /* %if-c-only Standard (non-C++) definition */
 /* %not-for-header */
+
 /* %if-not-reentrant */
 
 /* 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. */
 /* %endif */
 /* %ok-for-header */
 
@@ -575,6 +345,7 @@ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
 #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
                           ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
                           : NULL)
+
 /* Same as previous macro, but useful when we know that the buffer stack is not
  * NULL or when we need an lvalue. For internal use only.
  */
@@ -584,112 +355,115 @@ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
 
 /* %if-not-reentrant */
 /* %not-for-header */
-/* yy_hold_char holds the character lost when yytext is formed. */
+
+/* yy_hold_char holds the character lost when d2_parser_text 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 d2_parser_leng;
 
 /* 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 */
 
-/* Flag which is used to allow yywrap()'s to do buffer switches
- * instead of setting up a fresh yyin.  A bit of a hack ...
+/* Flag which is used to allow d2_parser_wrap()'s to do buffer switches
+ * instead of setting up a fresh d2_parser_in.  A bit of a hack ...
  */
 static int yy_did_buffer_switch_on_eof;
 /* %ok-for-header */
 
 /* %endif */
 
-void yyrestart ( FILE *input_file  );
-void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer  );
-YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size  );
-void yy_delete_buffer ( YY_BUFFER_STATE b  );
-void yy_flush_buffer ( YY_BUFFER_STATE b  );
-void yypush_buffer_state ( YY_BUFFER_STATE new_buffer  );
-void yypop_buffer_state ( void );
+void d2_parser_restart (FILE *input_file  );
+void d2_parser__switch_to_buffer (YY_BUFFER_STATE new_buffer  );
+YY_BUFFER_STATE d2_parser__create_buffer (FILE *file,int size  );
+void d2_parser__delete_buffer (YY_BUFFER_STATE b  );
+void d2_parser__flush_buffer (YY_BUFFER_STATE b  );
+void d2_parser_push_buffer_state (YY_BUFFER_STATE new_buffer  );
+void d2_parser_pop_buffer_state (void );
+
+static void d2_parser_ensure_buffer_stack (void );
+static void d2_parser__load_buffer_state (void );
+static void d2_parser__init_buffer (YY_BUFFER_STATE b,FILE *file  );
 
-static void yyensure_buffer_stack ( void );
-static void yy_load_buffer_state ( void );
-static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file  );
-#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER )
+#define YY_FLUSH_BUFFER d2_parser__flush_buffer(YY_CURRENT_BUFFER )
 
-YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size  );
-YY_BUFFER_STATE yy_scan_string ( const char *yy_str  );
-YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len  );
+YY_BUFFER_STATE d2_parser__scan_buffer (char *base,yy_size_t size  );
+YY_BUFFER_STATE d2_parser__scan_string (yyconst char *yy_str  );
+YY_BUFFER_STATE d2_parser__scan_bytes (yyconst char *bytes,yy_size_t len  );
 
 /* %endif */
 
-void *yyalloc ( yy_size_t  );
-void *yyrealloc ( void *, yy_size_t  );
-void yyfree ( void *  );
+void *d2_parser_alloc (yy_size_t  );
+void *d2_parser_realloc (void *,yy_size_t  );
+void d2_parser_free (void *  );
+
+#define yy_new_buffer d2_parser__create_buffer
 
-#define yy_new_buffer yy_create_buffer
 #define yy_set_interactive(is_interactive) \
        { \
        if ( ! YY_CURRENT_BUFFER ){ \
-        yyensure_buffer_stack (); \
+        d2_parser_ensure_buffer_stack (); \
                YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer( yyin, YY_BUF_SIZE ); \
+            d2_parser__create_buffer(d2_parser_in,YY_BUF_SIZE ); \
        } \
        YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
        }
+
 #define yy_set_bol(at_bol) \
        { \
        if ( ! YY_CURRENT_BUFFER ){\
-        yyensure_buffer_stack (); \
+        d2_parser_ensure_buffer_stack (); \
                YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer( yyin, YY_BUF_SIZE ); \
+            d2_parser__create_buffer(d2_parser_in,YY_BUF_SIZE ); \
        } \
        YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
        }
+
 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
 
-/* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */
+/* %% [1.0] d2_parser_text/d2_parser_in/d2_parser_out/yy_state_type/d2_parser_lineno etc. def's & init go here */
 /* Begin user sect3 */
 
-#define d2_parser_wrap() (/*CONSTCOND*/1)
+#define d2_parser_wrap() 1
 #define YY_SKIP_YYWRAP
 
 #define FLEX_DEBUG
-typedef flex_uint8_t YY_CHAR;
 
-FILE *yyin = NULL, *yyout = NULL;
+typedef unsigned char YY_CHAR;
+
+FILE *d2_parser_in = (FILE *) 0, *d2_parser_out = (FILE *) 0;
 
 typedef int yy_state_type;
 
-extern int yylineno;
-int yylineno = 1;
+extern int d2_parser_lineno;
 
-extern char *yytext;
-#ifdef yytext_ptr
-#undef yytext_ptr
-#endif
-#define yytext_ptr yytext
+int d2_parser_lineno = 1;
 
-/* %% [1.5] DFA */
+extern char *d2_parser_text;
+#define yytext_ptr d2_parser_text
 
 /* %if-c-only Standard (non-C++) definition */
 
-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 ( const char* msg  );
+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 yy_fatal_error (yyconst char msg[]  );
 
 /* %endif */
 
 /* Done after the current pattern has been matched and before the
- * corresponding action - sets up yytext.
+ * corresponding action - sets up d2_parser_text.
  */
 #define YY_DO_BEFORE_ACTION \
        (yytext_ptr) = yy_bp; \
-/* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\
-       yyleng = (int) (yy_cp - yy_bp); \
+/* %% [2.0] code to fiddle d2_parser_text and d2_parser_leng for yymore() goes here \ */\
+       d2_parser_leng = (size_t) (yy_cp - yy_bp); \
        (yy_hold_char) = *yy_cp; \
        *yy_cp = '\0'; \
-/* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
+/* %% [3.0] code to copy yytext_ptr to d2_parser_text[] goes here, if %array \ */\
        (yy_c_buf_p) = yy_cp;
+
 /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
 #define YY_NUM_RULES 64
 #define YY_END_OF_BUFFER 65
@@ -700,7 +474,7 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static const flex_int16_t yy_accept[388] =
+static yyconst flex_int16_t yy_accept[388] =
     {   0,
        57,   57,    0,    0,    0,    0,    0,    0,    0,    0,
        65,   63,   10,   11,   63,    1,   57,   54,   57,   57,
@@ -746,7 +520,7 @@ static const flex_int16_t yy_accept[388] =
         0,   35,    0,    0,    0,   15,    0
     } ;
 
-static const YY_CHAR yy_ec[256] =
+static yyconst flex_int32_t yy_ec[256] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
         1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
@@ -778,7 +552,7 @@ static const YY_CHAR yy_ec[256] =
         5,    5,    5,    5,    5
     } ;
 
-static const YY_CHAR yy_meta[67] =
+static yyconst flex_int32_t yy_meta[67] =
     {   0,
         1,    1,    2,    3,    3,    4,    3,    3,    3,    3,
         3,    3,    3,    5,    5,    5,    3,    3,    3,    3,
@@ -789,7 +563,7 @@ static const YY_CHAR yy_meta[67] =
         3,    3,    3,    3,    3,    3
     } ;
 
-static const flex_int16_t yy_base[399] =
+static yyconst flex_int16_t yy_base[399] =
     {   0,
         0,    0,   65,   68,   71,    0,   69,   73,   54,   70,
       706,  707,   89,  702,  137,    0,  192,  707,  197,  200,
@@ -837,7 +611,7 @@ static const flex_int16_t yy_base[399] =
 
     } ;
 
-static const flex_int16_t yy_def[399] =
+static yyconst flex_int16_t yy_def[399] =
     {   0,
       387,    1,  388,  388,    1,    5,    5,    5,    5,    5,
       387,  387,  387,  387,  387,  389,  387,  387,  387,  387,
@@ -885,7 +659,7 @@ static const flex_int16_t yy_def[399] =
 
     } ;
 
-static const flex_int16_t yy_nxt[774] =
+static yyconst flex_int16_t yy_nxt[774] =
     {   0,
        12,   13,   14,   13,   12,   15,   16,   12,   17,   18,
        19,   20,   21,   22,   22,   22,   23,   24,   12,   12,
@@ -974,7 +748,7 @@ static const flex_int16_t yy_nxt[774] =
       387,  387,  387
     } ;
 
-static const flex_int16_t yy_chk[774] =
+static yyconst flex_int16_t yy_chk[774] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1066,18 +840,18 @@ static const flex_int16_t yy_chk[774] =
 static yy_state_type yy_last_accepting_state;
 static char *yy_last_accepting_cpos;
 
-extern int yy_flex_debug;
-int yy_flex_debug = 1;
+extern int d2_parser__flex_debug;
+int d2_parser__flex_debug = 1;
 
-static const flex_int16_t yy_rule_linenum[64] =
+static yyconst flex_int16_t yy_rule_linenum[64] =
     {   0,
-      133,  135,  137,  142,  143,  148,  149,  150,  162,  165,
-      170,  176,  185,  196,  207,  216,  225,  234,  244,  254,
-      264,  280,  296,  305,  314,  324,  334,  344,  355,  364,
-      374,  384,  395,  404,  413,  422,  431,  440,  449,  458,
-      471,  480,  489,  498,  507,  517,  616,  621,  626,  631,
-      632,  633,  634,  635,  636,  638,  656,  669,  674,  678,
-      680,  682,  684
+      132,  134,  136,  141,  142,  147,  148,  149,  161,  164,
+      169,  175,  184,  195,  206,  215,  224,  233,  243,  253,
+      263,  279,  295,  304,  313,  323,  333,  343,  354,  363,
+      373,  383,  394,  403,  412,  421,  430,  439,  448,  457,
+      470,  479,  488,  497,  506,  516,  615,  620,  625,  630,
+      631,  632,  633,  634,  635,  637,  655,  668,  673,  677,
+      679,  681,  683
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -1087,7 +861,7 @@ static const flex_int16_t yy_rule_linenum[64] =
 #define yymore() yymore_used_but_not_detected
 #define YY_MORE_ADJ 0
 #define YY_RESTORE_YY_MORE_OFFSET
-char *yytext;
+char *d2_parser_text;
 #line 1 "d2_lexer.ll"
 /* Copyright (C) 2017-2018 Internet Systems Consortium, Inc. ("ISC")
 
@@ -1114,8 +888,8 @@ char *yytext;
    2.5.31 through 2.5.33): it generates code that does
    not conform to C89.  See Debian bug 333231
    <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>. */
-# undef yywrap
-# define yywrap() 1
+# undef d2_parser_wrap
+# define d2_parser_wrap() 1
 
 namespace {
 
@@ -1128,10 +902,9 @@ unsigned int comment_start_line = 0;
 
 /* To avoid the call to exit... oops! */
 #define YY_FATAL_ERROR(msg) isc::d2::D2ParserContext::fatal(msg)
-#line 1131 "d2_lexer.cc"
 /* noyywrap disables automatic rewinding for the next file to parse. Since we
    always parse only a single string, there's no need to do any wraps. And
-   using yywrap requires linking with -lfl, which provides the default yywrap
+   using d2_parser_wrap requires linking with -lfl, which provides the default d2_parser_wrap
    implementation that always returns 1 anyway. */
 /* nounput simplifies the lexer, by removing support for putting a character
    back into the input stream. We never use such capability anyway. */
@@ -1139,23 +912,23 @@ unsigned int comment_start_line = 0;
 /* avoid to get static global variables to remain with C++. */
 /* in last resort %option reentrant */
 /* Enables debug mode. To see the debug messages, one needs to also set
-   yy_flex_debug to 1, then the debug messages will be printed on stderr. */
+   d2_parser__flex_debug to 1, then the debug messages will be printed on stderr. */
 /* I have no idea what this option does, except it was specified in the bison
    examples and Postgres folks added it to remove gcc 4.3 warnings. Let's
    be on the safe side and keep it. */
 #define YY_NO_INPUT 1
 
+
 /* These are not token expressions yet, just convenience expressions that
    can be used during actual token definitions. Note some can match
    incorrect inputs (e.g., IP addresses) which must be checked. */
 /* for errors */
 #line 92 "d2_lexer.ll"
 /* This code run each time a pattern is matched. It updates the location
-   by moving it ahead by yyleng bytes. yyleng specifies the length of the
+   by moving it ahead by d2_parser_leng bytes. d2_parser_leng specifies the length of the
    currently matched token. */
-#define YY_USER_ACTION  driver.loc_.columns(yyleng);
-#line 1157 "d2_lexer.cc"
-#line 1158 "d2_lexer.cc"
+#define YY_USER_ACTION  driver.loc_.columns(d2_parser_leng);
+#line 932 "d2_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -1183,7 +956,7 @@ unsigned int comment_start_line = 0;
 /* %if-reentrant */
 /* %if-c-only */
 
-static int yy_init_globals ( void );
+static int yy_init_globals (void );
 
 /* %endif */
 /* %if-reentrant */
@@ -1193,31 +966,31 @@ static int yy_init_globals ( void );
 /* Accessor methods to globals.
    These are made visible to non-reentrant scanners for convenience. */
 
-int yylex_destroy ( void );
+int d2_parser_lex_destroy (void );
 
-int yyget_debug ( void );
+int d2_parser_get_debug (void );
 
-void yyset_debug ( int debug_flag  );
+void d2_parser_set_debug (int debug_flag  );
 
-YY_EXTRA_TYPE yyget_extra ( void );
+YY_EXTRA_TYPE d2_parser_get_extra (void );
 
-void yyset_extra ( YY_EXTRA_TYPE user_defined  );
+void d2_parser_set_extra (YY_EXTRA_TYPE user_defined  );
 
-FILE *yyget_in ( void );
+FILE *d2_parser_get_in (void );
 
-void yyset_in  ( FILE * _in_str  );
+void d2_parser_set_in  (FILE * in_str  );
 
-FILE *yyget_out ( void );
+FILE *d2_parser_get_out (void );
 
-void yyset_out  ( FILE * _out_str  );
+void d2_parser_set_out  (FILE * out_str  );
 
-                       int yyget_leng ( void );
+yy_size_t d2_parser_get_leng (void );
 
-char *yyget_text ( void );
+char *d2_parser_get_text (void );
 
-int yyget_lineno ( void );
+int d2_parser_get_lineno (void );
 
-void yyset_lineno ( int _line_number  );
+void d2_parser_set_lineno (int line_number  );
 
 /* %if-bison-bridge */
 /* %endif */
@@ -1228,35 +1001,34 @@ void yyset_lineno ( int _line_number  );
 
 #ifndef YY_SKIP_YYWRAP
 #ifdef __cplusplus
-extern "C" int yywrap ( void );
+extern "C" int d2_parser_wrap (void );
 #else
-extern int yywrap ( void );
+extern int d2_parser_wrap (void );
 #endif
 #endif
 
 /* %not-for-header */
-#ifndef YY_NO_UNPUT
-    
-#endif
+
 /* %ok-for-header */
 
 /* %endif */
 
 #ifndef yytext_ptr
-static void yy_flex_strncpy ( char *, const char *, int );
+static void yy_flex_strncpy (char *,yyconst char *,int );
 #endif
 
 #ifdef YY_NEED_STRLEN
-static int yy_flex_strlen ( const char * );
+static int yy_flex_strlen (yyconst char * );
 #endif
 
 #ifndef YY_NO_INPUT
 /* %if-c-only Standard (non-C++) definition */
 /* %not-for-header */
+
 #ifdef __cplusplus
-static int yyinput ( void );
+static int yyinput (void );
 #else
-static int input ( void );
+static int input (void );
 #endif
 /* %ok-for-header */
 
@@ -1269,12 +1041,7 @@ static int input ( void );
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k */
-#define YY_READ_BUF_SIZE 16384
-#else
 #define YY_READ_BUF_SIZE 8192
-#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -1283,7 +1050,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( d2_parser_text, d2_parser_leng, 1, d2_parser_out )) {} } while (0)
 /* %endif */
 /* %if-c++-only C++ definition */
 /* %endif */
@@ -1298,20 +1065,20 @@ static int input ( void );
        if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
                { \
                int c = '*'; \
-               int n; \
+               size_t n; \
                for ( n = 0; n < max_size && \
-                            (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+                            (c = getc( d2_parser_in )) != EOF && c != '\n'; ++n ) \
                        buf[n] = (char) c; \
                if ( c == '\n' ) \
                        buf[n++] = (char) c; \
-               if ( c == EOF && ferror( yyin ) ) \
+               if ( c == EOF && ferror( d2_parser_in ) ) \
                        YY_FATAL_ERROR( "input in flex scanner failed" ); \
                result = n; \
                } \
        else \
                { \
                errno=0; \
-               while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
+               while ( (result = fread(buf, 1, max_size, d2_parser_in))==0 && ferror(d2_parser_in)) \
                        { \
                        if( errno != EINTR) \
                                { \
@@ -1319,7 +1086,7 @@ static int input ( void );
                                break; \
                                } \
                        errno=0; \
-                       clearerr(yyin); \
+                       clearerr(d2_parser_in); \
                        } \
                }\
 \
@@ -1352,9 +1119,11 @@ static int input ( void );
 
 /* %if-tables-serialization structures and prototypes */
 /* %not-for-header */
+
 /* %ok-for-header */
 
 /* %not-for-header */
+
 /* %tables-yydmap generated elements */
 /* %endif */
 /* end tables serialization structures and prototypes */
@@ -1368,15 +1137,15 @@ static int input ( void );
 #define YY_DECL_IS_OURS 1
 /* %if-c-only Standard (non-C++) definition */
 
-extern int yylex (void);
+extern int d2_parser_lex (void);
 
-#define YY_DECL int yylex (void)
+#define YY_DECL int d2_parser_lex (void)
 /* %endif */
 /* %if-c++-only C++ definition */
 /* %endif */
 #endif /* !YY_DECL */
 
-/* Code executed at the beginning of each rule, after yytext and yyleng
+/* Code executed at the beginning of each rule, after d2_parser_text and d2_parser_leng
  * have been set up.
  */
 #ifndef YY_USER_ACTION
@@ -1385,7 +1154,7 @@ extern int yylex (void);
 
 /* Code executed at the end of each rule. */
 #ifndef YY_BREAK
-#define YY_BREAK /*LINTED*/break;
+#define YY_BREAK break;
 #endif
 
 /* %% [6.0] YY_RULE_SETUP definition goes here */
@@ -1393,60 +1162,25 @@ extern int yylex (void);
        YY_USER_ACTION
 
 /* %not-for-header */
+
 /** The main scanner function which does all the work.
  */
 YY_DECL
 {
-       yy_state_type yy_current_state;
-       char *yy_cp, *yy_bp;
-       int yy_act;
+       register yy_state_type yy_current_state;
+       register char *yy_cp, *yy_bp;
+       register int yy_act;
     
-       if ( !(yy_init) )
-               {
-               (yy_init) = 1;
-
-#ifdef YY_USER_INIT
-               YY_USER_INIT;
-#endif
-
-               if ( ! (yy_start) )
-                       (yy_start) = 1; /* first start state */
-
-               if ( ! yyin )
-/* %if-c-only */
-                       yyin = stdin;
-/* %endif */
-/* %if-c++-only */
-/* %endif */
-
-               if ( ! yyout )
-/* %if-c-only */
-                       yyout = stdout;
-/* %endif */
-/* %if-c++-only */
-/* %endif */
-
-               if ( ! YY_CURRENT_BUFFER ) {
-                       yyensure_buffer_stack ();
-                       YY_CURRENT_BUFFER_LVALUE =
-                               yy_create_buffer( yyin, YY_BUF_SIZE );
-               }
-
-               yy_load_buffer_state(  );
-               }
-
-       {
 /* %% [7.0] user's declarations go here */
 #line 98 "d2_lexer.ll"
 
 
 
-#line 102 "d2_lexer.ll"
     /* This part of the code is copied over to the verbatim to the top
-       of the generated yylex function. Explanation:
+       of the generated d2_parser_lex function. Explanation:
        http://www.gnu.org/software/bison/manual/html_node/Multiple-start_002dsymbols.html */
 
-    /* Code run each time yylex is called. */
+    /* Code run each time d2_parser_lex is called. */
     driver.loc_.step();
 
     if (start_token_flag) {
@@ -1473,14 +1207,48 @@ YY_DECL
     }
 
 
-#line 1476 "d2_lexer.cc"
+#line 1211 "d2_lexer.cc"
+
+       if ( !(yy_init) )
+               {
+               (yy_init) = 1;
+
+#ifdef YY_USER_INIT
+               YY_USER_INIT;
+#endif
+
+               if ( ! (yy_start) )
+                       (yy_start) = 1; /* first start state */
+
+               if ( ! d2_parser_in )
+/* %if-c-only */
+                       d2_parser_in = stdin;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
 
-       while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
+               if ( ! d2_parser_out )
+/* %if-c-only */
+                       d2_parser_out = stdout;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+               if ( ! YY_CURRENT_BUFFER ) {
+                       d2_parser_ensure_buffer_stack ();
+                       YY_CURRENT_BUFFER_LVALUE =
+                               d2_parser__create_buffer(d2_parser_in,YY_BUF_SIZE );
+               }
+
+               d2_parser__load_buffer_state( );
+               }
+
+       while ( 1 )             /* loops until end-of-file is reached */
                {
 /* %% [8.0] yymore()-related code goes here */
                yy_cp = (yy_c_buf_p);
 
-               /* Support of yytext. */
+               /* Support of d2_parser_text. */
                *yy_cp = (yy_hold_char);
 
                /* yy_bp points to the position in yy_ch_buf of the start of
@@ -1493,7 +1261,7 @@ YY_DECL
 yy_match:
                do
                        {
-                       YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
+                       register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
                        if ( yy_accept[yy_current_state] )
                                {
                                (yy_last_accepting_state) = yy_current_state;
@@ -1503,9 +1271,9 @@ yy_match:
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
                                if ( yy_current_state >= 388 )
-                                       yy_c = yy_meta[yy_c];
+                                       yy_c = yy_meta[(unsigned int) yy_c];
                                }
-                       yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+                       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
                while ( yy_current_state != 387 );
@@ -1518,21 +1286,21 @@ yy_find_action:
 
                YY_DO_BEFORE_ACTION;
 
-/* %% [11.0] code for yylineno update goes here */
+/* %% [11.0] code for d2_parser_lineno update goes here */
 
 do_action:     /* This label is used only to access EOF actions. */
 
 /* %% [12.0] debug code goes here */
-               if ( yy_flex_debug )
+               if ( d2_parser__flex_debug )
                        {
                        if ( yy_act == 0 )
                                fprintf( stderr, "--scanner backing up\n" );
                        else if ( yy_act < 64 )
                                fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
-                                        (long)yy_rule_linenum[yy_act], yytext );
+                                        (long)yy_rule_linenum[yy_act], d2_parser_text );
                        else if ( yy_act == 64 )
                                fprintf( stderr, "--accepting default rule (\"%s\")\n",
-                                        yytext );
+                                        d2_parser_text );
                        else if ( yy_act == 65 )
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
@@ -1551,17 +1319,17 @@ do_action:      /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 133 "d2_lexer.ll"
+#line 132 "d2_lexer.ll"
 ;
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 135 "d2_lexer.ll"
+#line 134 "d2_lexer.ll"
 ;
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 137 "d2_lexer.ll"
+#line 136 "d2_lexer.ll"
 {
   BEGIN(COMMENT);
   comment_start_line = driver.loc_.end.line;;
@@ -1569,38 +1337,38 @@ YY_RULE_SETUP
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 142 "d2_lexer.ll"
+#line 141 "d2_lexer.ll"
 BEGIN(INITIAL);
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 143 "d2_lexer.ll"
+#line 142 "d2_lexer.ll"
 ;
        YY_BREAK
 case YY_STATE_EOF(COMMENT):
-#line 144 "d2_lexer.ll"
+#line 143 "d2_lexer.ll"
 {
     isc_throw(D2ParseError, "Comment not closed. (/* in line " << comment_start_line);
 }
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 148 "d2_lexer.ll"
+#line 147 "d2_lexer.ll"
 BEGIN(DIR_ENTER);
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 149 "d2_lexer.ll"
+#line 148 "d2_lexer.ll"
 BEGIN(DIR_INCLUDE);
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 150 "d2_lexer.ll"
+#line 149 "d2_lexer.ll"
 {
     /* Include directive. */
 
     /* Extract the filename. */
-    std::string tmp(yytext+1);
+    std::string tmp(d2_parser_text+1);
     tmp.resize(tmp.size() - 1);
 
     driver.includeFile(tmp);
@@ -1609,19 +1377,19 @@ YY_RULE_SETUP
 case YY_STATE_EOF(DIR_ENTER):
 case YY_STATE_EOF(DIR_INCLUDE):
 case YY_STATE_EOF(DIR_EXIT):
-#line 159 "d2_lexer.ll"
+#line 158 "d2_lexer.ll"
 {
     isc_throw(D2ParseError, "Directive not closed.");
 }
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 162 "d2_lexer.ll"
+#line 161 "d2_lexer.ll"
 BEGIN(INITIAL);
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 165 "d2_lexer.ll"
+#line 164 "d2_lexer.ll"
 {
     /* Ok, we found a with space. Let's ignore it and update loc variable. */
     driver.loc_.step();
@@ -1630,16 +1398,16 @@ YY_RULE_SETUP
 case 11:
 /* rule 11 can match eol */
 YY_RULE_SETUP
-#line 170 "d2_lexer.ll"
+#line 169 "d2_lexer.ll"
 {
     /* Newline found. Let's update the location and continue. */
-    driver.loc_.lines(yyleng);
+    driver.loc_.lines(d2_parser_leng);
     driver.loc_.step();
 }
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 176 "d2_lexer.ll"
+#line 175 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::CONFIG:
@@ -1651,7 +1419,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 185 "d2_lexer.ll"
+#line 184 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::DHCPDDNS:
@@ -1665,7 +1433,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 196 "d2_lexer.ll"
+#line 195 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::DHCPDDNS:
@@ -1679,7 +1447,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 207 "d2_lexer.ll"
+#line 206 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::DHCPDDNS:
@@ -1691,7 +1459,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 216 "d2_lexer.ll"
+#line 215 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::DHCPDDNS:
@@ -1703,7 +1471,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 225 "d2_lexer.ll"
+#line 224 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::DHCPDDNS:
@@ -1715,46 +1483,46 @@ YY_RULE_SETUP
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 234 "d2_lexer.ll"
+#line 233 "d2_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::d2::D2ParserContext::NCR_PROTOCOL) {
         return isc::d2::D2Parser::make_UDP(driver.loc_);
     }
-    std::string tmp(yytext+1);
+    std::string tmp(d2_parser_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::d2::D2Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 244 "d2_lexer.ll"
+#line 243 "d2_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::d2::D2ParserContext::NCR_PROTOCOL) {
         return isc::d2::D2Parser::make_TCP(driver.loc_);
     }
-    std::string tmp(yytext+1);
+    std::string tmp(d2_parser_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::d2::D2Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 254 "d2_lexer.ll"
+#line 253 "d2_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::d2::D2ParserContext::NCR_FORMAT) {
         return isc::d2::D2Parser::make_JSON(driver.loc_);
     }
-    std::string tmp(yytext+1);
+    std::string tmp(d2_parser_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::d2::D2Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 264 "d2_lexer.ll"
+#line 263 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::DHCPDDNS:
@@ -1773,7 +1541,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 280 "d2_lexer.ll"
+#line 279 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::DHCPDDNS:
@@ -1792,7 +1560,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 296 "d2_lexer.ll"
+#line 295 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::DHCPDDNS:
@@ -1804,7 +1572,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 305 "d2_lexer.ll"
+#line 304 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::DHCPDDNS:
@@ -1816,7 +1584,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 314 "d2_lexer.ll"
+#line 313 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::FORWARD_DDNS:
@@ -1829,7 +1597,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 324 "d2_lexer.ll"
+#line 323 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::DDNS_DOMAIN:
@@ -1842,7 +1610,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 334 "d2_lexer.ll"
+#line 333 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::DDNS_DOMAIN:
@@ -1855,7 +1623,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 344 "d2_lexer.ll"
+#line 343 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::DNS_SERVER:
@@ -1868,7 +1636,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 355 "d2_lexer.ll"
+#line 354 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::DHCPDDNS:
@@ -1880,7 +1648,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 364 "d2_lexer.ll"
+#line 363 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::TSIG_KEY:
@@ -1893,7 +1661,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 374 "d2_lexer.ll"
+#line 373 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::TSIG_KEY:
@@ -1906,7 +1674,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 384 "d2_lexer.ll"
+#line 383 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::TSIG_KEY:
@@ -1919,7 +1687,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 395 "d2_lexer.ll"
+#line 394 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::CONFIG:
@@ -1931,7 +1699,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 404 "d2_lexer.ll"
+#line 403 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::LOGGING:
@@ -1943,7 +1711,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 413 "d2_lexer.ll"
+#line 412 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::LOGGERS:
@@ -1955,7 +1723,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 422 "d2_lexer.ll"
+#line 421 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::OUTPUT_OPTIONS:
@@ -1967,7 +1735,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 431 "d2_lexer.ll"
+#line 430 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::OUTPUT_OPTIONS:
@@ -1979,7 +1747,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 440 "d2_lexer.ll"
+#line 439 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::OUTPUT_OPTIONS:
@@ -1991,7 +1759,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 449 "d2_lexer.ll"
+#line 448 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::OUTPUT_OPTIONS:
@@ -2003,7 +1771,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 458 "d2_lexer.ll"
+#line 457 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::LOGGERS:
@@ -2019,7 +1787,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 471 "d2_lexer.ll"
+#line 470 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::LOGGERS:
@@ -2031,7 +1799,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 480 "d2_lexer.ll"
+#line 479 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::LOGGERS:
@@ -2043,7 +1811,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 489 "d2_lexer.ll"
+#line 488 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::CONFIG:
@@ -2055,7 +1823,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 498 "d2_lexer.ll"
+#line 497 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::CONFIG:
@@ -2067,7 +1835,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 507 "d2_lexer.ll"
+#line 506 "d2_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::d2::D2ParserContext::CONFIG:
@@ -2079,12 +1847,12 @@ YY_RULE_SETUP
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 517 "d2_lexer.ll"
+#line 516 "d2_lexer.ll"
 {
     /* A string has been matched. It contains the actual string and single quotes.
        We need to get those quotes out of the way and just use its content, e.g.
        for 'foo' we should get foo */
-    std::string raw(yytext+1);
+    std::string raw(d2_parser_text+1);
     size_t len = raw.size() - 1;
     raw.resize(len);
     std::string decoded;
@@ -2182,65 +1950,65 @@ YY_RULE_SETUP
 case 47:
 /* rule 47 can match eol */
 YY_RULE_SETUP
-#line 616 "d2_lexer.ll"
+#line 615 "d2_lexer.ll"
 {
     /* Bad string with a forbidden control character inside */
-    driver.error(driver.loc_, "Invalid control in " + std::string(yytext));
+    driver.error(driver.loc_, "Invalid control in " + std::string(d2_parser_text));
 }
        YY_BREAK
 case 48:
 /* rule 48 can match eol */
 YY_RULE_SETUP
-#line 621 "d2_lexer.ll"
+#line 620 "d2_lexer.ll"
 {
     /* Bad string with a bad escape inside */
-    driver.error(driver.loc_, "Bad escape in " + std::string(yytext));
+    driver.error(driver.loc_, "Bad escape in " + std::string(d2_parser_text));
 }
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 626 "d2_lexer.ll"
+#line 625 "d2_lexer.ll"
 {
     /* Bad string with an open escape at the end */
-    driver.error(driver.loc_, "Overflow escape in " + std::string(yytext));
+    driver.error(driver.loc_, "Overflow escape in " + std::string(d2_parser_text));
 }
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 631 "d2_lexer.ll"
+#line 630 "d2_lexer.ll"
 { return isc::d2::D2Parser::make_LSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 632 "d2_lexer.ll"
+#line 631 "d2_lexer.ll"
 { return isc::d2::D2Parser::make_RSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 633 "d2_lexer.ll"
+#line 632 "d2_lexer.ll"
 { return isc::d2::D2Parser::make_LCURLY_BRACKET(driver.loc_); }
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 634 "d2_lexer.ll"
+#line 633 "d2_lexer.ll"
 { return isc::d2::D2Parser::make_RCURLY_BRACKET(driver.loc_); }
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 635 "d2_lexer.ll"
+#line 634 "d2_lexer.ll"
 { return isc::d2::D2Parser::make_COMMA(driver.loc_); }
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 636 "d2_lexer.ll"
+#line 635 "d2_lexer.ll"
 { return isc::d2::D2Parser::make_COLON(driver.loc_); }
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 638 "d2_lexer.ll"
+#line 637 "d2_lexer.ll"
 {
     /* An integer was found. */
-    std::string tmp(yytext);
+    std::string tmp(d2_parser_text);
     int64_t integer = 0;
     try {
         /* In substring we want to use negative values (e.g. -1).
@@ -2258,10 +2026,10 @@ YY_RULE_SETUP
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 656 "d2_lexer.ll"
+#line 655 "d2_lexer.ll"
 {
     /* A floating point was found. */
-    std::string tmp(yytext);
+    std::string tmp(d2_parser_text);
     double fp = 0.0;
     try {
         fp = boost::lexical_cast<double>(tmp);
@@ -2274,41 +2042,41 @@ YY_RULE_SETUP
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 669 "d2_lexer.ll"
+#line 668 "d2_lexer.ll"
 {
-    string tmp(yytext);
+    string tmp(d2_parser_text);
     return isc::d2::D2Parser::make_BOOLEAN(tmp == "true", driver.loc_);
 }
        YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 674 "d2_lexer.ll"
+#line 673 "d2_lexer.ll"
 {
    return isc::d2::D2Parser::make_NULL_TYPE(driver.loc_);
 }
        YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 678 "d2_lexer.ll"
+#line 677 "d2_lexer.ll"
 driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
        YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 680 "d2_lexer.ll"
+#line 679 "d2_lexer.ll"
 driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
        YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 682 "d2_lexer.ll"
+#line 681 "d2_lexer.ll"
 driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
        YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 684 "d2_lexer.ll"
-driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
+#line 683 "d2_lexer.ll"
+driver.error (driver.loc_, "Invalid character: " + std::string(d2_parser_text));
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 686 "d2_lexer.ll"
+#line 685 "d2_lexer.ll"
 {
     if (driver.states_.empty()) {
         return isc::d2::D2Parser::make_END(driver.loc_);
@@ -2334,10 +2102,10 @@ case YY_STATE_EOF(INITIAL):
        YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 709 "d2_lexer.ll"
+#line 708 "d2_lexer.ll"
 ECHO;
        YY_BREAK
-#line 2340 "d2_lexer.cc"
+#line 2109 "d2_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -2352,19 +2120,15 @@ ECHO;
                        {
                        /* We're scanning a new file or input source.  It's
                         * possible that this happened because the user
-                        * just pointed yyin at a new source and called
-                        * yylex().  If so, then we have to assure
+                        * just pointed d2_parser_in at a new source and called
+                        * d2_parser_lex().  If so, then we have to assure
                         * consistency between YY_CURRENT_BUFFER and our
                         * globals.  Here is the right place to do so, because
                         * this is the first action (other than possibly a
                         * back-up) that will match for the new input source.
                         */
                        (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-/* %if-c-only */
-                       YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
-/* %endif */
-/* %if-c++-only */
-/* %endif */
+                       YY_CURRENT_BUFFER_LVALUE->yy_input_file = d2_parser_in;
                        YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
                        }
 
@@ -2419,11 +2183,11 @@ ECHO;
                                {
                                (yy_did_buffer_switch_on_eof) = 0;
 
-                               if ( yywrap(  ) )
+                               if ( d2_parser_wrap( ) )
                                        {
                                        /* Note: because we've taken care in
                                         * yy_get_next_buffer() to have set up
-                                        * yytext, we can now set up
+                                        * d2_parser_text, we can now set up
                                         * yy_c_buf_p so that if some total
                                         * hoser (like flex itself) wants to
                                         * call the scanner after we return the
@@ -2472,12 +2236,12 @@ ECHO;
                        "fatal flex scanner internal error--no action found" );
        } /* end of action switch */
                } /* end of scanning one token */
-       } /* end of user's declarations */
-} /* end of yylex */
+} /* end of d2_parser_lex */
 /* %ok-for-header */
 
 /* %if-c++-only */
 /* %not-for-header */
+
 /* %ok-for-header */
 
 /* %endif */
@@ -2495,9 +2259,9 @@ static int yy_get_next_buffer (void)
 /* %if-c++-only */
 /* %endif */
 {
-       char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-       char *source = (yytext_ptr);
-       int number_to_move, i;
+       register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+       register char *source = (yytext_ptr);
+       register int number_to_move, i;
        int ret_val;
 
        if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
@@ -2526,7 +2290,7 @@ static int yy_get_next_buffer (void)
        /* Try to read more data. */
 
        /* First move last chars to start of buffer. */
-       number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1);
+       number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
 
        for ( i = 0; i < number_to_move; ++i )
                *(dest++) = *(source++);
@@ -2539,7 +2303,7 @@ static int yy_get_next_buffer (void)
 
        else
                {
-                       int num_to_read =
+                       yy_size_t num_to_read =
                        YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
 
                while ( num_to_read <= 0 )
@@ -2553,7 +2317,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;
@@ -2562,12 +2326,11 @@ static int yy_get_next_buffer (void)
 
                                b->yy_ch_buf = (char *)
                                        /* Include room in for 2 EOB chars. */
-                                       yyrealloc( (void *) b->yy_ch_buf,
-                                                        (yy_size_t) (b->yy_buf_size + 2)  );
+                                       d2_parser_realloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
                                }
                        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(
@@ -2595,7 +2358,7 @@ static int yy_get_next_buffer (void)
                if ( number_to_move == YY_MORE_ADJ )
                        {
                        ret_val = EOB_ACT_END_OF_FILE;
-                       yyrestart( yyin  );
+                       d2_parser_restart(d2_parser_in  );
                        }
 
                else
@@ -2609,15 +2372,12 @@ static int yy_get_next_buffer (void)
        else
                ret_val = EOB_ACT_CONTINUE_SCAN;
 
-       if (((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_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(
-                       (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size  );
+               yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+               YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) d2_parser_realloc((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()" );
-               /* "- 2" to take care of EOB's */
-               YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
        }
 
        (yy_n_chars) += number_to_move;
@@ -2633,13 +2393,14 @@ static int yy_get_next_buffer (void)
 
 /* %if-c-only */
 /* %not-for-header */
+
     static yy_state_type yy_get_previous_state (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 {
-       yy_state_type yy_current_state;
-       char *yy_cp;
+       register yy_state_type yy_current_state;
+       register char *yy_cp;
     
 /* %% [15.0] code to get the start state into yy_current_state goes here */
        yy_current_state = (yy_start);
@@ -2647,7 +2408,7 @@ static int yy_get_next_buffer (void)
        for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
                {
 /* %% [16.0] code to find the next state goes here */
-               YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+               register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
                if ( yy_accept[yy_current_state] )
                        {
                        (yy_last_accepting_state) = yy_current_state;
@@ -2657,9 +2418,9 @@ static int yy_get_next_buffer (void)
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
                        if ( yy_current_state >= 388 )
-                               yy_c = yy_meta[yy_c];
+                               yy_c = yy_meta[(unsigned int) yy_c];
                        }
-               yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+               yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                }
 
        return yy_current_state;
@@ -2676,11 +2437,11 @@ static int yy_get_next_buffer (void)
 /* %if-c++-only */
 /* %endif */
 {
-       int yy_is_jam;
+       register int yy_is_jam;
     /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */
-       char *yy_cp = (yy_c_buf_p);
+       register char *yy_cp = (yy_c_buf_p);
 
-       YY_CHAR yy_c = 1;
+       register YY_CHAR yy_c = 1;
        if ( yy_accept[yy_current_state] )
                {
                (yy_last_accepting_state) = yy_current_state;
@@ -2690,19 +2451,17 @@ static int yy_get_next_buffer (void)
                {
                yy_current_state = (int) yy_def[yy_current_state];
                if ( yy_current_state >= 388 )
-                       yy_c = yy_meta[yy_c];
+                       yy_c = yy_meta[(unsigned int) yy_c];
                }
-       yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
        yy_is_jam = (yy_current_state == 387);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
 
-#ifndef YY_NO_UNPUT
 /* %if-c-only */
 
 /* %endif */
-#endif
 
 /* %if-c-only */
 #ifndef YY_NO_INPUT
@@ -2732,7 +2491,7 @@ static int yy_get_next_buffer (void)
 
                else
                        { /* need more input */
-                       int offset = (int) ((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(  ) )
@@ -2749,14 +2508,14 @@ static int yy_get_next_buffer (void)
                                         */
 
                                        /* Reset buffer status. */
-                                       yyrestart( yyin );
+                                       d2_parser_restart(d2_parser_in );
 
                                        /*FALLTHROUGH*/
 
                                case EOB_ACT_END_OF_FILE:
                                        {
-                                       if ( yywrap(  ) )
-                                               return 0;
+                                       if ( d2_parser_wrap( ) )
+                                               return EOF;
 
                                        if ( ! (yy_did_buffer_switch_on_eof) )
                                                YY_NEW_FILE;
@@ -2775,10 +2534,10 @@ static int yy_get_next_buffer (void)
                }
 
        c = *(unsigned char *) (yy_c_buf_p);    /* cast for 8-bit char's */
-       *(yy_c_buf_p) = '\0';   /* preserve yytext */
+       *(yy_c_buf_p) = '\0';   /* preserve d2_parser_text */
        (yy_hold_char) = *++(yy_c_buf_p);
 
-/* %% [19.0] update BOL and yylineno */
+/* %% [19.0] update BOL and d2_parser_lineno */
 
        return c;
 }
@@ -2792,31 +2551,28 @@ static int yy_get_next_buffer (void)
  * @note This function does not reset the start condition to @c INITIAL .
  */
 /* %if-c-only */
-    void yyrestart  (FILE * input_file )
+    void d2_parser_restart  (FILE * input_file )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 {
     
        if ( ! YY_CURRENT_BUFFER ){
-        yyensure_buffer_stack ();
+        d2_parser_ensure_buffer_stack ();
                YY_CURRENT_BUFFER_LVALUE =
-            yy_create_buffer( yyin, YY_BUF_SIZE );
+            d2_parser__create_buffer(d2_parser_in,YY_BUF_SIZE );
        }
 
-       yy_init_buffer( YY_CURRENT_BUFFER, input_file );
-       yy_load_buffer_state(  );
+       d2_parser__init_buffer(YY_CURRENT_BUFFER,input_file );
+       d2_parser__load_buffer_state( );
 }
 
-/* %if-c++-only */
-/* %endif */
-
 /** Switch to a different input buffer.
  * @param new_buffer The new input buffer.
  * 
  */
 /* %if-c-only */
-    void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
+    void d2_parser__switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -2824,10 +2580,10 @@ static int yy_get_next_buffer (void)
     
        /* TODO. We should be able to replace this entire function body
         * with
-        *              yypop_buffer_state();
-        *              yypush_buffer_state(new_buffer);
+        *              d2_parser_pop_buffer_state();
+        *              d2_parser_push_buffer_state(new_buffer);
      */
-       yyensure_buffer_stack ();
+       d2_parser_ensure_buffer_stack ();
        if ( YY_CURRENT_BUFFER == new_buffer )
                return;
 
@@ -2840,29 +2596,25 @@ static int yy_get_next_buffer (void)
                }
 
        YY_CURRENT_BUFFER_LVALUE = new_buffer;
-       yy_load_buffer_state(  );
+       d2_parser__load_buffer_state( );
 
        /* We don't actually know whether we did this switch during
-        * EOF (yywrap()) processing, but the only time this flag
-        * is looked at is after yywrap() is called, so it's safe
+        * EOF (d2_parser_wrap()) processing, but the only time this flag
+        * is looked at is after d2_parser_wrap() is called, so it's safe
         * to go ahead and always set it.
         */
        (yy_did_buffer_switch_on_eof) = 1;
 }
 
 /* %if-c-only */
-static void yy_load_buffer_state  (void)
+static void d2_parser__load_buffer_state  (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 {
        (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
        (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
-/* %if-c-only */
-       yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
-/* %endif */
-/* %if-c++-only */
-/* %endif */
+       d2_parser_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
        (yy_hold_char) = *(yy_c_buf_p);
 }
 
@@ -2873,42 +2625,39 @@ static void yy_load_buffer_state  (void)
  * @return the allocated buffer state.
  */
 /* %if-c-only */
-    YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
+    YY_BUFFER_STATE d2_parser__create_buffer  (FILE * file, int  size )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 {
        YY_BUFFER_STATE b;
     
-       b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
+       b = (YY_BUFFER_STATE) d2_parser_alloc(sizeof( struct yy_buffer_state )  );
        if ( ! b )
-               YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+               YY_FATAL_ERROR( "out of dynamic memory in d2_parser__create_buffer()" );
 
        b->yy_buf_size = size;
 
        /* yy_ch_buf has to be 2 characters longer than the size given because
         * we need to put in 2 end-of-buffer characters.
         */
-       b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2)  );
+       b->yy_ch_buf = (char *) d2_parser_alloc(b->yy_buf_size + 2  );
        if ( ! b->yy_ch_buf )
-               YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+               YY_FATAL_ERROR( "out of dynamic memory in d2_parser__create_buffer()" );
 
        b->yy_is_our_buffer = 1;
 
-       yy_init_buffer( b, file );
+       d2_parser__init_buffer(b,file );
 
        return b;
 }
 
-/* %if-c++-only */
-/* %endif */
-
 /** Destroy the buffer.
- * @param b a buffer created with yy_create_buffer()
+ * @param b a buffer created with d2_parser__create_buffer()
  * 
  */
 /* %if-c-only */
-    void yy_delete_buffer (YY_BUFFER_STATE  b )
+    void d2_parser__delete_buffer (YY_BUFFER_STATE  b )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -2921,17 +2670,17 @@ static void yy_load_buffer_state  (void)
                YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
 
        if ( b->yy_is_our_buffer )
-               yyfree( (void *) b->yy_ch_buf  );
+               d2_parser_free((void *) b->yy_ch_buf  );
 
-       yyfree( (void *) b  );
+       d2_parser_free((void *) b  );
 }
 
 /* Initializes or reinitializes a buffer.
  * This function is sometimes called more than once on the same buffer,
- * such as during a yyrestart() or at EOF.
+ * such as during a d2_parser_restart() or at EOF.
  */
 /* %if-c-only */
-    static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
+    static void d2_parser__init_buffer  (YY_BUFFER_STATE  b, FILE * file )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -2939,17 +2688,13 @@ static void yy_load_buffer_state  (void)
 {
        int oerrno = errno;
     
-       yy_flush_buffer( b );
+       d2_parser__flush_buffer(b );
 
-/* %if-c-only */
        b->yy_input_file = file;
-/* %endif */
-/* %if-c++-only */
-/* %endif */
        b->yy_fill_buffer = 1;
 
-    /* If b is the current buffer, then yy_init_buffer was _probably_
-     * called from yyrestart() or through yy_get_next_buffer.
+    /* If b is the current buffer, then d2_parser__init_buffer was _probably_
+     * called from d2_parser_restart() or through yy_get_next_buffer.
      * In that case, we don't want to reset the lineno or column.
      */
     if (b != YY_CURRENT_BUFFER){
@@ -2972,7 +2717,7 @@ static void yy_load_buffer_state  (void)
  * 
  */
 /* %if-c-only */
-    void yy_flush_buffer (YY_BUFFER_STATE  b )
+    void d2_parser__flush_buffer (YY_BUFFER_STATE  b )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -2995,7 +2740,7 @@ static void yy_load_buffer_state  (void)
        b->yy_buffer_status = YY_BUFFER_NEW;
 
        if ( b == YY_CURRENT_BUFFER )
-               yy_load_buffer_state(  );
+               d2_parser__load_buffer_state( );
 }
 
 /* %if-c-or-c++ */
@@ -3006,7 +2751,7 @@ static void yy_load_buffer_state  (void)
  *  
  */
 /* %if-c-only */
-void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
+void d2_parser_push_buffer_state (YY_BUFFER_STATE new_buffer )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -3014,9 +2759,9 @@ void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
        if (new_buffer == NULL)
                return;
 
-       yyensure_buffer_stack();
+       d2_parser_ensure_buffer_stack();
 
-       /* This block is copied from yy_switch_to_buffer. */
+       /* This block is copied from d2_parser__switch_to_buffer. */
        if ( YY_CURRENT_BUFFER )
                {
                /* Flush out information for old buffer. */
@@ -3030,8 +2775,8 @@ void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
                (yy_buffer_stack_top)++;
        YY_CURRENT_BUFFER_LVALUE = new_buffer;
 
-       /* copied from yy_switch_to_buffer. */
-       yy_load_buffer_state(  );
+       /* copied from d2_parser__switch_to_buffer. */
+       d2_parser__load_buffer_state( );
        (yy_did_buffer_switch_on_eof) = 1;
 }
 /* %endif */
@@ -3042,7 +2787,7 @@ void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
  *  
  */
 /* %if-c-only */
-void yypop_buffer_state (void)
+void d2_parser_pop_buffer_state (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -3050,13 +2795,13 @@ void yypop_buffer_state (void)
        if (!YY_CURRENT_BUFFER)
                return;
 
-       yy_delete_buffer(YY_CURRENT_BUFFER );
+       d2_parser__delete_buffer(YY_CURRENT_BUFFER );
        YY_CURRENT_BUFFER_LVALUE = NULL;
        if ((yy_buffer_stack_top) > 0)
                --(yy_buffer_stack_top);
 
        if (YY_CURRENT_BUFFER) {
-               yy_load_buffer_state(  );
+               d2_parser__load_buffer_state( );
                (yy_did_buffer_switch_on_eof) = 1;
        }
 }
@@ -3067,7 +2812,7 @@ void yypop_buffer_state (void)
  *  Guarantees space for at least one push.
  */
 /* %if-c-only */
-static void yyensure_buffer_stack (void)
+static void d2_parser_ensure_buffer_stack (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -3080,15 +2825,15 @@ static void yyensure_buffer_stack (void)
                 * scanner will even need a stack. We use 2 instead of 1 to avoid an
                 * immediate realloc on the next call.
          */
-      num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
-               (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+               num_to_alloc = 1;
+               (yy_buffer_stack) = (struct yy_buffer_state**)d2_parser_alloc
                                                                (num_to_alloc * sizeof(struct yy_buffer_state*)
                                                                );
                if ( ! (yy_buffer_stack) )
-                       YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-
+                       YY_FATAL_ERROR( "out of dynamic memory in d2_parser_ensure_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;
@@ -3097,15 +2842,15 @@ static void yyensure_buffer_stack (void)
        if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
 
                /* Increase the buffer to prepare for a possible push. */
-               yy_size_t grow_size = 8 /* arbitrary grow size */;
+               int grow_size = 8 /* arbitrary grow size */;
 
                num_to_alloc = (yy_buffer_stack_max) + grow_size;
-               (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+               (yy_buffer_stack) = (struct yy_buffer_state**)d2_parser_realloc
                                                                ((yy_buffer_stack),
                                                                num_to_alloc * sizeof(struct yy_buffer_state*)
                                                                );
                if ( ! (yy_buffer_stack) )
-                       YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+                       YY_FATAL_ERROR( "out of dynamic memory in d2_parser_ensure_buffer_stack()" );
 
                /* zero only the new slots.*/
                memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
@@ -3119,9 +2864,9 @@ 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 )
+YY_BUFFER_STATE d2_parser__scan_buffer  (char * base, yy_size_t  size )
 {
        YY_BUFFER_STATE b;
     
@@ -3129,53 +2874,53 @@ 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 )  );
+       b = (YY_BUFFER_STATE) d2_parser_alloc(sizeof( struct yy_buffer_state )  );
        if ( ! b )
-               YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+               YY_FATAL_ERROR( "out of dynamic memory in d2_parser__scan_buffer()" );
 
-       b->yy_buf_size = (int) (size - 2);      /* "- 2" to take care of EOB's */
+       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;
        b->yy_fill_buffer = 0;
        b->yy_buffer_status = YY_BUFFER_NEW;
 
-       yy_switch_to_buffer( b  );
+       d2_parser__switch_to_buffer(b  );
 
        return b;
 }
 /* %endif */
 
 /* %if-c-only */
-/** Setup the input buffer state to scan a string. The next call to yylex() will
+/** Setup the input buffer state to scan a string. The next call to d2_parser_lex() will
  * scan from a @e copy of @a str.
  * @param yystr a NUL-terminated string to scan
  * 
  * @return the newly allocated buffer state object.
  * @note If you want to scan bytes that may contain NUL values, then use
- *       yy_scan_bytes() instead.
+ *       d2_parser__scan_bytes() instead.
  */
-YY_BUFFER_STATE yy_scan_string (const char * yystr )
+YY_BUFFER_STATE d2_parser__scan_string (yyconst char * yystr )
 {
     
-       return yy_scan_bytes( yystr, (int) strlen(yystr) );
+       return d2_parser__scan_bytes(yystr,strlen(yystr) );
 }
 /* %endif */
 
 /* %if-c-only */
-/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+/** Setup the input buffer state to scan the given bytes. The next call to d2_parser_lex() will
  * scan from a @e copy of @a bytes.
  * @param yybytes the byte buffer to scan
  * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
  * 
  * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE yy_scan_bytes  (const char * yybytes, int  _yybytes_len )
+YY_BUFFER_STATE d2_parser__scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
 {
        YY_BUFFER_STATE b;
        char *buf;
@@ -3183,19 +2928,19 @@ YY_BUFFER_STATE yy_scan_bytes  (const char * yybytes, int  _yybytes_len )
        int i;
     
        /* Get memory for full buffer, including space for trailing EOB's. */
-       n = (yy_size_t) (_yybytes_len + 2);
-       buf = (char *) yyalloc( n  );
+       n = _yybytes_len + 2;
+       buf = (char *) d2_parser_alloc(n  );
        if ( ! buf )
-               YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+               YY_FATAL_ERROR( "out of dynamic memory in d2_parser__scan_bytes()" );
 
        for ( i = 0; i < _yybytes_len; ++i )
                buf[i] = yybytes[i];
 
        buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
 
-       b = yy_scan_buffer( buf, n );
+       b = d2_parser__scan_buffer(buf,n );
        if ( ! b )
-               YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+               YY_FATAL_ERROR( "bad buffer in d2_parser__scan_bytes()" );
 
        /* It's okay to grow etc. this buffer, and we should throw it
         * away when we're done.
@@ -3211,9 +2956,9 @@ YY_BUFFER_STATE yy_scan_bytes  (const char * yybytes, int  _yybytes_len )
 #endif
 
 /* %if-c-only */
-static void yynoreturn yy_fatal_error (const char* msg )
+static void yy_fatal_error (yyconst char* msg )
 {
-                       fprintf( stderr, "%s\n", msg );
+       (void) fprintf( stderr, "%s\n", msg );
        exit( YY_EXIT_FAILURE );
 }
 /* %endif */
@@ -3226,14 +2971,14 @@ static void yynoreturn yy_fatal_error (const char* msg )
 #define yyless(n) \
        do \
                { \
-               /* Undo effects of setting up yytext. */ \
+               /* Undo effects of setting up d2_parser_text. */ \
         int yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
-               yytext[yyleng] = (yy_hold_char); \
-               (yy_c_buf_p) = yytext + yyless_macro_arg; \
+               d2_parser_text[d2_parser_leng] = (yy_hold_char); \
+               (yy_c_buf_p) = d2_parser_text + yyless_macro_arg; \
                (yy_hold_char) = *(yy_c_buf_p); \
                *(yy_c_buf_p) = '\0'; \
-               yyleng = yyless_macro_arg; \
+               d2_parser_leng = yyless_macro_arg; \
                } \
        while ( 0 )
 
@@ -3246,82 +2991,82 @@ static void yynoreturn yy_fatal_error (const char* msg )
 /** Get the current line number.
  * 
  */
-int yyget_lineno  (void)
+int d2_parser_get_lineno  (void)
 {
-    
-    return yylineno;
+        
+    return d2_parser_lineno;
 }
 
 /** Get the input stream.
  * 
  */
-FILE *yyget_in  (void)
+FILE *d2_parser_get_in  (void)
 {
-        return yyin;
+        return d2_parser_in;
 }
 
 /** Get the output stream.
  * 
  */
-FILE *yyget_out  (void)
+FILE *d2_parser_get_out  (void)
 {
-        return yyout;
+        return d2_parser_out;
 }
 
 /** Get the length of the current token.
  * 
  */
-int yyget_leng  (void)
+yy_size_t d2_parser_get_leng  (void)
 {
-        return yyleng;
+        return d2_parser_leng;
 }
 
 /** Get the current token.
  * 
  */
 
-char *yyget_text  (void)
+char *d2_parser_get_text  (void)
 {
-        return yytext;
+        return d2_parser_text;
 }
 
 /* %if-reentrant */
 /* %endif */
 
 /** Set the current line number.
- * @param _line_number line number
+ * @param line_number
  * 
  */
-void yyset_lineno (int  _line_number )
+void d2_parser_set_lineno (int  line_number )
 {
     
-    yylineno = _line_number;
+    d2_parser_lineno = line_number;
 }
 
 /** Set the input stream. This does not discard the current
  * input buffer.
- * @param _in_str A readable stream.
+ * @param in_str A readable stream.
  * 
- * @see yy_switch_to_buffer
+ * @see d2_parser__switch_to_buffer
  */
-void yyset_in (FILE *  _in_str )
+void d2_parser_set_in (FILE *  in_str )
 {
-        yyin = _in_str ;
+        d2_parser_in = in_str ;
 }
 
-void yyset_out (FILE *  _out_str )
+void d2_parser_set_out (FILE *  out_str )
 {
-        yyout = _out_str ;
+        d2_parser_out = out_str ;
 }
 
-int yyget_debug  (void)
+int d2_parser_get_debug  (void)
 {
-        return yy_flex_debug;
+        return d2_parser__flex_debug;
 }
 
-void yyset_debug (int  _bdebug )
+void d2_parser_set_debug (int  bdebug )
 {
-        yy_flex_debug = _bdebug ;
+        d2_parser__flex_debug = bdebug ;
 }
 
 /* %endif */
@@ -3335,50 +3080,50 @@ void yyset_debug (int  _bdebug )
 static int yy_init_globals (void)
 {
         /* Initialization is the same as for the non-reentrant scanner.
-     * This function is called from yylex_destroy(), so don't allocate here.
+     * This function is called from d2_parser_lex_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;
 
 /* Defined in main.c */
 #ifdef YY_STDINIT
-    yyin = stdin;
-    yyout = stdout;
+    d2_parser_in = stdin;
+    d2_parser_out = stdout;
 #else
-    yyin = NULL;
-    yyout = NULL;
+    d2_parser_in = (FILE *) 0;
+    d2_parser_out = (FILE *) 0;
 #endif
 
     /* For future reference: Set errno on error, since we are called by
-     * yylex_init()
+     * d2_parser_lex_init()
      */
     return 0;
 }
 /* %endif */
 
 /* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */
-/* yylex_destroy is for both reentrant and non-reentrant scanners. */
-int yylex_destroy  (void)
+/* d2_parser_lex_destroy is for both reentrant and non-reentrant scanners. */
+int d2_parser_lex_destroy  (void)
 {
     
     /* Pop the buffer stack, destroying each element. */
        while(YY_CURRENT_BUFFER){
-               yy_delete_buffer( YY_CURRENT_BUFFER  );
+               d2_parser__delete_buffer(YY_CURRENT_BUFFER  );
                YY_CURRENT_BUFFER_LVALUE = NULL;
-               yypop_buffer_state();
+               d2_parser_pop_buffer_state();
        }
 
        /* Destroy the stack itself. */
-       yyfree((yy_buffer_stack) );
+       d2_parser_free((yy_buffer_stack) );
        (yy_buffer_stack) = NULL;
 
     /* Reset the globals. This is important in a non-reentrant scanner so the next time
-     * yylex() is called, initialization will occur. */
+     * d2_parser_lex() is called, initialization will occur. */
     yy_init_globals( );
 
 /* %if-reentrant */
@@ -3392,19 +3137,18 @@ int yylex_destroy  (void)
  */
 
 #ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, const char * s2, int n )
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
 {
-               
-       int i;
+       register int i;
        for ( i = 0; i < n; ++i )
                s1[i] = s2[i];
 }
 #endif
 
 #ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (const char * s )
+static int yy_flex_strlen (yyconst char * s )
 {
-       int n;
+       register int n;
        for ( n = 0; s[n]; ++n )
                ;
 
@@ -3412,14 +3156,13 @@ static int yy_flex_strlen (const char * s )
 }
 #endif
 
-void *yyalloc (yy_size_t  size )
+void *d2_parser_alloc (yy_size_t  size )
 {
-                       return malloc(size);
+       return (void *) malloc( size );
 }
 
-void *yyrealloc  (void * ptr, yy_size_t  size )
+void *d2_parser_realloc  (void * ptr, yy_size_t  size )
 {
-               
        /* The cast to (char *) in the following accommodates both
         * implementations that use char* generic pointers, and those
         * that use void* generic pointers.  It works with the latter
@@ -3427,12 +3170,12 @@ 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 )
+void d2_parser_free (void * ptr )
 {
-                       free( (char *) ptr );   /* see yyrealloc() for (char *) cast */
+       free( (char *) ptr );   /* see d2_parser_realloc() for (char *) cast */
 }
 
 /* %if-tables-serialization definitions */
@@ -3442,7 +3185,8 @@ void yyfree (void * ptr )
 
 /* %ok-for-header */
 
-#line 709 "d2_lexer.ll"
+#line 708 "d2_lexer.ll"
+
 
 
 using namespace isc::dhcp;
@@ -3456,7 +3200,7 @@ D2ParserContext::scanStringBegin(const std::string& str, ParserType parser_type)
     file_ = "<string>";
     sfile_ = 0;
     loc_.initialize(&file_);
-    yy_flex_debug = trace_scanning_;
+    d2_parser__flex_debug = trace_scanning_;
     YY_BUFFER_STATE buffer;
     buffer = d2_parser__scan_bytes(str.c_str(), str.size());
     if (!buffer) {
@@ -3476,7 +3220,7 @@ D2ParserContext::scanFileBegin(FILE * f,
     file_ = filename;
     sfile_ = f;
     loc_.initialize(&file_);
-    yy_flex_debug = trace_scanning_;
+    d2_parser__flex_debug = trace_scanning_;
     YY_BUFFER_STATE buffer;
 
     /* See d2_lexer.cc header for available definitions */
index f7cd2a53f0680d6bab60fdac49dc05d1ecd3d530..e91f42fc4c4091976c8694f4876c7731d268ffac 100644 (file)
@@ -1,4 +1,3 @@
-// Generated 201804111443
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Locations for Bison parsers in C++
index 7b8f536e7ad51e93abafc95be67c924ecca0518f..1ba4edcffeeb238fa7cbdd395a85da5006a5b393 100644 (file)
@@ -1,4 +1,3 @@
-// Generated 201804111443
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Positions for Bison parsers in C++
index 4569b5a695dcbaf5fdd5bef2ac3ee6a579d8ac66..770196b0003a7c2be2b3011c67a79161af19db95 100644 (file)
@@ -1,4 +1,3 @@
-// Generated 201804111443
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Stack handling for Bison parsers in C++
index 63aa9cf0382ba32f1450cb2b60a392072e5dee30..7d6980891c534174cc3eae403dbc3f93371e2b6d 100644 (file)
@@ -35,8 +35,8 @@
 
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 6
-#define YY_FLEX_SUBMINOR_VERSION 0
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 37
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -203,15 +203,7 @@ typedef unsigned int flex_uint32_t;
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k.
- * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
- * Ditto for the __ia64__ case accordingly.
- */
-#define YY_BUF_SIZE 32768
-#else
 #define YY_BUF_SIZE 16384
-#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -243,7 +235,6 @@ extern FILE *parser4_in, *parser4_out;
 #define EOB_ACT_LAST_MATCH 2
 
     #define YY_LESS_LINENO(n)
-    #define YY_LINENO_REWIND_TO(ptr)
     
 /* Return all but the first "n" matched characters back to the input stream. */
 #define yyless(n) \
@@ -283,7 +274,7 @@ struct yy_buffer_state
        /* 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
@@ -367,7 +358,7 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
 
 /* yy_hold_char holds the character lost when parser4_text is formed. */
 static char yy_hold_char;
-static int yy_n_chars;         /* number of characters read into yy_ch_buf */
+static yy_size_t yy_n_chars;           /* number of characters read into yy_ch_buf */
 yy_size_t parser4_leng;
 
 /* Points to current character in buffer. */
@@ -434,7 +425,7 @@ void parser4_free (void *  );
 /* %% [1.0] parser4_text/parser4_in/parser4_out/yy_state_type/parser4_lineno etc. def's & init go here */
 /* Begin user sect3 */
 
-#define parser4_wrap() (/*CONSTCOND*/1)
+#define parser4_wrap() 1
 #define YY_SKIP_YYWRAP
 
 #define FLEX_DEBUG
@@ -450,21 +441,13 @@ extern int parser4_lineno;
 int parser4_lineno = 1;
 
 extern char *parser4_text;
-#ifdef yytext_ptr
-#undef yytext_ptr
-#endif
 #define yytext_ptr parser4_text
 
-/* %% [1.5] DFA */
-
 /* %if-c-only Standard (non-C++) definition */
 
 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 );
-#if defined(__GNUC__) && __GNUC__ >= 3
-__attribute__((__noreturn__))
-#endif
 static void yy_fatal_error (yyconst char msg[]  );
 
 /* %endif */
@@ -482,8 +465,8 @@ static void yy_fatal_error (yyconst char msg[]  );
        (yy_c_buf_p) = yy_cp;
 
 /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
-#define YY_NUM_RULES 168
-#define YY_END_OF_BUFFER 169
+#define YY_NUM_RULES 170
+#define YY_END_OF_BUFFER 171
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -491,21 +474,21 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[1396] =
+static yyconst flex_int16_t yy_accept[1418] =
     {   0,
-      161,  161,    0,    0,    0,    0,    0,    0,    0,    0,
-      169,  167,   10,   11,  167,    1,  161,  158,  161,  161,
-      167,  160,  159,  167,  167,  167,  167,  167,  154,  155,
-      167,  167,  167,  156,  157,    5,    5,    5,  167,  167,
-      167,   10,   11,    0,    0,  150,    0,    0,    0,    0,
+      163,  163,    0,    0,    0,    0,    0,    0,    0,    0,
+      171,  169,   10,   11,  169,    1,  163,  160,  163,  163,
+      169,  162,  161,  169,  169,  169,  169,  169,  156,  157,
+      169,  169,  169,  158,  159,    5,    5,    5,  169,  169,
+      169,   10,   11,    0,    0,  152,    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,    1,
-      161,  161,    0,  160,  161,    3,    2,    6,    0,  161,
+      163,  163,    0,  162,  163,    3,    2,    6,    0,  163,
         0,    0,    0,    0,    0,    0,    4,    0,    0,    9,
 
-        0,  151,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  153,    0,    0,    0,
+        0,  153,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  155,    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,
@@ -513,7 +496,7 @@ static yyconst flex_int16_t yy_accept[1396] =
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    2,    0,    0,    0,
         0,    0,    0,    0,    8,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  152,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  154,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -523,10 +506,10 @@ static yyconst flex_int16_t yy_accept[1396] =
         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,  166,  164,    0,  163,  162,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  131,    0,
+        0,    0,    0,  168,  166,    0,  165,  164,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  133,    0,
 
-      130,    0,    0,   69,    0,    0,    0,    0,    0,    0,
+      132,    0,    0,   69,    0,    0,    0,    0,    0,    0,
         0,    0,    0,   30,    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,
@@ -535,9 +518,9 @@ static yyconst flex_int16_t yy_accept[1396] =
         0,    0,    0,   15,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,   16,    0,    0,    0,    0,
-      165,  162,    0,    0,    0,    0,    0,    0,    0,    0,
+      167,  164,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,  132,    0,    0,  134,    0,    0,    0,    0,
+        0,    0,  134,    0,    0,  136,    0,    0,    0,    0,
         0,    0,    0,   70,    0,    0,    0,    0,    0,   54,
         0,    0,    0,    0,    0,   87,    0,    0,    0,    0,
         0,    0,    0,    0,    0,   33,    0,    0,    0,    0,
@@ -548,8 +531,8 @@ static yyconst flex_int16_t yy_accept[1396] =
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,   84,   26,    0,    0,   31,
 
-        0,    0,    0,    0,    0,    0,    0,    0,   12,  139,
-        0,  136,    0,  135,    0,    0,    0,   97,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   12,  141,
+        0,  138,    0,  137,    0,    0,    0,   97,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,   77,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -559,7 +542,7 @@ static yyconst flex_int16_t yy_accept[1396] =
         0,    0,   98,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,   93,    0,    0,    0,    0,    0,
 
-        0,    0,    7,    0,    0,  137,    0,    0,    0,    0,
+        0,    0,    7,    0,    0,  139,    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,
@@ -578,78 +561,80 @@ static yyconst flex_int16_t yy_accept[1396] =
         0,    0,    0,    0,   35,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,   49,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  140,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  142,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,   66,    0,    0,
         0,    0,    0,    0,    0,    0,    0,   92,    0,    0,
-        0,    0,   38,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   38,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       32,    0,    0,    0,    0,   25,    0,    0,    0,    0,
+        0,   32,    0,    0,    0,    0,   25,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   80,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   80,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   89,    0,    0,    0,    0,    0,    0,  115,    0,
+        0,    0,   89,    0,    0,    0,    0,    0,    0,  115,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,   61,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   61,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   21,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   21,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  120,    0,
-        0,  118,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  144,    0,    0,    0,    0,    0,    0,
-       90,    0,    0,    0,    0,   94,   76,    0,    0,    0,
+      120,    0,    0,  118,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  146,    0,    0,    0,    0,
+        0,    0,   90,    0,    0,    0,    0,   94,   76,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       88,    0,   20,    0,   99,    0,    0,    0,    0,    0,
-        0,    0,  124,    0,    0,    0,    0,   51,    0,    0,
+        0,    0,    0,   88,    0,   20,    0,   99,    0,    0,
+        0,    0,    0,    0,    0,  124,    0,    0,    0,    0,
 
-        0,    0,    0,  102,   29,    0,    0,    0,    0,    0,
+       51,    0,    0,    0,    0,    0,  102,   29,    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,   55,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   96,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   55,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   96,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  147,    0,   52,   68,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   46,    0,    0,
-        0,    0,    0,    0,  121,    0,  119,    0,  114,  113,
-        0,   42,    0,   19,    0,    0,    0,    0,    0,  133,
-
-        0,    0,   83,    0,    0,    0,    0,    0,    0,  111,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   62,
-        0,  100,    0,   36,    0,    0,    0,    0,    0,  123,
-        0,    0,    0,    0,    0,    0,   64,   47,    0,    0,
-       95,    0,    0,    0,    0,   86,    0,    0,    0,    0,
-        0,   58,    0,  142,    0,  141,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  149,    0,   52,
+       68,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   46,    0,    0,    0,    0,    0,    0,  121,    0,
+      119,    0,  114,  113,    0,   42,    0,   19,    0,    0,
+
+        0,    0,    0,  135,    0,    0,   83,    0,    0,    0,
+        0,    0,    0,  111,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   62,    0,  100,    0,   36,    0,
+        0,    0,    0,    0,  123,    0,    0,    0,    0,    0,
+        0,   64,   47,    0,    0,   95,    0,    0,    0,    0,
+       86,    0,    0,    0,    0,    0,   58,    0,  144,    0,
+      143,    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,
-        0,    0,    0,    0,    0,    0,   41,    0,    0,    0,
 
-        0,    0,  149,   81,    0,   43,  112,    0,    0,  145,
-      116,    0,    0,    0,    0,    0,    0,   23,    0,    0,
-       22,    0,  122,    0,    0,    0,    0,    0,   74,    0,
+        0,    0,   41,    0,    0,    0,    0,    0,  151,   81,
+        0,   43,  112,    0,    0,  147,  116,    0,    0,    0,
+        0,    0,    0,    0,    0,   23,    0,    0,   22,    0,
+      122,    0,    0,    0,    0,    0,   74,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   45,    0,    0,    0,   37,    0,    0,    0,
-        0,    0,    0,  101,    0,   24,    0,  146,    0,    0,
+       45,    0,    0,    0,   37,    0,    0,    0,    0,    0,
+        0,  101,    0,    0,    0,   24,    0,  148,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,   40,
-        0,    0,   18,  148,   50,    0,  143,  138,    0,    0,
-       14,    0,    0,  129,    0,    0,    0,    0,  109,    0,
-       85,    0,    0,    0,    0,    0,    0,    0,    0,   65,
-
-        0,    0,    0,    0,    0,    0,    0,   13,    0,    0,
-        0,    0,    0,  117,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  108,    0,   17,    0,  126,
-        0,    0,    0,    0,    0,  125,    0,    0,    0,  107,
-        0,   44,    0,    0,   39,  128,    0,    0,    0,    0,
+        0,    0,   18,  150,   50,    0,  145,  140,    0,    0,
+       14,    0,    0,  129,    0,    0,    0,    0,    0,    0,
+
+      109,    0,   85,    0,    0,    0,    0,    0,    0,    0,
+        0,   65,    0,    0,    0,    0,    0,    0,    0,    0,
+      130,   13,    0,    0,    0,    0,    0,  117,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  127,    0,
-       82,    0,    0,    0,    0,    0,  105,  110,   48,    0,
-        0,    0,  104,    0,    0,    0,    0,    0,    0,    0,
-       71,    0,    0,  106,    0
+      108,    0,   17,    0,  126,    0,    0,    0,    0,    0,
+      125,    0,    0,    0,  107,    0,    0,   44,    0,    0,
+       39,  128,    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,  127,    0,   82,
+        0,    0,    0,    0,    0,    0,  105,  110,   48,    0,
 
+        0,    0,    0,  104,    0,    0,  131,    0,    0,    0,
+        0,    0,   71,    0,    0,  106,    0
     } ;
 
-static yyconst YY_CHAR yy_ec[256] =
+static yyconst flex_int32_t yy_ec[256] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
         1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
@@ -681,7 +666,7 @@ static yyconst YY_CHAR yy_ec[256] =
         5,    5,    5,    5,    5
     } ;
 
-static yyconst YY_CHAR yy_meta[72] =
+static yyconst flex_int32_t yy_meta[72] =
     {   0,
         1,    1,    2,    3,    3,    4,    3,    3,    3,    3,
         3,    3,    3,    5,    5,    5,    3,    3,    3,    3,
@@ -693,329 +678,333 @@ static yyconst YY_CHAR yy_meta[72] =
         3
     } ;
 
-static yyconst flex_uint16_t yy_base[1408] =
+static yyconst flex_int16_t yy_base[1430] =
     {   0,
         0,   70,   19,   29,   41,   49,   52,   58,   87,   95,
-     1758, 1759,   32, 1754,  141,    0,  201, 1759,  206,   88,
-       11,  213, 1759, 1736,  114,   25,    2,    6, 1759, 1759,
-       73,   11,   17, 1759, 1759, 1759,  104, 1742, 1697,    0,
-     1734,  107, 1749,  217,  247, 1759, 1693,  185, 1692, 1698,
-       93,   58, 1690,   91,  211,  195,   14,  273,  195, 1689,
-      181,  275,  202,  209, 1698,   66,  188, 1697,  232,  219,
-      296,  284,  207, 1680,   78,  287,  324,  305, 1699,    0,
-      339,  359,  367,  374,  379, 1759,    0, 1759,  301,  344,
-      223,  295,  196,  336,  348,  210, 1759, 1696, 1735, 1759,
-
-      322, 1759,  392, 1724,  330, 1682, 1692,  351,  366, 1687,
-      363,  370,  372,  379,  241, 1730,    0,  443,  376, 1674,
-     1676, 1672, 1680,  362, 1676, 1665, 1666,   89, 1682, 1665,
-     1674, 1674,  366, 1665,  353, 1666,  358, 1711, 1715, 1657,
-     1708, 1650, 1673, 1670, 1670, 1664,  358, 1657, 1650, 1655,
-     1649,  378, 1660, 1653, 1644, 1643, 1657,  373, 1643,  386,
-     1659,   72,  439, 1646,  413, 1657, 1654, 1655, 1653,  414,
-     1635, 1637,  420, 1629, 1646, 1638,    0,  389,  425,  331,
-      398,  442,  414, 1637, 1759,    0, 1680,  419, 1627, 1630,
-      438,  445, 1638,  456, 1681,  457, 1680,  446, 1679, 1759,
-
-      492, 1678,  465, 1639, 1619, 1635, 1632, 1631, 1622,  462,
-     1671, 1665, 1631, 1610, 1618, 1613, 1627, 1623, 1611, 1623,
-     1623, 1614, 1598, 1602, 1615, 1615, 1607, 1597, 1615, 1759,
-     1610, 1613, 1594, 1593, 1643, 1592, 1602, 1605,  466, 1601,
-     1589, 1600, 1636, 1583, 1639, 1576, 1591,  484, 1581, 1597,
-     1578, 1577, 1583, 1574, 1573, 1580, 1582, 1627, 1585, 1584,
-     1578,  311, 1585, 1580, 1572, 1562, 1577, 1576, 1576, 1557,
-     1573, 1559, 1565, 1572, 1560,  314, 1553, 1567, 1608, 1569,
-      450, 1560,  485, 1759, 1759,  487, 1759, 1759, 1547,    0,
-      468,  293, 1549,  508,  496, 1603, 1556,  489, 1759, 1601,
-
-     1759, 1595,  537, 1759,  487, 1537, 1593, 1539, 1545, 1595,
-     1552, 1551,  503, 1759, 1549, 1591, 1546, 1543,  415, 1549,
-     1587, 1581, 1536, 1531, 1528, 1577, 1536, 1525, 1574, 1522,
-      543, 1536, 1521, 1534, 1521, 1531, 1526, 1533, 1528, 1524,
-      485, 1522, 1525, 1520, 1516, 1564,  507, 1558, 1759, 1557,
-     1509, 1508, 1507, 1500, 1502, 1506, 1495, 1508,  528, 1553,
-     1508, 1505, 1509, 1759, 1507, 1496, 1496, 1508,  508, 1483,
-     1484, 1505,  519, 1487, 1536, 1498, 1497, 1483, 1495, 1494,
-     1493, 1492,  516, 1533, 1532, 1759, 1476, 1475,  566, 1488,
-     1759, 1759, 1487,    0, 1476, 1468,  514, 1473, 1524, 1523,
-
-     1481, 1521, 1759, 1469, 1519, 1759,  557,  603,  534, 1518,
-     1474, 1470, 1458, 1759, 1463, 1473, 1472, 1459, 1458, 1759,
-     1460, 1457,  480, 1455, 1457, 1759, 1465, 1462, 1447, 1460,
-     1455,  568, 1462, 1444, 1493, 1759, 1442, 1458, 1490, 1453,
-     1450, 1451, 1453, 1485, 1438, 1433, 1432, 1481, 1427, 1442,
-     1420, 1427, 1432, 1480, 1759, 1427, 1423, 1421, 1430, 1424,
-     1431, 1415, 1415, 1425, 1428, 1417, 1412, 1759, 1467, 1759,
-     1411, 1422, 1459, 1406, 1411, 1420, 1414, 1408, 1417, 1457,
-     1451, 1415, 1398, 1398, 1393, 1413, 1395, 1394, 1402, 1406,
-     1389, 1445, 1387, 1401, 1390, 1759, 1759, 1390, 1388, 1759,
-
-     1399, 1433, 1395,    0, 1379, 1396, 1434, 1384, 1759, 1759,
-     1381, 1759, 1387, 1759,  544,  545,  582, 1759, 1384, 1372,
-     1423, 1370, 1369, 1368, 1375, 1368, 1380, 1379, 1379, 1367,
-     1408, 1375, 1367, 1410, 1356, 1372, 1371, 1759, 1356, 1353,
-     1367, 1359, 1365, 1356, 1364, 1349, 1365, 1347, 1361, 1359,
-     1342, 1336, 1341, 1356, 1353, 1354, 1351, 1392, 1349, 1759,
-     1335, 1337, 1346, 1344, 1381, 1380, 1333,  551, 1342, 1325,
-     1326, 1323, 1759, 1337, 1316, 1337, 1334, 1326, 1369, 1323,
-     1330, 1366, 1759, 1313, 1327, 1311, 1325, 1328, 1309, 1359,
-     1358, 1305, 1356, 1355, 1759,   14, 1317, 1317, 1315, 1298,
-
-     1303, 1305, 1759, 1311, 1301, 1759, 1346, 1294, 1349,  545,
-      567,  539, 1299, 1342,  551, 1346, 1340, 1339, 1338, 1292,
-     1282, 1335, 1288, 1298, 1332, 1295, 1289, 1276, 1284, 1327,
-     1331, 1288, 1287, 1288, 1281, 1270, 1283, 1286, 1281, 1282,
-     1279, 1278, 1281, 1276, 1317, 1316, 1266, 1256,  540, 1313,
-     1759, 1312, 1261, 1253, 1254, 1303, 1266, 1253, 1264, 1759,
-     1252, 1261, 1260, 1260, 1300, 1243, 1252, 1245, 1256, 1233,
-     1237, 1288, 1252, 1234, 1244, 1284, 1283, 1282, 1229, 1280,
-      552,  561, 1222, 1232,  573, 1759, 1282, 1228, 1238, 1238,
-     1221, 1226, 1230, 1220, 1232, 1235, 1272, 1759, 1266,  573,
-
-     1219, 1227, 1226, 1221, 1217, 1224, 1759, 1207, 1210, 1206,
-     1223, 1218, 1206, 1202, 1209, 1203, 1255, 1212,    0,   24,
-       66, 1759,  191,  241,  438,  554,  561,  604,  558,  560,
-      575,  569,  626,  570,  573, 1759, 1759,  585,  590,  595,
-      583, 1759, 1759,  597,  584,  578,  583,  609,  587,  635,
-      595,  644,  595,  652, 1759,  599,  603,  605,  599,  657,
-      612,  602,  603,  599,  612,  623,  607,  625,  620,  621,
-      615,  617,  618,  618,  620,  673,  632,  637,  614, 1759,
-      639,  629,  674,  634,  624,  639,  640,  627,  641, 1759,
-      660,  668,  648,  638,  685,  650,  654,  693,  648,  643,
-
-      644,  640,  649,  644,  700,  659,  650, 1759,  652,  663,
-      648,  664,  658,  703,  671,  656,  657, 1759,  676,  659,
-      716,  661, 1759,  680,  660,  678,  717,  677,  673,  668,
-      686,  685,  686,  672,  687,  679,  686,  676,  694,  679,
-     1759,  687,  693,  688,  739, 1759,  690,  695,  737,  690,
-      702,  697,  701,  699,  697,  699,  751,  697,  697,  754,
-      700, 1759,  699,  707,  705,  710,  722,  706,  711,  721,
-      722,  727,  766,  725,  741,  746,  720,  730,  722,  774,
-      719, 1759,  726,  731,  738,  779,  780,  729, 1759,  725,
-      728,  727,  747,  744,  749,  750,  736,  744,  753,  733,
-
-      754,  794, 1759,  749,  798,  799,  761,  763,  751,  748,
-      755,  764,  807,  756,  754,  756,  773,  812,  764,  763,
-      769,  767,  765,  818,  819,  815,  775, 1759,  780,  773,
-      764,  783,  771,  781,  778,  783,  779,  792, 1759,  775,
-      776, 1759,  777,  775,  794,  795,  792,  777,  798,  798,
-      782,  787,  805, 1759,  795,  828,  819,  791,  850,  813,
-     1759,  796,  811,  803,  807, 1759, 1759,  817,  852,  801,
-      854,  803,  861,  806,  817,  809,  815,  811,  829,  830,
-     1759,  828, 1759,  831, 1759,  816,  835,  825,  818,  831,
-      873,  839, 1759,  831,  881,  824,  883, 1759,  884,  828,
-
-      834,  841,  883, 1759, 1759,  833,  833,  836,  850,  855,
-      838,  895,  854,  855,  856,  894,  848,  901,  851,  903,
-      852,  905,  906,  848,  908,  869,  910,  854,  866,  871,
-      857,  887,  916,  876, 1759,  868,  919,  868,  864,  880,
-      885,  867,  925,  880,  885, 1759,  886,  879,  888,  889,
-      886,  876,  878,  935,  884,  937,  882,  939,  935,  878,
-      895,  885,  945, 1759,  900, 1759, 1759,  905,  897,  907,
-      893,  895,  954,  955,  901,  911,  958, 1759,  908,  908,
-      911,  913,  964,  907, 1759,  928, 1759,  912, 1759, 1759,
-      926, 1759,  920, 1759,  970,  921,  972,  973,  955, 1759,
-
-      933,  934, 1759,  922,  921,  924,  924,  925,  921, 1759,
-      943,  929,  930,  945,  945,  948,  948,  945,  950, 1759,
-      942, 1759,  952, 1759,  949,  954,  956,  953,  995, 1759,
-      946,  947,  947,  953,  952,  963, 1759, 1759, 1002,  951,
-     1759,  952,  952,  954,  960, 1759,  962,  964,  967, 1016,
-      979, 1759,  976, 1759,  973, 1759,  996, 1016, 1022, 1023,
-      967, 1025, 1026,  981,  975, 1029, 1030, 1026,  991,  987,
-     1029,  979,  984, 1037,  995, 1039,  999, 1041, 1004,  993,
-      987, 1003, 1003, 1048,  992, 1009, 1008,  992, 1048, 1049,
-      998, 1051, 1016, 1017, 1017, 1004, 1759, 1015, 1062, 1022,
-
-     1035, 1022, 1759, 1759, 1066, 1759, 1759, 1015, 1026, 1759,
-     1759, 1016, 1065, 1010, 1015, 1073, 1023, 1759, 1075, 1030,
-     1759, 1077, 1759, 1022, 1037, 1025, 1040, 1044, 1759, 1078,
-     1046, 1039, 1048, 1030, 1037, 1089, 1050, 1049, 1094, 1095,
-     1096, 1047, 1759, 1098, 1099, 1046, 1759, 1050, 1102, 1048,
-     1047, 1105, 1060, 1759, 1102, 1759, 1064, 1759, 1067, 1110,
-     1065, 1112, 1073, 1056, 1058, 1055, 1071, 1072, 1081, 1759,
-     1071, 1121, 1759, 1759, 1759, 1117, 1759, 1759, 1082, 1119,
-     1759, 1073, 1080, 1759, 1077, 1082, 1129, 1074, 1759, 1089,
-     1759, 1090, 1080, 1092, 1135, 1079, 1087, 1088, 1101, 1759,
-
-     1100, 1090, 1089, 1103, 1094, 1103, 1105, 1759, 1147, 1092,
-     1149, 1109, 1151, 1759, 1147, 1111, 1112, 1099, 1094, 1157,
-     1116, 1117, 1118, 1161, 1120, 1759, 1163, 1759, 1126, 1759,
-     1108, 1166, 1167, 1112, 1129, 1759, 1115, 1115, 1117, 1759,
-     1122, 1759, 1117, 1129, 1759, 1759, 1134, 1128, 1132, 1123,
-     1175, 1124, 1140, 1133, 1128, 1143, 1134, 1141, 1128, 1143,
-     1190, 1149, 1192, 1137, 1153, 1144, 1158, 1154, 1759, 1198,
-     1759, 1199, 1200, 1157, 1156, 1157, 1759, 1759, 1759, 1204,
-     1148, 1164, 1759, 1202, 1153, 1152, 1154, 1165, 1212, 1163,
-     1759, 1172, 1215, 1759, 1759, 1221, 1226, 1231, 1236, 1241,
-
-     1246, 1251, 1254, 1228, 1233, 1235, 1248
+     1780, 1781,   32, 1776,  141,    0,  201, 1781,  206,   88,
+       11,  213, 1781, 1758,  114,   25,    2,    6, 1781, 1781,
+       73,   11,   17, 1781, 1781, 1781,  104, 1764, 1719,    0,
+     1756,  107, 1771,  217,  247, 1781, 1715,  185, 1714, 1720,
+       93,   58, 1712,   91,  211,  195,   14,  273,  195, 1711,
+      181,  275,  202,  209, 1720,   66,  188, 1719,  232,  219,
+      296,  284,  207, 1702,   78,  287,  324,  305, 1721,    0,
+      339,  359,  367,  374,  379, 1781,    0, 1781,  301,  344,
+      223,  295,  196,  336,  348,  210, 1781, 1718, 1757, 1781,
+
+      322, 1781,  392, 1746,  330, 1704, 1714,  351,  366, 1709,
+      363,  370,  372,  379,  241, 1752,    0,  443,  376, 1696,
+     1698, 1694, 1702,  362, 1698, 1687, 1688,   89, 1704, 1687,
+     1696, 1696,  366, 1687,  353, 1688,  358, 1733, 1737, 1679,
+     1730, 1672, 1695, 1692, 1692, 1686,  358, 1679, 1672, 1677,
+     1671,  378, 1682, 1675, 1666, 1665, 1679,  373, 1665,  386,
+     1681,   72,  439, 1668,  413, 1679, 1676, 1677, 1675,  414,
+     1657, 1659,  420, 1651, 1668, 1660,    0,  389,  425,  331,
+      398,  442,  414, 1659, 1781,    0, 1702,  419, 1649, 1652,
+      438,  445, 1660,  456, 1703,  457, 1702,  446, 1701, 1781,
+
+      492, 1700,  465, 1661, 1641, 1657, 1654, 1653, 1644,  462,
+     1693, 1687, 1653, 1632, 1640, 1635, 1649, 1645, 1633, 1645,
+     1645, 1636, 1620, 1624, 1637, 1637, 1629, 1619, 1637, 1781,
+     1632, 1635, 1616, 1615, 1665, 1614, 1624, 1627,  466, 1623,
+     1611, 1622, 1658, 1605, 1661, 1598, 1613,  484, 1603, 1619,
+     1600, 1599, 1605, 1596, 1595, 1602, 1604, 1649, 1607, 1606,
+     1600,  311, 1607, 1602, 1594, 1584, 1599, 1598, 1598, 1579,
+     1595, 1581, 1587, 1594, 1582,  314, 1575, 1589, 1630, 1591,
+      450, 1582,  485, 1781, 1781,  487, 1781, 1781, 1569,    0,
+      468,  293, 1571,  508,  496, 1625, 1578,  489, 1781, 1623,
+
+     1781, 1617,  537, 1781,  487, 1559, 1615, 1561, 1567, 1617,
+     1574, 1573,  503, 1781, 1571, 1613, 1568, 1565,  415, 1571,
+     1609, 1603, 1558, 1553, 1550, 1599, 1558, 1547, 1596, 1544,
+      543, 1558, 1543, 1556, 1543, 1553, 1548, 1555, 1550, 1546,
+      485, 1544, 1547, 1542, 1538, 1586,  507, 1580, 1781, 1579,
+     1531, 1530, 1529, 1522, 1524, 1528, 1517, 1530,  528, 1575,
+     1530, 1527, 1531, 1781, 1529, 1518, 1518, 1530,  508, 1505,
+     1506, 1527,  519, 1509, 1558, 1520, 1519, 1505, 1517, 1516,
+     1515, 1514,  516, 1555, 1554, 1781, 1498, 1497,  566, 1510,
+     1781, 1781, 1509,    0, 1498, 1490,  514, 1495, 1546, 1545,
+
+     1503, 1543, 1781, 1491, 1541, 1781,  557,  603,  534, 1540,
+     1496, 1492, 1480, 1781, 1485, 1495, 1494, 1481, 1480, 1781,
+     1482, 1479,  480, 1477, 1479, 1781, 1487, 1484, 1469, 1482,
+     1477,  568, 1484, 1466, 1515, 1781, 1464, 1480, 1512, 1475,
+     1472, 1473, 1475, 1507, 1460, 1455, 1454, 1503, 1449, 1464,
+     1442, 1449, 1454, 1502, 1781, 1449, 1445, 1443, 1452, 1446,
+     1453, 1437, 1437, 1447, 1450, 1439, 1434, 1781, 1489, 1781,
+     1433, 1444, 1481, 1428, 1433, 1442, 1436, 1430, 1439, 1479,
+     1473, 1437, 1420, 1420, 1415, 1435, 1417, 1416, 1424, 1428,
+     1411, 1467, 1409, 1423, 1412, 1781, 1781, 1412, 1410, 1781,
+
+     1421, 1455, 1417,    0, 1401, 1418, 1456, 1406, 1781, 1781,
+     1403, 1781, 1409, 1781,  544,  545,  582, 1781, 1406, 1394,
+     1445, 1392, 1391, 1390, 1397, 1390, 1402, 1401, 1401, 1389,
+     1430, 1397, 1389, 1432, 1378, 1394, 1393, 1781, 1378, 1375,
+     1389, 1381, 1387, 1378, 1386, 1371, 1387, 1369, 1383, 1381,
+     1364, 1358, 1363, 1378, 1375, 1376, 1373, 1414, 1371, 1781,
+     1357, 1359, 1368, 1366, 1403, 1402, 1355,  551, 1364, 1347,
+     1348, 1345, 1781, 1359, 1338, 1359, 1356, 1348, 1391, 1345,
+     1352, 1388, 1781, 1335, 1349, 1333, 1347, 1350, 1331, 1381,
+     1380, 1327, 1378, 1377, 1781,   14, 1339, 1339, 1337, 1320,
+
+     1325, 1327, 1781, 1333, 1323, 1781, 1368, 1316, 1371,  545,
+      567,  539, 1321, 1364,  551, 1368, 1362, 1361, 1360, 1314,
+     1304, 1357, 1310, 1320, 1354, 1317, 1311, 1298, 1306, 1349,
+     1353, 1310, 1309, 1310, 1303, 1292, 1305, 1308, 1303, 1304,
+     1301, 1300, 1303, 1298, 1339, 1338, 1288, 1278,  540, 1335,
+     1781, 1334, 1283, 1275, 1276, 1325, 1288, 1275, 1286, 1781,
+     1274, 1283, 1282, 1282, 1322, 1265, 1274, 1267, 1278, 1255,
+     1259, 1310, 1274, 1256, 1266, 1306, 1305, 1304, 1251, 1302,
+      552,  561, 1244, 1254,  573, 1781, 1304, 1250, 1260, 1260,
+     1243, 1248, 1252, 1242, 1254, 1257, 1294, 1781, 1288,  573,
+
+     1241, 1249, 1248, 1243, 1239, 1246, 1781, 1229, 1232, 1228,
+     1245, 1240, 1228, 1224, 1231, 1225, 1277, 1234,    0,   24,
+       66, 1781,  191,  241,  438,  554,  561,  626,  547,  559,
+      574,  561,  625,  570,  573, 1781, 1781,  586,  591,  596,
+      584, 1781, 1781,  598,  585,  579,  584,  609,  588,  643,
+      596,  645,  597,  653, 1781,  600,  604,  606,  600,  658,
+      613,  603,  604,  600,  613,  624,  608,  626,  621,  622,
+      616,  618,  619,  619,  621,  674,  633,  638,  615, 1781,
+      640,  630,  675,  635,  625,  640,  641,  628,  642, 1781,
+      661,  669,  649,  639,  686,  651,  655,  694,  649,  644,
+
+      645,  641,  650,  645,  701,  660,  651, 1781,  653,  664,
+      649,  665,  659,  704,  672,  657,  658, 1781,  675,  678,
+      661,  718,  663, 1781,  682,  662,  680,  719,  679,  675,
+      670,  688,  687,  688,  674,  689,  681,  688,  678,  696,
+      681, 1781,  689,  695,  690,  741, 1781,  692,  697,  739,
+      692,  704,  699,  703,  701,  699,  701,  753,  699,  699,
+      756,  702, 1781,  701,  709,  707,  712,  724,  708,  713,
+      723,  724,  729,  768,  727,  743,  748,  722,  732,  724,
+      776,  721, 1781,  728,  733,  740,  781,  782,  731, 1781,
+      727,  730,  729,  749,  746,  751,  752,  738,  746,  755,
+
+      735,  750,  757,  797, 1781,  754,  801,  802,  764,  766,
+      754,  751,  758,  767,  810,  759,  757,  759,  776,  815,
+      767,  766,  772,  770,  768,  821,  822,  818,  778, 1781,
+      783,  776,  767,  786,  774,  784,  781,  786,  782,  795,
+     1781,  778,  779, 1781,  780,  778,  797,  798,  795,  780,
+      801,  801,  785,  790,  808, 1781,  798,  831,  822,  794,
+      853,  816, 1781,  799,  814,  806,  810, 1781, 1781,  820,
+      855,  804,  857,  806,  864,  809,  820,  812,  818,  814,
+      832,  833,  834, 1781,  833, 1781,  835, 1781,  820,  839,
+      829,  823,  835,  877,  843, 1781,  835,  885,  828,  887,
+
+     1781,  888,  832,  838,  845,  887, 1781, 1781,  837,  837,
+      840,  854,  859,  842,  899,  858,  859,  860,  898,  852,
+      905,  855,  907,  856,  909,  910,  852,  912,  873,  914,
+      858,  870,  875,  861,  891,  920,  880, 1781,  872,  923,
+      872,  868,  884,  889,  871,  929,  884,  889, 1781,  890,
+      883,  892,  893,  890,  880,  883,  883,  940,  889,  942,
+      887,  944,  940,  883,  899,  892,  950, 1781,  905, 1781,
+     1781,  910,  902,  913,  899,  900,  959,  960,  906,  916,
+      963, 1781,  913,  914,  916,  918,  969,  912, 1781,  933,
+     1781,  917, 1781, 1781,  931, 1781,  925, 1781,  975,  926,
+
+      977,  978,  960, 1781,  938,  939, 1781,  927,  926,  929,
+      929,  930,  926, 1781,  948,  934,  935,  950,  950,  953,
+      953,  950,  992,  956, 1781,  948, 1781,  958, 1781,  955,
+      961,  962,  959, 1001, 1781,  952,  953,  953,  959,  958,
+      969, 1781, 1781, 1008,  957, 1781,  958,  958,  960,  966,
+     1781,  968,  970,  973, 1022,  985, 1781,  982, 1781,  979,
+     1781, 1002, 1022, 1028, 1029,  973, 1031, 1032,  987,  981,
+     1035, 1036, 1032,  997,  993, 1035,  985,  990,  988, 1045,
+     1003, 1047, 1007, 1049, 1012, 1001,  995, 1012, 1012, 1056,
+     1000, 1017, 1016, 1000, 1056, 1057, 1006, 1059, 1024, 1025,
+
+     1025, 1012, 1781, 1023, 1070, 1030, 1043, 1030, 1781, 1781,
+     1074, 1781, 1781, 1023, 1034, 1781, 1781, 1024, 1073, 1018,
+     1023, 1081, 1031, 1041, 1042, 1781, 1085, 1040, 1781, 1087,
+     1781, 1032, 1047, 1035, 1050, 1054, 1781, 1088, 1056, 1049,
+     1058, 1040, 1047, 1099, 1062, 1061, 1104, 1105, 1106, 1057,
+     1781, 1108, 1109, 1056, 1781, 1060, 1112, 1058, 1057, 1115,
+     1070, 1781, 1112, 1065, 1062, 1781, 1076, 1781, 1079, 1122,
+     1077, 1124, 1085, 1068, 1070, 1067, 1083, 1084, 1093, 1781,
+     1083, 1133, 1781, 1781, 1781, 1129, 1781, 1781, 1094, 1131,
+     1781, 1085, 1092, 1781, 1089, 1094, 1092, 1142, 1143, 1088,
+
+     1781, 1103, 1781, 1104, 1094, 1106, 1149, 1093, 1101, 1102,
+     1115, 1781, 1114, 1104, 1103, 1117, 1108, 1117, 1119, 1123,
+     1781, 1781, 1162, 1107, 1164, 1124, 1166, 1781, 1162, 1126,
+     1127, 1114, 1109, 1172, 1131, 1132, 1133, 1176, 1135, 1138,
+     1781, 1179, 1781, 1142, 1781, 1124, 1182, 1183, 1128, 1145,
+     1781, 1131, 1131, 1133, 1781, 1138, 1148, 1781, 1134, 1146,
+     1781, 1781, 1151, 1145, 1149, 1140, 1192, 1141, 1149, 1158,
+     1151, 1146, 1161, 1152, 1159, 1146, 1161, 1166, 1209, 1168,
+     1211, 1156, 1172, 1163, 1177, 1173, 1166, 1781, 1218, 1781,
+     1219, 1220, 1177, 1176, 1177, 1167, 1781, 1781, 1781, 1225,
+
+     1169, 1185, 1228, 1781, 1224, 1175, 1781, 1174, 1176, 1187,
+     1234, 1185, 1781, 1194, 1237, 1781, 1781, 1243, 1248, 1253,
+     1258, 1263, 1268, 1273, 1276, 1250, 1255, 1257, 1270
     } ;
 
-static yyconst flex_int16_t yy_def[1408] =
+static yyconst flex_int16_t yy_def[1430] =
     {   0,
-     1396, 1396, 1397, 1397, 1396, 1396, 1396, 1396, 1396, 1396,
-     1395, 1395, 1395, 1395, 1395, 1398, 1395, 1395, 1395, 1395,
-     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
-     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1399,
-     1395, 1395, 1395, 1400,   15, 1395,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1401,   45,   45,
+     1418, 1418, 1419, 1419, 1418, 1418, 1418, 1418, 1418, 1418,
+     1417, 1417, 1417, 1417, 1417, 1420, 1417, 1417, 1417, 1417,
+     1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417,
+     1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1421,
+     1417, 1417, 1417, 1422,   15, 1417,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1423,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1398,
-     1395, 1395, 1395, 1395, 1395, 1395, 1402, 1395, 1395, 1395,
-     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1399, 1395,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1420,
+     1417, 1417, 1417, 1417, 1417, 1417, 1424, 1417, 1417, 1417,
+     1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1421, 1417,
 
-     1400, 1395, 1395,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1403,   45, 1401,   45,   45,
+     1422, 1417, 1417,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1425,   45, 1423,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1402, 1395, 1395, 1395,
-     1395, 1395, 1395, 1395, 1395, 1404,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1403, 1395,
+       45,   45,   45,   45,   45,   45, 1424, 1417, 1417, 1417,
+     1417, 1417, 1417, 1417, 1417, 1426,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1425, 1417,
 
-     1401,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1423,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1395,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1417,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1405,
-       45,   45,   45,   45,   45,   45,   45,   45, 1395,   45,
+       45,   45, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1427,
+       45,   45,   45,   45,   45,   45,   45,   45, 1417,   45,
 
-     1395,   45, 1401, 1395,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1395,   45,   45,   45,   45,   45,   45,
+     1417,   45, 1423, 1417,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1417,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1395,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1417,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1395,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1417,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1395,   45,   45,   45,   45,
-     1395, 1395, 1395, 1406,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1417,   45,   45,   45,   45,
+     1417, 1417, 1417, 1428,   45,   45,   45,   45,   45,   45,
 
-       45,   45, 1395,   45,   45, 1395,   45, 1401,   45,   45,
-       45,   45,   45, 1395,   45,   45,   45,   45,   45, 1395,
-       45,   45,   45,   45,   45, 1395,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1395,   45,   45,   45,   45,
+       45,   45, 1417,   45,   45, 1417,   45, 1423,   45,   45,
+       45,   45,   45, 1417,   45,   45,   45,   45,   45, 1417,
+       45,   45,   45,   45,   45, 1417,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1417,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1395,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1395,   45, 1395,
+       45,   45,   45,   45, 1417,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1417,   45, 1417,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1395, 1395,   45,   45, 1395,
+       45,   45,   45,   45,   45, 1417, 1417,   45,   45, 1417,
 
-       45,   45, 1395, 1407,   45,   45,   45,   45, 1395, 1395,
-       45, 1395,   45, 1395,   45,   45,   45, 1395,   45,   45,
+       45,   45, 1417, 1429,   45,   45,   45,   45, 1417, 1417,
+       45, 1417,   45, 1417,   45,   45,   45, 1417,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1395,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1417,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1395,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1417,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1395,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1395,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1395,   45,   45,   45,   45,   45,
+       45,   45, 1417,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1417,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1417,   45,   45,   45,   45,   45,
 
-       45,   45, 1395,   45,   45, 1395,   45,   45,   45,   45,
+       45,   45, 1417,   45,   45, 1417,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1395,   45,   45,   45,   45,   45,   45,   45,   45, 1395,
+     1417,   45,   45,   45,   45,   45,   45,   45,   45, 1417,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1395,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1395,   45,   45,
+       45,   45,   45,   45,   45, 1417,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1417,   45,   45,
 
-       45,   45,   45,   45,   45,   45, 1395,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1417,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1395,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1395, 1395,   45,   45,   45,
-       45, 1395, 1395,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1395,   45,   45,   45,   45,   45,
+       45, 1417,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1417, 1417,   45,   45,   45,
+       45, 1417, 1417,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1417,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1395,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1395,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1417,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1417,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45,   45,   45,   45,   45, 1395,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1395,   45,   45,
-       45,   45, 1395,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1417,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1417,   45,   45,
+       45,   45,   45, 1417,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1395,   45,   45,   45,   45, 1395,   45,   45,   45,   45,
+       45, 1417,   45,   45,   45,   45, 1417,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1395,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1417,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1395,   45,   45,   45,   45,   45,   45, 1395,   45,
+       45,   45, 1417,   45,   45,   45,   45,   45,   45, 1417,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45, 1395,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1417,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1417,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1395,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1395,   45,
-       45, 1395,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1395,   45,   45,   45,   45,   45,   45,
-     1395,   45,   45,   45,   45, 1395, 1395,   45,   45,   45,
+     1417,   45,   45, 1417,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1417,   45,   45,   45,   45,
+       45,   45, 1417,   45,   45,   45,   45, 1417, 1417,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1395,   45, 1395,   45, 1395,   45,   45,   45,   45,   45,
-       45,   45, 1395,   45,   45,   45,   45, 1395,   45,   45,
+       45,   45,   45, 1417,   45, 1417,   45, 1417,   45,   45,
+       45,   45,   45,   45,   45, 1417,   45,   45,   45,   45,
 
-       45,   45,   45, 1395, 1395,   45,   45,   45,   45,   45,
+     1417,   45,   45,   45,   45,   45, 1417, 1417,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1395,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1395,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1417,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1417,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1395,   45, 1395, 1395,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1395,   45,   45,
-       45,   45,   45,   45, 1395,   45, 1395,   45, 1395, 1395,
-       45, 1395,   45, 1395,   45,   45,   45,   45,   45, 1395,
-
-       45,   45, 1395,   45,   45,   45,   45,   45,   45, 1395,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1395,
-       45, 1395,   45, 1395,   45,   45,   45,   45,   45, 1395,
-       45,   45,   45,   45,   45,   45, 1395, 1395,   45,   45,
-     1395,   45,   45,   45,   45, 1395,   45,   45,   45,   45,
-       45, 1395,   45, 1395,   45, 1395,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1417,   45, 1417,
+     1417,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1417,   45,   45,   45,   45,   45,   45, 1417,   45,
+     1417,   45, 1417, 1417,   45, 1417,   45, 1417,   45,   45,
+
+       45,   45,   45, 1417,   45,   45, 1417,   45,   45,   45,
+       45,   45,   45, 1417,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1417,   45, 1417,   45, 1417,   45,
+       45,   45,   45,   45, 1417,   45,   45,   45,   45,   45,
+       45, 1417, 1417,   45,   45, 1417,   45,   45,   45,   45,
+     1417,   45,   45,   45,   45,   45, 1417,   45, 1417,   45,
+     1417,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1395,   45,   45,   45,
 
-       45,   45, 1395, 1395,   45, 1395, 1395,   45,   45, 1395,
-     1395,   45,   45,   45,   45,   45,   45, 1395,   45,   45,
-     1395,   45, 1395,   45,   45,   45,   45,   45, 1395,   45,
+       45,   45, 1417,   45,   45,   45,   45,   45, 1417, 1417,
+       45, 1417, 1417,   45,   45, 1417, 1417,   45,   45,   45,
+       45,   45,   45,   45,   45, 1417,   45,   45, 1417,   45,
+     1417,   45,   45,   45,   45,   45, 1417,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1395,   45,   45,   45, 1395,   45,   45,   45,
-       45,   45,   45, 1395,   45, 1395,   45, 1395,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1395,
-       45,   45, 1395, 1395, 1395,   45, 1395, 1395,   45,   45,
-     1395,   45,   45, 1395,   45,   45,   45,   45, 1395,   45,
-     1395,   45,   45,   45,   45,   45,   45,   45,   45, 1395,
-
-       45,   45,   45,   45,   45,   45,   45, 1395,   45,   45,
-       45,   45,   45, 1395,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1395,   45, 1395,   45, 1395,
-       45,   45,   45,   45,   45, 1395,   45,   45,   45, 1395,
-       45, 1395,   45,   45, 1395, 1395,   45,   45,   45,   45,
+     1417,   45,   45,   45, 1417,   45,   45,   45,   45,   45,
+       45, 1417,   45,   45,   45, 1417,   45, 1417,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1417,
+       45,   45, 1417, 1417, 1417,   45, 1417, 1417,   45,   45,
+     1417,   45,   45, 1417,   45,   45,   45,   45,   45,   45,
+
+     1417,   45, 1417,   45,   45,   45,   45,   45,   45,   45,
+       45, 1417,   45,   45,   45,   45,   45,   45,   45,   45,
+     1417, 1417,   45,   45,   45,   45,   45, 1417,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1395,   45,
-     1395,   45,   45,   45,   45,   45, 1395, 1395, 1395,   45,
-       45,   45, 1395,   45,   45,   45,   45,   45,   45,   45,
-     1395,   45,   45, 1395,    0, 1395, 1395, 1395, 1395, 1395,
+     1417,   45, 1417,   45, 1417,   45,   45,   45,   45,   45,
+     1417,   45,   45,   45, 1417,   45,   45, 1417,   45,   45,
+     1417, 1417,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1417,   45, 1417,
+       45,   45,   45,   45,   45,   45, 1417, 1417, 1417,   45,
 
-     1395, 1395, 1395, 1395, 1395, 1395, 1395
+       45,   45,   45, 1417,   45,   45, 1417,   45,   45,   45,
+       45,   45, 1417,   45,   45, 1417,    0, 1417, 1417, 1417,
+     1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417
     } ;
 
-static yyconst flex_uint16_t yy_nxt[1831] =
+static yyconst flex_int16_t yy_nxt[1853] =
     {   0,
-     1395,   13,   14,   13, 1395,   15,   16, 1395,   17,   18,
+     1417,   13,   14,   13, 1417,   15,   16, 1417,   17,   18,
        19,   20,   21,   22,   22,   22,   23,   24,   86,  686,
-       37,   14,   37,   87,   25,   26,   38, 1395,  687,   27,
+       37,   14,   37,   87,   25,   26,   38, 1417,  687,   27,
        37,   14,   37,   42,   28,   42,   38,   92,   93,   29,
       115,   30,   13,   14,   13,   91,   92,   25,   31,   93,
        13,   14,   13,   13,   14,   13,   32,   40,  810,   13,
@@ -1079,62 +1068,62 @@ static yyconst flex_uint16_t yy_nxt[1831] =
       408,  408,  408,  408,  408,  408,  515,  606,  516,  469,
       701,  700,  612,  661,  740,  517,  705,  741,  816,  438,
 
-      702,  610,  706,  771,  439,  611,  792,  699,  817,  818,
+      702,  610,  706,  771,  439,  611,  792,  699,  817,  820,
       772,  773,  774,  515,  700,  516,   45,   45,   45,  775,
-      819,  820,  821,   45,   45,   45,   45,   45,   45,  778,
-      822,  823,  824,  825,  792,  779,  826,  827,  828,  829,
-      830,  831,  832,  833,  836,  837,   45,   45,   45,   45,
-       45,   45,  834,  838,  839,  840,  835,  841,  842,  843,
+      821,  822,  823,   45,   45,   45,   45,   45,   45,  778,
+      824,  818,  825,  826,  792,  779,  819,  827,  828,  829,
+      830,  831,  832,  833,  834,  837,   45,   45,   45,   45,
+       45,   45,  835,  838,  839,  840,  836,  841,  842,  843,
       844,  845,  846,  847,  848,  849,  850,  851,  852,  853,
       854,  855,  856,  857,  858,  859,  860,  861,  862,  863,
       864,  865,  866,  867,  868,  869,  870,  871,  872,  873,
       874,  875,  876,  877,  878,  879,  880,  881,  882,  883,
 
       884,  885,  886,  887,  888,  889,  890,  891,  892,  893,
-      894,  895,  896,  897,  898,  876,  899,  900,  875,  901,
-      902,  903,  906,  907,  908,  909,  904,  910,  911,  912,
+      894,  895,  896,  897,  898,  899,  877,  900,  901,  876,
+      902,  903,  904,  905,  908,  909,  910,  911,  906,  912,
       913,  914,  915,  916,  917,  918,  919,  920,  921,  922,
-      924,  925,  926,  927,  928,  929,  930,  931,  932,  933,
-      923,  934,  935,  936,  937,  938,  939,  940,  941,  942,
+      923,  924,  926,  927,  928,  929,  930,  931,  932,  933,
+      934,  935,  925,  936,  937,  938,  939,  940,  941,  942,
       943,  944,  945,  946,  947,  948,  949,  950,  951,  952,
-      953,  954,  955,  956,  958,  957,  959,  905,  960,  961,
+      953,  954,  955,  956,  957,  958,  960,  959,  961,  907,
       962,  963,  964,  965,  966,  967,  968,  969,  970,  971,
       972,  973,  974,  975,  976,  977,  978,  979,  980,  981,
 
-      982,  956,  957,  983,  985,  987,  988,  989,  984,  990,
-      991,  992,  993,  994,  995,  996,  997,  998,  999, 1000,
+      982,  983,  984,  958,  959,  985,  986,  988,  990,  991,
+      992,  987,  993,  994,  995,  996,  997,  998,  999, 1000,
      1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010,
      1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020,
-     1021, 1022, 1023, 1024, 1025, 1026,  986, 1027, 1028, 1029,
+     1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029,  989,
      1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039,
      1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049,
-     1050, 1051, 1052, 1053, 1054, 1032, 1055, 1056, 1057, 1058,
-     1059, 1033, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067,
+     1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1035, 1058,
+     1059, 1060, 1061, 1062, 1036, 1063, 1064, 1065, 1066, 1067,
      1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077,
 
-     1078, 1079, 1080, 1081, 1082, 1084, 1085, 1086, 1087, 1088,
+     1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1088,
      1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098,
-     1099, 1100, 1101, 1102, 1103, 1105, 1106, 1107, 1108, 1109,
+     1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1109,
      1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119,
-     1120, 1121, 1122, 1123, 1124, 1125, 1126, 1129, 1099, 1127,
-     1130, 1131, 1132, 1133, 1134, 1083, 1135, 1128, 1136, 1137,
-     1138, 1139, 1140, 1141, 1142, 1143, 1104, 1144, 1145, 1146,
-     1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1156, 1157,
-     1158, 1159, 1155, 1160, 1161, 1162, 1163, 1164, 1165, 1166,
+     1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129,
+     1130, 1131, 1103, 1132, 1134, 1135, 1136, 1137, 1138, 1087,
+     1139, 1133, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147,
+     1108, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156,
+     1157, 1158, 1159, 1161, 1162, 1163, 1164, 1160, 1165, 1166,
      1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176,
 
-     1177, 1178, 1157, 1179, 1180, 1181, 1182, 1183, 1184, 1185,
+     1177, 1178, 1179, 1180, 1181, 1182, 1183, 1162, 1184, 1185,
      1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195,
      1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205,
      1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215,
-     1216, 1217, 1218, 1220, 1221, 1222, 1223, 1224, 1225, 1226,
-     1227, 1228, 1201, 1229, 1230, 1231, 1232, 1233, 1234, 1235,
+     1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225,
+     1226, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1207, 1235,
      1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245,
      1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255,
      1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265,
-     1266, 1267, 1268, 1269, 1270, 1271, 1272, 1245, 1219, 1273,
+     1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275,
 
-     1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283,
+     1276, 1277, 1278, 1279, 1280, 1253, 1227, 1281, 1282, 1283,
      1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293,
      1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303,
      1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313,
@@ -1147,76 +1136,79 @@ static yyconst flex_uint16_t yy_nxt[1831] =
 
      1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383,
      1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393,
-     1394,   12,   12,   12,   12,   12,   36,   36,   36,   36,
-       36,   80,  290,   80,   80,   80,   99,  394,   99,  504,
-       99,  101,  101,  101,  101,  101,  116,  116,  116,  116,
-      116,  177,  101,  177,  177,  177,  199,  199,  199,  809,
-      808,  807,  806,  805,  804,  803,  802,  801,  800,  799,
-      798,  797,  796,  795,  794,  793,  791,  790,  789,  788,
-      787,  786,  785,  784,  783,  782,  781,  780,  777,  776,
-      770,  769,  768,  767,  766,  765,  764,  763,  762,  761,
-
-      760,  759,  758,  757,  756,  755,  754,  753,  752,  751,
-      750,  749,  748,  747,  746,  745,  744,  743,  742,  739,
-      738,  737,  736,  735,  734,  733,  732,  731,  730,  729,
-      728,  727,  726,  725,  724,  723,  722,  721,  720,  719,
-      718,  717,  716,  715,  714,  713,  712,  711,  710,  709,
-      708,  707,  704,  703,  698,  697,  696,  695,  694,  693,
-      692,  691,  690,  689,  688,  685,  684,  683,  682,  681,
-      680,  679,  678,  677,  676,  675,  674,  673,  672,  671,
-      670,  669,  668,  667,  666,  665,  664,  663,  662,  659,
-      658,  657,  656,  655,  654,  653,  652,  651,  650,  649,
-
-      648,  647,  646,  645,  644,  643,  642,  641,  640,  639,
-      638,  637,  636,  635,  634,  633,  632,  631,  630,  629,
-      628,  627,  626,  625,  624,  623,  622,  621,  620,  619,
-      618,  617,  616,  615,  614,  613,  609,  608,  607,  606,
-      605,  604,  603,  602,  601,  600,  599,  598,  597,  596,
-      595,  594,  593,  592,  591,  590,  589,  588,  587,  586,
-      585,  584,  583,  582,  581,  580,  579,  578,  577,  576,
-      575,  574,  573,  572,  571,  570,  569,  568,  567,  566,
-      565,  564,  563,  562,  561,  560,  559,  558,  557,  556,
-      555,  554,  553,  552,  551,  550,  549,  548,  547,  546,
-
-      545,  544,  543,  542,  541,  540,  537,  536,  535,  534,
-      533,  532,  531,  528,  527,  526,  525,  524,  523,  522,
-      521,  520,  519,  518,  514,  513,  512,  511,  510,  509,
-      508,  506,  505,  503,  502,  499,  498,  497,  496,  493,
-      492,  491,  490,  489,  488,  487,  486,  485,  482,  481,
-      480,  477,  476,  475,  474,  473,  472,  471,  470,  467,
-      466,  465,  464,  463,  462,  461,  460,  459,  458,  455,
-      454,  453,  452,  451,  448,  447,  446,  445,  444,  443,
-      442,  441,  440,  435,  434,  433,  432,  431,  430,  429,
-      428,  427,  426,  425,  422,  421,  420,  419,  416,  415,
-
-      414,  413,  412,  411,  410,  407,  406,  404,  403,  398,
-      393,  390,  387,  386,  385,  384,  382,  381,  380,  379,
-      378,  377,  376,  375,  374,  373,  372,  371,  370,  367,
-      366,  365,  364,  363,  362,  361,  360,  359,  358,  357,
-      356,  355,  351,  350,  349,  348,  347,  346,  345,  344,
-      340,  339,  338,  337,  336,  335,  334,  333,  332,  331,
-      330,  329,  328,  327,  326,  325,  324,  323,  322,  321,
-      320,  319,  318,  317,  316,  315,  314,  311,  310,  309,
-      308,  307,  306,  304,  200,  301,  299,  297,  294,  293,
-      291,  289,  282,  281,  280,  278,  277,  275,  274,  273,
-
-      272,  268,  256,  252,  249,  248,  247,  246,  245,  243,
-      242,  241,  240,  237,  236,  235,  234,  233,  232,  231,
-      230,  229,  225,  222,  219,  218,  217,  216,  213,  212,
-      211,  207,  206,  205,  204,  200,  193,  190,  189,  187,
-      185,  184,  176,  161,  142,  136,  121,  110,  107,  106,
-      104,   43,  100,   98,   97,   88,   43, 1395,   11, 1395,
-     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
-     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
-     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
-     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
-
-     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
-     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
-     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395
+     1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403,
+     1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413,
+     1414, 1415, 1416,   12,   12,   12,   12,   12,   36,   36,
+       36,   36,   36,   80,  290,   80,   80,   80,   99,  394,
+       99,  504,   99,  101,  101,  101,  101,  101,  116,  116,
+      116,  116,  116,  177,  101,  177,  177,  177,  199,  199,
+      199,  809,  808,  807,  806,  805,  804,  803,  802,  801,
+      800,  799,  798,  797,  796,  795,  794,  793,  791,  790,
+
+      789,  788,  787,  786,  785,  784,  783,  782,  781,  780,
+      777,  776,  770,  769,  768,  767,  766,  765,  764,  763,
+      762,  761,  760,  759,  758,  757,  756,  755,  754,  753,
+      752,  751,  750,  749,  748,  747,  746,  745,  744,  743,
+      742,  739,  738,  737,  736,  735,  734,  733,  732,  731,
+      730,  729,  728,  727,  726,  725,  724,  723,  722,  721,
+      720,  719,  718,  717,  716,  715,  714,  713,  712,  711,
+      710,  709,  708,  707,  704,  703,  698,  697,  696,  695,
+      694,  693,  692,  691,  690,  689,  688,  685,  684,  683,
+      682,  681,  680,  679,  678,  677,  676,  675,  674,  673,
+
+      672,  671,  670,  669,  668,  667,  666,  665,  664,  663,
+      662,  659,  658,  657,  656,  655,  654,  653,  652,  651,
+      650,  649,  648,  647,  646,  645,  644,  643,  642,  641,
+      640,  639,  638,  637,  636,  635,  634,  633,  632,  631,
+      630,  629,  628,  627,  626,  625,  624,  623,  622,  621,
+      620,  619,  618,  617,  616,  615,  614,  613,  609,  608,
+      607,  606,  605,  604,  603,  602,  601,  600,  599,  598,
+      597,  596,  595,  594,  593,  592,  591,  590,  589,  588,
+      587,  586,  585,  584,  583,  582,  581,  580,  579,  578,
+      577,  576,  575,  574,  573,  572,  571,  570,  569,  568,
+
+      567,  566,  565,  564,  563,  562,  561,  560,  559,  558,
+      557,  556,  555,  554,  553,  552,  551,  550,  549,  548,
+      547,  546,  545,  544,  543,  542,  541,  540,  537,  536,
+      535,  534,  533,  532,  531,  528,  527,  526,  525,  524,
+      523,  522,  521,  520,  519,  518,  514,  513,  512,  511,
+      510,  509,  508,  506,  505,  503,  502,  499,  498,  497,
+      496,  493,  492,  491,  490,  489,  488,  487,  486,  485,
+      482,  481,  480,  477,  476,  475,  474,  473,  472,  471,
+      470,  467,  466,  465,  464,  463,  462,  461,  460,  459,
+      458,  455,  454,  453,  452,  451,  448,  447,  446,  445,
+
+      444,  443,  442,  441,  440,  435,  434,  433,  432,  431,
+      430,  429,  428,  427,  426,  425,  422,  421,  420,  419,
+      416,  415,  414,  413,  412,  411,  410,  407,  406,  404,
+      403,  398,  393,  390,  387,  386,  385,  384,  382,  381,
+      380,  379,  378,  377,  376,  375,  374,  373,  372,  371,
+      370,  367,  366,  365,  364,  363,  362,  361,  360,  359,
+      358,  357,  356,  355,  351,  350,  349,  348,  347,  346,
+      345,  344,  340,  339,  338,  337,  336,  335,  334,  333,
+      332,  331,  330,  329,  328,  327,  326,  325,  324,  323,
+      322,  321,  320,  319,  318,  317,  316,  315,  314,  311,
+
+      310,  309,  308,  307,  306,  304,  200,  301,  299,  297,
+      294,  293,  291,  289,  282,  281,  280,  278,  277,  275,
+      274,  273,  272,  268,  256,  252,  249,  248,  247,  246,
+      245,  243,  242,  241,  240,  237,  236,  235,  234,  233,
+      232,  231,  230,  229,  225,  222,  219,  218,  217,  216,
+      213,  212,  211,  207,  206,  205,  204,  200,  193,  190,
+      189,  187,  185,  184,  176,  161,  142,  136,  121,  110,
+      107,  106,  104,   43,  100,   98,   97,   88,   43, 1417,
+       11, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417,
+     1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417,
+
+     1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417,
+     1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417,
+     1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417,
+     1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417,
+     1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417,
+     1417, 1417
     } ;
 
-static yyconst flex_int16_t yy_chk[1831] =
+static yyconst flex_int16_t yy_chk[1853] =
     {   0,
         0,    1,    1,    1,    0,    1,    1,    0,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,   21,  596,
@@ -1284,141 +1276,144 @@ static yyconst flex_int16_t yy_chk[1831] =
       303,  303,  303,  303,  303,  303,  407,  517,  407,  359,
       612,  611,  517,  568,  649,  409,  615,  649,  726,  331,
 
-      612,  515,  615,  681,  331,  516,  700,  610,  727,  728,
+      612,  515,  615,  681,  331,  516,  700,  610,  727,  729,
       681,  682,  682,  407,  611,  407,  408,  408,  408,  682,
-      729,  730,  731,  408,  408,  408,  408,  408,  408,  685,
-      732,  733,  734,  735,  700,  685,  738,  739,  740,  741,
-      744,  745,  746,  747,  749,  750,  408,  408,  408,  408,
-      408,  408,  748,  751,  752,  753,  748,  754,  756,  757,
-      758,  759,  760,  761,  762,  763,  764,  765,  766,  767,
-      768,  769,  770,  771,  772,  773,  774,  775,  776,  777,
-      778,  779,  781,  782,  783,  784,  785,  786,  787,  788,
-      789,  791,  792,  793,  794,  795,  796,  797,  798,  799,
-
-      800,  801,  802,  803,  804,  805,  806,  807,  809,  810,
-      811,  812,  813,  814,  815,  792,  816,  817,  791,  819,
-      820,  821,  822,  824,  825,  826,  821,  827,  828,  829,
-      830,  831,  832,  833,  834,  835,  836,  837,  838,  839,
-      840,  842,  843,  844,  845,  847,  848,  849,  850,  851,
-      839,  852,  853,  854,  855,  856,  857,  858,  859,  860,
-      861,  863,  864,  865,  866,  867,  868,  869,  870,  871,
-      872,  873,  874,  875,  877,  876,  878,  821,  879,  880,
-      881,  883,  884,  885,  886,  887,  888,  890,  891,  892,
-      893,  894,  895,  896,  897,  898,  899,  900,  901,  902,
-
-      904,  875,  876,  905,  906,  907,  908,  909,  905,  910,
-      911,  912,  913,  914,  915,  916,  917,  918,  919,  920,
-      921,  922,  923,  924,  925,  926,  927,  929,  930,  931,
-      932,  933,  934,  935,  936,  937,  938,  940,  941,  943,
-      944,  945,  946,  947,  948,  949,  906,  950,  951,  952,
-      953,  955,  956,  957,  958,  959,  960,  962,  963,  964,
-      965,  968,  969,  970,  971,  972,  973,  974,  975,  976,
-      977,  978,  979,  980,  982,  956,  984,  986,  987,  988,
-      989,  957,  990,  991,  992,  994,  995,  996,  997,  999,
-     1000, 1001, 1002, 1003, 1006, 1007, 1008, 1009, 1010, 1011,
-
-     1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021,
-     1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031,
-     1032, 1033, 1034, 1036, 1037, 1038, 1039, 1040, 1041, 1042,
-     1043, 1044, 1045, 1047, 1048, 1049, 1050, 1051, 1052, 1053,
-     1054, 1055, 1056, 1057, 1058, 1059, 1060, 1062, 1032, 1061,
-     1063, 1065, 1068, 1069, 1070, 1016, 1071, 1061, 1072, 1073,
-     1074, 1075, 1076, 1077, 1079, 1080, 1037, 1081, 1082, 1083,
-     1084, 1086, 1088, 1091, 1093, 1095, 1096, 1097, 1098, 1099,
-     1101, 1102, 1097, 1104, 1105, 1106, 1107, 1108, 1109, 1111,
-     1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1121, 1123,
-
-     1125, 1126, 1099, 1127, 1128, 1129, 1131, 1132, 1133, 1134,
-     1135, 1136, 1139, 1140, 1142, 1143, 1144, 1145, 1147, 1148,
-     1149, 1150, 1151, 1153, 1155, 1157, 1158, 1159, 1160, 1161,
-     1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171,
-     1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181,
-     1182, 1183, 1157, 1184, 1185, 1186, 1187, 1188, 1189, 1190,
-     1191, 1192, 1193, 1194, 1195, 1196, 1198, 1199, 1200, 1201,
-     1202, 1205, 1208, 1209, 1212, 1213, 1214, 1215, 1216, 1217,
-     1219, 1220, 1222, 1224, 1225, 1226, 1227, 1228, 1230, 1231,
-     1232, 1233, 1234, 1235, 1236, 1237, 1238, 1201, 1174, 1239,
-
-     1240, 1241, 1242, 1244, 1245, 1246, 1248, 1249, 1250, 1251,
-     1252, 1253, 1255, 1257, 1259, 1260, 1261, 1262, 1263, 1264,
-     1265, 1266, 1267, 1268, 1269, 1271, 1272, 1276, 1279, 1280,
-     1282, 1283, 1285, 1286, 1287, 1288, 1290, 1292, 1293, 1294,
-     1295, 1296, 1297, 1298, 1299, 1301, 1302, 1303, 1304, 1305,
-     1306, 1307, 1309, 1310, 1311, 1312, 1313, 1315, 1316, 1317,
-     1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1327, 1329,
-     1331, 1332, 1333, 1334, 1335, 1337, 1338, 1339, 1341, 1343,
-     1344, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355,
-     1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365,
-
-     1366, 1367, 1368, 1370, 1372, 1373, 1374, 1375, 1376, 1380,
-     1381, 1382, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1392,
-     1393, 1396, 1396, 1396, 1396, 1396, 1397, 1397, 1397, 1397,
-     1397, 1398, 1404, 1398, 1398, 1398, 1399, 1405, 1399, 1406,
-     1399, 1400, 1400, 1400, 1400, 1400, 1401, 1401, 1401, 1401,
-     1401, 1402, 1407, 1402, 1402, 1402, 1403, 1403, 1403,  718,
-      717,  716,  715,  714,  713,  712,  711,  710,  709,  708,
-      706,  705,  704,  703,  702,  701,  699,  697,  696,  695,
-      694,  693,  692,  691,  690,  689,  688,  687,  684,  683,
-      680,  679,  678,  677,  676,  675,  674,  673,  672,  671,
-
-      670,  669,  668,  667,  666,  665,  664,  663,  662,  661,
-      659,  658,  657,  656,  655,  654,  653,  652,  650,  648,
-      647,  646,  645,  644,  643,  642,  641,  640,  639,  638,
-      637,  636,  635,  634,  633,  632,  631,  630,  629,  628,
-      627,  626,  625,  624,  623,  622,  621,  620,  619,  618,
-      617,  616,  614,  613,  609,  608,  607,  605,  604,  602,
-      601,  600,  599,  598,  597,  594,  593,  592,  591,  590,
-      589,  588,  587,  586,  585,  584,  582,  581,  580,  579,
-      578,  577,  576,  575,  574,  572,  571,  570,  569,  567,
-      566,  565,  564,  563,  562,  561,  559,  558,  557,  556,
-
-      555,  554,  553,  552,  551,  550,  549,  548,  547,  546,
-      545,  544,  543,  542,  541,  540,  539,  537,  536,  535,
-      534,  533,  532,  531,  530,  529,  528,  527,  526,  525,
-      524,  523,  522,  521,  520,  519,  513,  511,  508,  507,
-      506,  505,  503,  502,  501,  499,  498,  495,  494,  493,
-      492,  491,  490,  489,  488,  487,  486,  485,  484,  483,
-      482,  481,  480,  479,  478,  477,  476,  475,  474,  473,
-      472,  471,  469,  467,  466,  465,  464,  463,  462,  461,
-      460,  459,  458,  457,  456,  454,  453,  452,  451,  450,
-      449,  448,  447,  446,  445,  444,  443,  442,  441,  440,
-
-      439,  438,  437,  435,  434,  433,  431,  430,  429,  428,
-      427,  425,  424,  422,  421,  419,  418,  417,  416,  415,
-      413,  412,  411,  410,  405,  404,  402,  401,  400,  399,
-      398,  396,  395,  393,  390,  388,  387,  385,  384,  382,
-      381,  380,  379,  378,  377,  376,  375,  374,  372,  371,
-      370,  368,  367,  366,  365,  363,  362,  361,  360,  358,
-      357,  356,  355,  354,  353,  352,  351,  350,  348,  346,
-      345,  344,  343,  342,  340,  339,  338,  337,  336,  335,
-      334,  333,  332,  330,  329,  328,  327,  326,  325,  324,
-      323,  322,  321,  320,  318,  317,  316,  315,  312,  311,
-
-      310,  309,  308,  307,  306,  302,  300,  297,  296,  293,
-      289,  282,  280,  279,  278,  277,  275,  274,  273,  272,
-      271,  270,  269,  268,  267,  266,  265,  264,  263,  261,
-      260,  259,  258,  257,  256,  255,  254,  253,  252,  251,
-      250,  249,  247,  246,  245,  244,  243,  242,  241,  240,
-      238,  237,  236,  235,  234,  233,  232,  231,  229,  228,
-      227,  226,  225,  224,  223,  222,  221,  220,  219,  218,
-      217,  216,  215,  214,  213,  212,  211,  209,  208,  207,
-      206,  205,  204,  202,  199,  197,  195,  193,  190,  189,
-      187,  184,  176,  175,  174,  172,  171,  169,  168,  167,
-
-      166,  164,  161,  159,  157,  156,  155,  154,  153,  151,
-      150,  149,  148,  146,  145,  144,  143,  142,  141,  140,
-      139,  138,  136,  134,  132,  131,  130,  129,  127,  126,
-      125,  123,  122,  121,  120,  116,  110,  107,  106,  104,
-       99,   98,   79,   74,   68,   65,   60,   53,   50,   49,
-       47,   43,   41,   39,   38,   24,   14,   11, 1395, 1395,
-     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
-     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
-     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
-     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
-
-     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
-     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
-     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395
+      730,  731,  732,  408,  408,  408,  408,  408,  408,  685,
+      733,  728,  734,  735,  700,  685,  728,  738,  739,  740,
+      741,  744,  745,  746,  747,  749,  408,  408,  408,  408,
+      408,  408,  748,  750,  751,  752,  748,  753,  754,  756,
+      757,  758,  759,  760,  761,  762,  763,  764,  765,  766,
+      767,  768,  769,  770,  771,  772,  773,  774,  775,  776,
+      777,  778,  779,  781,  782,  783,  784,  785,  786,  787,
+      788,  789,  791,  792,  793,  794,  795,  796,  797,  798,
+
+      799,  800,  801,  802,  803,  804,  805,  806,  807,  809,
+      810,  811,  812,  813,  814,  815,  792,  816,  817,  791,
+      819,  820,  821,  822,  823,  825,  826,  827,  822,  828,
+      829,  830,  831,  832,  833,  834,  835,  836,  837,  838,
+      839,  840,  841,  843,  844,  845,  846,  848,  849,  850,
+      851,  852,  840,  853,  854,  855,  856,  857,  858,  859,
+      860,  861,  862,  864,  865,  866,  867,  868,  869,  870,
+      871,  872,  873,  874,  875,  876,  878,  877,  879,  822,
+      880,  881,  882,  884,  885,  886,  887,  888,  889,  891,
+      892,  893,  894,  895,  896,  897,  898,  899,  900,  901,
+
+      902,  903,  904,  876,  877,  906,  907,  908,  909,  910,
+      911,  907,  912,  913,  914,  915,  916,  917,  918,  919,
+      920,  921,  922,  923,  924,  925,  926,  927,  928,  929,
+      931,  932,  933,  934,  935,  936,  937,  938,  939,  940,
+      942,  943,  945,  946,  947,  948,  949,  950,  951,  908,
+      952,  953,  954,  955,  957,  958,  959,  960,  961,  962,
+      964,  965,  966,  967,  970,  971,  972,  973,  974,  975,
+      976,  977,  978,  979,  980,  981,  982,  983,  958,  985,
+      987,  989,  990,  991,  959,  992,  993,  994,  995,  997,
+      998,  999, 1000, 1002, 1003, 1004, 1005, 1006, 1009, 1010,
+
+     1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020,
+     1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030,
+     1031, 1032, 1033, 1034, 1035, 1036, 1037, 1039, 1040, 1041,
+     1042, 1043, 1044, 1045, 1046, 1047, 1048, 1050, 1051, 1052,
+     1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062,
+     1063, 1064, 1035, 1065, 1066, 1067, 1069, 1072, 1073, 1019,
+     1074, 1065, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1083,
+     1040, 1084, 1085, 1086, 1087, 1088, 1090, 1092, 1095, 1097,
+     1099, 1100, 1101, 1102, 1103, 1105, 1106, 1101, 1108, 1109,
+     1110, 1111, 1112, 1113, 1115, 1116, 1117, 1118, 1119, 1120,
+
+     1121, 1122, 1123, 1124, 1126, 1128, 1130, 1103, 1131, 1132,
+     1133, 1134, 1136, 1137, 1138, 1139, 1140, 1141, 1144, 1145,
+     1147, 1148, 1149, 1150, 1152, 1153, 1154, 1155, 1156, 1158,
+     1160, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170,
+     1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1179,
+     1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1162, 1188,
+     1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198,
+     1199, 1200, 1201, 1202, 1204, 1205, 1206, 1207, 1208, 1211,
+     1214, 1215, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225,
+     1227, 1228, 1230, 1232, 1233, 1234, 1235, 1236, 1238, 1239,
+
+     1240, 1241, 1242, 1243, 1244, 1207, 1180, 1245, 1246, 1247,
+     1248, 1249, 1250, 1252, 1253, 1254, 1256, 1257, 1258, 1259,
+     1260, 1261, 1263, 1264, 1265, 1267, 1269, 1270, 1271, 1272,
+     1273, 1274, 1275, 1276, 1277, 1278, 1279, 1281, 1282, 1286,
+     1289, 1290, 1292, 1293, 1295, 1296, 1297, 1298, 1299, 1300,
+     1302, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1313,
+     1314, 1315, 1316, 1317, 1318, 1319, 1320, 1323, 1324, 1325,
+     1326, 1327, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336,
+     1337, 1338, 1339, 1340, 1342, 1344, 1346, 1347, 1348, 1349,
+     1350, 1352, 1353, 1354, 1356, 1357, 1359, 1360, 1363, 1364,
+
+     1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374,
+     1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384,
+     1385, 1386, 1387, 1389, 1391, 1392, 1393, 1394, 1395, 1396,
+     1400, 1401, 1402, 1403, 1405, 1406, 1408, 1409, 1410, 1411,
+     1412, 1414, 1415, 1418, 1418, 1418, 1418, 1418, 1419, 1419,
+     1419, 1419, 1419, 1420, 1426, 1420, 1420, 1420, 1421, 1427,
+     1421, 1428, 1421, 1422, 1422, 1422, 1422, 1422, 1423, 1423,
+     1423, 1423, 1423, 1424, 1429, 1424, 1424, 1424, 1425, 1425,
+     1425,  718,  717,  716,  715,  714,  713,  712,  711,  710,
+      709,  708,  706,  705,  704,  703,  702,  701,  699,  697,
+
+      696,  695,  694,  693,  692,  691,  690,  689,  688,  687,
+      684,  683,  680,  679,  678,  677,  676,  675,  674,  673,
+      672,  671,  670,  669,  668,  667,  666,  665,  664,  663,
+      662,  661,  659,  658,  657,  656,  655,  654,  653,  652,
+      650,  648,  647,  646,  645,  644,  643,  642,  641,  640,
+      639,  638,  637,  636,  635,  634,  633,  632,  631,  630,
+      629,  628,  627,  626,  625,  624,  623,  622,  621,  620,
+      619,  618,  617,  616,  614,  613,  609,  608,  607,  605,
+      604,  602,  601,  600,  599,  598,  597,  594,  593,  592,
+      591,  590,  589,  588,  587,  586,  585,  584,  582,  581,
+
+      580,  579,  578,  577,  576,  575,  574,  572,  571,  570,
+      569,  567,  566,  565,  564,  563,  562,  561,  559,  558,
+      557,  556,  555,  554,  553,  552,  551,  550,  549,  548,
+      547,  546,  545,  544,  543,  542,  541,  540,  539,  537,
+      536,  535,  534,  533,  532,  531,  530,  529,  528,  527,
+      526,  525,  524,  523,  522,  521,  520,  519,  513,  511,
+      508,  507,  506,  505,  503,  502,  501,  499,  498,  495,
+      494,  493,  492,  491,  490,  489,  488,  487,  486,  485,
+      484,  483,  482,  481,  480,  479,  478,  477,  476,  475,
+      474,  473,  472,  471,  469,  467,  466,  465,  464,  463,
+
+      462,  461,  460,  459,  458,  457,  456,  454,  453,  452,
+      451,  450,  449,  448,  447,  446,  445,  444,  443,  442,
+      441,  440,  439,  438,  437,  435,  434,  433,  431,  430,
+      429,  428,  427,  425,  424,  422,  421,  419,  418,  417,
+      416,  415,  413,  412,  411,  410,  405,  404,  402,  401,
+      400,  399,  398,  396,  395,  393,  390,  388,  387,  385,
+      384,  382,  381,  380,  379,  378,  377,  376,  375,  374,
+      372,  371,  370,  368,  367,  366,  365,  363,  362,  361,
+      360,  358,  357,  356,  355,  354,  353,  352,  351,  350,
+      348,  346,  345,  344,  343,  342,  340,  339,  338,  337,
+
+      336,  335,  334,  333,  332,  330,  329,  328,  327,  326,
+      325,  324,  323,  322,  321,  320,  318,  317,  316,  315,
+      312,  311,  310,  309,  308,  307,  306,  302,  300,  297,
+      296,  293,  289,  282,  280,  279,  278,  277,  275,  274,
+      273,  272,  271,  270,  269,  268,  267,  266,  265,  264,
+      263,  261,  260,  259,  258,  257,  256,  255,  254,  253,
+      252,  251,  250,  249,  247,  246,  245,  244,  243,  242,
+      241,  240,  238,  237,  236,  235,  234,  233,  232,  231,
+      229,  228,  227,  226,  225,  224,  223,  222,  221,  220,
+      219,  218,  217,  216,  215,  214,  213,  212,  211,  209,
+
+      208,  207,  206,  205,  204,  202,  199,  197,  195,  193,
+      190,  189,  187,  184,  176,  175,  174,  172,  171,  169,
+      168,  167,  166,  164,  161,  159,  157,  156,  155,  154,
+      153,  151,  150,  149,  148,  146,  145,  144,  143,  142,
+      141,  140,  139,  138,  136,  134,  132,  131,  130,  129,
+      127,  126,  125,  123,  122,  121,  120,  116,  110,  107,
+      106,  104,   99,   98,   79,   74,   68,   65,   60,   53,
+       50,   49,   47,   43,   41,   39,   38,   24,   14,   11,
+     1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417,
+     1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417,
+
+     1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417,
+     1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417,
+     1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417,
+     1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417,
+     1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417,
+     1417, 1417
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1427,7 +1422,7 @@ static char *yy_last_accepting_cpos;
 extern int parser4__flex_debug;
 int parser4__flex_debug = 1;
 
-static yyconst flex_int16_t yy_rule_linenum[168] =
+static yyconst flex_int16_t yy_rule_linenum[170] =
     {   0,
       144,  146,  148,  153,  154,  159,  160,  161,  173,  176,
       181,  188,  197,  206,  215,  224,  234,  243,  252,  261,
@@ -1443,10 +1438,10 @@ static yyconst flex_int16_t yy_rule_linenum[168] =
      1064, 1074, 1083, 1092, 1101, 1110, 1119, 1128, 1137, 1146,
      1155, 1164, 1173, 1182, 1191, 1200, 1209, 1218, 1227, 1236,
      1245, 1254, 1263, 1272, 1281, 1290, 1299, 1308, 1317, 1326,
-     1336, 1346, 1356, 1366, 1376, 1386, 1396, 1406, 1416, 1425,
-     1434, 1443, 1452, 1461, 1470, 1479, 1490, 1503, 1516, 1531,
-     1630, 1635, 1640, 1645, 1646, 1647, 1648, 1649, 1650, 1652,
-     1670, 1683, 1688, 1692, 1694, 1696, 1698
+     1335, 1344, 1354, 1364, 1374, 1384, 1394, 1404, 1414, 1424,
+     1434, 1443, 1452, 1461, 1470, 1479, 1488, 1497, 1508, 1521,
+     1534, 1549, 1648, 1653, 1658, 1663, 1664, 1665, 1666, 1667,
+     1668, 1670, 1688, 1701, 1706, 1710, 1712, 1714, 1716
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -1525,7 +1520,7 @@ using namespace isc::dhcp;
    by moving it ahead by parser4_leng bytes. parser4_leng specifies the length of the
    currently matched token. */
 #define YY_USER_ACTION  driver.loc_.columns(parser4_leng);
-#line 1529 "dhcp4_lexer.cc"
+#line 1524 "dhcp4_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -1575,11 +1570,11 @@ void parser4_set_extra (YY_EXTRA_TYPE user_defined  );
 
 FILE *parser4_get_in (void );
 
-void parser4_set_in  (FILE * _in_str  );
+void parser4_set_in  (FILE * in_str  );
 
 FILE *parser4_get_out (void );
 
-void parser4_set_out  (FILE * _out_str  );
+void parser4_set_out  (FILE * out_str  );
 
 yy_size_t parser4_get_leng (void );
 
@@ -1587,7 +1582,7 @@ char *parser4_get_text (void );
 
 int parser4_get_lineno (void );
 
-void parser4_set_lineno (int _line_number  );
+void parser4_set_lineno (int line_number  );
 
 /* %if-bison-bridge */
 /* %endif */
@@ -1606,9 +1601,6 @@ extern int parser4_wrap (void );
 
 /* %not-for-header */
 
-#ifndef YY_NO_UNPUT
-    
-#endif
 /* %ok-for-header */
 
 /* %endif */
@@ -1641,12 +1633,7 @@ static int input (void );
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k */
-#define YY_READ_BUF_SIZE 16384
-#else
 #define YY_READ_BUF_SIZE 8192
-#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -1759,7 +1746,7 @@ extern int parser4_lex (void);
 
 /* Code executed at the end of each rule. */
 #ifndef YY_BREAK
-#define YY_BREAK /*LINTED*/break;
+#define YY_BREAK break;
 #endif
 
 /* %% [6.0] YY_RULE_SETUP definition goes here */
@@ -1772,45 +1759,10 @@ extern int parser4_lex (void);
  */
 YY_DECL
 {
-       yy_state_type yy_current_state;
-       char *yy_cp, *yy_bp;
-       int yy_act;
+       register yy_state_type yy_current_state;
+       register char *yy_cp, *yy_bp;
+       register int yy_act;
     
-       if ( !(yy_init) )
-               {
-               (yy_init) = 1;
-
-#ifdef YY_USER_INIT
-               YY_USER_INIT;
-#endif
-
-               if ( ! (yy_start) )
-                       (yy_start) = 1; /* first start state */
-
-               if ( ! parser4_in )
-/* %if-c-only */
-                       parser4_in = stdin;
-/* %endif */
-/* %if-c++-only */
-/* %endif */
-
-               if ( ! parser4_out )
-/* %if-c-only */
-                       parser4_out = stdout;
-/* %endif */
-/* %if-c++-only */
-/* %endif */
-
-               if ( ! YY_CURRENT_BUFFER ) {
-                       parser4_ensure_buffer_stack ();
-                       YY_CURRENT_BUFFER_LVALUE =
-                               parser4__create_buffer(parser4_in,YY_BUF_SIZE );
-               }
-
-               parser4__load_buffer_state( );
-               }
-
-       {
 /* %% [7.0] user's declarations go here */
 #line 100 "dhcp4_lexer.ll"
 
@@ -1857,9 +1809,43 @@ YY_DECL
     }
 
 
-#line 1861 "dhcp4_lexer.cc"
+#line 1813 "dhcp4_lexer.cc"
+
+       if ( !(yy_init) )
+               {
+               (yy_init) = 1;
+
+#ifdef YY_USER_INIT
+               YY_USER_INIT;
+#endif
+
+               if ( ! (yy_start) )
+                       (yy_start) = 1; /* first start state */
+
+               if ( ! parser4_in )
+/* %if-c-only */
+                       parser4_in = stdin;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+               if ( ! parser4_out )
+/* %if-c-only */
+                       parser4_out = stdout;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+               if ( ! YY_CURRENT_BUFFER ) {
+                       parser4_ensure_buffer_stack ();
+                       YY_CURRENT_BUFFER_LVALUE =
+                               parser4__create_buffer(parser4_in,YY_BUF_SIZE );
+               }
+
+               parser4__load_buffer_state( );
+               }
 
-       while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
+       while ( 1 )             /* loops until end-of-file is reached */
                {
 /* %% [8.0] yymore()-related code goes here */
                yy_cp = (yy_c_buf_p);
@@ -1877,7 +1863,7 @@ YY_DECL
 yy_match:
                do
                        {
-                       YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
+                       register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
                        if ( yy_accept[yy_current_state] )
                                {
                                (yy_last_accepting_state) = yy_current_state;
@@ -1886,13 +1872,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 >= 1396 )
+                               if ( yy_current_state >= 1418 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 1395 );
+               while ( yy_current_state != 1417 );
                yy_cp = (yy_last_accepting_cpos);
                yy_current_state = (yy_last_accepting_state);
 
@@ -1911,13 +1897,13 @@ do_action:      /* This label is used only to access EOF actions. */
                        {
                        if ( yy_act == 0 )
                                fprintf( stderr, "--scanner backing up\n" );
-                       else if ( yy_act < 168 )
+                       else if ( yy_act < 170 )
                                fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
                                         (long)yy_rule_linenum[yy_act], parser4_text );
-                       else if ( yy_act == 168 )
+                       else if ( yy_act == 170 )
                                fprintf( stderr, "--accepting default rule (\"%s\")\n",
                                         parser4_text );
-                       else if ( yy_act == 169 )
+                       else if ( yy_act == 171 )
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
                                fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -3515,6 +3501,30 @@ YY_RULE_SETUP
 case 130:
 YY_RULE_SETUP
 #line 1326 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::DHCP_DDNS:
+        return isc::dhcp::Dhcp4Parser::make_HOSTNAME_CHAR_SET(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("hostname-char-set", driver.loc_);
+    }
+}
+       YY_BREAK
+case 131:
+YY_RULE_SETUP
+#line 1335 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::DHCP_DDNS:
+        return isc::dhcp::Dhcp4Parser::make_HOSTNAME_CHAR_REPLACEMENT(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("hostname-char-replacement", driver.loc_);
+    }
+}
+       YY_BREAK
+case 132:
+YY_RULE_SETUP
+#line 1344 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) {
@@ -3525,9 +3535,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 131:
+case 133:
 YY_RULE_SETUP
-#line 1336 "dhcp4_lexer.ll"
+#line 1354 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) {
@@ -3538,9 +3548,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 132:
+case 134:
 YY_RULE_SETUP
-#line 1346 "dhcp4_lexer.ll"
+#line 1364 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_FORMAT) {
@@ -3551,9 +3561,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 133:
+case 135:
 YY_RULE_SETUP
-#line 1356 "dhcp4_lexer.ll"
+#line 1374 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -3564,9 +3574,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 134:
+case 136:
 YY_RULE_SETUP
-#line 1366 "dhcp4_lexer.ll"
+#line 1384 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -3577,9 +3587,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 135:
+case 137:
 YY_RULE_SETUP
-#line 1376 "dhcp4_lexer.ll"
+#line 1394 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -3590,9 +3600,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 136:
+case 138:
 YY_RULE_SETUP
-#line 1386 "dhcp4_lexer.ll"
+#line 1404 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -3603,9 +3613,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 137:
+case 139:
 YY_RULE_SETUP
-#line 1396 "dhcp4_lexer.ll"
+#line 1414 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -3616,9 +3626,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 138:
+case 140:
 YY_RULE_SETUP
-#line 1406 "dhcp4_lexer.ll"
+#line 1424 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -3629,9 +3639,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 139:
+case 141:
 YY_RULE_SETUP
-#line 1416 "dhcp4_lexer.ll"
+#line 1434 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -3641,9 +3651,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 140:
+case 142:
 YY_RULE_SETUP
-#line 1425 "dhcp4_lexer.ll"
+#line 1443 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -3653,9 +3663,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 141:
+case 143:
 YY_RULE_SETUP
-#line 1434 "dhcp4_lexer.ll"
+#line 1452 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -3665,9 +3675,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 142:
+case 144:
 YY_RULE_SETUP
-#line 1443 "dhcp4_lexer.ll"
+#line 1461 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3677,9 +3687,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 143:
+case 145:
 YY_RULE_SETUP
-#line 1452 "dhcp4_lexer.ll"
+#line 1470 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3689,9 +3699,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 144:
+case 146:
 YY_RULE_SETUP
-#line 1461 "dhcp4_lexer.ll"
+#line 1479 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3701,9 +3711,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 145:
+case 147:
 YY_RULE_SETUP
-#line 1470 "dhcp4_lexer.ll"
+#line 1488 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3713,9 +3723,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 146:
+case 148:
 YY_RULE_SETUP
-#line 1479 "dhcp4_lexer.ll"
+#line 1497 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3727,9 +3737,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 147:
+case 149:
 YY_RULE_SETUP
-#line 1490 "dhcp4_lexer.ll"
+#line 1508 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3743,9 +3753,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 148:
+case 150:
 YY_RULE_SETUP
-#line 1503 "dhcp4_lexer.ll"
+#line 1521 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3759,9 +3769,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 149:
+case 151:
 YY_RULE_SETUP
-#line 1516 "dhcp4_lexer.ll"
+#line 1534 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3775,9 +3785,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 150:
+case 152:
 YY_RULE_SETUP
-#line 1531 "dhcp4_lexer.ll"
+#line 1549 "dhcp4_lexer.ll"
 {
     /* A string has been matched. It contains the actual string and single quotes.
        We need to get those quotes out of the way and just use its content, e.g.
@@ -3877,65 +3887,65 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(decoded, driver.loc_);
 }
        YY_BREAK
-case 151:
-/* rule 151 can match eol */
+case 153:
+/* rule 153 can match eol */
 YY_RULE_SETUP
-#line 1630 "dhcp4_lexer.ll"
+#line 1648 "dhcp4_lexer.ll"
 {
     /* Bad string with a forbidden control character inside */
     driver.error(driver.loc_, "Invalid control in " + std::string(parser4_text));
 }
        YY_BREAK
-case 152:
-/* rule 152 can match eol */
+case 154:
+/* rule 154 can match eol */
 YY_RULE_SETUP
-#line 1635 "dhcp4_lexer.ll"
+#line 1653 "dhcp4_lexer.ll"
 {
     /* Bad string with a bad escape inside */
     driver.error(driver.loc_, "Bad escape in " + std::string(parser4_text));
 }
        YY_BREAK
-case 153:
+case 155:
 YY_RULE_SETUP
-#line 1640 "dhcp4_lexer.ll"
+#line 1658 "dhcp4_lexer.ll"
 {
     /* Bad string with an open escape at the end */
     driver.error(driver.loc_, "Overflow escape in " + std::string(parser4_text));
 }
        YY_BREAK
-case 154:
+case 156:
 YY_RULE_SETUP
-#line 1645 "dhcp4_lexer.ll"
+#line 1663 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_LSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 155:
+case 157:
 YY_RULE_SETUP
-#line 1646 "dhcp4_lexer.ll"
+#line 1664 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_RSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 156:
+case 158:
 YY_RULE_SETUP
-#line 1647 "dhcp4_lexer.ll"
+#line 1665 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_LCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 157:
+case 159:
 YY_RULE_SETUP
-#line 1648 "dhcp4_lexer.ll"
+#line 1666 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_RCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 158:
+case 160:
 YY_RULE_SETUP
-#line 1649 "dhcp4_lexer.ll"
+#line 1667 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_COMMA(driver.loc_); }
        YY_BREAK
-case 159:
+case 161:
 YY_RULE_SETUP
-#line 1650 "dhcp4_lexer.ll"
+#line 1668 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_COLON(driver.loc_); }
        YY_BREAK
-case 160:
+case 162:
 YY_RULE_SETUP
-#line 1652 "dhcp4_lexer.ll"
+#line 1670 "dhcp4_lexer.ll"
 {
     /* An integer was found. */
     std::string tmp(parser4_text);
@@ -3954,9 +3964,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_INTEGER(integer, driver.loc_);
 }
        YY_BREAK
-case 161:
+case 163:
 YY_RULE_SETUP
-#line 1670 "dhcp4_lexer.ll"
+#line 1688 "dhcp4_lexer.ll"
 {
     /* A floating point was found. */
     std::string tmp(parser4_text);
@@ -3970,43 +3980,43 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_FLOAT(fp, driver.loc_);
 }
        YY_BREAK
-case 162:
+case 164:
 YY_RULE_SETUP
-#line 1683 "dhcp4_lexer.ll"
+#line 1701 "dhcp4_lexer.ll"
 {
     string tmp(parser4_text);
     return isc::dhcp::Dhcp4Parser::make_BOOLEAN(tmp == "true", driver.loc_);
 }
        YY_BREAK
-case 163:
+case 165:
 YY_RULE_SETUP
-#line 1688 "dhcp4_lexer.ll"
+#line 1706 "dhcp4_lexer.ll"
 {
    return isc::dhcp::Dhcp4Parser::make_NULL_TYPE(driver.loc_);
 }
        YY_BREAK
-case 164:
+case 166:
 YY_RULE_SETUP
-#line 1692 "dhcp4_lexer.ll"
+#line 1710 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
        YY_BREAK
-case 165:
+case 167:
 YY_RULE_SETUP
-#line 1694 "dhcp4_lexer.ll"
+#line 1712 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
        YY_BREAK
-case 166:
+case 168:
 YY_RULE_SETUP
-#line 1696 "dhcp4_lexer.ll"
+#line 1714 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
        YY_BREAK
-case 167:
+case 169:
 YY_RULE_SETUP
-#line 1698 "dhcp4_lexer.ll"
+#line 1716 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "Invalid character: " + std::string(parser4_text));
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 1700 "dhcp4_lexer.ll"
+#line 1718 "dhcp4_lexer.ll"
 {
     if (driver.states_.empty()) {
         return isc::dhcp::Dhcp4Parser::make_END(driver.loc_);
@@ -4030,12 +4040,12 @@ case YY_STATE_EOF(INITIAL):
     BEGIN(DIR_EXIT);
 }
        YY_BREAK
-case 168:
+case 170:
 YY_RULE_SETUP
-#line 1723 "dhcp4_lexer.ll"
+#line 1741 "dhcp4_lexer.ll"
 ECHO;
        YY_BREAK
-#line 4039 "dhcp4_lexer.cc"
+#line 4049 "dhcp4_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -4058,11 +4068,7 @@ ECHO;
                         * back-up) that will match for the new input source.
                         */
                        (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-/* %if-c-only */
                        YY_CURRENT_BUFFER_LVALUE->yy_input_file = parser4_in;
-/* %endif */
-/* %if-c++-only */
-/* %endif */
                        YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
                        }
 
@@ -4170,7 +4176,6 @@ ECHO;
                        "fatal flex scanner internal error--no action found" );
        } /* end of action switch */
                } /* end of scanning one token */
-       } /* end of user's declarations */
 } /* end of parser4_lex */
 /* %ok-for-header */
 
@@ -4194,9 +4199,9 @@ static int yy_get_next_buffer (void)
 /* %if-c++-only */
 /* %endif */
 {
-       char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-       char *source = (yytext_ptr);
-       yy_size_t number_to_move, i;
+       register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+       register char *source = (yytext_ptr);
+       register int number_to_move, i;
        int ret_val;
 
        if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
@@ -4225,7 +4230,7 @@ static int yy_get_next_buffer (void)
        /* Try to read more data. */
 
        /* First move last chars to start of buffer. */
-       number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+       number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
 
        for ( i = 0; i < number_to_move; ++i )
                *(dest++) = *(source++);
@@ -4307,9 +4312,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 *) parser4_realloc((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()" );
@@ -4334,8 +4339,8 @@ static int yy_get_next_buffer (void)
 /* %if-c++-only */
 /* %endif */
 {
-       yy_state_type yy_current_state;
-       char *yy_cp;
+       register yy_state_type yy_current_state;
+       register char *yy_cp;
     
 /* %% [15.0] code to get the start state into yy_current_state goes here */
        yy_current_state = (yy_start);
@@ -4343,7 +4348,7 @@ static int yy_get_next_buffer (void)
        for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
                {
 /* %% [16.0] code to find the next state goes here */
-               YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+               register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
                if ( yy_accept[yy_current_state] )
                        {
                        (yy_last_accepting_state) = yy_current_state;
@@ -4352,7 +4357,7 @@ static int yy_get_next_buffer (void)
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 1396 )
+                       if ( yy_current_state >= 1418 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -4372,11 +4377,11 @@ static int yy_get_next_buffer (void)
 /* %if-c++-only */
 /* %endif */
 {
-       int yy_is_jam;
+       register int yy_is_jam;
     /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */
-       char *yy_cp = (yy_c_buf_p);
+       register char *yy_cp = (yy_c_buf_p);
 
-       YY_CHAR yy_c = 1;
+       register YY_CHAR yy_c = 1;
        if ( yy_accept[yy_current_state] )
                {
                (yy_last_accepting_state) = yy_current_state;
@@ -4385,20 +4390,18 @@ 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 >= 1396 )
+               if ( yy_current_state >= 1418 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 1395);
+       yy_is_jam = (yy_current_state == 1417);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
 
-#ifndef YY_NO_UNPUT
 /* %if-c-only */
 
 /* %endif */
-#endif
 
 /* %if-c-only */
 #ifndef YY_NO_INPUT
@@ -4504,9 +4507,6 @@ static int yy_get_next_buffer (void)
        parser4__load_buffer_state( );
 }
 
-/* %if-c++-only */
-/* %endif */
-
 /** Switch to a different input buffer.
  * @param new_buffer The new input buffer.
  * 
@@ -4554,11 +4554,7 @@ static void parser4__load_buffer_state  (void)
 {
        (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
        (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
-/* %if-c-only */
        parser4_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
-/* %endif */
-/* %if-c++-only */
-/* %endif */
        (yy_hold_char) = *(yy_c_buf_p);
 }
 
@@ -4580,7 +4576,7 @@ static void parser4__load_buffer_state  (void)
        if ( ! b )
                YY_FATAL_ERROR( "out of dynamic memory in parser4__create_buffer()" );
 
-       b->yy_buf_size = (yy_size_t)size;
+       b->yy_buf_size = size;
 
        /* yy_ch_buf has to be 2 characters longer than the size given because
         * we need to put in 2 end-of-buffer characters.
@@ -4596,9 +4592,6 @@ static void parser4__load_buffer_state  (void)
        return b;
 }
 
-/* %if-c++-only */
-/* %endif */
-
 /** Destroy the buffer.
  * @param b a buffer created with parser4__create_buffer()
  * 
@@ -4637,11 +4630,7 @@ static void parser4__load_buffer_state  (void)
     
        parser4__flush_buffer(b );
 
-/* %if-c-only */
        b->yy_input_file = file;
-/* %endif */
-/* %if-c++-only */
-/* %endif */
        b->yy_fill_buffer = 1;
 
     /* If b is the current buffer, then parser4__init_buffer was _probably_
@@ -4776,7 +4765,7 @@ static void parser4_ensure_buffer_stack (void)
                 * scanner will even need a stack. We use 2 instead of 1 to avoid an
                 * immediate realloc on the next call.
          */
-               num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
+               num_to_alloc = 1;
                (yy_buffer_stack) = (struct yy_buffer_state**)parser4_alloc
                                                                (num_to_alloc * sizeof(struct yy_buffer_state*)
                                                                );
@@ -4793,7 +4782,7 @@ static void parser4_ensure_buffer_stack (void)
        if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
 
                /* Increase the buffer to prepare for a possible push. */
-               yy_size_t grow_size = 8 /* arbitrary grow size */;
+               int grow_size = 8 /* arbitrary grow size */;
 
                num_to_alloc = (yy_buffer_stack_max) + grow_size;
                (yy_buffer_stack) = (struct yy_buffer_state**)parser4_realloc
@@ -4876,7 +4865,7 @@ YY_BUFFER_STATE parser4__scan_bytes  (yyconst char * yybytes, yy_size_t  _yybyte
        YY_BUFFER_STATE b;
        char *buf;
        yy_size_t n;
-       yy_size_t i;
+       int i;
     
        /* Get memory for full buffer, including space for trailing EOB's. */
        n = _yybytes_len + 2;
@@ -4909,7 +4898,7 @@ YY_BUFFER_STATE parser4__scan_bytes  (yyconst char * yybytes, yy_size_t  _yybyte
 /* %if-c-only */
 static void yy_fatal_error (yyconst char* msg )
 {
-                       (void) fprintf( stderr, "%s\n", msg );
+       (void) fprintf( stderr, "%s\n", msg );
        exit( YY_EXIT_FAILURE );
 }
 /* %endif */
@@ -4985,29 +4974,29 @@ char *parser4_get_text  (void)
 /* %endif */
 
 /** Set the current line number.
- * @param _line_number line number
+ * @param line_number
  * 
  */
-void parser4_set_lineno (int  _line_number )
+void parser4_set_lineno (int  line_number )
 {
     
-    parser4_lineno = _line_number;
+    parser4_lineno = line_number;
 }
 
 /** Set the input stream. This does not discard the current
  * input buffer.
- * @param _in_str A readable stream.
+ * @param in_str A readable stream.
  * 
  * @see parser4__switch_to_buffer
  */
-void parser4_set_in (FILE *  _in_str )
+void parser4_set_in (FILE *  in_str )
 {
-        parser4_in = _in_str ;
+        parser4_in = in_str ;
 }
 
-void parser4_set_out (FILE *  _out_str )
+void parser4_set_out (FILE *  out_str )
 {
-        parser4_out = _out_str ;
+        parser4_out = out_str ;
 }
 
 int parser4_get_debug  (void)
@@ -5015,9 +5004,9 @@ int parser4_get_debug  (void)
         return parser4__flex_debug;
 }
 
-void parser4_set_debug (int  _bdebug )
+void parser4_set_debug (int  bdebug )
 {
-        parser4__flex_debug = _bdebug ;
+        parser4__flex_debug = bdebug ;
 }
 
 /* %endif */
@@ -5090,8 +5079,7 @@ int parser4_lex_destroy  (void)
 #ifndef yytext_ptr
 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
 {
-               
-       int i;
+       register int i;
        for ( i = 0; i < n; ++i )
                s1[i] = s2[i];
 }
@@ -5100,7 +5088,7 @@ static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
 #ifdef YY_NEED_STRLEN
 static int yy_flex_strlen (yyconst char * s )
 {
-       int n;
+       register int n;
        for ( n = 0; s[n]; ++n )
                ;
 
@@ -5110,12 +5098,11 @@ static int yy_flex_strlen (yyconst char * s )
 
 void *parser4_alloc (yy_size_t  size )
 {
-                       return (void *) malloc( size );
+       return (void *) malloc( size );
 }
 
 void *parser4_realloc  (void * ptr, yy_size_t  size )
 {
-               
        /* The cast to (char *) in the following accommodates both
         * implementations that use char* generic pointers, and those
         * that use void* generic pointers.  It works with the latter
@@ -5128,7 +5115,7 @@ void *parser4_realloc  (void * ptr, yy_size_t  size )
 
 void parser4_free (void * ptr )
 {
-                       free( (char *) ptr );   /* see parser4_realloc() for (char *) cast */
+       free( (char *) ptr );   /* see parser4_realloc() for (char *) cast */
 }
 
 /* %if-tables-serialization definitions */
@@ -5138,7 +5125,7 @@ void parser4_free (void * ptr )
 
 /* %ok-for-header */
 
-#line 1723 "dhcp4_lexer.ll"
+#line 1741 "dhcp4_lexer.ll"
 
 
 
index 6650d75f957c393eaeb8bccb481af6dcfea35171..d4861522f37497c108fcf6a6aace2f61987eb2f4 100644 (file)
@@ -1323,6 +1323,24 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     }
 }
 
+\"hostname-char-set\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::DHCP_DDNS:
+        return isc::dhcp::Dhcp4Parser::make_HOSTNAME_CHAR_SET(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("hostname-char-set", driver.loc_);
+    }
+}
+
+\"hostname-char-replacement\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::DHCP_DDNS:
+        return isc::dhcp::Dhcp4Parser::make_HOSTNAME_CHAR_REPLACEMENT(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("hostname-char-replacement", driver.loc_);
+    }
+}
+
 (?i:\"UDP\") {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) {
index cb76fa5babb01060bd1171c0f61748944a027266..9db13213d584bfb566fd25b36df09b0500313b81 100644 (file)
@@ -253,30 +253,30 @@ namespace isc { namespace dhcp {
   {
       switch (that.type_get ())
     {
-      case 176: // value
-      case 180: // map_value
-      case 218: // socket_type
-      case 221: // outbound_interface_value
-      case 237: // db_type
-      case 321: // hr_mode
-      case 469: // ncr_protocol_value
-      case 477: // replace_client_name_value
+      case 178: // value
+      case 182: // map_value
+      case 220: // socket_type
+      case 223: // outbound_interface_value
+      case 239: // db_type
+      case 323: // hr_mode
+      case 471: // ncr_protocol_value
+      case 479: // replace_client_name_value
         value.move< ElementPtr > (that.value);
         break;
 
-      case 160: // "boolean"
+      case 162: // "boolean"
         value.move< bool > (that.value);
         break;
 
-      case 159: // "floating point"
+      case 161: // "floating point"
         value.move< double > (that.value);
         break;
 
-      case 158: // "integer"
+      case 160: // "integer"
         value.move< int64_t > (that.value);
         break;
 
-      case 157: // "constant string"
+      case 159: // "constant string"
         value.move< std::string > (that.value);
         break;
 
@@ -295,30 +295,30 @@ namespace isc { namespace dhcp {
     state = that.state;
       switch (that.type_get ())
     {
-      case 176: // value
-      case 180: // map_value
-      case 218: // socket_type
-      case 221: // outbound_interface_value
-      case 237: // db_type
-      case 321: // hr_mode
-      case 469: // ncr_protocol_value
-      case 477: // replace_client_name_value
+      case 178: // value
+      case 182: // map_value
+      case 220: // socket_type
+      case 223: // outbound_interface_value
+      case 239: // db_type
+      case 323: // hr_mode
+      case 471: // ncr_protocol_value
+      case 479: // replace_client_name_value
         value.copy< ElementPtr > (that.value);
         break;
 
-      case 160: // "boolean"
+      case 162: // "boolean"
         value.copy< bool > (that.value);
         break;
 
-      case 159: // "floating point"
+      case 161: // "floating point"
         value.copy< double > (that.value);
         break;
 
-      case 158: // "integer"
+      case 160: // "integer"
         value.copy< int64_t > (that.value);
         break;
 
-      case 157: // "constant string"
+      case 159: // "constant string"
         value.copy< std::string > (that.value);
         break;
 
@@ -358,86 +358,86 @@ namespace isc { namespace dhcp {
         << yysym.location << ": ";
     switch (yytype)
     {
-            case 157: // "constant string"
+            case 159: // "constant string"
 
-#line 235 "dhcp4_parser.yy" // lalr1.cc:636
+#line 237 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< std::string > (); }
 #line 366 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 158: // "integer"
+      case 160: // "integer"
 
-#line 235 "dhcp4_parser.yy" // lalr1.cc:636
+#line 237 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< int64_t > (); }
 #line 373 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 159: // "floating point"
+      case 161: // "floating point"
 
-#line 235 "dhcp4_parser.yy" // lalr1.cc:636
+#line 237 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< double > (); }
 #line 380 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 160: // "boolean"
+      case 162: // "boolean"
 
-#line 235 "dhcp4_parser.yy" // lalr1.cc:636
+#line 237 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< bool > (); }
 #line 387 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 176: // value
+      case 178: // value
 
-#line 235 "dhcp4_parser.yy" // lalr1.cc:636
+#line 237 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 394 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 180: // map_value
+      case 182: // map_value
 
-#line 235 "dhcp4_parser.yy" // lalr1.cc:636
+#line 237 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 401 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 218: // socket_type
+      case 220: // socket_type
 
-#line 235 "dhcp4_parser.yy" // lalr1.cc:636
+#line 237 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 408 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 221: // outbound_interface_value
+      case 223: // outbound_interface_value
 
-#line 235 "dhcp4_parser.yy" // lalr1.cc:636
+#line 237 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 415 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 237: // db_type
+      case 239: // db_type
 
-#line 235 "dhcp4_parser.yy" // lalr1.cc:636
+#line 237 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 422 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 321: // hr_mode
+      case 323: // hr_mode
 
-#line 235 "dhcp4_parser.yy" // lalr1.cc:636
+#line 237 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 429 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 469: // ncr_protocol_value
+      case 471: // ncr_protocol_value
 
-#line 235 "dhcp4_parser.yy" // lalr1.cc:636
+#line 237 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 436 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 477: // replace_client_name_value
+      case 479: // replace_client_name_value
 
-#line 235 "dhcp4_parser.yy" // lalr1.cc:636
+#line 237 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 443 "dhcp4_parser.cc" // lalr1.cc:636
         break;
@@ -639,30 +639,30 @@ namespace isc { namespace dhcp {
          when using variants.  */
         switch (yyr1_[yyn])
     {
-      case 176: // value
-      case 180: // map_value
-      case 218: // socket_type
-      case 221: // outbound_interface_value
-      case 237: // db_type
-      case 321: // hr_mode
-      case 469: // ncr_protocol_value
-      case 477: // replace_client_name_value
+      case 178: // value
+      case 182: // map_value
+      case 220: // socket_type
+      case 223: // outbound_interface_value
+      case 239: // db_type
+      case 323: // hr_mode
+      case 471: // ncr_protocol_value
+      case 479: // replace_client_name_value
         yylhs.value.build< ElementPtr > ();
         break;
 
-      case 160: // "boolean"
+      case 162: // "boolean"
         yylhs.value.build< bool > ();
         break;
 
-      case 159: // "floating point"
+      case 161: // "floating point"
         yylhs.value.build< double > ();
         break;
 
-      case 158: // "integer"
+      case 160: // "integer"
         yylhs.value.build< int64_t > ();
         break;
 
-      case 157: // "constant string"
+      case 159: // "constant string"
         yylhs.value.build< std::string > ();
         break;
 
@@ -684,127 +684,127 @@ namespace isc { namespace dhcp {
           switch (yyn)
             {
   case 2:
-#line 244 "dhcp4_parser.yy" // lalr1.cc:859
+#line 246 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.NO_KEYWORD; }
 #line 690 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 4:
-#line 245 "dhcp4_parser.yy" // lalr1.cc:859
+#line 247 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.CONFIG; }
 #line 696 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 6:
-#line 246 "dhcp4_parser.yy" // lalr1.cc:859
+#line 248 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP4; }
 #line 702 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 8:
-#line 247 "dhcp4_parser.yy" // lalr1.cc:859
+#line 249 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
 #line 708 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 10:
-#line 248 "dhcp4_parser.yy" // lalr1.cc:859
+#line 250 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.SUBNET4; }
 #line 714 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 12:
-#line 249 "dhcp4_parser.yy" // lalr1.cc:859
+#line 251 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.POOLS; }
 #line 720 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 14:
-#line 250 "dhcp4_parser.yy" // lalr1.cc:859
+#line 252 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.RESERVATIONS; }
 #line 726 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 16:
-#line 251 "dhcp4_parser.yy" // lalr1.cc:859
+#line 253 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP4; }
 #line 732 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 18:
-#line 252 "dhcp4_parser.yy" // lalr1.cc:859
+#line 254 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DEF; }
 #line 738 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 20:
-#line 253 "dhcp4_parser.yy" // lalr1.cc:859
+#line 255 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DATA; }
 #line 744 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 22:
-#line 254 "dhcp4_parser.yy" // lalr1.cc:859
+#line 256 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
 #line 750 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 24:
-#line 255 "dhcp4_parser.yy" // lalr1.cc:859
+#line 257 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP_DDNS; }
 #line 756 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 26:
-#line 256 "dhcp4_parser.yy" // lalr1.cc:859
+#line 258 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.LOGGING; }
 #line 762 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 28:
-#line 264 "dhcp4_parser.yy" // lalr1.cc:859
+#line 266 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
 #line 768 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 29:
-#line 265 "dhcp4_parser.yy" // lalr1.cc:859
+#line 267 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
 #line 774 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 30:
-#line 266 "dhcp4_parser.yy" // lalr1.cc:859
+#line 268 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
 #line 780 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 31:
-#line 267 "dhcp4_parser.yy" // lalr1.cc:859
+#line 269 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
 #line 786 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 32:
-#line 268 "dhcp4_parser.yy" // lalr1.cc:859
+#line 270 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
 #line 792 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 33:
-#line 269 "dhcp4_parser.yy" // lalr1.cc:859
+#line 271 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 798 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 34:
-#line 270 "dhcp4_parser.yy" // lalr1.cc:859
+#line 272 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 804 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 35:
-#line 273 "dhcp4_parser.yy" // lalr1.cc:859
+#line 275 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
@@ -813,7 +813,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 36:
-#line 278 "dhcp4_parser.yy" // lalr1.cc:859
+#line 280 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -824,7 +824,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 37:
-#line 283 "dhcp4_parser.yy" // lalr1.cc:859
+#line 285 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -834,13 +834,13 @@ namespace isc { namespace dhcp {
     break;
 
   case 38:
-#line 289 "dhcp4_parser.yy" // lalr1.cc:859
+#line 291 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 840 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 41:
-#line 296 "dhcp4_parser.yy" // lalr1.cc:859
+#line 298 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // map containing a single entry
                   ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
@@ -849,7 +849,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 42:
-#line 300 "dhcp4_parser.yy" // lalr1.cc:859
+#line 302 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // map consisting of a shorter map followed by
                   // comma and string:value
@@ -859,7 +859,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 43:
-#line 307 "dhcp4_parser.yy" // lalr1.cc:859
+#line 309 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
@@ -868,7 +868,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 44:
-#line 310 "dhcp4_parser.yy" // lalr1.cc:859
+#line 312 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
 }
@@ -876,7 +876,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 47:
-#line 318 "dhcp4_parser.yy" // lalr1.cc:859
+#line 320 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
@@ -885,7 +885,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 48:
-#line 322 "dhcp4_parser.yy" // lalr1.cc:859
+#line 324 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
@@ -894,7 +894,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 49:
-#line 329 "dhcp4_parser.yy" // lalr1.cc:859
+#line 331 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // List parsing about to start
 }
@@ -902,7 +902,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 50:
-#line 331 "dhcp4_parser.yy" // lalr1.cc:859
+#line 333 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
     //ctx.stack_.pop_back();
@@ -911,7 +911,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 53:
-#line 340 "dhcp4_parser.yy" // lalr1.cc:859
+#line 342 "dhcp4_parser.yy" // lalr1.cc:859
     {
                           ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
@@ -920,7 +920,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 54:
-#line 344 "dhcp4_parser.yy" // lalr1.cc:859
+#line 346 "dhcp4_parser.yy" // lalr1.cc:859
     {
                           ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
@@ -929,7 +929,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 55:
-#line 355 "dhcp4_parser.yy" // lalr1.cc:859
+#line 357 "dhcp4_parser.yy" // lalr1.cc:859
     {
     const std::string& where = ctx.contextName();
     const std::string& keyword = yystack_[1].value.as< std::string > ();
@@ -940,7 +940,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 56:
-#line 365 "dhcp4_parser.yy" // lalr1.cc:859
+#line 367 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -951,7 +951,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 57:
-#line 370 "dhcp4_parser.yy" // lalr1.cc:859
+#line 372 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -964,7 +964,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 66:
-#line 394 "dhcp4_parser.yy" // lalr1.cc:859
+#line 396 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -977,7 +977,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 67:
-#line 401 "dhcp4_parser.yy" // lalr1.cc:859
+#line 403 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // No global parameter is required
     ctx.stack_.pop_back();
@@ -987,7 +987,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 68:
-#line 409 "dhcp4_parser.yy" // lalr1.cc:859
+#line 411 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the Dhcp4 map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -997,7 +997,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 69:
-#line 413 "dhcp4_parser.yy" // lalr1.cc:859
+#line 415 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // No global parameter is required
     // parsing completed
@@ -1006,7 +1006,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 99:
-#line 453 "dhcp4_parser.yy" // lalr1.cc:859
+#line 455 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("valid-lifetime", prf);
@@ -1015,7 +1015,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 100:
-#line 458 "dhcp4_parser.yy" // lalr1.cc:859
+#line 460 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("renew-timer", prf);
@@ -1024,7 +1024,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 101:
-#line 463 "dhcp4_parser.yy" // lalr1.cc:859
+#line 465 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rebind-timer", prf);
@@ -1033,7 +1033,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 102:
-#line 468 "dhcp4_parser.yy" // lalr1.cc:859
+#line 470 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("decline-probation-period", dpp);
@@ -1042,7 +1042,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 103:
-#line 473 "dhcp4_parser.yy" // lalr1.cc:859
+#line 475 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr echo(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("echo-client-id", echo);
@@ -1051,7 +1051,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 104:
-#line 478 "dhcp4_parser.yy" // lalr1.cc:859
+#line 480 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr match(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("match-client-id", match);
@@ -1060,7 +1060,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 105:
-#line 484 "dhcp4_parser.yy" // lalr1.cc:859
+#line 486 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces-config", i);
@@ -1071,7 +1071,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 106:
-#line 489 "dhcp4_parser.yy" // lalr1.cc:859
+#line 491 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // No interfaces config param is required
     ctx.stack_.pop_back();
@@ -1081,7 +1081,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 116:
-#line 508 "dhcp4_parser.yy" // lalr1.cc:859
+#line 510 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the interfaces-config map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1091,7 +1091,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 117:
-#line 512 "dhcp4_parser.yy" // lalr1.cc:859
+#line 514 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // No interfaces config param is required
     // parsing completed
@@ -1100,7 +1100,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 118:
-#line 517 "dhcp4_parser.yy" // lalr1.cc:859
+#line 519 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces", l);
@@ -1111,7 +1111,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 119:
-#line 522 "dhcp4_parser.yy" // lalr1.cc:859
+#line 524 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1120,7 +1120,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 120:
-#line 527 "dhcp4_parser.yy" // lalr1.cc:859
+#line 529 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.DHCP_SOCKET_TYPE);
 }
@@ -1128,7 +1128,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 121:
-#line 529 "dhcp4_parser.yy" // lalr1.cc:859
+#line 531 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("dhcp-socket-type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -1137,19 +1137,19 @@ namespace isc { namespace dhcp {
     break;
 
   case 122:
-#line 534 "dhcp4_parser.yy" // lalr1.cc:859
+#line 536 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("raw", ctx.loc2pos(yystack_[0].location))); }
 #line 1143 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 123:
-#line 535 "dhcp4_parser.yy" // lalr1.cc:859
+#line 537 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("udp", ctx.loc2pos(yystack_[0].location))); }
 #line 1149 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 124:
-#line 538 "dhcp4_parser.yy" // lalr1.cc:859
+#line 540 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.OUTBOUND_INTERFACE);
 }
@@ -1157,7 +1157,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 125:
-#line 540 "dhcp4_parser.yy" // lalr1.cc:859
+#line 542 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("outbound-interface", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -1166,7 +1166,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 126:
-#line 545 "dhcp4_parser.yy" // lalr1.cc:859
+#line 547 "dhcp4_parser.yy" // lalr1.cc:859
     {
     yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("same-as-inbound", ctx.loc2pos(yystack_[0].location)));
 }
@@ -1174,7 +1174,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 127:
-#line 547 "dhcp4_parser.yy" // lalr1.cc:859
+#line 549 "dhcp4_parser.yy" // lalr1.cc:859
     {
     yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("use-routing", ctx.loc2pos(yystack_[0].location)));
     }
@@ -1182,7 +1182,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 128:
-#line 551 "dhcp4_parser.yy" // lalr1.cc:859
+#line 553 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("re-detect", b);
@@ -1191,7 +1191,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 129:
-#line 557 "dhcp4_parser.yy" // lalr1.cc:859
+#line 559 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lease-database", i);
@@ -1202,7 +1202,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 130:
-#line 562 "dhcp4_parser.yy" // lalr1.cc:859
+#line 564 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
@@ -1213,7 +1213,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 131:
-#line 569 "dhcp4_parser.yy" // lalr1.cc:859
+#line 571 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hosts-database", i);
@@ -1224,7 +1224,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 132:
-#line 574 "dhcp4_parser.yy" // lalr1.cc:859
+#line 576 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
@@ -1235,7 +1235,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 133:
-#line 581 "dhcp4_parser.yy" // lalr1.cc:859
+#line 583 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hosts-databases", l);
@@ -1246,7 +1246,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 134:
-#line 586 "dhcp4_parser.yy" // lalr1.cc:859
+#line 588 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1255,7 +1255,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 139:
-#line 599 "dhcp4_parser.yy" // lalr1.cc:859
+#line 601 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -1265,7 +1265,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 140:
-#line 603 "dhcp4_parser.yy" // lalr1.cc:859
+#line 605 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -1275,7 +1275,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 161:
-#line 633 "dhcp4_parser.yy" // lalr1.cc:859
+#line 635 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.DATABASE_TYPE);
 }
@@ -1283,7 +1283,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 162:
-#line 635 "dhcp4_parser.yy" // lalr1.cc:859
+#line 637 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -1292,31 +1292,31 @@ namespace isc { namespace dhcp {
     break;
 
   case 163:
-#line 640 "dhcp4_parser.yy" // lalr1.cc:859
+#line 642 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
 #line 1298 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 164:
-#line 641 "dhcp4_parser.yy" // lalr1.cc:859
+#line 643 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
 #line 1304 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 165:
-#line 642 "dhcp4_parser.yy" // lalr1.cc:859
+#line 644 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
 #line 1310 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 166:
-#line 643 "dhcp4_parser.yy" // lalr1.cc:859
+#line 645 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); }
 #line 1316 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 167:
-#line 646 "dhcp4_parser.yy" // lalr1.cc:859
+#line 648 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1324,7 +1324,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 168:
-#line 648 "dhcp4_parser.yy" // lalr1.cc:859
+#line 650 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("user", user);
@@ -1334,7 +1334,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 169:
-#line 654 "dhcp4_parser.yy" // lalr1.cc:859
+#line 656 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1342,7 +1342,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 170:
-#line 656 "dhcp4_parser.yy" // lalr1.cc:859
+#line 658 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("password", pwd);
@@ -1352,7 +1352,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 171:
-#line 662 "dhcp4_parser.yy" // lalr1.cc:859
+#line 664 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1360,7 +1360,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 172:
-#line 664 "dhcp4_parser.yy" // lalr1.cc:859
+#line 666 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host", h);
@@ -1370,7 +1370,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 173:
-#line 670 "dhcp4_parser.yy" // lalr1.cc:859
+#line 672 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr p(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("port", p);
@@ -1379,7 +1379,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 174:
-#line 675 "dhcp4_parser.yy" // lalr1.cc:859
+#line 677 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1387,7 +1387,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 175:
-#line 677 "dhcp4_parser.yy" // lalr1.cc:859
+#line 679 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
@@ -1397,7 +1397,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 176:
-#line 683 "dhcp4_parser.yy" // lalr1.cc:859
+#line 685 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("persist", n);
@@ -1406,7 +1406,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 177:
-#line 688 "dhcp4_parser.yy" // lalr1.cc:859
+#line 690 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lfc-interval", n);
@@ -1415,7 +1415,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 178:
-#line 693 "dhcp4_parser.yy" // lalr1.cc:859
+#line 695 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("readonly", n);
@@ -1424,7 +1424,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 179:
-#line 698 "dhcp4_parser.yy" // lalr1.cc:859
+#line 700 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("connect-timeout", n);
@@ -1433,7 +1433,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 180:
-#line 703 "dhcp4_parser.yy" // lalr1.cc:859
+#line 705 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("request-timeout", n);
@@ -1442,7 +1442,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 181:
-#line 708 "dhcp4_parser.yy" // lalr1.cc:859
+#line 710 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("tcp-keepalive", n);
@@ -1451,7 +1451,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 182:
-#line 713 "dhcp4_parser.yy" // lalr1.cc:859
+#line 715 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("tcp-nodelay", n);
@@ -1460,7 +1460,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 183:
-#line 718 "dhcp4_parser.yy" // lalr1.cc:859
+#line 720 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1468,7 +1468,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 184:
-#line 720 "dhcp4_parser.yy" // lalr1.cc:859
+#line 722 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr cp(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("contact-points", cp);
@@ -1478,7 +1478,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 185:
-#line 726 "dhcp4_parser.yy" // lalr1.cc:859
+#line 728 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1486,7 +1486,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 186:
-#line 728 "dhcp4_parser.yy" // lalr1.cc:859
+#line 730 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr ks(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("keyspace", ks);
@@ -1496,7 +1496,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 187:
-#line 734 "dhcp4_parser.yy" // lalr1.cc:859
+#line 736 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reconnect-tries", n);
@@ -1505,7 +1505,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 188:
-#line 739 "dhcp4_parser.yy" // lalr1.cc:859
+#line 741 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reconnect-wait-time", n);
@@ -1514,7 +1514,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 189:
-#line 744 "dhcp4_parser.yy" // lalr1.cc:859
+#line 746 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host-reservation-identifiers", l);
@@ -1525,7 +1525,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 190:
-#line 749 "dhcp4_parser.yy" // lalr1.cc:859
+#line 751 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1534,7 +1534,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 198:
-#line 765 "dhcp4_parser.yy" // lalr1.cc:859
+#line 767 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
@@ -1543,7 +1543,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 199:
-#line 770 "dhcp4_parser.yy" // lalr1.cc:859
+#line 772 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(hwaddr);
@@ -1552,7 +1552,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 200:
-#line 775 "dhcp4_parser.yy" // lalr1.cc:859
+#line 777 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr circuit(new StringElement("circuit-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(circuit);
@@ -1561,7 +1561,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 201:
-#line 780 "dhcp4_parser.yy" // lalr1.cc:859
+#line 782 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr client(new StringElement("client-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(client);
@@ -1570,7 +1570,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 202:
-#line 785 "dhcp4_parser.yy" // lalr1.cc:859
+#line 787 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(flex_id);
@@ -1579,7 +1579,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 203:
-#line 790 "dhcp4_parser.yy" // lalr1.cc:859
+#line 792 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hooks-libraries", l);
@@ -1590,7 +1590,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 204:
-#line 795 "dhcp4_parser.yy" // lalr1.cc:859
+#line 797 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1599,7 +1599,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 209:
-#line 808 "dhcp4_parser.yy" // lalr1.cc:859
+#line 810 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -1609,7 +1609,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 210:
-#line 812 "dhcp4_parser.yy" // lalr1.cc:859
+#line 814 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -1619,7 +1619,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 211:
-#line 818 "dhcp4_parser.yy" // lalr1.cc:859
+#line 820 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the hooks-libraries list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1629,7 +1629,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 212:
-#line 822 "dhcp4_parser.yy" // lalr1.cc:859
+#line 824 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -1639,7 +1639,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 218:
-#line 837 "dhcp4_parser.yy" // lalr1.cc:859
+#line 839 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1647,7 +1647,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 219:
-#line 839 "dhcp4_parser.yy" // lalr1.cc:859
+#line 841 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("library", lib);
@@ -1657,7 +1657,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 220:
-#line 845 "dhcp4_parser.yy" // lalr1.cc:859
+#line 847 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1665,7 +1665,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 221:
-#line 847 "dhcp4_parser.yy" // lalr1.cc:859
+#line 849 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -1674,7 +1674,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 222:
-#line 853 "dhcp4_parser.yy" // lalr1.cc:859
+#line 855 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("expired-leases-processing", m);
@@ -1685,7 +1685,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 223:
-#line 858 "dhcp4_parser.yy" // lalr1.cc:859
+#line 860 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // No expired lease parameter is required
     ctx.stack_.pop_back();
@@ -1695,7 +1695,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 232:
-#line 876 "dhcp4_parser.yy" // lalr1.cc:859
+#line 878 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reclaim-timer-wait-time", value);
@@ -1704,7 +1704,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 233:
-#line 881 "dhcp4_parser.yy" // lalr1.cc:859
+#line 883 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush-reclaimed-timer-wait-time", value);
@@ -1713,7 +1713,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 234:
-#line 886 "dhcp4_parser.yy" // lalr1.cc:859
+#line 888 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hold-reclaimed-time", value);
@@ -1722,7 +1722,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 235:
-#line 891 "dhcp4_parser.yy" // lalr1.cc:859
+#line 893 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-leases", value);
@@ -1731,7 +1731,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 236:
-#line 896 "dhcp4_parser.yy" // lalr1.cc:859
+#line 898 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-time", value);
@@ -1740,7 +1740,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 237:
-#line 901 "dhcp4_parser.yy" // lalr1.cc:859
+#line 903 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("unwarned-reclaim-cycles", value);
@@ -1749,7 +1749,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 238:
-#line 909 "dhcp4_parser.yy" // lalr1.cc:859
+#line 911 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet4", l);
@@ -1760,7 +1760,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 239:
-#line 914 "dhcp4_parser.yy" // lalr1.cc:859
+#line 916 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1769,7 +1769,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 244:
-#line 934 "dhcp4_parser.yy" // lalr1.cc:859
+#line 936 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -1779,7 +1779,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 245:
-#line 938 "dhcp4_parser.yy" // lalr1.cc:859
+#line 940 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Once we reached this place, the subnet parsing is now complete.
     // If we want to, we can implement default values here.
@@ -1805,7 +1805,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 246:
-#line 960 "dhcp4_parser.yy" // lalr1.cc:859
+#line 962 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the subnet4 list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1815,7 +1815,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 247:
-#line 964 "dhcp4_parser.yy" // lalr1.cc:859
+#line 966 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The subnet subnet4 parameter is required
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -1825,7 +1825,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 275:
-#line 1003 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1005 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1833,7 +1833,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 276:
-#line 1005 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1007 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet", subnet);
@@ -1843,7 +1843,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 277:
-#line 1011 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1013 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1851,7 +1851,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 278:
-#line 1013 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1015 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("4o6-interface", iface);
@@ -1861,7 +1861,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 279:
-#line 1019 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1021 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1869,7 +1869,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 280:
-#line 1021 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1023 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("4o6-interface-id", iface);
@@ -1879,7 +1879,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 281:
-#line 1027 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1029 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1887,7 +1887,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 282:
-#line 1029 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1031 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("4o6-subnet", iface);
@@ -1897,7 +1897,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 283:
-#line 1035 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1037 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1905,7 +1905,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 284:
-#line 1037 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1039 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface", iface);
@@ -1915,7 +1915,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 285:
-#line 1043 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1045 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1923,7 +1923,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 286:
-#line 1045 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1047 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface-id", iface);
@@ -1933,7 +1933,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 287:
-#line 1051 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1053 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1941,7 +1941,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 288:
-#line 1053 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1055 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr cls(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-class", cls);
@@ -1951,7 +1951,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 289:
-#line 1059 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1061 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("require-client-classes", c);
@@ -1962,7 +1962,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 290:
-#line 1064 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1066 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1971,7 +1971,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 291:
-#line 1069 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1071 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.RESERVATION_MODE);
 }
@@ -1979,7 +1979,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 292:
-#line 1071 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1073 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -1988,25 +1988,25 @@ namespace isc { namespace dhcp {
     break;
 
   case 293:
-#line 1076 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1078 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
 #line 1994 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 294:
-#line 1077 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1079 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
 #line 2000 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 295:
-#line 1078 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1080 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
 #line 2006 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 296:
-#line 1081 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1083 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("id", id);
@@ -2015,7 +2015,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 297:
-#line 1086 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1088 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rapid-commit", rc);
@@ -2024,7 +2024,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 298:
-#line 1093 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1095 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("shared-networks", l);
@@ -2035,7 +2035,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 299:
-#line 1098 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1100 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2044,7 +2044,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 304:
-#line 1113 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1115 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2054,7 +2054,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 305:
-#line 1117 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1119 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
@@ -2062,7 +2062,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 326:
-#line 1149 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1151 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-def", l);
@@ -2073,7 +2073,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 327:
-#line 1154 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1156 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2082,7 +2082,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 328:
-#line 1162 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1164 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
@@ -2091,7 +2091,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 329:
-#line 1165 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1167 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
@@ -2099,7 +2099,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 334:
-#line 1181 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1183 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2109,7 +2109,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 335:
-#line 1185 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1187 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2121,7 +2121,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 336:
-#line 1196 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1198 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the option-def list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2131,7 +2131,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 337:
-#line 1200 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1202 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2143,7 +2143,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 353:
-#line 1232 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1234 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("code", code);
@@ -2152,7 +2152,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 355:
-#line 1239 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1241 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2160,7 +2160,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 356:
-#line 1241 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1243 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("type", prf);
@@ -2170,7 +2170,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 357:
-#line 1247 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1249 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2178,7 +2178,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 358:
-#line 1249 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1251 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr rtypes(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("record-types", rtypes);
@@ -2188,7 +2188,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 359:
-#line 1255 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1257 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2196,7 +2196,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 360:
-#line 1257 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1259 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("space", space);
@@ -2206,7 +2206,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 362:
-#line 1265 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1267 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2214,7 +2214,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 363:
-#line 1267 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1269 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("encapsulate", encap);
@@ -2224,7 +2224,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 364:
-#line 1273 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1275 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("array", array);
@@ -2233,7 +2233,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 365:
-#line 1282 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1284 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-data", l);
@@ -2244,7 +2244,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 366:
-#line 1287 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1289 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2253,7 +2253,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 371:
-#line 1306 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1308 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2263,7 +2263,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 372:
-#line 1310 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1312 "dhcp4_parser.yy" // lalr1.cc:859
     {
     /// @todo: the code or name parameters are required.
     ctx.stack_.pop_back();
@@ -2272,7 +2272,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 373:
-#line 1318 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1320 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the option-data list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2282,7 +2282,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 374:
-#line 1322 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1324 "dhcp4_parser.yy" // lalr1.cc:859
     {
     /// @todo: the code or name parameters are required.
     // parsing completed
@@ -2291,7 +2291,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 389:
-#line 1355 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1357 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2299,7 +2299,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 390:
-#line 1357 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1359 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("data", data);
@@ -2309,7 +2309,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 393:
-#line 1367 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1369 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("csv-format", space);
@@ -2318,7 +2318,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 394:
-#line 1372 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1374 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr persist(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-send", persist);
@@ -2327,7 +2327,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 395:
-#line 1380 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1382 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pools", l);
@@ -2338,7 +2338,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 396:
-#line 1385 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1387 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2347,7 +2347,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 401:
-#line 1400 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1402 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2357,7 +2357,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 402:
-#line 1404 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1406 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2367,7 +2367,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 403:
-#line 1410 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1412 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2377,7 +2377,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 404:
-#line 1414 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1416 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2387,7 +2387,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 414:
-#line 1433 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1435 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2395,7 +2395,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 415:
-#line 1435 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1437 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pool", pool);
@@ -2405,7 +2405,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 416:
-#line 1441 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1443 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2413,7 +2413,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 417:
-#line 1443 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1445 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context = yystack_[0].value.as< ElementPtr > ();
@@ -2440,7 +2440,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 418:
-#line 1466 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1468 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2448,7 +2448,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 419:
-#line 1468 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1470 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
@@ -2477,7 +2477,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 420:
-#line 1496 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1498 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations", l);
@@ -2488,7 +2488,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 421:
-#line 1501 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1503 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2497,7 +2497,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 426:
-#line 1514 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1516 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2507,7 +2507,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 427:
-#line 1518 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1520 "dhcp4_parser.yy" // lalr1.cc:859
     {
     /// @todo: an identifier parameter is required.
     ctx.stack_.pop_back();
@@ -2516,7 +2516,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 428:
-#line 1523 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1525 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2526,7 +2526,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 429:
-#line 1527 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1529 "dhcp4_parser.yy" // lalr1.cc:859
     {
     /// @todo: an identifier parameter is required.
     // parsing completed
@@ -2535,7 +2535,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 449:
-#line 1558 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1560 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2543,7 +2543,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 450:
-#line 1560 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1562 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr next_server(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("next-server", next_server);
@@ -2553,7 +2553,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 451:
-#line 1566 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1568 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2561,7 +2561,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 452:
-#line 1568 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1570 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr srv(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-hostname", srv);
@@ -2571,7 +2571,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 453:
-#line 1574 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1576 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2579,7 +2579,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 454:
-#line 1576 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1578 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr bootfile(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("boot-file-name", bootfile);
@@ -2589,7 +2589,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 455:
-#line 1582 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1584 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2597,7 +2597,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 456:
-#line 1584 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1586 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr addr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", addr);
@@ -2607,7 +2607,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 457:
-#line 1590 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1592 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-addresses", l);
@@ -2618,7 +2618,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 458:
-#line 1595 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1597 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2627,7 +2627,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 459:
-#line 1600 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1602 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2635,7 +2635,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 460:
-#line 1602 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1604 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("duid", d);
@@ -2645,7 +2645,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 461:
-#line 1608 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1610 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2653,7 +2653,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 462:
-#line 1610 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1612 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hw-address", hw);
@@ -2663,7 +2663,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 463:
-#line 1616 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1618 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2671,7 +2671,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 464:
-#line 1618 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1620 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-id", hw);
@@ -2681,7 +2681,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 465:
-#line 1624 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1626 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2689,7 +2689,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 466:
-#line 1626 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1628 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("circuit-id", hw);
@@ -2699,7 +2699,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 467:
-#line 1632 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1634 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2707,7 +2707,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 468:
-#line 1634 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1636 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flex-id", hw);
@@ -2717,7 +2717,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 469:
-#line 1640 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1642 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2725,7 +2725,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 470:
-#line 1642 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1644 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname", host);
@@ -2735,7 +2735,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 471:
-#line 1648 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1650 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", c);
@@ -2746,7 +2746,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 472:
-#line 1653 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1655 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2755,7 +2755,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 473:
-#line 1661 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1663 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("relay", m);
@@ -2766,7 +2766,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 474:
-#line 1666 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1668 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2775,7 +2775,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 477:
-#line 1678 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1680 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", l);
@@ -2786,7 +2786,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 478:
-#line 1683 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1685 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2795,7 +2795,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 481:
-#line 1692 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1694 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2805,7 +2805,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 482:
-#line 1696 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1698 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The name client class parameter is required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2815,7 +2815,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 499:
-#line 1725 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1727 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2823,7 +2823,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 500:
-#line 1727 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1729 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("test", test);
@@ -2833,7 +2833,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 501:
-#line 1733 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1735 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("only-if-required", b);
@@ -2842,7 +2842,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 502:
-#line 1742 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1744 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp4o6-port", time);
@@ -2851,7 +2851,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 503:
-#line 1749 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1751 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("control-socket", m);
@@ -2862,7 +2862,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 504:
-#line 1754 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1756 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2871,7 +2871,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 512:
-#line 1770 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1772 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2879,7 +2879,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 513:
-#line 1772 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1774 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr stype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-type", stype);
@@ -2889,7 +2889,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 514:
-#line 1778 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1780 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2897,7 +2897,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 515:
-#line 1780 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1782 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-name", name);
@@ -2907,7 +2907,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 516:
-#line 1788 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1790 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp-ddns", m);
@@ -2918,7 +2918,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 517:
-#line 1793 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1795 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The enable updates DHCP DDNS parameter is required.
     ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
@@ -2929,7 +2929,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 518:
-#line 1800 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1802 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the dhcp-ddns map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2939,7 +2939,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 519:
-#line 1804 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1806 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The enable updates DHCP DDNS parameter is required.
     ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2948,8 +2948,8 @@ namespace isc { namespace dhcp {
 #line 2949 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 539:
-#line 1833 "dhcp4_parser.yy" // lalr1.cc:859
+  case 541:
+#line 1837 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-updates", b);
@@ -2957,16 +2957,16 @@ namespace isc { namespace dhcp {
 #line 2958 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 540:
-#line 1838 "dhcp4_parser.yy" // lalr1.cc:859
+  case 542:
+#line 1842 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2966 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 541:
-#line 1840 "dhcp4_parser.yy" // lalr1.cc:859
+  case 543:
+#line 1844 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("qualifying-suffix", s);
@@ -2975,16 +2975,16 @@ namespace isc { namespace dhcp {
 #line 2976 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 542:
-#line 1846 "dhcp4_parser.yy" // lalr1.cc:859
+  case 544:
+#line 1850 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2984 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 543:
-#line 1848 "dhcp4_parser.yy" // lalr1.cc:859
+  case 545:
+#line 1852 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-ip", s);
@@ -2993,8 +2993,8 @@ namespace isc { namespace dhcp {
 #line 2994 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 544:
-#line 1854 "dhcp4_parser.yy" // lalr1.cc:859
+  case 546:
+#line 1858 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-port", i);
@@ -3002,16 +3002,16 @@ namespace isc { namespace dhcp {
 #line 3003 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 545:
-#line 1859 "dhcp4_parser.yy" // lalr1.cc:859
+  case 547:
+#line 1863 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 3011 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 546:
-#line 1861 "dhcp4_parser.yy" // lalr1.cc:859
+  case 548:
+#line 1865 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-ip", s);
@@ -3020,8 +3020,8 @@ namespace isc { namespace dhcp {
 #line 3021 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 547:
-#line 1867 "dhcp4_parser.yy" // lalr1.cc:859
+  case 549:
+#line 1871 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-port", i);
@@ -3029,8 +3029,8 @@ namespace isc { namespace dhcp {
 #line 3030 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 548:
-#line 1872 "dhcp4_parser.yy" // lalr1.cc:859
+  case 550:
+#line 1876 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-queue-size", i);
@@ -3038,16 +3038,16 @@ namespace isc { namespace dhcp {
 #line 3039 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 549:
-#line 1877 "dhcp4_parser.yy" // lalr1.cc:859
+  case 551:
+#line 1881 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_PROTOCOL);
 }
 #line 3047 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 550:
-#line 1879 "dhcp4_parser.yy" // lalr1.cc:859
+  case 552:
+#line 1883 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -3055,28 +3055,28 @@ namespace isc { namespace dhcp {
 #line 3056 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 551:
-#line 1885 "dhcp4_parser.yy" // lalr1.cc:859
+  case 553:
+#line 1889 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
 #line 3062 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 552:
-#line 1886 "dhcp4_parser.yy" // lalr1.cc:859
+  case 554:
+#line 1890 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
 #line 3068 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 553:
-#line 1889 "dhcp4_parser.yy" // lalr1.cc:859
+  case 555:
+#line 1893 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_FORMAT);
 }
 #line 3076 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 554:
-#line 1891 "dhcp4_parser.yy" // lalr1.cc:859
+  case 556:
+#line 1895 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ncr-format", json);
@@ -3085,8 +3085,8 @@ namespace isc { namespace dhcp {
 #line 3086 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 555:
-#line 1897 "dhcp4_parser.yy" // lalr1.cc:859
+  case 557:
+#line 1901 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-include-fqdn", b);
@@ -3094,8 +3094,8 @@ namespace isc { namespace dhcp {
 #line 3095 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 556:
-#line 1902 "dhcp4_parser.yy" // lalr1.cc:859
+  case 558:
+#line 1906 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-no-update", b);
@@ -3103,8 +3103,8 @@ namespace isc { namespace dhcp {
 #line 3104 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 557:
-#line 1907 "dhcp4_parser.yy" // lalr1.cc:859
+  case 559:
+#line 1911 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-client-update", b);
@@ -3112,16 +3112,16 @@ namespace isc { namespace dhcp {
 #line 3113 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 558:
-#line 1912 "dhcp4_parser.yy" // lalr1.cc:859
+  case 560:
+#line 1916 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
 }
 #line 3121 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 559:
-#line 1914 "dhcp4_parser.yy" // lalr1.cc:859
+  case 561:
+#line 1918 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -3129,40 +3129,40 @@ namespace isc { namespace dhcp {
 #line 3130 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 560:
-#line 1920 "dhcp4_parser.yy" // lalr1.cc:859
+  case 562:
+#line 1924 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); 
       }
 #line 3138 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 561:
-#line 1923 "dhcp4_parser.yy" // lalr1.cc:859
+  case 563:
+#line 1927 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
       }
 #line 3146 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 562:
-#line 1926 "dhcp4_parser.yy" // lalr1.cc:859
+  case 564:
+#line 1930 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
       }
 #line 3154 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 563:
-#line 1929 "dhcp4_parser.yy" // lalr1.cc:859
+  case 565:
+#line 1933 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
       }
 #line 3162 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 564:
-#line 1932 "dhcp4_parser.yy" // lalr1.cc:859
+  case 566:
+#line 1936 "dhcp4_parser.yy" // lalr1.cc:859
     {
       error(yystack_[0].location, "boolean values for the replace-client-name are "
                 "no longer supported");
@@ -3170,16 +3170,16 @@ namespace isc { namespace dhcp {
 #line 3171 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 565:
-#line 1938 "dhcp4_parser.yy" // lalr1.cc:859
+  case 567:
+#line 1942 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 3179 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 566:
-#line 1940 "dhcp4_parser.yy" // lalr1.cc:859
+  case 568:
+#line 1944 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("generated-prefix", s);
@@ -3188,245 +3188,281 @@ namespace isc { namespace dhcp {
 #line 3189 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 567:
-#line 1948 "dhcp4_parser.yy" // lalr1.cc:859
+  case 569:
+#line 1950 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 3197 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 568:
-#line 1950 "dhcp4_parser.yy" // lalr1.cc:859
+  case 570:
+#line 1952 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("hostname-char-set", s);
+    ctx.leave();
+}
+#line 3207 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 571:
+#line 1958 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 3215 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 572:
+#line 1960 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("hostname-char-replacement", s);
+    ctx.leave();
+}
+#line 3225 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 573:
+#line 1969 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 3233 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 574:
+#line 1971 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Dhcp6", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3206 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3242 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 569:
-#line 1955 "dhcp4_parser.yy" // lalr1.cc:859
+  case 575:
+#line 1976 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3214 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3250 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 570:
-#line 1957 "dhcp4_parser.yy" // lalr1.cc:859
+  case 576:
+#line 1978 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3223 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3259 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 571:
-#line 1962 "dhcp4_parser.yy" // lalr1.cc:859
+  case 577:
+#line 1983 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3231 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3267 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 572:
-#line 1964 "dhcp4_parser.yy" // lalr1.cc:859
+  case 578:
+#line 1985 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3240 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3276 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 573:
-#line 1974 "dhcp4_parser.yy" // lalr1.cc:859
+  case 579:
+#line 1995 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("Logging", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.LOGGING);
 }
-#line 3251 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3287 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 574:
-#line 1979 "dhcp4_parser.yy" // lalr1.cc:859
+  case 580:
+#line 2000 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3260 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3296 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 575:
-#line 1984 "dhcp4_parser.yy" // lalr1.cc:859
+  case 581:
+#line 2005 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the Logging map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3270 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3306 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 576:
-#line 1988 "dhcp4_parser.yy" // lalr1.cc:859
+  case 582:
+#line 2009 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 3278 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3314 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 580:
-#line 2004 "dhcp4_parser.yy" // lalr1.cc:859
+  case 586:
+#line 2025 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("loggers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 3289 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3325 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 581:
-#line 2009 "dhcp4_parser.yy" // lalr1.cc:859
+  case 587:
+#line 2030 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3298 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3334 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 584:
-#line 2021 "dhcp4_parser.yy" // lalr1.cc:859
+  case 590:
+#line 2042 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 3308 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3344 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 585:
-#line 2025 "dhcp4_parser.yy" // lalr1.cc:859
+  case 591:
+#line 2046 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 3316 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3352 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 595:
-#line 2042 "dhcp4_parser.yy" // lalr1.cc:859
+  case 601:
+#line 2063 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 3325 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3361 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 596:
-#line 2047 "dhcp4_parser.yy" // lalr1.cc:859
+  case 602:
+#line 2068 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3333 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3369 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 597:
-#line 2049 "dhcp4_parser.yy" // lalr1.cc:859
+  case 603:
+#line 2070 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 3343 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3379 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 598:
-#line 2055 "dhcp4_parser.yy" // lalr1.cc:859
+  case 604:
+#line 2076 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output_options", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 3354 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3390 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 599:
-#line 2060 "dhcp4_parser.yy" // lalr1.cc:859
+  case 605:
+#line 2081 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3363 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3399 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 602:
-#line 2069 "dhcp4_parser.yy" // lalr1.cc:859
+  case 608:
+#line 2090 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3373 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3409 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 603:
-#line 2073 "dhcp4_parser.yy" // lalr1.cc:859
+  case 609:
+#line 2094 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 3381 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3417 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 610:
-#line 2087 "dhcp4_parser.yy" // lalr1.cc:859
+  case 616:
+#line 2108 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3389 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3425 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 611:
-#line 2089 "dhcp4_parser.yy" // lalr1.cc:859
+  case 617:
+#line 2110 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 3399 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3435 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 612:
-#line 2095 "dhcp4_parser.yy" // lalr1.cc:859
+  case 618:
+#line 2116 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush", flush);
 }
-#line 3408 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3444 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 613:
-#line 2100 "dhcp4_parser.yy" // lalr1.cc:859
+  case 619:
+#line 2121 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxsize", maxsize);
 }
-#line 3417 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3453 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 614:
-#line 2105 "dhcp4_parser.yy" // lalr1.cc:859
+  case 620:
+#line 2126 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxver", maxver);
 }
-#line 3426 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3462 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
 
-#line 3430 "dhcp4_parser.cc" // lalr1.cc:859
+#line 3466 "dhcp4_parser.cc" // lalr1.cc:859
             default:
               break;
             }
@@ -3681,112 +3717,113 @@ namespace isc { namespace dhcp {
   }
 
 
-  const short int Dhcp4Parser::yypact_ninf_ = -765;
+  const short int Dhcp4Parser::yypact_ninf_ = -747;
 
   const signed char Dhcp4Parser::yytable_ninf_ = -1;
 
   const short int
   Dhcp4Parser::yypact_[] =
   {
-     310,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,    30,    22,    66,    72,   108,   111,
-     125,   154,   195,   216,   233,   242,   249,   257,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,    22,     1,    34,    60,    43,   171,
-       6,   115,   157,   368,   382,   -51,   428,    82,  -765,   271,
-     273,   279,   281,   289,  -765,  -765,  -765,  -765,  -765,   291,
-    -765,    46,  -765,  -765,  -765,  -765,  -765,  -765,  -765,   292,
-     294,  -765,  -765,  -765,  -765,  -765,  -765,   297,   299,   300,
-     302,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,   303,  -765,  -765,  -765,   126,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,   314,  -765,   137,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,   315,   317,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,   141,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,   143,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,   285,
-     319,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,   318,  -765,  -765,   321,  -765,  -765,  -765,
-     325,  -765,  -765,   322,   320,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,   327,   328,
-    -765,  -765,  -765,  -765,   326,   330,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,   144,  -765,
-    -765,  -765,   331,  -765,  -765,   333,  -765,   337,   338,  -765,
-    -765,   339,   341,   342,  -765,  -765,  -765,  -765,  -765,   145,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,   147,  -765,  -765,  -765,
-      22,    22,  -765,   190,   345,   348,   350,   351,   357,  -765,
-      34,  -765,   358,   209,   213,   362,   367,   370,   371,   372,
-     373,   224,   225,   231,   236,   387,   391,   394,   396,   398,
-     399,   401,   423,   427,   431,   288,   433,   443,    60,  -765,
-     444,   445,   446,   307,    43,  -765,   447,   464,   465,   466,
-     467,   468,   469,   316,   324,   471,   472,   474,   475,   476,
-     171,  -765,   477,     6,  -765,   481,   482,   483,   484,   485,
-     486,   487,   488,  -765,   115,  -765,   489,   491,   346,   492,
-     493,   499,   347,  -765,   368,   501,   349,   355,  -765,   382,
-     502,   504,   100,  -765,   356,   506,   507,   359,   514,   361,
-     363,   516,   518,   364,   366,   369,   519,   523,   428,  -765,
-     524,    82,  -765,  -765,  -765,   526,   527,   529,    22,    22,
-      22,  -765,   530,  -765,  -765,   374,   381,   397,   548,   549,
-     552,  -765,  -765,  -765,  -765,   553,   554,   555,   556,   557,
-     405,   558,   560,   561,   562,  -765,   563,   564,  -765,   567,
-     215,   220,  -765,  -765,   410,   411,   416,   569,   418,   419,
-     420,  -765,  -765,   237,   567,   421,   574,   573,  -765,   424,
-    -765,   567,   425,   426,   429,   430,   432,   434,   435,  -765,
-     436,   437,  -765,   438,   439,   440,  -765,  -765,   441,  -765,
-    -765,  -765,   442,    22,  -765,  -765,   448,   449,  -765,   450,
-    -765,  -765,    17,   457,  -765,  -765,  -765,   -32,   451,  -765,
-     583,  -765,    22,    60,    82,  -765,  -765,  -765,    43,  -765,
-    -765,  -765,   378,   378,   593,   594,   595,   596,   597,  -765,
-    -765,  -765,    12,   602,   603,    18,    55,   428,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,   604,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,   605,
-     184,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,   606,  -765,   151,   166,   170,  -765,  -765,  -765,
-    -765,   586,   610,   611,   612,   613,  -765,  -765,   614,   615,
-     616,   617,   618,  -765,   180,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,   181,  -765,   619,   620,  -765,  -765,   621,
-     623,  -765,  -765,   622,   626,  -765,  -765,   624,   628,  -765,
-    -765,   627,   629,  -765,  -765,  -765,  -765,  -765,  -765,    47,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,    58,  -765,  -765,
-     630,   631,  -765,   633,   634,   635,   636,   637,   638,   193,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,   206,  -765,  -765,  -765,   208,   478,  -765,   639,
-     640,  -765,  -765,   641,   643,  -765,  -765,  -765,  -765,   642,
-    -765,    85,  -765,  -765,  -765,  -765,   644,   645,   647,   648,
-     495,   494,   497,   496,   500,   653,   655,   503,   505,   508,
-     509,   510,   378,  -765,  -765,   378,  -765,   593,   171,  -765,
-     594,   368,  -765,   595,   382,  -765,   596,   211,  -765,   597,
-      12,  -765,   229,   602,  -765,   -51,  -765,   603,   511,   513,
-     515,   517,   520,   521,    18,  -765,   656,   658,    55,  -765,
-    -765,  -765,   659,   661,     6,  -765,   604,   115,  -765,   605,
-     664,  -765,    -1,   606,  -765,   280,   525,   528,   531,  -765,
-    -765,  -765,  -765,  -765,   532,   533,  -765,  -765,  -765,  -765,
-    -765,  -765,   219,  -765,   228,  -765,   666,  -765,   668,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,   247,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,   673,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,   672,   669,  -765,  -765,  -765,  -765,  -765,
-     259,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,   534,
-     535,  -765,  -765,   536,   263,  -765,   675,  -765,   567,  -765,
-     677,  -765,  -765,  -765,  -765,  -765,   267,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,   211,  -765,   680,   537,
-    -765,   229,  -765,  -765,  -765,  -765,  -765,  -765,  -765,   682,
-     538,   683,    -1,  -765,  -765,   541,  -765,  -765,   689,  -765,
-     542,  -765,  -765,   688,  -765,  -765,   101,  -765,   -45,   688,
-    -765,  -765,   696,   697,   699,   270,  -765,  -765,  -765,  -765,
-    -765,  -765,   700,   546,   551,   566,   -45,  -765,   550,  -765,
-    -765,  -765,  -765,  -765
+     413,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,    58,    23,    41,    55,    68,    82,
+      88,    97,   129,   136,   150,   168,   170,   179,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,    23,   -94,    19,    59,    75,   176,
+      48,   383,    21,    32,    62,   -45,   468,    34,  -747,   196,
+     217,   218,   237,   251,  -747,  -747,  -747,  -747,  -747,   254,
+    -747,    56,  -747,  -747,  -747,  -747,  -747,  -747,  -747,   265,
+     271,  -747,  -747,  -747,  -747,  -747,  -747,   273,   284,   290,
+     307,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,   309,  -747,  -747,  -747,    63,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,   310,  -747,    66,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,   311,   312,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,    98,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,   134,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,   249,
+     294,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,   297,  -747,  -747,   313,  -747,  -747,  -747,
+     314,  -747,  -747,   315,   316,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,   317,   318,
+    -747,  -747,  -747,  -747,   319,   322,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,   152,  -747,
+    -747,  -747,   325,  -747,  -747,   326,  -747,   328,   329,  -747,
+    -747,   330,   332,   333,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,   184,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+     186,  -747,  -747,  -747,    23,    23,  -747,   161,   334,   335,
+     337,   342,   343,  -747,    19,  -747,   345,   164,   188,   347,
+     349,   352,   354,   355,   362,   207,   210,   213,   219,   368,
+     373,   377,   381,   384,   387,   391,   392,   394,   395,   227,
+     397,   398,    59,  -747,   400,   404,   405,   255,    75,  -747,
+     410,   411,   412,   414,   415,   416,   420,   266,   263,   423,
+     424,   425,   426,   427,   176,  -747,   429,    48,  -747,   430,
+     431,   432,   433,   434,   435,   437,   438,  -747,   383,  -747,
+     439,   440,   285,   442,   443,   444,   287,  -747,    32,   446,
+     289,   296,  -747,    62,   448,   455,    14,  -747,   298,   457,
+     458,   303,   460,   306,   308,   463,   473,   320,   327,   331,
+     475,   476,   477,   483,   468,  -747,   484,    34,  -747,  -747,
+    -747,   487,   485,   488,    23,    23,    23,  -747,   489,  -747,
+    -747,   338,   339,   340,   493,   494,   498,  -747,  -747,  -747,
+    -747,   499,   500,   501,   505,   504,   353,   508,   509,   510,
+     512,  -747,   536,   537,  -747,   511,   113,   193,  -747,  -747,
+     358,   386,   388,   541,   390,   393,   396,  -747,  -747,   163,
+     511,   417,   545,   544,  -747,   418,  -747,   511,   419,   436,
+     445,   447,   449,   450,   451,  -747,   452,   453,  -747,   454,
+     456,   459,  -747,  -747,   461,  -747,  -747,  -747,   462,    23,
+    -747,  -747,   464,   465,  -747,   466,  -747,  -747,    18,   367,
+    -747,  -747,  -747,    43,   467,   469,   470,  -747,   548,  -747,
+      23,    59,    34,  -747,  -747,  -747,    75,  -747,  -747,  -747,
+     490,   490,   547,   549,   550,   565,   566,  -747,  -747,  -747,
+      61,   567,   568,   178,    29,   468,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,   572,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,   587,   212,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,   589,  -747,   198,   200,   201,  -747,  -747,  -747,
+    -747,   593,   594,   595,   598,   599,  -747,  -747,   601,   603,
+     610,   612,   613,  -747,   209,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,   211,  -747,   616,   627,  -747,  -747,   625,
+     629,  -747,  -747,   628,   630,  -747,  -747,   631,   632,  -747,
+    -747,   633,   635,  -747,  -747,  -747,  -747,  -747,  -747,    70,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,   155,  -747,  -747,
+     634,   638,  -747,   615,   639,   640,   641,   642,   643,   220,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,   252,  -747,  -747,  -747,   253,   491,  -747,   636,
+     645,  -747,  -747,   646,   648,  -747,  -747,  -747,  -747,   647,
+    -747,   162,  -747,  -747,  -747,  -747,   649,   650,   652,   653,
+     502,   474,   503,   496,   506,   655,   656,   507,   513,   514,
+     515,   516,   490,  -747,  -747,   490,  -747,   547,   176,  -747,
+     549,    32,  -747,   550,    62,  -747,   565,   216,  -747,   566,
+      61,  -747,   399,   567,  -747,   -45,  -747,   568,   517,   519,
+     520,   521,   522,   523,   178,  -747,   657,   660,    29,  -747,
+    -747,  -747,   659,   665,    48,  -747,   572,   383,  -747,   587,
+     666,  -747,    77,   589,  -747,    20,   525,   526,   527,  -747,
+    -747,  -747,  -747,  -747,   528,   529,  -747,  -747,  -747,  -747,
+    -747,  -747,   264,  -747,   268,  -747,   661,  -747,   663,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,   282,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,   668,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,   681,   673,  -747,  -747,  -747,  -747,  -747,
+     292,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,   531,
+     532,  -747,  -747,   533,   293,  -747,   685,  -747,   511,  -747,
+     690,  -747,  -747,  -747,  -747,  -747,   295,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,   216,  -747,   691,   534,
+    -747,   399,  -747,  -747,  -747,  -747,  -747,  -747,  -747,   693,
+     538,   695,    77,  -747,  -747,   542,  -747,  -747,   697,  -747,
+     546,  -747,  -747,   696,  -747,  -747,   229,  -747,    39,   696,
+    -747,  -747,   700,   702,   703,   301,  -747,  -747,  -747,  -747,
+    -747,  -747,   704,   551,   540,   554,    39,  -747,   552,  -747,
+    -747,  -747,  -747,  -747
   };
 
   const unsigned short int
@@ -3798,9 +3835,9 @@ namespace isc { namespace dhcp {
       36,    32,    31,    28,    29,    30,    35,     3,    33,    34,
       56,     5,    68,     7,   116,     9,   246,    11,   403,    13,
      428,    15,   328,    17,   336,    19,   373,    21,   211,    23,
-     518,    25,   575,    27,    45,    39,     0,     0,     0,     0,
+     518,    25,   581,    27,    45,    39,     0,     0,     0,     0,
        0,   430,     0,   338,   375,     0,     0,     0,    47,     0,
-      46,     0,     0,    40,    66,   573,   567,   569,   571,     0,
+      46,     0,     0,    40,    66,   579,   573,   575,   577,     0,
       65,     0,    58,    60,    62,    63,    64,    61,   105,     0,
        0,   449,   451,   453,   129,   131,   133,     0,     0,     0,
        0,   238,   326,   365,   298,   416,   418,   189,   477,   203,
@@ -3821,40 +3858,41 @@ namespace isc { namespace dhcp {
      345,   361,   346,   347,   348,   349,   350,   389,     0,     0,
      387,   388,   391,   392,     0,   376,   377,   379,   380,   381,
      382,   383,   384,   385,   386,   218,   220,   215,     0,   213,
-     216,   217,     0,   540,   542,     0,   545,     0,     0,   549,
-     553,     0,     0,     0,   558,   565,   538,   536,   537,     0,
-     520,   522,   523,   524,   525,   526,   527,   528,   529,   530,
-     531,   532,   533,   534,   535,   580,     0,   577,   579,    44,
-       0,     0,    37,     0,     0,     0,     0,     0,     0,    55,
-       0,    57,     0,     0,     0,     0,     0,     0,     0,     0,
+     216,   217,     0,   542,   544,     0,   547,     0,     0,   551,
+     555,     0,     0,     0,   560,   567,   569,   571,   540,   538,
+     539,     0,   520,   522,   523,   524,   525,   526,   527,   528,
+     529,   530,   531,   532,   533,   534,   535,   536,   537,   586,
+       0,   583,   585,    44,     0,     0,    37,     0,     0,     0,
+       0,     0,     0,    55,     0,    57,     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,    69,
-       0,     0,     0,     0,     0,   117,     0,     0,     0,     0,
+       0,     0,     0,    69,     0,     0,     0,     0,     0,   117,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   247,     0,     0,   404,     0,     0,     0,     0,     0,
-       0,     0,     0,   429,     0,   329,     0,     0,     0,     0,
-       0,     0,     0,   337,     0,     0,     0,     0,   374,     0,
-       0,     0,     0,   212,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   519,
-       0,     0,   576,    48,    41,     0,     0,     0,     0,     0,
-       0,    59,     0,   103,   104,     0,     0,     0,     0,     0,
-       0,    99,   100,   101,   102,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   502,     0,     0,    71,     0,
-       0,     0,   128,   108,     0,     0,     0,     0,     0,     0,
-       0,   296,   297,     0,     0,     0,     0,     0,   249,     0,
-     406,     0,     0,     0,     0,     0,     0,     0,     0,   433,
-       0,     0,   353,     0,     0,     0,   364,   341,     0,   393,
-     394,   378,     0,     0,   214,   539,     0,     0,   544,     0,
-     547,   548,     0,     0,   555,   556,   557,     0,     0,   521,
-       0,   578,     0,     0,     0,   568,   570,   572,     0,   450,
-     452,   454,     0,     0,   135,   240,   330,   367,   300,    38,
-     417,   419,     0,     0,   205,     0,     0,     0,    49,   119,
-     122,   123,   121,   126,   127,   125,   278,   280,   282,   397,
-     276,   284,   286,   293,   294,   295,   292,   290,   288,   422,
-       0,   415,   472,   460,   462,   466,   464,   470,   468,   456,
-     356,   175,   360,   358,   363,   390,   219,   221,   541,   543,
-     546,   551,   552,   550,   554,   560,   561,   562,   563,   564,
-     559,   566,     0,    42,     0,     0,     0,   161,   167,   169,
+       0,     0,     0,     0,     0,   247,     0,     0,   404,     0,
+       0,     0,     0,     0,     0,     0,     0,   429,     0,   329,
+       0,     0,     0,     0,     0,     0,     0,   337,     0,     0,
+       0,     0,   374,     0,     0,     0,     0,   212,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   519,     0,     0,   582,    48,
+      41,     0,     0,     0,     0,     0,     0,    59,     0,   103,
+     104,     0,     0,     0,     0,     0,     0,    99,   100,   101,
+     102,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   502,     0,     0,    71,     0,     0,     0,   128,   108,
+       0,     0,     0,     0,     0,     0,     0,   296,   297,     0,
+       0,     0,     0,     0,   249,     0,   406,     0,     0,     0,
+       0,     0,     0,     0,     0,   433,     0,     0,   353,     0,
+       0,     0,   364,   341,     0,   393,   394,   378,     0,     0,
+     214,   541,     0,     0,   546,     0,   549,   550,     0,     0,
+     557,   558,   559,     0,     0,     0,     0,   521,     0,   584,
+       0,     0,     0,   574,   576,   578,     0,   450,   452,   454,
+       0,     0,   135,   240,   330,   367,   300,    38,   417,   419,
+       0,     0,   205,     0,     0,     0,    49,   119,   122,   123,
+     121,   126,   127,   125,   278,   280,   282,   397,   276,   284,
+     286,   293,   294,   295,   292,   290,   288,   422,     0,   415,
+     472,   460,   462,   466,   464,   470,   468,   456,   356,   175,
+     360,   358,   363,   390,   219,   221,   543,   545,   548,   553,
+     554,   552,   556,   562,   563,   564,   565,   566,   561,   568,
+     570,   572,     0,    42,     0,     0,     0,   161,   167,   169,
      171,     0,     0,     0,     0,     0,   183,   185,     0,     0,
        0,     0,     0,   160,     0,   141,   143,   144,   145,   146,
      147,   148,   149,   150,   151,   152,   156,   157,   158,   153,
@@ -3866,14 +3904,14 @@ namespace isc { namespace dhcp {
      224,   226,   227,   228,   229,   230,   231,   512,   514,   511,
      509,   510,     0,   505,   507,   508,     0,    51,   401,     0,
      398,   399,   426,     0,   423,   424,   457,   475,   476,     0,
-     584,     0,   582,    67,   574,   106,     0,     0,     0,     0,
+     590,     0,   588,    67,   580,   106,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,   130,   132,     0,   134,     0,     0,   239,
        0,   338,   327,     0,   375,   366,     0,     0,   299,     0,
        0,   190,   483,     0,   478,     0,   204,     0,     0,     0,
        0,     0,     0,     0,     0,   223,     0,     0,     0,   504,
      517,    53,     0,    52,     0,   396,     0,   430,   421,     0,
-       0,   474,     0,     0,   581,     0,     0,     0,     0,   173,
+       0,   474,     0,     0,   587,     0,     0,     0,     0,   173,
      176,   177,   178,   179,     0,     0,   187,   188,   180,   181,
      182,   142,     0,   138,     0,   243,     0,   333,     0,   370,
      325,   322,   311,   312,   314,   308,   309,   310,   320,   321,
@@ -3881,467 +3919,471 @@ namespace isc { namespace dhcp {
      303,   192,   499,     0,   497,   498,   490,   491,   495,   496,
      492,   493,   494,     0,   484,   485,   487,   488,   489,   480,
        0,   208,   232,   233,   234,   235,   236,   237,   225,     0,
-       0,   506,    50,     0,     0,   400,     0,   425,     0,   598,
-       0,   596,   594,   588,   592,   593,     0,   586,   590,   591,
-     589,   583,   163,   164,   165,   166,   162,   168,   170,   172,
+       0,   506,    50,     0,     0,   400,     0,   425,     0,   604,
+       0,   602,   600,   594,   598,   599,     0,   592,   596,   597,
+     595,   589,   163,   164,   165,   166,   162,   168,   170,   172,
      184,   186,   140,   245,   335,   372,     0,   305,     0,     0,
      482,     0,   210,   513,   515,    54,   402,   427,   458,     0,
-       0,     0,     0,   585,   307,     0,   501,   486,     0,   595,
-       0,   587,   500,     0,   597,   602,     0,   600,     0,     0,
-     599,   610,     0,     0,     0,     0,   604,   606,   607,   608,
-     609,   601,     0,     0,     0,     0,     0,   603,     0,   612,
-     613,   614,   605,   611
+       0,     0,     0,   591,   307,     0,   501,   486,     0,   601,
+       0,   593,   500,     0,   603,   608,     0,   606,     0,     0,
+     605,   616,     0,     0,     0,     0,   610,   612,   613,   614,
+     615,   607,     0,     0,     0,     0,     0,   609,     0,   618,
+     619,   620,   611,   617
   };
 
   const short int
   Dhcp4Parser::yypgoto_[] =
   {
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,   -40,  -765,   155,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -468,  -765,  -765,  -765,
-     -66,  -765,  -765,  -765,   304,  -765,  -765,  -765,  -765,   167,
-     365,   -23,   -11,    -9,  -765,  -765,     9,  -765,  -765,   165,
-     352,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-     -52,  -765,  -547,   -37,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,   -22,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,   -53,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,   -58,  -765,  -765,  -765,   -55,   353,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,   -47,  -765,  -765,  -765,  -765,
-    -765,  -765,  -764,  -765,  -765,  -765,   -31,  -765,  -765,  -765,
-       8,   377,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -756,  -765,  -765,  -765,   -42,  -765,    -5,  -765,  -739,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,   -16,  -765,  -765,
-    -157,   -61,  -765,  -765,  -765,  -765,  -765,    10,  -765,  -765,
-    -765,    11,  -765,   375,  -765,   -62,  -765,  -765,  -765,  -765,
-    -765,   -56,  -765,  -765,  -765,  -765,  -765,    -3,  -765,  -765,
-    -765,    15,  -765,  -765,  -765,    13,  -765,   376,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,   -18,
-    -765,  -765,  -765,   -20,   400,  -765,  -765,   -54,  -765,   -34,
-    -765,  -765,  -765,  -765,  -765,   -17,  -765,  -765,  -765,   -13,
-    -765,   392,   -46,  -765,   -26,  -765,     3,  -765,   207,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -736,  -765,  -765,  -765,
-    -765,  -765,    19,  -765,  -765,  -765,  -133,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,     2,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,   238,   379,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,
-    -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,  -765,   262,
-     380,  -765,  -765,  -765,   -10,  -765,  -765,  -135,  -765,  -765,
-    -765,  -765,  -765,  -765,  -151,  -765,  -765,  -167,  -765,  -765,
-    -765,  -765,  -765
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,   -43,  -747,   234,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -476,  -747,  -747,  -747,
+     -66,  -747,  -747,  -747,   366,  -747,  -747,  -747,  -747,   166,
+     348,    -2,    -1,     3,  -747,  -747,     9,  -747,  -747,   167,
+     341,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+     -49,  -747,  -548,   -36,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,   -47,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,   -65,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,   -58,  -747,  -747,  -747,   -38,   323,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,   -39,  -747,  -747,  -747,  -747,
+    -747,  -747,  -746,  -747,  -747,  -747,   -37,  -747,  -747,  -747,
+     -19,   375,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -743,  -747,  -747,  -747,   -52,  -747,   -32,  -747,  -741,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,   -22,  -747,  -747,
+    -164,   -61,  -747,  -747,  -747,  -747,  -747,     6,  -747,  -747,
+    -747,    11,  -747,   376,  -747,   -68,  -747,  -747,  -747,  -747,
+    -747,   -62,  -747,  -747,  -747,  -747,  -747,   -14,  -747,  -747,
+    -747,     7,  -747,  -747,  -747,    13,  -747,   372,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,   -18,
+    -747,  -747,  -747,   -15,   407,  -747,  -747,   -54,  -747,   -34,
+    -747,  -747,  -747,  -747,  -747,   -17,  -747,  -747,  -747,   -16,
+    -747,   402,   -46,  -747,   -26,  -747,    -8,  -747,   208,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -740,  -747,  -747,  -747,
+    -747,  -747,    12,  -747,  -747,  -747,  -134,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,     0,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,   236,   369,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
+    -747,  -747,  -747,   260,   370,  -747,  -747,  -747,    -9,  -747,
+    -747,  -137,  -747,  -747,  -747,  -747,  -747,  -747,  -153,  -747,
+    -747,  -168,  -747,  -747,  -747,  -747,  -747
   };
 
   const short int
   Dhcp4Parser::yydefgoto_[] =
   {
       -1,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    36,    37,    38,    65,   560,
-      82,    83,    39,    64,    79,    80,   569,   727,   802,   803,
-     643,    41,    66,    91,    92,    93,   334,    43,    67,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   342,   158,
-     159,    45,    68,   160,   370,   161,   371,   572,   162,   372,
-     575,   163,   134,   348,   135,   349,   136,   350,   665,   666,
-     667,   765,   644,   645,   646,   746,   916,   647,   747,   648,
-     748,   649,   749,   650,   651,   407,   652,   653,   654,   655,
-     656,   657,   658,   659,   755,   660,   756,   661,   662,   137,
-     361,   689,   690,   691,   692,   693,   694,   695,   138,   363,
-     700,   701,   702,   785,    59,    75,   288,   289,   290,   420,
-     291,   421,   139,   364,   709,   710,   711,   712,   713,   714,
-     715,   716,   140,   355,   669,   670,   671,   768,    47,    69,
-     185,   186,   187,   380,   188,   376,   189,   377,   190,   378,
-     191,   381,   192,   382,   193,   387,   194,   386,   195,   385,
-     586,   196,   197,   141,   358,   681,   682,   683,   777,   851,
-     852,   142,   356,    53,    72,   673,   674,   675,   771,    55,
-      73,   253,   254,   255,   256,   257,   258,   259,   406,   260,
-     410,   261,   409,   262,   263,   411,   264,   143,   357,   677,
-     678,   679,   774,    57,    74,   274,   275,   276,   277,   278,
-     415,   279,   280,   281,   282,   199,   379,   729,   730,   731,
-     804,    49,    70,   212,   213,   214,   392,   144,   359,   145,
-     360,   202,   388,   733,   734,   735,   807,    51,    71,   229,
-     230,   231,   146,   345,   147,   346,   148,   347,   235,   402,
-     738,   810,   236,   396,   237,   397,   238,   399,   239,   398,
-     240,   401,   241,   400,   242,   395,   206,   389,   739,   149,
-     362,   697,   698,   782,   873,   874,   875,   876,   877,   928,
-     878,   150,   151,   366,   722,   723,   724,   796,   725,   797,
-     152,   367,    61,    76,   309,   310,   311,   312,   425,   313,
-     426,   314,   315,   428,   316,   317,   318,   431,   613,   319,
-     432,   320,   321,   322,   323,   436,   620,   324,   437,    94,
-     336,    95,   337,    96,   338,    97,   335,    63,    77,   326,
-     327,   328,   440,   741,   742,   812,   906,   907,   908,   909,
-     941,   910,   939,   956,   957,   958,   965,   966,   967,   972,
-     968,   969,   970
+      23,    24,    25,    26,    27,    36,    37,    38,    65,   568,
+      82,    83,    39,    64,    79,    80,   577,   737,   812,   813,
+     653,    41,    66,    91,    92,    93,   338,    43,    67,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   346,   158,
+     159,    45,    68,   160,   374,   161,   375,   580,   162,   376,
+     583,   163,   134,   352,   135,   353,   136,   354,   675,   676,
+     677,   775,   654,   655,   656,   756,   926,   657,   757,   658,
+     758,   659,   759,   660,   661,   411,   662,   663,   664,   665,
+     666,   667,   668,   669,   765,   670,   766,   671,   672,   137,
+     365,   699,   700,   701,   702,   703,   704,   705,   138,   367,
+     710,   711,   712,   795,    59,    75,   288,   289,   290,   424,
+     291,   425,   139,   368,   719,   720,   721,   722,   723,   724,
+     725,   726,   140,   359,   679,   680,   681,   778,    47,    69,
+     185,   186,   187,   384,   188,   380,   189,   381,   190,   382,
+     191,   385,   192,   386,   193,   391,   194,   390,   195,   389,
+     594,   196,   197,   141,   362,   691,   692,   693,   787,   861,
+     862,   142,   360,    53,    72,   683,   684,   685,   781,    55,
+      73,   253,   254,   255,   256,   257,   258,   259,   410,   260,
+     414,   261,   413,   262,   263,   415,   264,   143,   361,   687,
+     688,   689,   784,    57,    74,   274,   275,   276,   277,   278,
+     419,   279,   280,   281,   282,   199,   383,   739,   740,   741,
+     814,    49,    70,   212,   213,   214,   396,   144,   363,   145,
+     364,   202,   392,   743,   744,   745,   817,    51,    71,   229,
+     230,   231,   146,   349,   147,   350,   148,   351,   235,   406,
+     748,   820,   236,   400,   237,   401,   238,   403,   239,   402,
+     240,   405,   241,   404,   242,   399,   206,   393,   749,   149,
+     366,   707,   708,   792,   883,   884,   885,   886,   887,   938,
+     888,   150,   151,   370,   732,   733,   734,   806,   735,   807,
+     152,   371,    61,    76,   311,   312,   313,   314,   429,   315,
+     430,   316,   317,   432,   318,   319,   320,   435,   621,   321,
+     436,   322,   323,   324,   325,   440,   628,   326,   441,   327,
+     442,   328,   443,    94,   340,    95,   341,    96,   342,    97,
+     339,    63,    77,   330,   331,   332,   446,   751,   752,   822,
+     916,   917,   918,   919,   951,   920,   949,   966,   967,   968,
+     975,   976,   977,   982,   978,   979,   980
   };
 
   const unsigned short int
   Dhcp4Parser::yytable_[] =
   {
-      90,   124,   157,   180,   208,   225,   663,   251,   270,   287,
-     306,   243,   272,   846,   164,   200,   215,   227,   273,   265,
-     283,   847,   307,   203,    78,   232,   587,    29,   209,    30,
-      28,    31,   611,   592,   165,   201,   216,   228,   850,   266,
-     284,   859,   308,   204,    84,   233,   181,   285,   286,   340,
-     780,   252,   271,   781,   341,   153,   154,   245,   182,   155,
-     183,   783,   156,   113,   784,   210,   198,   211,   226,   115,
-     116,    98,   205,    40,   234,   207,   115,   116,   184,    42,
-      99,   100,   101,   102,   103,   104,   105,   106,   813,   176,
-     961,   814,   177,   962,   963,   964,   615,   616,   617,   618,
-     684,   685,   686,   687,   959,   688,    89,   960,   107,   108,
-     109,   110,   111,   115,   116,    44,   112,   113,    46,   703,
-     704,   705,   706,   707,   708,   115,   116,   114,   619,   368,
-     115,   116,    48,   899,   369,   900,   901,   101,   102,   103,
-     374,   117,   118,   612,   390,   375,   393,   422,   438,   391,
-     441,   394,   423,   439,   368,   442,    89,   119,    81,   743,
-     120,    50,   846,    89,   717,   718,    85,   121,   122,   441,
-     847,   123,   113,   374,   744,    86,    87,    88,   745,    32,
-      33,    34,    35,   762,   762,   115,   116,   850,   763,   764,
-     859,    89,   100,   101,   102,   103,   794,   217,   285,   286,
-      89,   795,    52,   218,   219,   220,   221,   222,   223,   798,
-     224,   438,    89,   112,   799,   325,   800,    89,   832,   107,
-     108,   109,   762,    54,   166,   167,   168,   922,   113,   570,
-     571,   390,   100,   101,   102,   103,   923,   573,   574,   169,
-      56,   115,   116,   170,   171,   172,   173,   174,   175,    58,
-     926,   101,   102,   103,   176,   927,    60,   177,   178,   107,
-     108,   109,   422,   111,    62,   179,   393,   932,   113,   245,
-     942,   936,    89,   976,    90,   943,   330,   329,   977,   224,
-     736,   115,   116,   331,   171,   112,   113,   245,   175,   332,
-     443,   444,   333,   403,   176,   339,   343,   177,   344,   115,
-     116,   351,   124,   352,   353,   179,   354,   365,   157,   912,
-     913,   914,   915,   862,   863,   583,   584,   585,   373,   383,
-     164,   384,   404,   414,   180,   408,   405,   208,    89,   412,
-     413,   416,   417,   419,   418,   424,   200,   427,   225,   215,
-     165,   429,   430,   433,   203,   434,   435,   445,   251,   446,
-     227,   209,   447,   270,   448,   449,   201,   272,   232,   216,
-     265,   450,   452,   273,   204,   283,   455,   181,    89,   453,
-     228,   456,   306,   454,   457,   458,   459,   460,   233,   182,
-     266,   183,   461,   462,   307,   284,    89,   198,   210,   463,
-     211,   465,   252,   205,   464,   466,   244,   271,   467,   184,
-     468,   226,   469,   470,   308,   471,   627,   234,   545,   546,
-     547,   628,   629,   630,   631,   632,   633,   634,   635,   636,
-     637,   638,   639,   640,   641,   642,   245,   472,   246,   247,
-     938,   473,   248,   249,   250,   474,   245,   476,   115,   116,
-     245,   267,   246,   247,   268,   269,   475,   477,   479,   480,
-     481,   484,   115,   116,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,   482,   485,   486,
-     487,   488,   489,   490,   491,   493,   494,   124,   495,   496,
-     497,   499,   157,   607,   492,   501,   502,   503,   504,   505,
-     506,   507,   508,   510,   164,   511,   513,   514,   115,   116,
-     719,   306,   623,   515,   512,   518,   522,   516,   523,   519,
-     526,   527,   720,   307,   165,   520,   525,   528,   529,   530,
-     532,   531,   533,   537,   534,    89,   535,   538,   540,   536,
-     542,   549,   721,   308,   543,    89,   544,   548,   550,    89,
+      90,   124,   157,   180,   208,   225,   272,   251,   270,   287,
+     308,   243,   273,   673,   164,   200,   215,   227,   209,   265,
+     283,    78,   309,   203,   595,   232,   252,   271,    29,    84,
+      30,   600,    31,   619,   165,   201,   216,   228,   210,   266,
+     284,   856,   310,   204,   857,   233,   860,   869,    40,   922,
+     923,   924,   925,   285,   286,   198,   211,   226,    28,   344,
+     244,   205,    42,   234,   345,    81,   372,   181,   182,   378,
+      98,   373,   183,   790,   379,    44,   791,   112,   184,    99,
+     100,   101,   102,   103,   104,   105,   106,   153,   154,    46,
+     245,   155,   246,   247,   156,    48,   248,   249,   250,   115,
+     116,   394,   115,   116,    50,   113,   395,   107,   108,   109,
+     110,   111,   285,   286,    89,   112,   113,   207,   115,   116,
+     245,   267,   246,   247,   268,   269,   114,   578,   579,   115,
+     116,   176,   115,   116,   177,   245,    52,   397,   727,   728,
+     117,   118,   398,    54,   620,   115,   116,   115,   116,   694,
+     695,   696,   697,    85,   698,   426,   119,    56,   793,   120,
+     427,   794,    86,    87,    88,   823,   121,   122,   824,   329,
+     123,   623,   624,   625,   626,    58,   971,    60,    89,   972,
+     973,   974,    32,    33,    34,    35,    62,   444,    89,   447,
+     856,    89,   445,   857,   448,   860,   869,   100,   101,   102,
+     103,   372,   333,   447,   378,   627,   753,    89,   754,   755,
+     581,   582,   772,   909,   772,   910,   911,   773,    89,   774,
+     334,    89,   335,   804,   107,   108,   109,   842,   805,   166,
+     167,   168,   969,   113,    89,   970,    89,   100,   101,   102,
+     103,   591,   592,   593,   169,   336,   115,   116,   170,   171,
+     172,   173,   174,   175,   337,   808,   444,   407,   343,   176,
+     809,   810,   177,   178,   107,   108,   109,   772,   111,   347,
+     179,   394,   932,   113,   245,   348,   933,   355,    90,   713,
+     714,   715,   716,   717,   718,   936,   115,   116,   356,   171,
+     937,   449,   450,   175,   357,   426,   397,   408,   952,   176,
+     942,   946,   177,   953,   986,   409,   124,   224,   746,   987,
+     179,   358,   157,   369,   377,   387,   388,   412,   416,   418,
+     451,   420,   421,   417,   164,   423,   459,   422,   180,   428,
+     431,   208,   433,   434,   437,    89,   438,   439,   452,   453,
+     200,   454,   225,   215,   165,   209,   455,   456,   203,   458,
+     460,   461,   251,   462,   227,   272,   463,   270,   464,   465,
+     201,   273,   232,   216,   265,   210,   466,   467,   204,   283,
+     468,   252,   471,   469,   228,    89,   271,   472,   308,   470,
+     198,   473,   233,   211,   266,   474,   205,   481,   475,   284,
+     309,   476,   181,   182,   226,   477,   478,   183,   479,   480,
+     234,   482,   483,   184,   485,   101,   102,   103,   486,   487,
+     310,   553,   554,   555,   490,   491,   492,   488,   493,   494,
+     495,   101,   102,   103,   496,   498,   497,   499,   500,   501,
+     502,   503,   948,   505,   507,   508,   509,   510,   511,   512,
+     113,   513,   514,   516,   517,   518,   519,   520,   521,   522,
+     524,   525,   528,   115,   116,   112,   113,   245,   526,   529,
+     531,   532,   533,   534,   535,   217,   536,   538,   537,   115,
+     116,   218,   219,   220,   221,   222,   223,   539,   224,   543,
+     544,   545,   540,   872,   873,   124,   615,   546,   548,   541,
+     157,   550,   551,   542,   622,   552,   556,   557,   558,   559,
+     560,   561,   164,   562,   563,   564,   565,   633,   729,   308,
+     566,    30,   569,   570,   571,   572,   576,   584,   637,   573,
+     730,   309,   165,   638,   639,   640,   641,   642,   643,   644,
+     645,   646,   647,   648,   649,   650,   651,   652,   115,   116,
+     731,   310,    89,   574,   575,   585,   587,   586,   245,   588,
+     597,   598,   589,   632,   674,   590,   678,   682,    89,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,   686,   690,   706,   709,   596,   599,   601,   738,
      292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,   303,   304,   305,   551,   552,   553,   554,   555,   556,
-     557,   558,   561,   562,    30,   563,   564,   576,   577,   565,
-     566,   567,   568,   578,   579,   580,   581,   582,   588,   589,
-     590,   591,   593,   594,   614,    89,   595,   596,   622,   597,
-     750,   598,   599,   600,   601,   602,   603,   604,   605,   606,
-     664,   668,   672,   676,   680,   608,   609,   610,   621,   696,
-     699,   728,   732,   740,   751,   752,   753,   754,   757,   758,
-     759,   760,   761,   767,   559,   766,   770,   769,   772,   773,
-     775,   776,   779,   778,   787,   801,   786,   788,   789,   790,
-     791,   792,   793,   806,   451,   805,   809,   808,   815,   816,
-     811,   817,   818,   819,   820,   821,   822,   824,   823,   825,
-     889,   826,   890,   827,   893,   892,   828,   829,   898,   882,
-     830,   883,   931,   884,   924,   885,   925,   929,   886,   887,
-     930,   940,   917,   937,   945,   918,   948,   950,   919,   920,
-     921,   933,   934,   935,   953,   955,   949,   946,   952,   954,
-     973,   974,   180,   975,   978,   251,   979,   983,   270,   980,
-     624,   840,   272,   626,   200,   833,   864,   265,   273,   287,
-     283,   866,   203,   854,   981,   831,   483,   861,   868,   881,
-     880,   856,   719,   478,   201,   848,   870,   266,   208,   835,
-     284,   225,   204,   855,   720,   181,   902,   888,   869,   252,
-     215,   857,   271,   227,   841,   845,   871,   182,   904,   183,
-     865,   232,   209,   860,   721,   198,   842,   498,   843,   944,
-     216,   205,   849,   228,   853,   524,   834,   184,   905,   867,
-     858,   233,   836,   837,   894,   872,   844,   838,   895,   517,
-     903,   839,   897,   500,   896,   521,   509,   737,   947,   210,
-     891,   211,   879,   911,   226,   726,   625,   951,   971,   982,
-     234,     0,     0,     0,     0,     0,     0,   539,     0,     0,
-       0,   541,     0,     0,     0,     0,     0,     0,     0,     0,
+     302,   303,   304,   305,   742,   602,   750,   760,   761,   762,
+     306,   307,   763,   764,   603,   767,   604,   768,   605,   606,
+     607,   608,   609,   610,   769,   611,   770,   771,   612,   798,
+     613,   614,   776,   616,   617,   618,   629,    89,   630,   631,
+     777,   779,   780,   783,   782,   786,   830,   785,   789,   788,
+     796,   797,   815,   799,   800,   801,   802,   803,   816,    89,
+     811,   819,   818,   825,   826,   821,   827,   828,   832,   834,
+     835,   899,   829,   831,   900,   902,   833,   836,   903,   934,
+     908,   935,   939,   837,   838,   839,   941,   892,   840,   893,
+     894,   895,   896,   897,   927,   928,   929,   930,   931,   940,
+     943,   944,   945,   947,   950,   955,   956,   958,   959,   960,
+     990,   962,   963,   965,   983,   964,   984,   985,   988,   567,
+     457,   993,   180,   989,   991,   251,   272,   634,   270,   489,
+     484,   850,   273,   636,   200,   871,   874,   265,   843,   287,
+     283,   876,   203,   864,   252,   858,   841,   271,   878,   891,
+     855,   866,   729,   845,   201,   875,   880,   266,   208,   530,
+     284,   225,   204,   865,   730,   859,   912,   890,   879,   844,
+     215,   867,   209,   227,   198,   898,   881,   870,   914,   504,
+     205,   232,   954,   863,   731,   913,   181,   182,   877,   868,
+     216,   183,   210,   228,   882,   851,   852,   184,   915,   847,
+     853,   233,   846,   849,   523,   527,   854,   848,   905,   904,
+     211,   906,   907,   226,   506,   889,   747,   957,   901,   234,
+     515,   736,   635,   547,   921,   961,   981,   549,   992,     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,     0,     0,
-     840,     0,     0,     0,     0,   864,     0,     0,     0,     0,
-     866,     0,   854,     0,     0,     0,   902,   868,     0,     0,
-     856,     0,     0,     0,   848,   870,     0,     0,   904,     0,
-       0,     0,   855,     0,     0,     0,     0,   869,     0,     0,
-     857,     0,     0,   841,   845,   871,     0,     0,   905,   865,
-       0,     0,     0,     0,     0,   842,     0,   843,     0,     0,
-     903,   849,     0,   853,     0,     0,     0,     0,   867,   858,
-       0,     0,     0,     0,   872,   844
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     850,     0,     0,     0,     0,   874,     0,     0,     0,     0,
+     876,     0,   864,     0,   858,     0,   912,   878,     0,   855,
+     866,     0,     0,     0,   875,   880,     0,     0,   914,     0,
+       0,     0,   865,     0,   859,   913,     0,   879,     0,     0,
+     867,     0,     0,     0,     0,   881,     0,     0,   915,     0,
+       0,     0,   863,     0,     0,     0,     0,   877,   868,     0,
+       0,     0,     0,   882,   851,   852,     0,     0,     0,   853,
+       0,     0,     0,     0,     0,   854
   };
 
   const short int
   Dhcp4Parser::yycheck_[] =
   {
-      66,    67,    68,    69,    70,    71,   553,    73,    74,    75,
-      76,    72,    74,   777,    68,    69,    70,    71,    74,    73,
-      74,   777,    76,    69,    64,    71,   494,     5,    70,     7,
-       0,     9,    15,   501,    68,    69,    70,    71,   777,    73,
-      74,   777,    76,    69,    10,    71,    69,    98,    99,     3,
-       3,    73,    74,     6,     8,    12,    13,    58,    69,    16,
-      69,     3,    19,    57,     6,    70,    69,    70,    71,    70,
-      71,    11,    69,     7,    71,    69,    70,    71,    69,     7,
-      20,    21,    22,    23,    24,    25,    26,    27,     3,    83,
-     135,     6,    86,   138,   139,   140,   128,   129,   130,   131,
-      88,    89,    90,    91,     3,    93,   157,     6,    48,    49,
-      50,    51,    52,    70,    71,     7,    56,    57,     7,   101,
-     102,   103,   104,   105,   106,    70,    71,    67,   160,     3,
-      70,    71,     7,   134,     8,   136,   137,    22,    23,    24,
-       3,    81,    82,   126,     3,     8,     3,     3,     3,     8,
-       3,     8,     8,     8,     3,     8,   157,    97,   157,     8,
-     100,     7,   926,   157,   109,   110,   132,   107,   108,     3,
-     926,   111,    57,     3,     8,   141,   142,   143,     8,   157,
-     158,   159,   160,     3,     3,    70,    71,   926,     8,     8,
-     926,   157,    21,    22,    23,    24,     3,    82,    98,    99,
-     157,     8,     7,    88,    89,    90,    91,    92,    93,     3,
-      95,     3,   157,    56,     8,   133,     8,   157,   765,    48,
-      49,    50,     3,     7,    53,    54,    55,     8,    57,    14,
-      15,     3,    21,    22,    23,    24,     8,    17,    18,    68,
-       7,    70,    71,    72,    73,    74,    75,    76,    77,     7,
-       3,    22,    23,    24,    83,     8,     7,    86,    87,    48,
-      49,    50,     3,    52,     7,    94,     3,     8,    57,    58,
-       3,     8,   157,     3,   340,     8,     3,     6,     8,    95,
-      96,    70,    71,     4,    73,    56,    57,    58,    77,     8,
-     330,   331,     3,     8,    83,     4,     4,    86,     4,    70,
-      71,     4,   368,     4,     4,    94,     4,     4,   374,    29,
-      30,    31,    32,    84,    85,    78,    79,    80,     4,     4,
-     374,     4,     3,     3,   390,     4,     8,   393,   157,     4,
-       8,     4,     4,     3,     8,     4,   390,     4,   404,   393,
-     374,     4,     4,     4,   390,     4,     4,   157,   414,     4,
-     404,   393,     4,   419,     4,     4,   390,   419,   404,   393,
-     414,     4,     4,   419,   390,   419,     4,   390,   157,   160,
-     404,     4,   438,   160,     4,     4,     4,     4,   404,   390,
-     414,   390,   158,   158,   438,   419,   157,   390,   393,   158,
-     393,     4,   414,   390,   158,     4,    28,   419,     4,   390,
-       4,   404,     4,     4,   438,     4,    28,   404,   448,   449,
-     450,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    58,     4,    60,    61,
-     898,     4,    64,    65,    66,     4,    58,     4,    70,    71,
-      58,    59,    60,    61,    62,    63,   158,     4,     4,     4,
-       4,     4,    70,    71,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   160,     4,     4,
-       4,     4,     4,     4,   158,     4,     4,   543,     4,     4,
-       4,     4,   548,   523,   160,     4,     4,     4,     4,     4,
-       4,     4,     4,     4,   548,     4,     4,     4,    70,    71,
-     566,   567,   542,     4,   158,     4,     4,   160,     4,   160,
-       4,     4,   566,   567,   548,   160,   160,   158,     4,   158,
-       4,   158,     4,     4,   160,   157,   160,     4,     4,   160,
-       4,   157,   566,   567,     7,   157,     7,     7,   157,   157,
+      66,    67,    68,    69,    70,    71,    74,    73,    74,    75,
+      76,    72,    74,   561,    68,    69,    70,    71,    70,    73,
+      74,    64,    76,    69,   500,    71,    73,    74,     5,    10,
+       7,   507,     9,    15,    68,    69,    70,    71,    70,    73,
+      74,   787,    76,    69,   787,    71,   787,   787,     7,    29,
+      30,    31,    32,    98,    99,    69,    70,    71,     0,     3,
+      28,    69,     7,    71,     8,   159,     3,    69,    69,     3,
+      11,     8,    69,     3,     8,     7,     6,    56,    69,    20,
+      21,    22,    23,    24,    25,    26,    27,    12,    13,     7,
+      58,    16,    60,    61,    19,     7,    64,    65,    66,    70,
+      71,     3,    70,    71,     7,    57,     8,    48,    49,    50,
+      51,    52,    98,    99,   159,    56,    57,    69,    70,    71,
+      58,    59,    60,    61,    62,    63,    67,    14,    15,    70,
+      71,    83,    70,    71,    86,    58,     7,     3,   109,   110,
+      81,    82,     8,     7,   126,    70,    71,    70,    71,    88,
+      89,    90,    91,   134,    93,     3,    97,     7,     3,   100,
+       8,     6,   143,   144,   145,     3,   107,   108,     6,   135,
+     111,   128,   129,   130,   131,     7,   137,     7,   159,   140,
+     141,   142,   159,   160,   161,   162,     7,     3,   159,     3,
+     936,   159,     8,   936,     8,   936,   936,    21,    22,    23,
+      24,     3,     6,     3,     3,   162,     8,   159,     8,     8,
+      17,    18,     3,   136,     3,   138,   139,     8,   159,     8,
+       3,   159,     4,     3,    48,    49,    50,   775,     8,    53,
+      54,    55,     3,    57,   159,     6,   159,    21,    22,    23,
+      24,    78,    79,    80,    68,     8,    70,    71,    72,    73,
+      74,    75,    76,    77,     3,     3,     3,     8,     4,    83,
+       8,     8,    86,    87,    48,    49,    50,     3,    52,     4,
+      94,     3,     8,    57,    58,     4,     8,     4,   344,   101,
+     102,   103,   104,   105,   106,     3,    70,    71,     4,    73,
+       8,   334,   335,    77,     4,     3,     3,     3,     3,    83,
+       8,     8,    86,     8,     3,     8,   372,    95,    96,     8,
+      94,     4,   378,     4,     4,     4,     4,     4,     4,     3,
+     159,     4,     4,     8,   378,     3,   162,     8,   394,     4,
+       4,   397,     4,     4,     4,   159,     4,     4,     4,     4,
+     394,     4,   408,   397,   378,   397,     4,     4,   394,     4,
+     162,     4,   418,     4,   408,   423,     4,   423,     4,     4,
+     394,   423,   408,   397,   418,   397,     4,   160,   394,   423,
+     160,   418,     4,   160,   408,   159,   423,     4,   444,   160,
+     394,     4,   408,   397,   418,     4,   394,   160,     4,   423,
+     444,     4,   394,   394,   408,     4,     4,   394,     4,     4,
+     408,     4,     4,   394,     4,    22,    23,    24,     4,     4,
+     444,   454,   455,   456,     4,     4,     4,   162,     4,     4,
+       4,    22,    23,    24,     4,   162,   160,     4,     4,     4,
+       4,     4,   908,     4,     4,     4,     4,     4,     4,     4,
+      57,     4,     4,     4,     4,   160,     4,     4,     4,   162,
+       4,   162,     4,    70,    71,    56,    57,    58,   162,     4,
+     162,     4,     4,   160,     4,    82,   160,     4,   160,    70,
+      71,    88,    89,    90,    91,    92,    93,     4,    95,     4,
+       4,     4,   162,    84,    85,   551,   529,     4,     4,   162,
+     556,     4,     7,   162,   127,     7,     7,   159,   159,   159,
+       7,     7,   556,     5,     5,     5,     5,   550,   574,   575,
+       5,     7,   159,     5,     5,     5,     5,   159,    28,     7,
+     574,   575,   556,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    70,    71,
+     574,   575,   159,     7,     7,   159,     5,   159,    58,   159,
+       5,     7,   159,     5,     7,   159,     7,     7,   159,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,     7,     7,     7,     7,   159,   159,   159,     7,
      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   157,     7,     7,     5,     5,     5,
-       5,     5,   157,     5,     7,     5,     5,   157,   157,     7,
-       7,     7,     5,   157,     5,   157,   157,   157,   157,     5,
-       7,   157,   157,   157,   127,   157,   157,   157,     5,   157,
-       4,   157,   157,   157,   157,   157,   157,   157,   157,   157,
-       7,     7,     7,     7,     7,   157,   157,   157,   157,     7,
-       7,     7,     7,     7,     4,     4,     4,     4,     4,     4,
-       4,     4,     4,     3,   469,     6,     3,     6,     6,     3,
-       6,     3,     3,     6,     3,   157,     6,     4,     4,     4,
-       4,     4,     4,     3,   340,     6,     3,     6,     4,     4,
-       8,     4,     4,   158,   160,   158,   160,     4,   158,     4,
-       4,   158,     4,   158,     3,     6,   158,   158,     4,   158,
-     160,   158,     3,   158,     8,   158,     8,     4,   158,   158,
-       8,     4,   157,     8,     4,   157,     4,     4,   157,   157,
-     157,   157,   157,   157,     5,     7,   158,   160,   157,   157,
-       4,     4,   768,     4,     4,   771,   160,   157,   774,   158,
-     543,   777,   774,   548,   768,   767,   782,   771,   774,   785,
-     774,   782,   768,   777,   158,   762,   374,   780,   782,   787,
-     785,   777,   798,   368,   768,   777,   782,   771,   804,   770,
-     774,   807,   768,   777,   798,   768,   812,   794,   782,   771,
-     804,   777,   774,   807,   777,   777,   782,   768,   812,   768,
-     782,   807,   804,   779,   798,   768,   777,   390,   777,   926,
-     804,   768,   777,   807,   777,   422,   768,   768,   812,   782,
-     777,   807,   771,   773,   804,   782,   777,   774,   806,   414,
-     812,   776,   809,   393,   807,   419,   404,   590,   931,   804,
-     798,   804,   783,   813,   807,   567,   544,   942,   959,   976,
-     807,    -1,    -1,    -1,    -1,    -1,    -1,   438,    -1,    -1,
-      -1,   441,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     122,   123,   124,   125,     7,   159,     7,     4,     4,     4,
+     132,   133,     4,     4,   159,     4,   159,     4,   159,   159,
+     159,   159,   159,   159,     4,   159,     4,     4,   159,     4,
+     159,   159,     6,   159,   159,   159,   159,   159,   159,   159,
+       3,     6,     3,     3,     6,     3,   162,     6,     3,     6,
+       6,     3,     6,     4,     4,     4,     4,     4,     3,   159,
+     159,     3,     6,     4,     4,     8,     4,     4,   162,     4,
+       4,     4,   160,   160,     4,     6,   160,   160,     3,     8,
+       4,     8,     4,   160,   160,   160,     3,   160,   162,   160,
+     160,   160,   160,   160,   159,   159,   159,   159,   159,     8,
+     159,   159,   159,     8,     4,     4,   162,     4,   160,     4,
+     160,   159,     5,     7,     4,   159,     4,     4,     4,   475,
+     344,   159,   778,   162,   160,   781,   784,   551,   784,   378,
+     372,   787,   784,   556,   778,   790,   792,   781,   777,   795,
+     784,   792,   778,   787,   781,   787,   772,   784,   792,   797,
+     787,   787,   808,   780,   778,   792,   792,   781,   814,   426,
+     784,   817,   778,   787,   808,   787,   822,   795,   792,   778,
+     814,   787,   814,   817,   778,   804,   792,   789,   822,   394,
+     778,   817,   936,   787,   808,   822,   778,   778,   792,   787,
+     814,   778,   814,   817,   792,   787,   787,   778,   822,   783,
+     787,   817,   781,   786,   418,   423,   787,   784,   816,   814,
+     814,   817,   819,   817,   397,   793,   598,   941,   808,   817,
+     408,   575,   552,   444,   823,   952,   969,   447,   986,    -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,    -1,    -1,
-     926,    -1,    -1,    -1,    -1,   931,    -1,    -1,    -1,    -1,
-     931,    -1,   926,    -1,    -1,    -1,   942,   931,    -1,    -1,
-     926,    -1,    -1,    -1,   926,   931,    -1,    -1,   942,    -1,
-      -1,    -1,   926,    -1,    -1,    -1,    -1,   931,    -1,    -1,
-     926,    -1,    -1,   926,   926,   931,    -1,    -1,   942,   931,
-      -1,    -1,    -1,    -1,    -1,   926,    -1,   926,    -1,    -1,
-     942,   926,    -1,   926,    -1,    -1,    -1,    -1,   931,   926,
-      -1,    -1,    -1,    -1,   931,   926
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     936,    -1,    -1,    -1,    -1,   941,    -1,    -1,    -1,    -1,
+     941,    -1,   936,    -1,   936,    -1,   952,   941,    -1,   936,
+     936,    -1,    -1,    -1,   941,   941,    -1,    -1,   952,    -1,
+      -1,    -1,   936,    -1,   936,   952,    -1,   941,    -1,    -1,
+     936,    -1,    -1,    -1,    -1,   941,    -1,    -1,   952,    -1,
+      -1,    -1,   936,    -1,    -1,    -1,    -1,   941,   936,    -1,
+      -1,    -1,    -1,   941,   936,   936,    -1,    -1,    -1,   936,
+      -1,    -1,    -1,    -1,    -1,   936
   };
 
   const unsigned short int
   Dhcp4Parser::yystos_[] =
   {
-       0,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,     0,     5,
-       7,     9,   157,   158,   159,   160,   176,   177,   178,   183,
-       7,   192,     7,   198,     7,   212,     7,   299,     7,   382,
-       7,   398,     7,   334,     7,   340,     7,   364,     7,   275,
-       7,   453,     7,   488,   184,   179,   193,   199,   213,   300,
-     383,   399,   335,   341,   365,   276,   454,   489,   176,   185,
-     186,   157,   181,   182,    10,   132,   141,   142,   143,   157,
-     191,   194,   195,   196,   480,   482,   484,   486,    11,    20,
+       0,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,     0,     5,
+       7,     9,   159,   160,   161,   162,   178,   179,   180,   185,
+       7,   194,     7,   200,     7,   214,     7,   301,     7,   384,
+       7,   400,     7,   336,     7,   342,     7,   366,     7,   277,
+       7,   455,     7,   494,   186,   181,   195,   201,   215,   302,
+     385,   401,   337,   343,   367,   278,   456,   495,   178,   187,
+     188,   159,   183,   184,    10,   134,   143,   144,   145,   159,
+     193,   196,   197,   198,   486,   488,   490,   492,    11,    20,
       21,    22,    23,    24,    25,    26,    27,    48,    49,    50,
       51,    52,    56,    57,    67,    70,    71,    81,    82,    97,
-     100,   107,   108,   111,   191,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   223,   225,   227,   260,   269,   283,
-     293,   324,   332,   358,   388,   390,   403,   405,   407,   430,
-     442,   443,   451,    12,    13,    16,    19,   191,   210,   211,
-     214,   216,   219,   222,   388,   390,    53,    54,    55,    68,
+     100,   107,   108,   111,   193,   202,   203,   204,   205,   206,
+     207,   208,   209,   210,   225,   227,   229,   262,   271,   285,
+     295,   326,   334,   360,   390,   392,   405,   407,   409,   432,
+     444,   445,   453,    12,    13,    16,    19,   193,   212,   213,
+     216,   218,   221,   224,   390,   392,    53,    54,    55,    68,
       72,    73,    74,    75,    76,    77,    83,    86,    87,    94,
-     191,   202,   203,   204,   207,   301,   302,   303,   305,   307,
-     309,   311,   313,   315,   317,   319,   322,   323,   358,   376,
-     388,   390,   392,   403,   405,   407,   427,    69,   191,   315,
-     317,   358,   384,   385,   386,   388,   390,    82,    88,    89,
-      90,    91,    92,    93,    95,   191,   358,   388,   390,   400,
-     401,   402,   403,   405,   407,   409,   413,   415,   417,   419,
-     421,   423,   425,   332,    28,    58,    60,    61,    64,    65,
-      66,   191,   245,   342,   343,   344,   345,   346,   347,   348,
-     350,   352,   354,   355,   357,   388,   390,    59,    62,    63,
-     191,   245,   346,   352,   366,   367,   368,   369,   370,   372,
-     373,   374,   375,   388,   390,    98,    99,   191,   277,   278,
-     279,   281,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   191,   388,   390,   455,
-     456,   457,   458,   460,   462,   463,   465,   466,   467,   470,
-     472,   473,   474,   475,   478,   133,   490,   491,   492,     6,
-       3,     4,     8,     3,   197,   487,   481,   483,   485,     4,
-       3,     8,   209,     4,     4,   404,   406,   408,   224,   226,
-     228,     4,     4,     4,     4,   294,   333,   359,   325,   389,
-     391,   261,   431,   270,   284,     4,   444,   452,     3,     8,
-     215,   217,   220,     4,     3,     8,   306,   308,   310,   377,
-     304,   312,   314,     4,     4,   320,   318,   316,   393,   428,
-       3,     8,   387,     3,     8,   426,   414,   416,   420,   418,
-     424,   422,   410,     8,     3,     8,   349,   246,     4,   353,
-     351,   356,     4,     8,     3,   371,     4,     4,     8,     3,
-     280,   282,     3,     8,     4,   459,   461,     4,   464,     4,
-       4,   468,   471,     4,     4,     4,   476,   479,     3,     8,
-     493,     3,     8,   176,   176,   157,     4,     4,     4,     4,
-       4,   195,     4,   160,   160,     4,     4,     4,     4,     4,
-       4,   158,   158,   158,   158,     4,     4,     4,     4,     4,
-       4,     4,     4,     4,     4,   158,     4,     4,   201,     4,
-       4,     4,   160,   211,     4,     4,     4,     4,     4,     4,
-       4,   158,   160,     4,     4,     4,     4,     4,   302,     4,
-     385,     4,     4,     4,     4,     4,     4,     4,     4,   402,
-       4,     4,   158,     4,     4,     4,   160,   344,     4,   160,
-     160,   368,     4,     4,   278,   160,     4,     4,   158,     4,
-     158,   158,     4,     4,   160,   160,   160,     4,     4,   456,
-       4,   491,     4,     7,     7,   176,   176,   176,     7,   157,
-     157,   157,     7,     7,     5,     5,     5,     5,     5,   178,
-     180,   157,     5,     5,     5,     7,     7,     7,     5,   187,
-      14,    15,   218,    17,    18,   221,   157,   157,   157,     5,
-     157,   157,   157,    78,    79,    80,   321,   187,   157,     5,
-       7,   157,   187,   157,   157,   157,   157,   157,   157,   157,
-     157,   157,   157,   157,   157,   157,   157,   176,   157,   157,
-     157,    15,   126,   469,   127,   128,   129,   130,   131,   160,
-     477,   157,     5,   176,   200,   490,   210,    28,    33,    34,
+     193,   204,   205,   206,   209,   303,   304,   305,   307,   309,
+     311,   313,   315,   317,   319,   321,   324,   325,   360,   378,
+     390,   392,   394,   405,   407,   409,   429,    69,   193,   317,
+     319,   360,   386,   387,   388,   390,   392,    82,    88,    89,
+      90,    91,    92,    93,    95,   193,   360,   390,   392,   402,
+     403,   404,   405,   407,   409,   411,   415,   417,   419,   421,
+     423,   425,   427,   334,    28,    58,    60,    61,    64,    65,
+      66,   193,   247,   344,   345,   346,   347,   348,   349,   350,
+     352,   354,   356,   357,   359,   390,   392,    59,    62,    63,
+     193,   247,   348,   354,   368,   369,   370,   371,   372,   374,
+     375,   376,   377,   390,   392,    98,    99,   193,   279,   280,
+     281,   283,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   132,   133,   193,   390,
+     392,   457,   458,   459,   460,   462,   464,   465,   467,   468,
+     469,   472,   474,   475,   476,   477,   480,   482,   484,   135,
+     496,   497,   498,     6,     3,     4,     8,     3,   199,   493,
+     487,   489,   491,     4,     3,     8,   211,     4,     4,   406,
+     408,   410,   226,   228,   230,     4,     4,     4,     4,   296,
+     335,   361,   327,   391,   393,   263,   433,   272,   286,     4,
+     446,   454,     3,     8,   217,   219,   222,     4,     3,     8,
+     308,   310,   312,   379,   306,   314,   316,     4,     4,   322,
+     320,   318,   395,   430,     3,     8,   389,     3,     8,   428,
+     416,   418,   422,   420,   426,   424,   412,     8,     3,     8,
+     351,   248,     4,   355,   353,   358,     4,     8,     3,   373,
+       4,     4,     8,     3,   282,   284,     3,     8,     4,   461,
+     463,     4,   466,     4,     4,   470,   473,     4,     4,     4,
+     478,   481,   483,   485,     3,     8,   499,     3,     8,   178,
+     178,   159,     4,     4,     4,     4,     4,   197,     4,   162,
+     162,     4,     4,     4,     4,     4,     4,   160,   160,   160,
+     160,     4,     4,     4,     4,     4,     4,     4,     4,     4,
+       4,   160,     4,     4,   203,     4,     4,     4,   162,   213,
+       4,     4,     4,     4,     4,     4,     4,   160,   162,     4,
+       4,     4,     4,     4,   304,     4,   387,     4,     4,     4,
+       4,     4,     4,     4,     4,   404,     4,     4,   160,     4,
+       4,     4,   162,   346,     4,   162,   162,   370,     4,     4,
+     280,   162,     4,     4,   160,     4,   160,   160,     4,     4,
+     162,   162,   162,     4,     4,     4,     4,   458,     4,   497,
+       4,     7,     7,   178,   178,   178,     7,   159,   159,   159,
+       7,     7,     5,     5,     5,     5,     5,   180,   182,   159,
+       5,     5,     5,     7,     7,     7,     5,   189,    14,    15,
+     220,    17,    18,   223,   159,   159,   159,     5,   159,   159,
+     159,    78,    79,    80,   323,   189,   159,     5,     7,   159,
+     189,   159,   159,   159,   159,   159,   159,   159,   159,   159,
+     159,   159,   159,   159,   159,   178,   159,   159,   159,    15,
+     126,   471,   127,   128,   129,   130,   131,   162,   479,   159,
+     159,   159,     5,   178,   202,   496,   212,    28,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,   191,   233,   234,   235,   238,   240,   242,
-     244,   245,   247,   248,   249,   250,   251,   252,   253,   254,
-     256,   258,   259,   233,     7,   229,   230,   231,     7,   295,
-     296,   297,     7,   336,   337,   338,     7,   360,   361,   362,
-       7,   326,   327,   328,    88,    89,    90,    91,    93,   262,
-     263,   264,   265,   266,   267,   268,     7,   432,   433,     7,
-     271,   272,   273,   101,   102,   103,   104,   105,   106,   285,
-     286,   287,   288,   289,   290,   291,   292,   109,   110,   191,
-     388,   390,   445,   446,   447,   449,   455,   188,     7,   378,
-     379,   380,     7,   394,   395,   396,    96,   409,   411,   429,
-       7,   494,   495,     8,     8,     8,   236,   239,   241,   243,
-       4,     4,     4,     4,     4,   255,   257,     4,     4,     4,
-       4,     4,     3,     8,     8,   232,     6,     3,   298,     6,
-       3,   339,     6,     3,   363,     6,     3,   329,     6,     3,
-       3,     6,   434,     3,     6,   274,     6,     3,     4,     4,
-       4,     4,     4,     4,     3,     8,   448,   450,     3,     8,
-       8,   157,   189,   190,   381,     6,     3,   397,     6,     3,
-     412,     8,   496,     3,     6,     4,     4,     4,     4,   158,
-     160,   158,   160,   158,     4,     4,   158,   158,   158,   158,
-     160,   234,   233,   231,   301,   297,   342,   338,   366,   362,
-     191,   202,   203,   204,   207,   245,   293,   311,   315,   317,
-     319,   330,   331,   358,   388,   390,   403,   405,   407,   427,
-     328,   263,    84,    85,   191,   245,   332,   358,   388,   390,
-     403,   405,   407,   435,   436,   437,   438,   439,   441,   433,
-     277,   273,   158,   158,   158,   158,   158,   158,   286,     4,
-       4,   446,     6,     3,   384,   380,   400,   396,     4,   134,
-     136,   137,   191,   245,   388,   390,   497,   498,   499,   500,
-     502,   495,    29,    30,    31,    32,   237,   157,   157,   157,
-     157,   157,     8,     8,     8,     8,     3,     8,   440,     4,
-       8,     3,     8,   157,   157,   157,     8,     8,   187,   503,
-       4,   501,     3,     8,   331,     4,   160,   437,     4,   158,
-       4,   498,   157,     5,   157,     7,   504,   505,   506,     3,
-       6,   135,   138,   139,   140,   507,   508,   509,   511,   512,
-     513,   505,   510,     4,     4,     4,     3,     8,     4,   160,
-     158,   158,   508,   157
+      45,    46,    47,   193,   235,   236,   237,   240,   242,   244,
+     246,   247,   249,   250,   251,   252,   253,   254,   255,   256,
+     258,   260,   261,   235,     7,   231,   232,   233,     7,   297,
+     298,   299,     7,   338,   339,   340,     7,   362,   363,   364,
+       7,   328,   329,   330,    88,    89,    90,    91,    93,   264,
+     265,   266,   267,   268,   269,   270,     7,   434,   435,     7,
+     273,   274,   275,   101,   102,   103,   104,   105,   106,   287,
+     288,   289,   290,   291,   292,   293,   294,   109,   110,   193,
+     390,   392,   447,   448,   449,   451,   457,   190,     7,   380,
+     381,   382,     7,   396,   397,   398,    96,   411,   413,   431,
+       7,   500,   501,     8,     8,     8,   238,   241,   243,   245,
+       4,     4,     4,     4,     4,   257,   259,     4,     4,     4,
+       4,     4,     3,     8,     8,   234,     6,     3,   300,     6,
+       3,   341,     6,     3,   365,     6,     3,   331,     6,     3,
+       3,     6,   436,     3,     6,   276,     6,     3,     4,     4,
+       4,     4,     4,     4,     3,     8,   450,   452,     3,     8,
+       8,   159,   191,   192,   383,     6,     3,   399,     6,     3,
+     414,     8,   502,     3,     6,     4,     4,     4,     4,   160,
+     162,   160,   162,   160,     4,     4,   160,   160,   160,   160,
+     162,   236,   235,   233,   303,   299,   344,   340,   368,   364,
+     193,   204,   205,   206,   209,   247,   295,   313,   317,   319,
+     321,   332,   333,   360,   390,   392,   405,   407,   409,   429,
+     330,   265,    84,    85,   193,   247,   334,   360,   390,   392,
+     405,   407,   409,   437,   438,   439,   440,   441,   443,   435,
+     279,   275,   160,   160,   160,   160,   160,   160,   288,     4,
+       4,   448,     6,     3,   386,   382,   402,   398,     4,   136,
+     138,   139,   193,   247,   390,   392,   503,   504,   505,   506,
+     508,   501,    29,    30,    31,    32,   239,   159,   159,   159,
+     159,   159,     8,     8,     8,     8,     3,     8,   442,     4,
+       8,     3,     8,   159,   159,   159,     8,     8,   189,   509,
+       4,   507,     3,     8,   333,     4,   162,   439,     4,   160,
+       4,   504,   159,     5,   159,     7,   510,   511,   512,     3,
+       6,   137,   140,   141,   142,   513,   514,   515,   517,   518,
+     519,   511,   516,     4,     4,     4,     3,     8,     4,   162,
+     160,   160,   514,   159
   };
 
   const unsigned short int
   Dhcp4Parser::yyr1_[] =
   {
-       0,   161,   163,   162,   164,   162,   165,   162,   166,   162,
-     167,   162,   168,   162,   169,   162,   170,   162,   171,   162,
-     172,   162,   173,   162,   174,   162,   175,   162,   176,   176,
-     176,   176,   176,   176,   176,   177,   179,   178,   180,   181,
-     181,   182,   182,   184,   183,   185,   185,   186,   186,   188,
-     187,   189,   189,   190,   190,   191,   193,   192,   194,   194,
-     195,   195,   195,   195,   195,   195,   197,   196,   199,   198,
-     200,   200,   201,   201,   201,   201,   201,   201,   201,   201,
-     201,   201,   201,   201,   201,   201,   201,   201,   201,   201,
-     201,   201,   201,   201,   201,   201,   201,   201,   201,   202,
-     203,   204,   205,   206,   207,   209,   208,   210,   210,   211,
-     211,   211,   211,   211,   211,   211,   213,   212,   215,   214,
-     217,   216,   218,   218,   220,   219,   221,   221,   222,   224,
-     223,   226,   225,   228,   227,   229,   229,   230,   230,   232,
-     231,   233,   233,   234,   234,   234,   234,   234,   234,   234,
-     234,   234,   234,   234,   234,   234,   234,   234,   234,   234,
-     234,   236,   235,   237,   237,   237,   237,   239,   238,   241,
-     240,   243,   242,   244,   246,   245,   247,   248,   249,   250,
-     251,   252,   253,   255,   254,   257,   256,   258,   259,   261,
-     260,   262,   262,   263,   263,   263,   263,   263,   264,   265,
-     266,   267,   268,   270,   269,   271,   271,   272,   272,   274,
-     273,   276,   275,   277,   277,   277,   278,   278,   280,   279,
-     282,   281,   284,   283,   285,   285,   286,   286,   286,   286,
-     286,   286,   287,   288,   289,   290,   291,   292,   294,   293,
-     295,   295,   296,   296,   298,   297,   300,   299,   301,   301,
-     302,   302,   302,   302,   302,   302,   302,   302,   302,   302,
-     302,   302,   302,   302,   302,   302,   302,   302,   302,   302,
-     302,   302,   302,   302,   302,   304,   303,   306,   305,   308,
-     307,   310,   309,   312,   311,   314,   313,   316,   315,   318,
-     317,   320,   319,   321,   321,   321,   322,   323,   325,   324,
-     326,   326,   327,   327,   329,   328,   330,   330,   331,   331,
-     331,   331,   331,   331,   331,   331,   331,   331,   331,   331,
-     331,   331,   331,   331,   331,   331,   333,   332,   335,   334,
-     336,   336,   337,   337,   339,   338,   341,   340,   342,   342,
-     343,   343,   344,   344,   344,   344,   344,   344,   344,   344,
-     344,   344,   345,   346,   347,   349,   348,   351,   350,   353,
-     352,   354,   356,   355,   357,   359,   358,   360,   360,   361,
-     361,   363,   362,   365,   364,   366,   366,   367,   367,   368,
-     368,   368,   368,   368,   368,   368,   368,   368,   369,   371,
-     370,   372,   373,   374,   375,   377,   376,   378,   378,   379,
-     379,   381,   380,   383,   382,   384,   384,   385,   385,   385,
-     385,   385,   385,   385,   387,   386,   389,   388,   391,   390,
-     393,   392,   394,   394,   395,   395,   397,   396,   399,   398,
-     400,   400,   401,   401,   402,   402,   402,   402,   402,   402,
-     402,   402,   402,   402,   402,   402,   402,   402,   402,   404,
-     403,   406,   405,   408,   407,   410,   409,   412,   411,   414,
-     413,   416,   415,   418,   417,   420,   419,   422,   421,   424,
-     423,   426,   425,   428,   427,   429,   429,   431,   430,   432,
-     432,   434,   433,   435,   435,   436,   436,   437,   437,   437,
-     437,   437,   437,   437,   437,   437,   437,   437,   438,   440,
-     439,   441,   442,   444,   443,   445,   445,   446,   446,   446,
-     446,   446,   448,   447,   450,   449,   452,   451,   454,   453,
-     455,   455,   456,   456,   456,   456,   456,   456,   456,   456,
-     456,   456,   456,   456,   456,   456,   456,   456,   456,   457,
-     459,   458,   461,   460,   462,   464,   463,   465,   466,   468,
-     467,   469,   469,   471,   470,   472,   473,   474,   476,   475,
-     477,   477,   477,   477,   477,   479,   478,   481,   480,   483,
-     482,   485,   484,   487,   486,   489,   488,   490,   490,   491,
-     493,   492,   494,   494,   496,   495,   497,   497,   498,   498,
-     498,   498,   498,   498,   498,   499,   501,   500,   503,   502,
-     504,   504,   506,   505,   507,   507,   508,   508,   508,   508,
-     510,   509,   511,   512,   513
+       0,   163,   165,   164,   166,   164,   167,   164,   168,   164,
+     169,   164,   170,   164,   171,   164,   172,   164,   173,   164,
+     174,   164,   175,   164,   176,   164,   177,   164,   178,   178,
+     178,   178,   178,   178,   178,   179,   181,   180,   182,   183,
+     183,   184,   184,   186,   185,   187,   187,   188,   188,   190,
+     189,   191,   191,   192,   192,   193,   195,   194,   196,   196,
+     197,   197,   197,   197,   197,   197,   199,   198,   201,   200,
+     202,   202,   203,   203,   203,   203,   203,   203,   203,   203,
+     203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
+     203,   203,   203,   203,   203,   203,   203,   203,   203,   204,
+     205,   206,   207,   208,   209,   211,   210,   212,   212,   213,
+     213,   213,   213,   213,   213,   213,   215,   214,   217,   216,
+     219,   218,   220,   220,   222,   221,   223,   223,   224,   226,
+     225,   228,   227,   230,   229,   231,   231,   232,   232,   234,
+     233,   235,   235,   236,   236,   236,   236,   236,   236,   236,
+     236,   236,   236,   236,   236,   236,   236,   236,   236,   236,
+     236,   238,   237,   239,   239,   239,   239,   241,   240,   243,
+     242,   245,   244,   246,   248,   247,   249,   250,   251,   252,
+     253,   254,   255,   257,   256,   259,   258,   260,   261,   263,
+     262,   264,   264,   265,   265,   265,   265,   265,   266,   267,
+     268,   269,   270,   272,   271,   273,   273,   274,   274,   276,
+     275,   278,   277,   279,   279,   279,   280,   280,   282,   281,
+     284,   283,   286,   285,   287,   287,   288,   288,   288,   288,
+     288,   288,   289,   290,   291,   292,   293,   294,   296,   295,
+     297,   297,   298,   298,   300,   299,   302,   301,   303,   303,
+     304,   304,   304,   304,   304,   304,   304,   304,   304,   304,
+     304,   304,   304,   304,   304,   304,   304,   304,   304,   304,
+     304,   304,   304,   304,   304,   306,   305,   308,   307,   310,
+     309,   312,   311,   314,   313,   316,   315,   318,   317,   320,
+     319,   322,   321,   323,   323,   323,   324,   325,   327,   326,
+     328,   328,   329,   329,   331,   330,   332,   332,   333,   333,
+     333,   333,   333,   333,   333,   333,   333,   333,   333,   333,
+     333,   333,   333,   333,   333,   333,   335,   334,   337,   336,
+     338,   338,   339,   339,   341,   340,   343,   342,   344,   344,
+     345,   345,   346,   346,   346,   346,   346,   346,   346,   346,
+     346,   346,   347,   348,   349,   351,   350,   353,   352,   355,
+     354,   356,   358,   357,   359,   361,   360,   362,   362,   363,
+     363,   365,   364,   367,   366,   368,   368,   369,   369,   370,
+     370,   370,   370,   370,   370,   370,   370,   370,   371,   373,
+     372,   374,   375,   376,   377,   379,   378,   380,   380,   381,
+     381,   383,   382,   385,   384,   386,   386,   387,   387,   387,
+     387,   387,   387,   387,   389,   388,   391,   390,   393,   392,
+     395,   394,   396,   396,   397,   397,   399,   398,   401,   400,
+     402,   402,   403,   403,   404,   404,   404,   404,   404,   404,
+     404,   404,   404,   404,   404,   404,   404,   404,   404,   406,
+     405,   408,   407,   410,   409,   412,   411,   414,   413,   416,
+     415,   418,   417,   420,   419,   422,   421,   424,   423,   426,
+     425,   428,   427,   430,   429,   431,   431,   433,   432,   434,
+     434,   436,   435,   437,   437,   438,   438,   439,   439,   439,
+     439,   439,   439,   439,   439,   439,   439,   439,   440,   442,
+     441,   443,   444,   446,   445,   447,   447,   448,   448,   448,
+     448,   448,   450,   449,   452,   451,   454,   453,   456,   455,
+     457,   457,   458,   458,   458,   458,   458,   458,   458,   458,
+     458,   458,   458,   458,   458,   458,   458,   458,   458,   458,
+     458,   459,   461,   460,   463,   462,   464,   466,   465,   467,
+     468,   470,   469,   471,   471,   473,   472,   474,   475,   476,
+     478,   477,   479,   479,   479,   479,   479,   481,   480,   483,
+     482,   485,   484,   487,   486,   489,   488,   491,   490,   493,
+     492,   495,   494,   496,   496,   497,   499,   498,   500,   500,
+     502,   501,   503,   503,   504,   504,   504,   504,   504,   504,
+     504,   505,   507,   506,   509,   508,   510,   510,   512,   511,
+     513,   513,   514,   514,   514,   514,   516,   515,   517,   518,
+     519
   };
 
   const unsigned char
@@ -4400,15 +4442,16 @@ namespace isc { namespace dhcp {
        4,     3,     3,     0,     6,     1,     3,     1,     1,     1,
        1,     1,     0,     4,     0,     4,     0,     6,     0,     4,
        1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
-       0,     4,     0,     4,     3,     0,     4,     3,     3,     0,
-       4,     1,     1,     0,     4,     3,     3,     3,     0,     4,
-       1,     1,     1,     1,     1,     0,     4,     0,     4,     0,
-       4,     0,     4,     0,     6,     0,     4,     1,     3,     1,
-       0,     6,     1,     3,     0,     4,     1,     3,     1,     1,
-       1,     1,     1,     1,     1,     3,     0,     4,     0,     6,
-       1,     3,     0,     4,     1,     3,     1,     1,     1,     1,
-       0,     4,     3,     3,     3
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     3,     0,     4,     0,     4,     3,     0,     4,     3,
+       3,     0,     4,     1,     1,     0,     4,     3,     3,     3,
+       0,     4,     1,     1,     1,     1,     1,     0,     4,     0,
+       4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
+       6,     0,     4,     1,     3,     1,     0,     6,     1,     3,
+       0,     4,     1,     3,     1,     1,     1,     1,     1,     1,
+       1,     3,     0,     4,     0,     6,     1,     3,     0,     4,
+       1,     3,     1,     1,     1,     1,     0,     4,     3,     3,
+       3
   };
 
 
@@ -4457,21 +4500,22 @@ namespace isc { namespace dhcp {
   "\"override-no-update\"", "\"override-client-update\"",
   "\"replace-client-name\"", "\"generated-prefix\"", "\"tcp\"", "\"JSON\"",
   "\"when-present\"", "\"never\"", "\"always\"", "\"when-not-present\"",
-  "\"Logging\"", "\"loggers\"", "\"output_options\"", "\"output\"",
-  "\"debuglevel\"", "\"severity\"", "\"flush\"", "\"maxsize\"",
-  "\"maxver\"", "\"Dhcp6\"", "\"DhcpDdns\"", "\"Control-agent\"",
-  "TOPLEVEL_JSON", "TOPLEVEL_DHCP4", "SUB_DHCP4", "SUB_INTERFACES4",
-  "SUB_SUBNET4", "SUB_POOL4", "SUB_RESERVATION", "SUB_OPTION_DEFS",
-  "SUB_OPTION_DEF", "SUB_OPTION_DATA", "SUB_HOOKS_LIBRARY",
-  "SUB_DHCP_DDNS", "SUB_LOGGING", "\"constant string\"", "\"integer\"",
-  "\"floating point\"", "\"boolean\"", "$accept", "start", "$@1", "$@2",
-  "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9", "$@10", "$@11", "$@12",
-  "$@13", "value", "sub_json", "map2", "$@14", "map_value", "map_content",
-  "not_empty_map", "list_generic", "$@15", "list_content",
-  "not_empty_list", "list_strings", "$@16", "list_strings_content",
-  "not_empty_list_strings", "unknown_map_entry", "syntax_map", "$@17",
-  "global_objects", "global_object", "dhcp4_object", "$@18", "sub_dhcp4",
-  "$@19", "global_params", "global_param", "valid_lifetime", "renew_timer",
+  "\"hostname-char-set\"", "\"hostname-char-replacement\"", "\"Logging\"",
+  "\"loggers\"", "\"output_options\"", "\"output\"", "\"debuglevel\"",
+  "\"severity\"", "\"flush\"", "\"maxsize\"", "\"maxver\"", "\"Dhcp6\"",
+  "\"DhcpDdns\"", "\"Control-agent\"", "TOPLEVEL_JSON", "TOPLEVEL_DHCP4",
+  "SUB_DHCP4", "SUB_INTERFACES4", "SUB_SUBNET4", "SUB_POOL4",
+  "SUB_RESERVATION", "SUB_OPTION_DEFS", "SUB_OPTION_DEF",
+  "SUB_OPTION_DATA", "SUB_HOOKS_LIBRARY", "SUB_DHCP_DDNS", "SUB_LOGGING",
+  "\"constant string\"", "\"integer\"", "\"floating point\"",
+  "\"boolean\"", "$accept", "start", "$@1", "$@2", "$@3", "$@4", "$@5",
+  "$@6", "$@7", "$@8", "$@9", "$@10", "$@11", "$@12", "$@13", "value",
+  "sub_json", "map2", "$@14", "map_value", "map_content", "not_empty_map",
+  "list_generic", "$@15", "list_content", "not_empty_list", "list_strings",
+  "$@16", "list_strings_content", "not_empty_list_strings",
+  "unknown_map_entry", "syntax_map", "$@17", "global_objects",
+  "global_object", "dhcp4_object", "$@18", "sub_dhcp4", "$@19",
+  "global_params", "global_param", "valid_lifetime", "renew_timer",
   "rebind_timer", "decline_probation_period", "echo_client_id",
   "match_client_id", "interfaces_config", "$@20",
   "interfaces_config_params", "interfaces_config_param", "sub_interfaces4",
@@ -4540,82 +4584,84 @@ namespace isc { namespace dhcp {
   "ncr_protocol", "$@102", "ncr_protocol_value", "ncr_format", "$@103",
   "always_include_fqdn", "override_no_update", "override_client_update",
   "replace_client_name", "$@104", "replace_client_name_value",
-  "generated_prefix", "$@105", "dhcp6_json_object", "$@106",
-  "dhcpddns_json_object", "$@107", "control_agent_json_object", "$@108",
-  "logging_object", "$@109", "sub_logging", "$@110", "logging_params",
-  "logging_param", "loggers", "$@111", "loggers_entries", "logger_entry",
-  "$@112", "logger_params", "logger_param", "debuglevel", "severity",
-  "$@113", "output_options_list", "$@114", "output_options_list_content",
-  "output_entry", "$@115", "output_params_list", "output_params", "output",
-  "$@116", "flush", "maxsize", "maxver", YY_NULLPTR
+  "generated_prefix", "$@105", "hostname_char_set", "$@106",
+  "hostname_char_replacement", "$@107", "dhcp6_json_object", "$@108",
+  "dhcpddns_json_object", "$@109", "control_agent_json_object", "$@110",
+  "logging_object", "$@111", "sub_logging", "$@112", "logging_params",
+  "logging_param", "loggers", "$@113", "loggers_entries", "logger_entry",
+  "$@114", "logger_params", "logger_param", "debuglevel", "severity",
+  "$@115", "output_options_list", "$@116", "output_options_list_content",
+  "output_entry", "$@117", "output_params_list", "output_params", "output",
+  "$@118", "flush", "maxsize", "maxver", YY_NULLPTR
   };
 
 #if PARSER4_DEBUG
   const unsigned short int
   Dhcp4Parser::yyrline_[] =
   {
-       0,   244,   244,   244,   245,   245,   246,   246,   247,   247,
-     248,   248,   249,   249,   250,   250,   251,   251,   252,   252,
-     253,   253,   254,   254,   255,   255,   256,   256,   264,   265,
-     266,   267,   268,   269,   270,   273,   278,   278,   289,   292,
-     293,   296,   300,   307,   307,   314,   315,   318,   322,   329,
-     329,   336,   337,   340,   344,   355,   365,   365,   381,   382,
-     386,   387,   388,   389,   390,   391,   394,   394,   409,   409,
-     418,   419,   424,   425,   426,   427,   428,   429,   430,   431,
-     432,   433,   434,   435,   436,   437,   438,   439,   440,   441,
-     442,   443,   444,   445,   446,   447,   448,   449,   450,   453,
-     458,   463,   468,   473,   478,   484,   484,   495,   496,   499,
-     500,   501,   502,   503,   504,   505,   508,   508,   517,   517,
-     527,   527,   534,   535,   538,   538,   545,   547,   551,   557,
-     557,   569,   569,   581,   581,   591,   592,   595,   596,   599,
-     599,   609,   610,   613,   614,   615,   616,   617,   618,   619,
-     620,   621,   622,   623,   624,   625,   626,   627,   628,   629,
-     630,   633,   633,   640,   641,   642,   643,   646,   646,   654,
-     654,   662,   662,   670,   675,   675,   683,   688,   693,   698,
-     703,   708,   713,   718,   718,   726,   726,   734,   739,   744,
-     744,   754,   755,   758,   759,   760,   761,   762,   765,   770,
-     775,   780,   785,   790,   790,   800,   801,   804,   805,   808,
-     808,   818,   818,   828,   829,   830,   833,   834,   837,   837,
-     845,   845,   853,   853,   864,   865,   868,   869,   870,   871,
-     872,   873,   876,   881,   886,   891,   896,   901,   909,   909,
-     922,   923,   926,   927,   934,   934,   960,   960,   971,   972,
-     976,   977,   978,   979,   980,   981,   982,   983,   984,   985,
-     986,   987,   988,   989,   990,   991,   992,   993,   994,   995,
-     996,   997,   998,   999,  1000,  1003,  1003,  1011,  1011,  1019,
-    1019,  1027,  1027,  1035,  1035,  1043,  1043,  1051,  1051,  1059,
-    1059,  1069,  1069,  1076,  1077,  1078,  1081,  1086,  1093,  1093,
-    1104,  1105,  1109,  1110,  1113,  1113,  1121,  1122,  1125,  1126,
-    1127,  1128,  1129,  1130,  1131,  1132,  1133,  1134,  1135,  1136,
-    1137,  1138,  1139,  1140,  1141,  1142,  1149,  1149,  1162,  1162,
-    1171,  1172,  1175,  1176,  1181,  1181,  1196,  1196,  1210,  1211,
-    1214,  1215,  1218,  1219,  1220,  1221,  1222,  1223,  1224,  1225,
-    1226,  1227,  1230,  1232,  1237,  1239,  1239,  1247,  1247,  1255,
-    1255,  1263,  1265,  1265,  1273,  1282,  1282,  1294,  1295,  1300,
-    1301,  1306,  1306,  1318,  1318,  1330,  1331,  1336,  1337,  1342,
-    1343,  1344,  1345,  1346,  1347,  1348,  1349,  1350,  1353,  1355,
-    1355,  1363,  1365,  1367,  1372,  1380,  1380,  1392,  1393,  1396,
-    1397,  1400,  1400,  1410,  1410,  1420,  1421,  1424,  1425,  1426,
-    1427,  1428,  1429,  1430,  1433,  1433,  1441,  1441,  1466,  1466,
-    1496,  1496,  1506,  1507,  1510,  1511,  1514,  1514,  1523,  1523,
-    1532,  1533,  1536,  1537,  1541,  1542,  1543,  1544,  1545,  1546,
-    1547,  1548,  1549,  1550,  1551,  1552,  1553,  1554,  1555,  1558,
-    1558,  1566,  1566,  1574,  1574,  1582,  1582,  1590,  1590,  1600,
-    1600,  1608,  1608,  1616,  1616,  1624,  1624,  1632,  1632,  1640,
-    1640,  1648,  1648,  1661,  1661,  1671,  1672,  1678,  1678,  1688,
-    1689,  1692,  1692,  1702,  1703,  1706,  1707,  1710,  1711,  1712,
-    1713,  1714,  1715,  1716,  1717,  1718,  1719,  1720,  1723,  1725,
-    1725,  1733,  1742,  1749,  1749,  1759,  1760,  1763,  1764,  1765,
-    1766,  1767,  1770,  1770,  1778,  1778,  1788,  1788,  1800,  1800,
-    1810,  1811,  1814,  1815,  1816,  1817,  1818,  1819,  1820,  1821,
-    1822,  1823,  1824,  1825,  1826,  1827,  1828,  1829,  1830,  1833,
-    1838,  1838,  1846,  1846,  1854,  1859,  1859,  1867,  1872,  1877,
-    1877,  1885,  1886,  1889,  1889,  1897,  1902,  1907,  1912,  1912,
-    1920,  1923,  1926,  1929,  1932,  1938,  1938,  1948,  1948,  1955,
-    1955,  1962,  1962,  1974,  1974,  1984,  1984,  1995,  1996,  2000,
-    2004,  2004,  2016,  2017,  2021,  2021,  2029,  2030,  2033,  2034,
-    2035,  2036,  2037,  2038,  2039,  2042,  2047,  2047,  2055,  2055,
-    2065,  2066,  2069,  2069,  2077,  2078,  2081,  2082,  2083,  2084,
-    2087,  2087,  2095,  2100,  2105
+       0,   246,   246,   246,   247,   247,   248,   248,   249,   249,
+     250,   250,   251,   251,   252,   252,   253,   253,   254,   254,
+     255,   255,   256,   256,   257,   257,   258,   258,   266,   267,
+     268,   269,   270,   271,   272,   275,   280,   280,   291,   294,
+     295,   298,   302,   309,   309,   316,   317,   320,   324,   331,
+     331,   338,   339,   342,   346,   357,   367,   367,   383,   384,
+     388,   389,   390,   391,   392,   393,   396,   396,   411,   411,
+     420,   421,   426,   427,   428,   429,   430,   431,   432,   433,
+     434,   435,   436,   437,   438,   439,   440,   441,   442,   443,
+     444,   445,   446,   447,   448,   449,   450,   451,   452,   455,
+     460,   465,   470,   475,   480,   486,   486,   497,   498,   501,
+     502,   503,   504,   505,   506,   507,   510,   510,   519,   519,
+     529,   529,   536,   537,   540,   540,   547,   549,   553,   559,
+     559,   571,   571,   583,   583,   593,   594,   597,   598,   601,
+     601,   611,   612,   615,   616,   617,   618,   619,   620,   621,
+     622,   623,   624,   625,   626,   627,   628,   629,   630,   631,
+     632,   635,   635,   642,   643,   644,   645,   648,   648,   656,
+     656,   664,   664,   672,   677,   677,   685,   690,   695,   700,
+     705,   710,   715,   720,   720,   728,   728,   736,   741,   746,
+     746,   756,   757,   760,   761,   762,   763,   764,   767,   772,
+     777,   782,   787,   792,   792,   802,   803,   806,   807,   810,
+     810,   820,   820,   830,   831,   832,   835,   836,   839,   839,
+     847,   847,   855,   855,   866,   867,   870,   871,   872,   873,
+     874,   875,   878,   883,   888,   893,   898,   903,   911,   911,
+     924,   925,   928,   929,   936,   936,   962,   962,   973,   974,
+     978,   979,   980,   981,   982,   983,   984,   985,   986,   987,
+     988,   989,   990,   991,   992,   993,   994,   995,   996,   997,
+     998,   999,  1000,  1001,  1002,  1005,  1005,  1013,  1013,  1021,
+    1021,  1029,  1029,  1037,  1037,  1045,  1045,  1053,  1053,  1061,
+    1061,  1071,  1071,  1078,  1079,  1080,  1083,  1088,  1095,  1095,
+    1106,  1107,  1111,  1112,  1115,  1115,  1123,  1124,  1127,  1128,
+    1129,  1130,  1131,  1132,  1133,  1134,  1135,  1136,  1137,  1138,
+    1139,  1140,  1141,  1142,  1143,  1144,  1151,  1151,  1164,  1164,
+    1173,  1174,  1177,  1178,  1183,  1183,  1198,  1198,  1212,  1213,
+    1216,  1217,  1220,  1221,  1222,  1223,  1224,  1225,  1226,  1227,
+    1228,  1229,  1232,  1234,  1239,  1241,  1241,  1249,  1249,  1257,
+    1257,  1265,  1267,  1267,  1275,  1284,  1284,  1296,  1297,  1302,
+    1303,  1308,  1308,  1320,  1320,  1332,  1333,  1338,  1339,  1344,
+    1345,  1346,  1347,  1348,  1349,  1350,  1351,  1352,  1355,  1357,
+    1357,  1365,  1367,  1369,  1374,  1382,  1382,  1394,  1395,  1398,
+    1399,  1402,  1402,  1412,  1412,  1422,  1423,  1426,  1427,  1428,
+    1429,  1430,  1431,  1432,  1435,  1435,  1443,  1443,  1468,  1468,
+    1498,  1498,  1508,  1509,  1512,  1513,  1516,  1516,  1525,  1525,
+    1534,  1535,  1538,  1539,  1543,  1544,  1545,  1546,  1547,  1548,
+    1549,  1550,  1551,  1552,  1553,  1554,  1555,  1556,  1557,  1560,
+    1560,  1568,  1568,  1576,  1576,  1584,  1584,  1592,  1592,  1602,
+    1602,  1610,  1610,  1618,  1618,  1626,  1626,  1634,  1634,  1642,
+    1642,  1650,  1650,  1663,  1663,  1673,  1674,  1680,  1680,  1690,
+    1691,  1694,  1694,  1704,  1705,  1708,  1709,  1712,  1713,  1714,
+    1715,  1716,  1717,  1718,  1719,  1720,  1721,  1722,  1725,  1727,
+    1727,  1735,  1744,  1751,  1751,  1761,  1762,  1765,  1766,  1767,
+    1768,  1769,  1772,  1772,  1780,  1780,  1790,  1790,  1802,  1802,
+    1812,  1813,  1816,  1817,  1818,  1819,  1820,  1821,  1822,  1823,
+    1824,  1825,  1826,  1827,  1828,  1829,  1830,  1831,  1832,  1833,
+    1834,  1837,  1842,  1842,  1850,  1850,  1858,  1863,  1863,  1871,
+    1876,  1881,  1881,  1889,  1890,  1893,  1893,  1901,  1906,  1911,
+    1916,  1916,  1924,  1927,  1930,  1933,  1936,  1942,  1942,  1950,
+    1950,  1958,  1958,  1969,  1969,  1976,  1976,  1983,  1983,  1995,
+    1995,  2005,  2005,  2016,  2017,  2021,  2025,  2025,  2037,  2038,
+    2042,  2042,  2050,  2051,  2054,  2055,  2056,  2057,  2058,  2059,
+    2060,  2063,  2068,  2068,  2076,  2076,  2086,  2087,  2090,  2090,
+    2098,  2099,  2102,  2103,  2104,  2105,  2108,  2108,  2116,  2121,
+    2126
   };
 
   // Print the state stack on the debug stream.
@@ -4650,8 +4696,8 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp4_parser.yy" // lalr1.cc:1167
 } } // isc::dhcp
-#line 4654 "dhcp4_parser.cc" // lalr1.cc:1167
-#line 2110 "dhcp4_parser.yy" // lalr1.cc:1168
+#line 4700 "dhcp4_parser.cc" // lalr1.cc:1167
+#line 2131 "dhcp4_parser.yy" // lalr1.cc:1168
 
 
 void
index c7e972a12ba576a0b168523517bbcd691b05433c..ba4362f8ed7e056cb3add5f1e6ed0fbab6fef5ae 100644 (file)
@@ -477,35 +477,37 @@ namespace isc { namespace dhcp {
         TOKEN_NEVER = 384,
         TOKEN_ALWAYS = 385,
         TOKEN_WHEN_NOT_PRESENT = 386,
-        TOKEN_LOGGING = 387,
-        TOKEN_LOGGERS = 388,
-        TOKEN_OUTPUT_OPTIONS = 389,
-        TOKEN_OUTPUT = 390,
-        TOKEN_DEBUGLEVEL = 391,
-        TOKEN_SEVERITY = 392,
-        TOKEN_FLUSH = 393,
-        TOKEN_MAXSIZE = 394,
-        TOKEN_MAXVER = 395,
-        TOKEN_DHCP6 = 396,
-        TOKEN_DHCPDDNS = 397,
-        TOKEN_CONTROL_AGENT = 398,
-        TOKEN_TOPLEVEL_JSON = 399,
-        TOKEN_TOPLEVEL_DHCP4 = 400,
-        TOKEN_SUB_DHCP4 = 401,
-        TOKEN_SUB_INTERFACES4 = 402,
-        TOKEN_SUB_SUBNET4 = 403,
-        TOKEN_SUB_POOL4 = 404,
-        TOKEN_SUB_RESERVATION = 405,
-        TOKEN_SUB_OPTION_DEFS = 406,
-        TOKEN_SUB_OPTION_DEF = 407,
-        TOKEN_SUB_OPTION_DATA = 408,
-        TOKEN_SUB_HOOKS_LIBRARY = 409,
-        TOKEN_SUB_DHCP_DDNS = 410,
-        TOKEN_SUB_LOGGING = 411,
-        TOKEN_STRING = 412,
-        TOKEN_INTEGER = 413,
-        TOKEN_FLOAT = 414,
-        TOKEN_BOOLEAN = 415
+        TOKEN_HOSTNAME_CHAR_SET = 387,
+        TOKEN_HOSTNAME_CHAR_REPLACEMENT = 388,
+        TOKEN_LOGGING = 389,
+        TOKEN_LOGGERS = 390,
+        TOKEN_OUTPUT_OPTIONS = 391,
+        TOKEN_OUTPUT = 392,
+        TOKEN_DEBUGLEVEL = 393,
+        TOKEN_SEVERITY = 394,
+        TOKEN_FLUSH = 395,
+        TOKEN_MAXSIZE = 396,
+        TOKEN_MAXVER = 397,
+        TOKEN_DHCP6 = 398,
+        TOKEN_DHCPDDNS = 399,
+        TOKEN_CONTROL_AGENT = 400,
+        TOKEN_TOPLEVEL_JSON = 401,
+        TOKEN_TOPLEVEL_DHCP4 = 402,
+        TOKEN_SUB_DHCP4 = 403,
+        TOKEN_SUB_INTERFACES4 = 404,
+        TOKEN_SUB_SUBNET4 = 405,
+        TOKEN_SUB_POOL4 = 406,
+        TOKEN_SUB_RESERVATION = 407,
+        TOKEN_SUB_OPTION_DEFS = 408,
+        TOKEN_SUB_OPTION_DEF = 409,
+        TOKEN_SUB_OPTION_DATA = 410,
+        TOKEN_SUB_HOOKS_LIBRARY = 411,
+        TOKEN_SUB_DHCP_DDNS = 412,
+        TOKEN_SUB_LOGGING = 413,
+        TOKEN_STRING = 414,
+        TOKEN_INTEGER = 415,
+        TOKEN_FLOAT = 416,
+        TOKEN_BOOLEAN = 417
       };
     };
 
@@ -1140,6 +1142,14 @@ namespace isc { namespace dhcp {
     symbol_type
     make_WHEN_NOT_PRESENT (const location_type& l);
 
+    static inline
+    symbol_type
+    make_HOSTNAME_CHAR_SET (const location_type& l);
+
+    static inline
+    symbol_type
+    make_HOSTNAME_CHAR_REPLACEMENT (const location_type& l);
+
     static inline
     symbol_type
     make_LOGGING (const location_type& l);
@@ -1461,12 +1471,12 @@ namespace isc { namespace dhcp {
     enum
     {
       yyeof_ = 0,
-      yylast_ = 935,     ///< Last index in yytable_.
-      yynnts_ = 353,  ///< Number of nonterminal symbols.
+      yylast_ = 945,     ///< Last index in yytable_.
+      yynnts_ = 357,  ///< Number of nonterminal symbols.
       yyfinal_ = 28, ///< Termination state number.
       yyterror_ = 1,
       yyerrcode_ = 256,
-      yyntokens_ = 161  ///< Number of tokens.
+      yyntokens_ = 163  ///< Number of tokens.
     };
 
 
@@ -1524,9 +1534,9 @@ namespace isc { namespace dhcp {
      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
      135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
      145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160
+     155,   156,   157,   158,   159,   160,   161,   162
     };
-    const unsigned int user_token_number_max_ = 415;
+    const unsigned int user_token_number_max_ = 417;
     const token_number_type undef_token_ = 2;
 
     if (static_cast<int>(t) <= yyeof_)
@@ -1559,30 +1569,30 @@ namespace isc { namespace dhcp {
   {
       switch (other.type_get ())
     {
-      case 176: // value
-      case 180: // map_value
-      case 218: // socket_type
-      case 221: // outbound_interface_value
-      case 237: // db_type
-      case 321: // hr_mode
-      case 469: // ncr_protocol_value
-      case 477: // replace_client_name_value
+      case 178: // value
+      case 182: // map_value
+      case 220: // socket_type
+      case 223: // outbound_interface_value
+      case 239: // db_type
+      case 323: // hr_mode
+      case 471: // ncr_protocol_value
+      case 479: // replace_client_name_value
         value.copy< ElementPtr > (other.value);
         break;
 
-      case 160: // "boolean"
+      case 162: // "boolean"
         value.copy< bool > (other.value);
         break;
 
-      case 159: // "floating point"
+      case 161: // "floating point"
         value.copy< double > (other.value);
         break;
 
-      case 158: // "integer"
+      case 160: // "integer"
         value.copy< int64_t > (other.value);
         break;
 
-      case 157: // "constant string"
+      case 159: // "constant string"
         value.copy< std::string > (other.value);
         break;
 
@@ -1603,30 +1613,30 @@ namespace isc { namespace dhcp {
     (void) v;
       switch (this->type_get ())
     {
-      case 176: // value
-      case 180: // map_value
-      case 218: // socket_type
-      case 221: // outbound_interface_value
-      case 237: // db_type
-      case 321: // hr_mode
-      case 469: // ncr_protocol_value
-      case 477: // replace_client_name_value
+      case 178: // value
+      case 182: // map_value
+      case 220: // socket_type
+      case 223: // outbound_interface_value
+      case 239: // db_type
+      case 323: // hr_mode
+      case 471: // ncr_protocol_value
+      case 479: // replace_client_name_value
         value.copy< ElementPtr > (v);
         break;
 
-      case 160: // "boolean"
+      case 162: // "boolean"
         value.copy< bool > (v);
         break;
 
-      case 159: // "floating point"
+      case 161: // "floating point"
         value.copy< double > (v);
         break;
 
-      case 158: // "integer"
+      case 160: // "integer"
         value.copy< int64_t > (v);
         break;
 
-      case 157: // "constant string"
+      case 159: // "constant string"
         value.copy< std::string > (v);
         break;
 
@@ -1706,30 +1716,30 @@ namespace isc { namespace dhcp {
     // Type destructor.
     switch (yytype)
     {
-      case 176: // value
-      case 180: // map_value
-      case 218: // socket_type
-      case 221: // outbound_interface_value
-      case 237: // db_type
-      case 321: // hr_mode
-      case 469: // ncr_protocol_value
-      case 477: // replace_client_name_value
+      case 178: // value
+      case 182: // map_value
+      case 220: // socket_type
+      case 223: // outbound_interface_value
+      case 239: // db_type
+      case 323: // hr_mode
+      case 471: // ncr_protocol_value
+      case 479: // replace_client_name_value
         value.template destroy< ElementPtr > ();
         break;
 
-      case 160: // "boolean"
+      case 162: // "boolean"
         value.template destroy< bool > ();
         break;
 
-      case 159: // "floating point"
+      case 161: // "floating point"
         value.template destroy< double > ();
         break;
 
-      case 158: // "integer"
+      case 160: // "integer"
         value.template destroy< int64_t > ();
         break;
 
-      case 157: // "constant string"
+      case 159: // "constant string"
         value.template destroy< std::string > ();
         break;
 
@@ -1756,30 +1766,30 @@ namespace isc { namespace dhcp {
     super_type::move(s);
       switch (this->type_get ())
     {
-      case 176: // value
-      case 180: // map_value
-      case 218: // socket_type
-      case 221: // outbound_interface_value
-      case 237: // db_type
-      case 321: // hr_mode
-      case 469: // ncr_protocol_value
-      case 477: // replace_client_name_value
+      case 178: // value
+      case 182: // map_value
+      case 220: // socket_type
+      case 223: // outbound_interface_value
+      case 239: // db_type
+      case 323: // hr_mode
+      case 471: // ncr_protocol_value
+      case 479: // replace_client_name_value
         value.move< ElementPtr > (s.value);
         break;
 
-      case 160: // "boolean"
+      case 162: // "boolean"
         value.move< bool > (s.value);
         break;
 
-      case 159: // "floating point"
+      case 161: // "floating point"
         value.move< double > (s.value);
         break;
 
-      case 158: // "integer"
+      case 160: // "integer"
         value.move< int64_t > (s.value);
         break;
 
-      case 157: // "constant string"
+      case 159: // "constant string"
         value.move< std::string > (s.value);
         break;
 
@@ -1854,7 +1864,7 @@ namespace isc { namespace dhcp {
      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
      395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
      405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
-     415
+     415,   416,   417
     };
     return static_cast<token_type> (yytoken_number_[type]);
   }
@@ -2639,6 +2649,18 @@ namespace isc { namespace dhcp {
     return symbol_type (token::TOKEN_WHEN_NOT_PRESENT, l);
   }
 
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_HOSTNAME_CHAR_SET (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_HOSTNAME_CHAR_SET, l);
+  }
+
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_HOSTNAME_CHAR_REPLACEMENT (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_HOSTNAME_CHAR_REPLACEMENT, l);
+  }
+
   Dhcp4Parser::symbol_type
   Dhcp4Parser::make_LOGGING (const location_type& l)
   {
@@ -2816,7 +2838,7 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp4_parser.yy" // lalr1.cc:377
 } } // isc::dhcp
-#line 2820 "dhcp4_parser.h" // lalr1.cc:377
+#line 2842 "dhcp4_parser.h" // lalr1.cc:377
 
 
 
index 555cb965f3465654f944fd5e3748c4ea6a0878af..d05e4f8bc66e8799a3441783f3b1758ac6647255 100644 (file)
@@ -186,6 +186,8 @@ using namespace std;
   NEVER "never"
   ALWAYS "always"
   WHEN_NOT_PRESENT "when-not-present"
+  HOSTNAME_CHAR_SET "hostname-char-set"
+  HOSTNAME_CHAR_REPLACEMENT "hostname-char-replacement"
 
   LOGGING "Logging"
   LOGGERS "loggers"
@@ -1825,6 +1827,8 @@ dhcp_ddns_param: enable_updates
                | override_client_update
                | replace_client_name
                | generated_prefix
+               | hostname_char_set
+               | hostname_char_replacement
                | user_context
                | comment
                | unknown_map_entry
@@ -1943,6 +1947,23 @@ generated_prefix: GENERATED_PREFIX {
     ctx.leave();
 };
 
+hostname_char_set: HOSTNAME_CHAR_SET {
+    ctx.enter(ctx.NO_KEYWORD);
+} COLON STRING {
+    ElementPtr s(new StringElement($4, ctx.loc2pos(@4)));
+    ctx.stack_.back()->set("hostname-char-set", s);
+    ctx.leave();
+};
+
+hostname_char_replacement: HOSTNAME_CHAR_REPLACEMENT {
+    ctx.enter(ctx.NO_KEYWORD);
+} COLON STRING {
+    ElementPtr s(new StringElement($4, ctx.loc2pos(@4)));
+    ctx.stack_.back()->set("hostname-char-replacement", s);
+    ctx.leave();
+};
+
+
 // JSON entries for Dhcp4 and DhcpDdns
 
 dhcp6_json_object: DHCP6 {
index 7d7289450fd6c1d77d267c96375bad3d4883dbd9..1bd4e3f66c894271b28df428f6554621484aaa06 100644 (file)
@@ -4021,7 +4021,9 @@ TEST_F(Dhcp4ParserTest, d2ClientConfig) {
         "     \"override-client-update\" : true, "
         "     \"replace-client-name\" : \"when-present\", "
         "     \"generated-prefix\" : \"test.prefix\", "
-        "     \"qualifying-suffix\" : \"test.suffix.\" },"
+        "     \"qualifying-suffix\" : \"test.suffix.\", "
+        "     \"hostname-char-set\" : \"[^A-Za-z0-9_-]\", "
+        "     \"hostname-char-replacement\" : \"x\" }, "
         "\"valid-lifetime\": 4000 }";
 
     // Convert the JSON string to configuration elements.
index 264ec433b7fb46432de7b7a06911c5a303ba3bf9..f8dd12866fbe5f687188961159e12f3c8fb30be3 100644 (file)
@@ -243,7 +243,7 @@ public:
                                   ((mask & REPLACE_CLIENT_NAME) ?
                                     D2ClientConfig::RCM_WHEN_PRESENT
                                    : D2ClientConfig::RCM_NEVER),
-                                  "myhost", "example.com")));
+                                  "myhost", "example.com", "", "")));
         ASSERT_NO_THROW(CfgMgr::instance().setD2ClientConfig(cfg));
         ASSERT_NO_THROW(srv_->startD2());
     }
index ca2affa5a4004de5607e635b59ab8f0b7dfe5334..b9b0d09036fd69a55931b040809d2630f655d758 100644 (file)
@@ -1130,6 +1130,8 @@ const char* EXTRACTED_CONFIGS[] = {
 "            \"always-include-fqdn\": true,\n"
 "            \"enable-updates\": true,\n"
 "            \"generated-prefix\": \"test.prefix\",\n"
+"            \"hostname-char-replacement\": \"x\",\n"
+"            \"hostname-char-set\": \"[^A-Za-z0-9_-]\",\n"
 "            \"max-queue-size\": 2048,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -1863,6 +1865,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -1909,6 +1913,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -1980,6 +1986,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -2051,6 +2059,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -2124,6 +2134,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -2275,6 +2287,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -2427,6 +2441,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -2502,6 +2518,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -2576,6 +2594,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -2651,6 +2671,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -2724,6 +2746,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -2797,6 +2821,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -2896,6 +2922,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -2996,6 +3024,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3069,6 +3099,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3176,6 +3208,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3249,6 +3283,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3302,6 +3338,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3355,6 +3393,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3417,6 +3457,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3470,6 +3512,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3523,6 +3567,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3576,6 +3622,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3629,6 +3677,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3719,6 +3769,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3809,6 +3861,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3909,6 +3963,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3991,6 +4047,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -4117,6 +4175,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -4216,6 +4276,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -4333,6 +4395,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -4423,6 +4487,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -4518,6 +4584,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -4608,6 +4676,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -4690,6 +4760,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -4807,6 +4879,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -4895,6 +4969,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -4987,6 +5063,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -5033,6 +5111,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -5079,6 +5159,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": true,\n"
 "            \"enable-updates\": true,\n"
 "            \"generated-prefix\": \"test.prefix\",\n"
+"            \"hostname-char-replacement\": \"x\",\n"
+"            \"hostname-char-set\": \"[^A-Za-z0-9_-]\",\n"
 "            \"max-queue-size\": 2048,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -5152,6 +5234,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -5225,6 +5309,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -5298,6 +5384,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -5452,6 +5540,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -5540,6 +5630,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -5768,6 +5860,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -5871,6 +5965,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -6022,6 +6118,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -6065,6 +6163,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -6108,6 +6208,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -6151,6 +6253,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -6194,6 +6298,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -6267,6 +6373,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -6340,6 +6448,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -6413,6 +6523,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -6486,6 +6598,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -6585,6 +6699,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -6658,6 +6774,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -6731,6 +6849,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -6805,6 +6925,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -6883,6 +7005,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -6961,6 +7085,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -7060,6 +7186,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
index 25d548e897cd346106feb1192267fa050fe9847c..1c17bb5f319aabc132bbbe03821d66ea56026811 100644 (file)
@@ -35,8 +35,8 @@
 
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 6
-#define YY_FLEX_SUBMINOR_VERSION 0
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 37
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -203,15 +203,7 @@ typedef unsigned int flex_uint32_t;
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k.
- * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
- * Ditto for the __ia64__ case accordingly.
- */
-#define YY_BUF_SIZE 32768
-#else
 #define YY_BUF_SIZE 16384
-#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -243,7 +235,6 @@ extern FILE *parser6_in, *parser6_out;
 #define EOB_ACT_LAST_MATCH 2
 
     #define YY_LESS_LINENO(n)
-    #define YY_LINENO_REWIND_TO(ptr)
     
 /* Return all but the first "n" matched characters back to the input stream. */
 #define yyless(n) \
@@ -283,7 +274,7 @@ struct yy_buffer_state
        /* 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
@@ -367,7 +358,7 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
 
 /* yy_hold_char holds the character lost when parser6_text is formed. */
 static char yy_hold_char;
-static int yy_n_chars;         /* number of characters read into yy_ch_buf */
+static yy_size_t yy_n_chars;           /* number of characters read into yy_ch_buf */
 yy_size_t parser6_leng;
 
 /* Points to current character in buffer. */
@@ -434,7 +425,7 @@ void parser6_free (void *  );
 /* %% [1.0] parser6_text/parser6_in/parser6_out/yy_state_type/parser6_lineno etc. def's & init go here */
 /* Begin user sect3 */
 
-#define parser6_wrap() (/*CONSTCOND*/1)
+#define parser6_wrap() 1
 #define YY_SKIP_YYWRAP
 
 #define FLEX_DEBUG
@@ -450,21 +441,13 @@ extern int parser6_lineno;
 int parser6_lineno = 1;
 
 extern char *parser6_text;
-#ifdef yytext_ptr
-#undef yytext_ptr
-#endif
 #define yytext_ptr parser6_text
 
-/* %% [1.5] DFA */
-
 /* %if-c-only Standard (non-C++) definition */
 
 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 );
-#if defined(__GNUC__) && __GNUC__ >= 3
-__attribute__((__noreturn__))
-#endif
 static void yy_fatal_error (yyconst char msg[]  );
 
 /* %endif */
@@ -482,8 +465,8 @@ static void yy_fatal_error (yyconst char msg[]  );
        (yy_c_buf_p) = yy_cp;
 
 /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
-#define YY_NUM_RULES 171
-#define YY_END_OF_BUFFER 172
+#define YY_NUM_RULES 173
+#define YY_END_OF_BUFFER 174
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -491,162 +474,165 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[1378] =
+static yyconst flex_int16_t yy_accept[1400] =
     {   0,
-      164,  164,    0,    0,    0,    0,    0,    0,    0,    0,
-      172,  170,   10,   11,  170,    1,  164,  161,  164,  164,
-      170,  163,  162,  170,  170,  170,  170,  170,  157,  158,
-      170,  170,  170,  159,  160,    5,    5,    5,  170,  170,
-      170,   10,   11,    0,    0,  153,    0,    0,    0,    0,
+      166,  166,    0,    0,    0,    0,    0,    0,    0,    0,
+      174,  172,   10,   11,  172,    1,  166,  163,  166,  166,
+      172,  165,  164,  172,  172,  172,  172,  172,  159,  160,
+      172,  172,  172,  161,  162,    5,    5,    5,  172,  172,
+      172,   10,   11,    0,    0,  155,    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,    1,  164,
-      164,    0,  163,  164,    3,    2,    6,    0,  164,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    1,  166,
+      166,    0,  165,  166,    3,    2,    6,    0,  166,    0,
         0,    0,    0,    0,    0,    4,    0,    0,    9,    0,
 
-      154,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  156,    0,    0,    0,
+      156,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  158,    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,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    2,    0,    0,    0,    0,
-        0,    0,    0,    8,    0,    0,    0,    0,  132,    0,
-        0,  133,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    8,    0,    0,    0,    0,  134,    0,
+        0,  135,    0,    0,    0,    0,    0,    0,    0,    0,
 
-      155,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      157,    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,   88,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   90,    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,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  169,  167,    0,  166,
-      165,    0,    0,    0,    0,    0,    0,    0,  131,    0,
+        0,    0,    0,    0,    0,    0,  171,  169,    0,  168,
+      167,    0,    0,    0,    0,    0,    0,    0,  133,    0,
 
-        0,   27,    0,   26,    0,    0,   94,    0,    0,    0,
-        0,    0,    0,    0,   48,    0,    0,    0,    0,    0,
+        0,   29,    0,   28,    0,    0,   96,    0,    0,    0,
+        0,    0,    0,    0,   50,    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,   92,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   94,    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,  168,  165,    0,    0,    0,    0,    0,
+        0,    0,    0,  170,  167,    0,    0,    0,    0,    0,
 
-        0,    0,    0,   28,    0,    0,   30,    0,    0,    0,
-        0,    0,   95,    0,    0,    0,    0,    0,   73,    0,
-        0,    0,    0,    0,    0,  116,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   51,    0,    0,    0,
+        0,    0,    0,   30,    0,    0,   32,    0,    0,    0,
+        0,    0,   97,    0,    0,    0,    0,    0,   75,    0,
+        0,    0,    0,    0,    0,  118,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   53,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   72,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   74,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       82,    0,   52,    0,    0,    0,    0,    0,    0,    0,
+       84,    0,   54,    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,  111,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  113,
 
-      136,   44,    0,   49,    0,    0,    0,    0,    0,    0,
-      150,   36,    0,   33,    0,   32,    0,    0,    0,  124,
+      138,   46,    0,   51,    0,    0,    0,    0,    0,    0,
+      152,   38,    0,   35,    0,   34,    0,    0,    0,  126,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  103,    0,
-        0,    0,    0,    0,    0,    0,  135,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  105,    0,
+        0,    0,    0,    0,    0,    0,  137,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   46,    0,    0,   31,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   75,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  125,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  120,
+        0,    0,   48,    0,    0,   33,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   77,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  127,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  122,
 
-        0,    0,    0,    0,    0,    0,    7,   34,    0,    0,
+        0,    0,    0,    0,    0,    0,    7,   36,    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,    0,    0,    0,
-        0,    0,  105,    0,    0,    0,    0,    0,    0,  102,
-        0,    0,    0,    0,    0,    0,    0,    0,   77,    0,
+        0,    0,  107,    0,    0,    0,    0,    0,    0,  104,
+        0,    0,    0,    0,    0,    0,    0,    0,   79,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       85,    0,    0,    0,    0,    0,    0,    0,    0,   99,
+       87,    0,    0,    0,    0,    0,    0,    0,    0,  101,
 
-        0,    0,    0,    0,    0,   84,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   86,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  119,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  129,  100,    0,    0,
-        0,    0,  104,   45,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   53,    0,    0,    0,    0,    0,
+        0,  121,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  131,  102,    0,    0,
+        0,    0,  106,   47,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   55,    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,   68,    0,    0,    0,    0,    0,    0,  151,    0,
+        0,   70,    0,    0,    0,    0,    0,    0,  153,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,   91,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  118,    0,    0,    0,    0,    0,
-       56,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   50,   76,    0,    0,
-        0,  115,    0,    0,    0,   43,    0,    0,    0,    0,
+        0,    0,    0,   93,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  120,    0,    0,    0,    0,    0,
+        0,   58,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   52,   78,    0,
+        0,    0,  117,    0,    0,    0,   45,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  107,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  109,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  149,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   86,    0,
-
+        0,    0,    0,    0,  151,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+       88,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   39,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   16,    0,  130,   14,    0,    0,
+        0,    0,    0,    0,    0,   41,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   16,    0,  132,   14,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  121,  106,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  123,  108,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  117,  134,    0,   38,    0,  126,    0,    0,
-        0,    0,    0,    0,    0,   20,    0,    0,    0,   70,
-        0,    0,    0,    0,  128,   47,    0,   78,    0,    0,
+        0,    0,    0,    0,    0,  119,  136,    0,   40,    0,
+      128,    0,    0,    0,    0,    0,    0,    0,   20,    0,
+        0,    0,   72,    0,    0,    0,    0,  130,   49,    0,
 
+       80,    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,   76,    0,    0,
+        0,    0,    0,    0,    0,    0,  125,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   98,    0,    0,    0,    0,    0,   73,   95,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   74,    0,    0,    0,    0,    0,
-        0,    0,    0,  123,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   96,    0,
-        0,    0,    0,    0,   71,   93,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   65,    0,    0,
-        0,    0,    0,   17,   15,    0,  148,  147,    0,   60,
-        0,    0,    0,    0,    0,   29,    0,  110,    0,    0,
-        0,    0,    0,    0,  145,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,   87,    0,  114,    0,   54,
-        0,    0,    0,    0,   19,    0,    0,    0,    0,    0,
-        0,   89,   66,    0,    0,  122,    0,    0,    0,    0,
-        0,  113,    0,    0,    0,   83,    0,  152,    0,    0,
-        0,    0,    0,    0,    0,   81,    0,  137,    0,    0,
+        0,   67,    0,    0,    0,    0,    0,   17,   15,    0,
+      150,  149,    0,   62,    0,    0,    0,    0,    0,   31,
+        0,  112,    0,    0,    0,    0,    0,    0,  147,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       89,    0,  116,    0,   56,    0,    0,    0,    0,   19,
+        0,    0,    0,    0,    0,    0,   91,   68,    0,    0,
+      124,    0,    0,    0,    0,    0,  115,    0,    0,    0,
+       85,    0,  154,    0,    0,    0,    0,    0,    0,    0,
+       83,    0,  139,    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,   59,    0,    0,    0,
-        0,  108,    0,   61,  146,    0,   12,    0,    0,    0,
-        0,    0,    0,    0,   41,    0,    0,   40,   18,    0,
-
-        0,    0,    0,  101,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   64,    0,    0,
-       55,    0,   79,    0,    0,    0,    0,    0,  127,    0,
-       42,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   58,    0,    0,   69,    0,   35,
+        0,    0,   61,    0,    0,    0,    0,  110,    0,   63,
+      148,    0,   12,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,   43,    0,    0,   42,   18,    0,    0,    0,
+        0,  103,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   66,    0,    0,   57,    0,
+       81,    0,    0,    0,    0,    0,  129,    0,    0,    0,
+       44,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   60,    0,    0,   71,    0,   37,
         0,    0,    0,    0,    0,   25,    0,    0,    0,    0,
-      143,    0,  112,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   90,    0,    0,    0,    0,    0,    0,    0,
-        0,   37,    0,    0,    0,    0,    0,   13,    0,    0,
+        0,    0,  145,    0,  114,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   92,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   26,   39,    0,    0,    0,    0,
+
+        0,   13,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  144,    0,    0,   22,
+       65,    0,    0,    0,    0,    0,    0,   21,    0,   82,
+        0,    0,  143,    0,    0,   64,    0,    0,   59,    0,
+       24,    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,   23,    0,
+       99,  111,    0,    0,    0,    0,    0,    0,  141,  146,
+       69,    0,    0,    0,    0,  140,    0,    0,   27,    0,
+        0,    0,    0,    0,  100,    0,    0,  142,    0
 
-        0,  142,    0,    0,   22,   63,    0,    0,    0,    0,
-        0,    0,   21,    0,   80,    0,    0,  141,    0,   62,
-        0,    0,   57,    0,   24,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   23,
-        0,   97,  109,    0,    0,    0,    0,    0,  139,  144,
-       67,    0,    0,    0,  138,    0,    0,    0,    0,    0,
-        0,    0,   98,    0,    0,  140,    0
     } ;
 
-static yyconst YY_CHAR yy_ec[256] =
+static yyconst flex_int32_t yy_ec[256] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
         1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
@@ -678,7 +664,7 @@ static yyconst YY_CHAR yy_ec[256] =
         5,    5,    5,    5,    5
     } ;
 
-static yyconst YY_CHAR yy_meta[72] =
+static yyconst flex_int32_t yy_meta[72] =
     {   0,
         1,    1,    2,    3,    3,    4,    3,    3,    3,    3,
         3,    3,    3,    5,    5,    5,    3,    3,    3,    3,
@@ -690,326 +676,334 @@ static yyconst YY_CHAR yy_meta[72] =
         3
     } ;
 
-static yyconst flex_uint16_t yy_base[1390] =
+static yyconst flex_int16_t yy_base[1412] =
     {   0,
         0,   70,   19,   29,   41,   49,   52,   58,   87,   95,
-     1742, 1743,   32, 1738,  141,    0,  201, 1743,  206,   88,
-       11,  213, 1743, 1720,  114,   25,    2,    6, 1743, 1743,
-       73,   11,   17, 1743, 1743, 1743,  104, 1726, 1681,    0,
-     1718,  107, 1733,  217,  241, 1743,  185, 1677, 1683, 1703,
+     1765, 1766,   32, 1761,  141,    0,  201, 1766,  206,   88,
+       11,  213, 1766, 1743,  114,   25,    2,    6, 1766, 1766,
+       73,   11,   17, 1766, 1766, 1766,  104, 1749, 1704,    0,
+     1741,  107, 1756,  217,  241, 1766,  185, 1700, 1706, 1726,
        93,   58,  190,   91,  211,  200,   14,  267,  213,  175,
-      269,   64,  231, 1684,  187,   75, 1683,  274,  188,  290,
-      278,  297, 1666,  195,  298,  317,  324, 1685,    0,  345,
-      352,  373,  380,  358, 1743,    0, 1743,  267,  295,  296,
-      324,  283,  325,  346,  340, 1743, 1682, 1721, 1743,  384,
-
-     1743,  385,  361, 1669, 1679, 1718,  368,  220,  249, 1673,
-      366,  370,  371,  377,  304, 1716,    0,  436,  377, 1660,
-     1668,  361, 1664, 1653, 1654,  365, 1670, 1653, 1662,  370,
-      200,  373, 1656,  383, 1644, 1700,  406, 1647, 1698, 1640,
-     1663, 1660, 1660, 1654,  272, 1647, 1640, 1645, 1639,  382,
-     1650, 1643, 1634, 1633, 1647,  378, 1683, 1632,  405, 1644,
-     1647, 1631,  433,  407, 1645, 1642, 1643, 1641,  437, 1623,
-     1628, 1624, 1616, 1633, 1625,    0,  436,  436,  428,  437,
-      445,  461, 1624, 1743,    0,  466, 1615, 1618, 1743,  439,
-      445, 1743, 1670, 1625,  464, 1668,  469, 1667,  467, 1666,
-
-     1743,  511, 1665,  484, 1626, 1621, 1620, 1611,  450, 1660,
-     1654, 1620, 1599, 1607, 1613, 1601, 1615, 1611, 1612, 1612,
-     1607, 1599, 1601, 1585, 1589, 1602, 1602, 1594, 1584, 1587,
-     1601, 1743, 1587, 1595, 1598, 1579, 1578, 1628, 1577, 1587,
-     1625,  500, 1586, 1574, 1585, 1621,  481, 1625, 1562, 1577,
-        9, 1567, 1583, 1564, 1566, 1562, 1568, 1559, 1558, 1571,
-     1564, 1566, 1570, 1569, 1563,   80, 1570, 1565, 1557, 1547,
-     1562, 1562, 1543, 1559, 1545, 1551, 1558, 1546,  497, 1539,
-     1553, 1552, 1555, 1537, 1545,  490, 1743, 1743,  491, 1743,
-     1743, 1532,    0,  475, 1534,  506,  493, 1588, 1743, 1541,
-
-      486, 1743, 1586, 1743, 1580,  552, 1743,  481, 1522, 1532,
-     1582, 1539, 1538,  479, 1743, 1536, 1578, 1533, 1530, 1531,
-      531, 1535, 1573, 1523, 1518, 1515, 1511, 1513, 1562, 1521,
-     1510, 1559, 1507,  558, 1520, 1520, 1503, 1504, 1517, 1504,
-     1514, 1509, 1516, 1511, 1496,  395, 1505, 1508, 1503, 1499,
-     1547,  495,  518, 1743, 1541, 1493, 1492, 1485, 1487, 1491,
-     1480, 1487, 1492,  525, 1537, 1492,  500, 1489, 1493, 1491,
-     1480, 1480, 1492,  523, 1467, 1468, 1489,  533, 1471, 1483,
-     1482, 1468, 1480, 1479, 1478, 1477,  206, 1518, 1517, 1516,
-     1460,  539, 1473, 1743, 1743, 1472,    0,  527, 1460, 1511,
-
-     1510, 1468, 1508, 1743, 1456, 1506, 1743,  560,  607,  529,
-     1505, 1447, 1743, 1452, 1462, 1461, 1448, 1447, 1743, 1449,
-     1446, 1458, 1454, 1442, 1444, 1743, 1450, 1435, 1437, 1448,
-     1446, 1441,  577, 1448, 1430, 1479, 1743, 1428, 1444, 1476,
-     1480, 1438, 1432, 1434, 1435, 1437, 1469, 1422, 1417, 1416,
-     1418, 1411, 1426, 1404, 1411, 1416, 1464, 1743, 1411, 1407,
-     1461, 1414, 1408, 1415, 1400, 1410, 1413, 1402, 1401, 1396,
-     1743, 1451, 1743, 1395, 1394, 1387, 1404, 1441, 1388, 1393,
-     1402, 1396, 1390, 1399,  596, 1434, 1398, 1381, 1381, 1376,
-     1379, 1378, 1386, 1390, 1373, 1429, 1371, 1385, 1374, 1743,
-
-     1743, 1743, 1374, 1743, 1384, 1418, 1380,    0, 1421, 1371,
-     1743, 1743, 1368, 1743, 1374, 1743,  551,  553,  597, 1743,
-     1412, 1359, 1358, 1357, 1364, 1357, 1369, 1368, 1352, 1367,
-     1397, 1364, 1400, 1346, 1348, 1360, 1360, 1359, 1743, 1344,
-     1341, 1355, 1347, 1353, 1344, 1352, 1743, 1337, 1348, 1352,
-     1334, 1348, 1346, 1329, 1323, 1328, 1325, 1340, 1341, 1338,
-     1379, 1336, 1743, 1322, 1324, 1743, 1332, 1369, 1368,  598,
-     1331, 1314, 1315, 1320, 1311, 1743, 1325, 1311,  599, 1303,
-     1324, 1321, 1313, 1356, 1310, 1317, 1353, 1743, 1301, 1299,
-     1313, 1297, 1311, 1314, 1346, 1345, 1292, 1343, 1342, 1743,
-
-      600, 1304, 1304, 1302, 1291, 1293, 1743, 1743, 1336, 1284,
-     1339,  576,  545,  572, 1298, 1337, 1331, 1330, 1329, 1283,
-     1273, 1326, 1288, 1278, 1323, 1286, 1268, 1276, 1278, 1282,
-     1317, 1321, 1278, 1277, 1278, 1271, 1260, 1273, 1276, 1271,
-     1266, 1271, 1268, 1267, 1270, 1265, 1306, 1305, 1249, 1245,
-      580, 1302, 1743, 1301, 1250, 1242, 1293, 1256, 1243, 1743,
-     1243, 1252, 1251, 1251, 1235, 1290, 1233, 1246, 1743, 1238,
-     1230, 1239, 1232, 1243, 1220, 1224, 1275, 1239, 1221, 1219,
-     1230, 1270, 1269, 1268, 1215,  566,  584, 1209, 1219,  583,
-     1743, 1269, 1215, 1225, 1225, 1214, 1218, 1225, 1262, 1743,
-
-     1256,  603, 1209, 1217, 1209, 1743, 1200, 1203, 1199, 1216,
-     1211, 1199, 1210, 1194, 1196, 1248, 1194, 1208, 1189, 1239,
-     1194, 1743, 1202, 1200, 1191, 1200, 1196,    2,   61,   64,
-      193,  266,  351,  416,  361,  443, 1743, 1743,  507,  523,
-      528,  537, 1743, 1743,  551,  554,  552,  600,  568,  568,
-      631,  584,  643,  644, 1743,  597,  611,  611,  654,  604,
-      606,  600,  658,  614,  604,  605,  601,  611,  615,  626,
-      610,  628,  623,  617,  619,  631,  621,  674,  633,  638,
-      615, 1743,  640,  630,  675,  624,  639,  639, 1743,  659,
-      667,  647,  637,  651,  644,  639,  640,  636,  645,  640,
-
-      691,  697,  646, 1743,  658,  643,  659,  649,  661,  655,
-      700,  668,  652,  653, 1743,  672,  655,  658,  714,  659,
-     1743,  678,  658,  676,  715,  675,  671,  666,  684,  683,
-      669,  684,  676,  672,  690,  675, 1743, 1743,  683,  728,
-      683, 1743,  691,  686,  737, 1743,  688,  693,  735,  689,
-      690,  702,  696,  700,  698,  696,  749,  695,  751,  752,
-      698, 1743,  697,  705,  703,  708,  720,  704,  718,  719,
-      720,  736,  741,  715,  725,  711,  718,  723,  731,  772,
-      773,  722,  726, 1743,  721,  739,  736,  774,  725,  743,
-      744,  730,  738,  747,  727,  748,  788,  789, 1743,  744,
-
-      793,  794,  756,  758,  741,  743,  750,  759,  802,  751,
-      750,  767,  806,  758,  762,  760,  758,  811,  812,  764,
-      814,  810,  770, 1743,  775,  768,  759,  778,  772,  767,
-      777,  774,  779,  775, 1743,  770, 1743, 1743,  771,  769,
-      788,  789,  786,  771,  792,  774,  780,  787,  820,  811,
-      783,  842,  787,  802,  794,  798, 1743, 1743,  808,  806,
-      792,  793,  851,  806,  811,  798,  809,  801,  807,  803,
-      821,  822, 1743, 1743,  820, 1743,  823, 1743,  808,  827,
-      817,  867,  823,  865,  831, 1743,  823,  815,  874, 1743,
-      875,  824,  831,  873, 1743, 1743,  833, 1743,  824,  824,
-
-      827,  841,  846,  829,  840,  887,  846,  847,  848,  886,
-      892,  893,  842,  895,  896,  838,  898,  859,  843,  855,
-      845,  875,  904,  864, 1743,  906,  855,  851,  867,  872,
-      860,  912,  871, 1743,  873,  872,  874,  867,  876,  877,
-      874,  864,  866,  923,  872,  925,  870,  927, 1743,  865,
-      880,  873,  932,  887, 1743, 1743,  883,  893,  878,  895,
-      881,  940,  941,  888,  898,  945,  904, 1743,  896,  897,
-      899,  901,  952, 1743, 1743,  898, 1743, 1743,  912, 1743,
-      906,  956,  907,  958,  940, 1743,  918, 1743,  905,  904,
-      907,  907,  908,  966, 1743,  911,  968,  923,  914,  929,
-
-      929,  932,  932,  929,  934, 1743,  926, 1743,  936, 1743,
-      937,  938,  935,  978, 1743,  929,  929,  935,  934,  946,
-      946, 1743, 1743,  985,  934, 1743,  951,  936,  936,  938,
-      944, 1743,  949,  998,  961, 1743,  958, 1743,  977,  997,
-     1003,  947, 1005, 1006,  961, 1743, 1008, 1743,  948, 1005,
-      970,  966, 1008,  958,  963, 1016,  974, 1018, 1019,  982,
-      971,  965,  981, 1024,  968,  985,  970,  986,  970, 1026,
-     1027, 1028,  977, 1030,  995,  981, 1743,  992, 1039, 1011,
-      998, 1743, 1042, 1743, 1743,  991, 1743, 1044,  992, 1041,
-      986,  991, 1050, 1000, 1743, 1052, 1007, 1743, 1743,  998,
-
-     1013, 1001, 1016, 1743, 1053, 1021, 1014, 1015, 1024, 1006,
-     1012, 1014, 1066, 1027, 1027, 1070, 1021, 1743, 1073, 1020,
-     1743, 1024, 1743, 1027, 1022, 1021, 1079, 1034, 1743, 1076,
-     1743, 1038, 1041, 1084, 1039, 1086, 1029, 1031, 1039, 1029,
-     1045, 1046, 1040, 1056, 1743, 1046, 1096, 1743, 1092, 1743,
-     1057, 1094, 1058, 1049, 1056, 1743, 1053, 1058, 1105, 1050,
-     1743, 1065, 1743, 1055, 1067, 1068, 1111, 1055, 1063, 1057,
-     1065, 1078, 1743, 1077, 1067, 1066, 1069, 1081, 1072, 1081,
-     1083, 1743, 1125, 1070, 1086, 1128, 1129, 1743, 1125, 1089,
-     1086, 1091, 1078, 1073, 1136, 1095, 1138, 1097, 1098, 1141,
-
-     1100, 1743, 1143, 1106, 1743, 1743, 1088, 1146, 1095, 1148,
-     1093, 1110, 1743, 1096, 1743, 1096, 1098, 1743, 1103, 1743,
-     1098, 1110, 1743, 1106, 1743, 1116, 1110, 1114, 1105, 1157,
-     1106, 1122, 1115, 1110, 1111, 1126, 1117, 1124, 1111, 1126,
-     1173, 1132, 1175, 1176, 1121, 1137, 1128, 1142, 1138, 1743,
-     1182, 1743, 1743, 1183, 1184, 1141, 1140, 1141, 1743, 1743,
-     1743, 1188, 1132, 1148, 1743, 1186, 1137, 1136, 1138, 1149,
-     1196, 1147, 1743, 1156, 1199, 1743, 1743, 1205, 1210, 1215,
-     1220, 1225, 1230, 1235, 1238, 1212, 1217, 1219, 1232
+      269,   64,  231, 1707,  187,   75, 1706,  274,  188,  290,
+      278,  297, 1689,  195,  298,  317,  324, 1708,    0,  345,
+      352,  373,  380,  358, 1766,    0, 1766,  267,  295,  296,
+      324,  283,  325,  346,  340, 1766, 1705, 1744, 1766,  384,
+
+     1766,  385,  361, 1692, 1702, 1741,  368,  220,  249, 1696,
+      366,  370,  371,  377,  304, 1739,    0,  436,  377, 1683,
+     1691,  361, 1687, 1676, 1677,  365, 1693, 1676, 1685,  370,
+      200,  373, 1679,  383, 1667, 1723,  406, 1670, 1721, 1663,
+     1686, 1683, 1683, 1677,  272, 1670, 1663, 1668, 1662,  382,
+     1673, 1666, 1657, 1656, 1670,  378, 1706, 1655,  405, 1667,
+     1670, 1654,  433,  407, 1668, 1665, 1666, 1664,  437, 1646,
+     1651, 1647, 1639, 1656, 1648,    0,  436,  436,  428,  437,
+      445,  461, 1647, 1766,    0,  466, 1638, 1641, 1766,  439,
+      445, 1766, 1693, 1648,  464, 1691,  469, 1690,  467, 1689,
+
+     1766,  511, 1688,  484, 1649, 1644, 1643, 1634,  450, 1683,
+     1677, 1643, 1622, 1630, 1636, 1624, 1638, 1634, 1635, 1635,
+     1630, 1622, 1624, 1608, 1612, 1625, 1625, 1617, 1607, 1610,
+     1624, 1766, 1610, 1618, 1621, 1602, 1601, 1651, 1600, 1610,
+     1648,  500, 1609, 1597, 1608, 1644,  481, 1648, 1585, 1600,
+        9, 1590, 1606, 1587, 1589, 1585, 1591, 1582, 1581, 1594,
+     1587, 1589, 1593, 1592, 1586,   80, 1593, 1588, 1580, 1570,
+     1585, 1585, 1566, 1582, 1568, 1574, 1581, 1569,  497, 1562,
+     1576, 1575, 1578, 1560, 1568,  490, 1766, 1766,  491, 1766,
+     1766, 1555,    0,  475, 1557,  506,  493, 1611, 1766, 1564,
+
+      486, 1766, 1609, 1766, 1603,  552, 1766,  481, 1545, 1555,
+     1605, 1562, 1561,  479, 1766, 1559, 1601, 1556, 1553, 1554,
+      531, 1558, 1596, 1546, 1541, 1538, 1534, 1536, 1585, 1544,
+     1533, 1582, 1530,  558, 1543, 1543, 1526, 1527, 1540, 1527,
+     1537, 1532, 1539, 1534, 1519,  395, 1528, 1531, 1526, 1522,
+     1570,  495,  518, 1766, 1564, 1516, 1515, 1508, 1510, 1514,
+     1503, 1510, 1515,  525, 1560, 1515,  500, 1512, 1516, 1514,
+     1503, 1503, 1515,  523, 1490, 1491, 1512,  533, 1494, 1506,
+     1505, 1491, 1503, 1502, 1501, 1500,  206, 1541, 1540, 1539,
+     1483,  539, 1496, 1766, 1766, 1495,    0,  527, 1483, 1534,
+
+     1533, 1491, 1531, 1766, 1479, 1529, 1766,  560,  607,  529,
+     1528, 1470, 1766, 1475, 1485, 1484, 1471, 1470, 1766, 1472,
+     1469, 1481, 1477, 1465, 1467, 1766, 1473, 1458, 1460, 1471,
+     1469, 1464,  577, 1471, 1453, 1502, 1766, 1451, 1467, 1499,
+     1503, 1461, 1455, 1457, 1458, 1460, 1492, 1445, 1440, 1439,
+     1441, 1434, 1449, 1427, 1434, 1439, 1487, 1766, 1434, 1430,
+     1484, 1437, 1431, 1438, 1423, 1433, 1436, 1425, 1424, 1419,
+     1766, 1474, 1766, 1418, 1417, 1410, 1427, 1464, 1411, 1416,
+     1425, 1419, 1413, 1422,  596, 1457, 1421, 1404, 1404, 1399,
+     1402, 1401, 1409, 1413, 1396, 1452, 1394, 1408, 1397, 1766,
+
+     1766, 1766, 1397, 1766, 1407, 1441, 1403,    0, 1444, 1394,
+     1766, 1766, 1391, 1766, 1397, 1766,  551,  553,  597, 1766,
+     1435, 1382, 1381, 1380, 1387, 1380, 1392, 1391, 1375, 1390,
+     1420, 1387, 1423, 1369, 1371, 1383, 1383, 1382, 1766, 1367,
+     1364, 1378, 1370, 1376, 1367, 1375, 1766, 1360, 1371, 1375,
+     1357, 1371, 1369, 1352, 1346, 1351, 1348, 1363, 1364, 1361,
+     1402, 1359, 1766, 1345, 1347, 1766, 1355, 1392, 1391,  598,
+     1354, 1337, 1338, 1343, 1334, 1766, 1348, 1334,  599, 1326,
+     1347, 1344, 1336, 1379, 1333, 1340, 1376, 1766, 1324, 1322,
+     1336, 1320, 1334, 1337, 1369, 1368, 1315, 1366, 1365, 1766,
+
+      600, 1327, 1327, 1325, 1314, 1316, 1766, 1766, 1359, 1307,
+     1362,  576,  545,  572, 1321, 1360, 1354, 1353, 1352, 1306,
+     1296, 1349, 1311, 1301, 1346, 1309, 1291, 1299, 1301, 1305,
+     1340, 1344, 1301, 1300, 1301, 1294, 1283, 1296, 1299, 1294,
+     1289, 1294, 1291, 1290, 1293, 1288, 1329, 1328, 1272, 1268,
+      580, 1325, 1766, 1324, 1273, 1265, 1316, 1279, 1266, 1766,
+     1266, 1275, 1274, 1274, 1258, 1313, 1256, 1269, 1766, 1261,
+     1253, 1262, 1255, 1266, 1243, 1247, 1298, 1262, 1244, 1242,
+     1253, 1293, 1292, 1291, 1238,  566,  584, 1232, 1242,  583,
+     1766, 1292, 1238, 1248, 1248, 1237, 1241, 1248, 1285, 1766,
+
+     1279,  603, 1232, 1240, 1232, 1766, 1223, 1226, 1222, 1239,
+     1234, 1222, 1233, 1217, 1219, 1271, 1217, 1231, 1212, 1262,
+     1217, 1766, 1225, 1223, 1214, 1223, 1219,  638,   61,   64,
+      193,  266,  351,  416,  361,  443, 1766, 1766,  507,  523,
+      528,  537, 1766, 1766,  551,  554,  552,  613,  568,  568,
+      631,  584,  642,  644, 1766,  598,  612,  612,  656,  606,
+      608,  603,  661,  616,  606,  607,  603,  613,  617,  628,
+      612,  630,  625,  619,  621,  633,  623,  676,  635,  640,
+      617, 1766,  642,  632,  677,  626,  641,  641, 1766,  661,
+      669,  649,  639,  653,  646,  641,  642,  638,  647,  642,
+
+      693,  699,  648, 1766,  660,  645,  661,  651,  663,  657,
+      702,  670,  654,  655, 1766,  672,  675,  659,  661,  717,
+      662, 1766,  681,  661,  679,  718,  678,  674,  669,  687,
+      686,  672,  687,  679,  675,  693,  678, 1766, 1766,  686,
+      731,  686, 1766,  694,  689,  740, 1766,  691,  696,  738,
+      692,  693,  705,  699,  703,  701,  699,  752,  698,  754,
+      755,  701, 1766,  700,  708,  706,  711,  723,  707,  721,
+      722,  723,  739,  744,  718,  728,  714,  721,  726,  734,
+      775,  776,  725,  729, 1766,  724,  742,  739,  777,  728,
+      746,  747,  733,  741,  750,  730,  745,  752,  792,  793,
+
+     1766,  750,  797,  798,  760,  762,  745,  747,  754,  763,
+      806,  755,  754,  771,  810,  762,  766,  764,  762,  815,
+      816,  768,  818,  814,  774, 1766,  779,  772,  763,  782,
+      776,  771,  781,  778,  783,  779, 1766,  774, 1766, 1766,
+      775,  773,  792,  793,  790,  775,  796,  778,  784,  791,
+      824,  815,  787,  846,  791,  806,  798,  802, 1766, 1766,
+      812,  810,  796,  797,  855,  810,  815,  802,  813,  805,
+      811,  807,  825,  826,  827, 1766, 1766,  826, 1766,  828,
+     1766,  813,  832,  822,  873,  828,  870,  836, 1766,  828,
+      820,  879, 1766,  880,  829,  836,  878, 1766, 1766,  838,
+
+     1766,  829,  829,  832,  846,  851,  834,  845,  892,  851,
+      852,  853,  891,  897,  898,  847,  900,  901,  843,  903,
+      864,  848,  860,  850,  880,  909,  869, 1766,  911,  860,
+      856,  872,  877,  865,  917,  876, 1766,  878,  877,  879,
+      872,  881,  882,  879,  869,  872,  872,  929,  878,  931,
+      876,  933, 1766,  871,  886,  880,  938,  893, 1766, 1766,
+      889,  899,  884,  901,  887,  946,  948,  894,  904,  951,
+      910, 1766,  903,  903,  905,  907,  958, 1766, 1766,  904,
+     1766, 1766,  918, 1766,  912,  962,  913,  964,  946, 1766,
+      924, 1766,  911,  910,  913,  913,  914,  972, 1766,  917,
+
+      974,  929,  920,  935,  935,  938,  938,  935,  977,  941,
+     1766,  933, 1766,  943, 1766,  944,  945,  943,  985, 1766,
+      936,  936,  942,  941,  953,  953, 1766, 1766,  992,  941,
+     1766,  958,  943,  943,  945,  951, 1766,  956, 1005,  968,
+     1766,  965, 1766,  984, 1004, 1010,  954, 1012, 1013,  968,
+     1766, 1015, 1766,  955, 1012,  977,  973, 1015,  965,  970,
+      968, 1025,  983, 1027, 1028,  991,  980,  974,  990, 1033,
+      977,  995,  980,  995,  979, 1035, 1036, 1037,  986, 1039,
+     1004,  990, 1766, 1001, 1048, 1020, 1007, 1766, 1051, 1766,
+     1766, 1000, 1766, 1053, 1001, 1050,  995, 1000, 1059, 1009,
+
+     1019, 1020, 1766, 1063, 1018, 1766, 1766, 1009, 1024, 1012,
+     1027, 1766, 1064, 1032, 1025, 1026, 1035, 1017, 1023, 1025,
+     1078, 1039, 1038, 1082, 1033, 1766, 1084, 1031, 1766, 1035,
+     1766, 1038, 1033, 1032, 1090, 1045, 1766, 1087, 1040, 1037,
+     1766, 1051, 1054, 1097, 1052, 1099, 1042, 1044, 1052, 1042,
+     1058, 1059, 1053, 1069, 1766, 1059, 1109, 1766, 1105, 1766,
+     1070, 1107, 1071, 1062, 1069, 1766, 1066, 1071, 1069, 1119,
+     1120, 1065, 1766, 1080, 1766, 1070, 1082, 1083, 1126, 1070,
+     1078, 1072, 1080, 1093, 1766, 1092, 1082, 1081, 1084, 1096,
+     1087, 1096, 1098, 1102, 1766, 1766, 1141, 1086, 1102, 1144,
+
+     1145, 1766, 1141, 1105, 1102, 1107, 1094, 1089, 1152, 1111,
+     1154, 1113, 1114, 1157, 1116, 1119, 1766, 1160, 1123, 1766,
+     1766, 1105, 1163, 1112, 1165, 1110, 1127, 1766, 1113, 1766,
+     1113, 1115, 1766, 1120, 1130, 1766, 1116, 1128, 1766, 1124,
+     1766, 1134, 1128, 1132, 1123, 1175, 1124, 1132, 1141, 1134,
+     1129, 1130, 1145, 1136, 1143, 1130, 1145, 1150, 1193, 1152,
+     1195, 1196, 1141, 1157, 1148, 1162, 1158, 1151, 1766, 1203,
+     1766, 1766, 1204, 1205, 1162, 1161, 1162, 1152, 1766, 1766,
+     1766, 1210, 1154, 1170, 1213, 1766, 1209, 1160, 1766, 1159,
+     1161, 1172, 1219, 1170, 1766, 1179, 1222, 1766, 1766, 1228,
+
+     1233, 1238, 1243, 1248, 1253, 1258, 1261, 1235, 1240, 1242,
+     1255
     } ;
 
-static yyconst flex_int16_t yy_def[1390] =
+static yyconst flex_int16_t yy_def[1412] =
     {   0,
-     1378, 1378, 1379, 1379, 1378, 1378, 1378, 1378, 1378, 1378,
-     1377, 1377, 1377, 1377, 1377, 1380, 1377, 1377, 1377, 1377,
-     1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
-     1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1381,
-     1377, 1377, 1377, 1382,   15, 1377,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1383,   45,   45,
+     1400, 1400, 1401, 1401, 1400, 1400, 1400, 1400, 1400, 1400,
+     1399, 1399, 1399, 1399, 1399, 1402, 1399, 1399, 1399, 1399,
+     1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
+     1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1403,
+     1399, 1399, 1399, 1404,   15, 1399,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1405,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1380, 1377,
-     1377, 1377, 1377, 1377, 1377, 1384, 1377, 1377, 1377, 1377,
-     1377, 1377, 1377, 1377, 1377, 1377, 1377, 1381, 1377, 1382,
+       45,   45,   45,   45,   45,   45,   45,   45, 1402, 1399,
+     1399, 1399, 1399, 1399, 1399, 1406, 1399, 1399, 1399, 1399,
+     1399, 1399, 1399, 1399, 1399, 1399, 1399, 1403, 1399, 1404,
 
-     1377, 1377,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1385,   45, 1383,   45,   45,
+     1399, 1399,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1407,   45, 1405,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1384, 1377, 1377, 1377, 1377,
-     1377, 1377, 1377, 1377, 1386,   45,   45,   45, 1377,   45,
-       45, 1377,   45,   45,   45,   45,   45,   45,   45, 1385,
+       45,   45,   45,   45,   45, 1406, 1399, 1399, 1399, 1399,
+     1399, 1399, 1399, 1399, 1408,   45,   45,   45, 1399,   45,
+       45, 1399,   45,   45,   45,   45,   45,   45,   45, 1407,
 
-     1377, 1383,   45,   45,   45,   45,   45,   45,   45,   45,
+     1399, 1405,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1377,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1399,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1377, 1377, 1377, 1377, 1377,
-     1377, 1377, 1387,   45,   45,   45,   45,   45, 1377,   45,
+       45,   45,   45,   45,   45, 1399, 1399, 1399, 1399, 1399,
+     1399, 1399, 1409,   45,   45,   45,   45,   45, 1399,   45,
 
-       45, 1377,   45, 1377,   45, 1383, 1377,   45,   45,   45,
-       45,   45,   45,   45, 1377,   45,   45,   45,   45,   45,
+       45, 1399,   45, 1399,   45, 1405, 1399,   45,   45,   45,
+       45,   45,   45,   45, 1399,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1377,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1399,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1377, 1377, 1377, 1388,   45,   45,   45,
+       45,   45,   45, 1399, 1399, 1399, 1410,   45,   45,   45,
 
-       45,   45,   45, 1377,   45,   45, 1377,   45, 1383,   45,
-       45,   45, 1377,   45,   45,   45,   45,   45, 1377,   45,
-       45,   45,   45,   45,   45, 1377,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1377,   45,   45,   45,
+       45,   45,   45, 1399,   45,   45, 1399,   45, 1405,   45,
+       45,   45, 1399,   45,   45,   45,   45,   45, 1399,   45,
+       45,   45,   45,   45,   45, 1399,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1399,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1377,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1399,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1377,   45, 1377,   45,   45,   45,   45,   45,   45,   45,
+     1399,   45, 1399,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1377,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1399,
 
-     1377, 1377,   45, 1377,   45,   45, 1377, 1389,   45,   45,
-     1377, 1377,   45, 1377,   45, 1377,   45,   45,   45, 1377,
+     1399, 1399,   45, 1399,   45,   45, 1399, 1411,   45,   45,
+     1399, 1399,   45, 1399,   45, 1399,   45,   45,   45, 1399,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1377,   45,
-       45,   45,   45,   45,   45,   45, 1377,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1399,   45,
+       45,   45,   45,   45,   45,   45, 1399,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1377,   45,   45, 1377,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1377,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1377,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1377,
+       45,   45, 1399,   45,   45, 1399,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1399,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1399,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1399,
 
-       45,   45,   45,   45,   45,   45, 1377, 1377,   45,   45,
+       45,   45,   45,   45,   45,   45, 1399, 1399,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1377,   45,   45,   45,   45,   45,   45, 1377,
-       45,   45,   45,   45,   45,   45,   45,   45, 1377,   45,
+       45,   45, 1399,   45,   45,   45,   45,   45,   45, 1399,
+       45,   45,   45,   45,   45,   45,   45,   45, 1399,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1377,   45,   45,   45,   45,   45,   45,   45,   45, 1377,
+     1399,   45,   45,   45,   45,   45,   45,   45,   45, 1399,
 
-       45,   45,   45,   45,   45, 1377,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1399,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1377,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1377, 1377,   45,   45,
-       45,   45, 1377, 1377,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1377,   45,   45,   45,   45,   45,
+       45, 1399,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1399, 1399,   45,   45,
+       45,   45, 1399, 1399,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1399,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1377,   45,   45,   45,   45,   45,   45, 1377,   45,
+       45, 1399,   45,   45,   45,   45,   45,   45, 1399,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45, 1377,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1377,   45,   45,   45,   45,   45,
-     1377,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1377, 1377,   45,   45,
-       45, 1377,   45,   45,   45, 1377,   45,   45,   45,   45,
+       45,   45,   45, 1399,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1399,   45,   45,   45,   45,   45,
+       45, 1399,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1399, 1399,   45,
+       45,   45, 1399,   45,   45,   45, 1399,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1377,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1399,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1377,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1377,   45,
-
+       45,   45,   45,   45, 1399,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+
+     1399,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1377,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1377,   45, 1377, 1377,   45,   45,
+       45,   45,   45,   45,   45, 1399,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1399,   45, 1399, 1399,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1377, 1377,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1399, 1399,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1377, 1377,   45, 1377,   45, 1377,   45,   45,
-       45,   45,   45,   45,   45, 1377,   45,   45,   45, 1377,
-       45,   45,   45,   45, 1377, 1377,   45, 1377,   45,   45,
+       45,   45,   45,   45,   45, 1399, 1399,   45, 1399,   45,
+     1399,   45,   45,   45,   45,   45,   45,   45, 1399,   45,
+       45,   45, 1399,   45,   45,   45,   45, 1399, 1399,   45,
 
+     1399,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1399,   45,   45,
+       45,   45,   45,   45,   45,   45, 1399,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1399,   45,   45,   45,   45,   45, 1399, 1399,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1377,   45,   45,   45,   45,   45,
-       45,   45,   45, 1377,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1377,   45,
-       45,   45,   45,   45, 1377, 1377,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1377,   45,   45,
-       45,   45,   45, 1377, 1377,   45, 1377, 1377,   45, 1377,
-       45,   45,   45,   45,   45, 1377,   45, 1377,   45,   45,
-       45,   45,   45,   45, 1377,   45,   45,   45,   45,   45,
-
-       45,   45,   45,   45,   45, 1377,   45, 1377,   45, 1377,
-       45,   45,   45,   45, 1377,   45,   45,   45,   45,   45,
-       45, 1377, 1377,   45,   45, 1377,   45,   45,   45,   45,
-       45, 1377,   45,   45,   45, 1377,   45, 1377,   45,   45,
-       45,   45,   45,   45,   45, 1377,   45, 1377,   45,   45,
+       45, 1399,   45,   45,   45,   45,   45, 1399, 1399,   45,
+     1399, 1399,   45, 1399,   45,   45,   45,   45,   45, 1399,
+       45, 1399,   45,   45,   45,   45,   45,   45, 1399,   45,
+
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1399,   45, 1399,   45, 1399,   45,   45,   45,   45, 1399,
+       45,   45,   45,   45,   45,   45, 1399, 1399,   45,   45,
+     1399,   45,   45,   45,   45,   45, 1399,   45,   45,   45,
+     1399,   45, 1399,   45,   45,   45,   45,   45,   45,   45,
+     1399,   45, 1399,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1377,   45,   45,   45,
-       45, 1377,   45, 1377, 1377,   45, 1377,   45,   45,   45,
-       45,   45,   45,   45, 1377,   45,   45, 1377, 1377,   45,
-
-       45,   45,   45, 1377,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1377,   45,   45,
-     1377,   45, 1377,   45,   45,   45,   45,   45, 1377,   45,
-     1377,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1377,   45,   45, 1377,   45, 1377,
-       45,   45,   45,   45,   45, 1377,   45,   45,   45,   45,
-     1377,   45, 1377,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1377,   45,   45,   45,   45,   45,   45,   45,
-       45, 1377,   45,   45,   45,   45,   45, 1377,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-
-       45, 1377,   45,   45, 1377, 1377,   45,   45,   45,   45,
-       45,   45, 1377,   45, 1377,   45,   45, 1377,   45, 1377,
-       45,   45, 1377,   45, 1377,   45,   45,   45,   45,   45,
+       45,   45, 1399,   45,   45,   45,   45, 1399,   45, 1399,
+     1399,   45, 1399,   45,   45,   45,   45,   45,   45,   45,
+
+       45,   45, 1399,   45,   45, 1399, 1399,   45,   45,   45,
+       45, 1399,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1399,   45,   45, 1399,   45,
+     1399,   45,   45,   45,   45,   45, 1399,   45,   45,   45,
+     1399,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1399,   45,   45, 1399,   45, 1399,
+       45,   45,   45,   45,   45, 1399,   45,   45,   45,   45,
+       45,   45, 1399,   45, 1399,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1399,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1399, 1399,   45,   45,   45,   45,
+
+       45, 1399,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1399,   45,   45, 1399,
+     1399,   45,   45,   45,   45,   45,   45, 1399,   45, 1399,
+       45,   45, 1399,   45,   45, 1399,   45,   45, 1399,   45,
+     1399,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1377,
-       45, 1377, 1377,   45,   45,   45,   45,   45, 1377, 1377,
-     1377,   45,   45,   45, 1377,   45,   45,   45,   45,   45,
-       45,   45, 1377,   45,   45, 1377,    0, 1377, 1377, 1377,
-     1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377
+       45,   45,   45,   45,   45,   45,   45,   45, 1399,   45,
+     1399, 1399,   45,   45,   45,   45,   45,   45, 1399, 1399,
+     1399,   45,   45,   45,   45, 1399,   45,   45, 1399,   45,
+       45,   45,   45,   45, 1399,   45,   45, 1399,    0, 1399,
+
+     1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
+     1399
     } ;
 
-static yyconst flex_uint16_t yy_nxt[1815] =
+static yyconst flex_int16_t yy_nxt[1838] =
     {   0,
-     1377,   13,   14,   13, 1377,   15,   16,  815,   17,   18,
+     1399,   13,   14,   13, 1399,   15,   16, 1399,   17,   18,
        19,   20,   21,   22,   22,   22,   23,   24,   85,  357,
-       37,   14,   37,   86,   25,   26,   38, 1377, 1377,   27,
+       37,   14,   37,   86,   25,   26,   38, 1399, 1399,   27,
        37,   14,   37,   42,   28,   42,   38,   91,   92,   29,
       115,   30,   13,   14,   13,   90,   91,   25,   31,   92,
-       13,   14,   13,   13,   14,   13,   32,   40, 1377,   13,
+       13,   14,   13,   13,   14,   13,   32,   40, 1399,   13,
        14,   13,   33,   40,  115,   91,   92,  358,   90,   34,
        35,   13,   14,   13,   94,   15,   16,   95,   17,   18,
        19,   20,   21,   22,   22,   22,   23,   24,   13,   14,
@@ -1017,7 +1011,7 @@ static yyconst flex_uint16_t yy_nxt[1815] =
 
        39,   84,   84,   84,   28,   42,   41,   42,   42,   29,
        42,   30,   82,  107,   41,  111,   93,   25,   31,  108,
-      130,  137,   88,  816,   88,  817,   32,   89,   89,   89,
+      130,  137,   88,  817,   88,  818,   32,   89,   89,   89,
       131,  138,   33,  139,  373,   82,  107,  374,  111,   34,
        35,   44,   44,   44,   45,   45,   46,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
@@ -1030,7 +1024,7 @@ static yyconst flex_uint16_t yy_nxt[1815] =
        45,   45,   80,  103,   81,   81,   81,   80,  109,   83,
        83,   83,  101,  114,   80,   82,   83,   83,   83,  121,
        82,  145,  122,  112,  123,  146,  124,   82,  162,  103,
-      818,  103,  163,  113,  134,  222,  114,  110,   82,  135,
+      819,  103,  163,  113,  134,  222,  114,  110,   82,  135,
       191,  107,  136,   82,  192,  147,  112,  102,  223,  498,
        82,   45,  499,   45,   45,   45,   45,  119,   45,   45,
        45,  113,  117,  120,  107,   45,   45,  191,   45,   45,
@@ -1038,7 +1032,7 @@ static yyconst flex_uint16_t yy_nxt[1815] =
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   89,   89,
-       89,   45,  125,  819,  111,   45,  126,  241,  179,  127,
+       89,   45,  125,  820,  111,   45,  126,  241,  179,  127,
       128,  141,  142,   45,  177,  143,  151,   45,  199,   45,
       118,  144,  129,  148,  152,  149,  153,  150,  242,  112,
       156,  154,  155,  157,  158,  164,  179,  114,  165,  113,
@@ -1049,8 +1043,8 @@ static yyconst flex_uint16_t yy_nxt[1815] =
       100,   80,   82,   83,   83,   83,  190,  100,  186,   82,
 
       181,  196,  195,  182,   82,   82,  197,  207,  198,  213,
-      214,  232,  820,  219,  186,  220,  208,  209,  195,  215,
-      224,  821,  190,  822,  102,  100,  186,   82,  196,  100,
+      214,  232,  821,  219,  186,  220,  208,  209,  195,  215,
+      224,  822,  190,  823,  102,  100,  186,   82,  196,  100,
       195,  203,  221,  100,  197,  198,  225,  227,  253,  254,
       228,  100,  204,  263,  229,  100,  247,  100,  185,  202,
       202,  202,  288,  233,  452,  453,  202,  202,  202,  202,
@@ -1059,156 +1053,158 @@ static yyconst flex_uint16_t yy_nxt[1815] =
       202,  202,  202,  202,  202,  288,  294,  267,  301,  268,
       287,  269,  270,  303,  271,  279,  305,  286,  289,  290,
 
-      297,  298,  302,  823,  294,  301,  313,  387,  291,  294,
+      297,  298,  302,  824,  294,  301,  313,  387,  291,  294,
       346,  301,  314,  398,  394,  394,  303,  403,  406,  398,
       400,  401,  416,  305,  306,  306,  306,  308,  353,  402,
       471,  306,  306,  306,  306,  306,  306,  394,  395,  417,
       403,  423,  398,  459,  504,  424,  406,  475,  410,  505,
-      406,  476,  824,  460,  306,  306,  306,  306,  306,  306,
+      406,  476,  825,  460,  306,  306,  306,  306,  306,  306,
       509,  347,  509,  437,  348,  409,  409,  409,  438,  702,
-      825,  826,  409,  409,  409,  409,  409,  409,  461,  483,
+      826,  827,  409,  409,  409,  409,  409,  409,  461,  483,
       488,  612,  539,  484,  489,  613,  472,  540,  509,  517,
-      519,  518,  702,  827,  828,  409,  409,  409,  409,  409,
+      519,  518,  702,  828,  829,  409,  409,  409,  409,  409,
 
       409,  588,  608,  660,  669,  691,  589,  614,  612,  670,
-      701,  829,  830,  613,  439,  692,  517,  774,  518,  440,
-       45,   45,   45,  703,  775,  833,  834,   45,   45,   45,
+      701,  830,  831,  613,  439,  692,  517,  774,  518,  440,
+       45,   45,   45,  703,  775,  834,  835,   45,   45,   45,
        45,   45,   45,  704,  741,  776,  791,  742,  701,  780,
-      661,  835,  777,  831,  836,  781,  671,  832,  837,  838,
-       45,   45,   45,   45,   45,   45,  839,  840,  841,  842,
-      843,  844,  845,  846,  791,  847,  848,  849,  850,  851,
-      852,  853,  854,  855,  856,  857,  858,  859,  861,  862,
-      863,  864,  865,  866,  867,  868,  869,  870,  871,  860,
-      872,  873,  874,  875,  876,  877,  878,  879,  880,  881,
-
-      882,  883,  884,  885,  886,  887,  888,  889,  890,  891,
-      892,  893,  894,  895,  873,  896,  897,  872,  898,  899,
-      902,  903,  904,  905,  900,  906,  907,  908,  909,  910,
-      911,  912,  913,  914,  915,  916,  918,  919,  920,  921,
-      922,  923,  924,  925,  926,  927,  917,  928,  929,  930,
-      931,  932,  933,  934,  935,  936,  937,  938,  939,  940,
-      941,  942,  943,  944,  945,  946,  947,  948,  949,  951,
-      950,  952,  953,  954,  955,  901,  956,  957,  958,  959,
-      960,  961,  962,  963,  964,  965,  966,  967,  968,  969,
-      970,  971,  972,  973,  974,  975,  949,  950,  976,  978,
-
-      980,  981,  982,  977,  983,  984,  985,  986,  987,  988,
-      989,  990,  991,  992,  993,  994,  995,  996,  997,  998,
-      999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008,
-     1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018,
-     1019,  979, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027,
-     1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037,
-     1038, 1039, 1040, 1041, 1042, 1043, 1044, 1022, 1045, 1046,
-     1047, 1048, 1049, 1023, 1050, 1051, 1052, 1053, 1054, 1055,
-     1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065,
-     1066, 1067, 1068, 1069, 1070, 1071, 1072, 1074, 1075, 1076,
-
-     1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086,
-     1087, 1088, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097,
-     1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107,
-     1108, 1109, 1110, 1111, 1112, 1114, 1085, 1115, 1116, 1117,
-     1118, 1119, 1113, 1120, 1121, 1122, 1123, 1073, 1124, 1125,
-     1126, 1127, 1128, 1089, 1129, 1130, 1131, 1132, 1133, 1134,
-     1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144,
-     1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154,
-     1155, 1156, 1157, 1158, 1159, 1160, 1161, 1139, 1162, 1163,
-     1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173,
-
-     1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183,
-     1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193,
-     1194, 1195, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204,
-     1205, 1206, 1207, 1180, 1208, 1209, 1210, 1211, 1212, 1213,
-     1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223,
-     1225, 1226, 1227, 1228, 1224, 1229, 1230, 1231, 1232, 1233,
-     1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243,
-     1244, 1245, 1246, 1219, 1247, 1248, 1249, 1196, 1250, 1251,
-     1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261,
-     1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271,
-
-     1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281,
-     1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291,
-     1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301,
-     1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311,
-     1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321,
-     1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331,
-     1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341,
-     1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351,
-     1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361,
-     1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371,
-
-     1372, 1373, 1374, 1375, 1376,   12,   12,   12,   12,   12,
-       36,   36,   36,   36,   36,   79,  293,   79,   79,   79,
-       98,  397,   98,  508,   98,  100,  100,  100,  100,  100,
-      116,  116,  116,  116,  116,  176,  100,  176,  176,  176,
-      200,  200,  200,  814,  813,  812,  811,  810,  809,  808,
-      807,  806,  805,  804,  803,  802,  801,  800,  799,  798,
-      797,  796,  795,  794,  793,  792,  790,  789,  788,  787,
-      786,  785,  784,  783,  782,  779,  778,  773,  772,  771,
-      770,  769,  768,  767,  766,  765,  764,  763,  762,  761,
-      760,  759,  758,  757,  756,  755,  754,  753,  752,  751,
-
-      750,  749,  748,  747,  746,  745,  744,  743,  740,  739,
-      738,  737,  736,  735,  734,  733,  732,  731,  730,  729,
-      728,  727,  726,  725,  724,  723,  722,  721,  720,  719,
-      718,  717,  716,  715,  714,  713,  712,  711,  710,  709,
-      708,  707,  706,  705,  700,  699,  698,  697,  696,  695,
-      694,  693,  690,  689,  688,  687,  686,  685,  684,  683,
-      682,  681,  680,  679,  678,  677,  676,  675,  674,  673,
-      672,  668,  667,  666,  665,  664,  663,  662,  659,  658,
-      657,  656,  655,  654,  653,  652,  651,  650,  649,  648,
-      647,  646,  645,  644,  643,  642,  641,  640,  639,  638,
-
-      637,  636,  635,  634,  633,  632,  631,  630,  629,  628,
-      627,  626,  625,  624,  623,  622,  621,  620,  619,  618,
-      617,  616,  615,  611,  610,  609,  608,  607,  606,  605,
-      604,  603,  602,  601,  600,  599,  598,  597,  596,  595,
-      594,  593,  592,  591,  590,  587,  586,  585,  584,  583,
-      582,  581,  580,  579,  578,  577,  576,  575,  574,  573,
-      572,  571,  570,  569,  568,  567,  566,  565,  564,  563,
-      562,  561,  560,  559,  558,  557,  556,  555,  554,  553,
-      552,  551,  550,  549,  548,  547,  546,  545,  544,  543,
-      542,  541,  538,  537,  536,  535,  534,  533,  532,  531,
-
-      530,  529,  528,  527,  526,  525,  524,  523,  522,  521,
-      520,  516,  515,  514,  513,  512,  511,  510,  507,  506,
-      503,  502,  501,  500,  497,  496,  495,  494,  493,  492,
-      491,  490,  487,  486,  485,  482,  481,  480,  479,  478,
-      477,  474,  473,  470,  469,  468,  467,  466,  465,  464,
-      463,  462,  458,  457,  456,  455,  454,  451,  450,  449,
-      448,  447,  446,  445,  444,  443,  442,  441,  436,  435,
-      434,  433,  432,  431,  430,  429,  428,  427,  426,  425,
-      422,  421,  420,  419,  418,  415,  414,  413,  412,  411,
-      408,  407,  405,  404,  399,  396,  393,  392,  391,  390,
-
-      389,  388,  386,  385,  384,  383,  382,  381,  380,  379,
-      378,  377,  376,  375,  372,  371,  370,  369,  368,  367,
-      366,  365,  364,  363,  362,  361,  360,  359,  356,  355,
-      354,  352,  351,  350,  349,  345,  344,  343,  342,  341,
-      340,  339,  338,  337,  336,  335,  334,  333,  332,  331,
-      330,  329,  328,  327,  326,  325,  324,  323,  322,  321,
-      320,  319,  318,  317,  316,  315,  312,  311,  310,  309,
-      307,  201,  304,  302,  300,  299,  296,  295,  292,  285,
-      284,  283,  282,  281,  280,  278,  277,  276,  275,  262,
-      261,  260,  256,  255,  252,  251,  250,  249,  248,  246,
-
-      245,  244,  243,  240,  239,  238,  237,  236,  235,  234,
-      231,  230,  226,  218,  217,  216,  212,  211,  210,  206,
-      205,  201,  194,  189,  188,  187,  184,  183,  175,  161,
-      140,  133,  106,  105,  104,   43,   99,   97,   96,   87,
-       43, 1377,   11, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
-     1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
-     1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
-     1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
-     1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
-     1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
-
-     1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
-     1377, 1377, 1377, 1377
+      661,  836,  777,  815,  837,  781,  671,  838,  816,  839,
+       45,   45,   45,   45,   45,   45,  832,  840,  841,  842,
+      833,  843,  844,  845,  791,  846,  847,  848,  849,  850,
+      851,  852,  853,  854,  855,  856,  857,  858,  859,  860,
+      862,  863,  864,  865,  866,  867,  868,  869,  870,  871,
+      872,  861,  873,  874,  875,  876,  877,  878,  879,  880,
+
+      881,  882,  883,  884,  885,  886,  887,  888,  889,  890,
+      891,  892,  893,  894,  895,  896,  874,  897,  898,  873,
+      899,  900,  901,  904,  905,  906,  907,  902,  908,  909,
+      910,  911,  912,  913,  914,  915,  916,  917,  918,  920,
+      921,  922,  923,  924,  925,  926,  927,  928,  929,  919,
+      930,  931,  932,  933,  934,  935,  936,  937,  938,  939,
+      940,  941,  942,  943,  944,  945,  946,  947,  948,  949,
+      950,  951,  953,  952,  954,  955,  956,  957,  903,  958,
+      959,  960,  961,  962,  963,  964,  965,  966,  967,  968,
+      969,  970,  971,  972,  973,  974,  975,  976,  977,  951,
+
+      952,  978,  979,  981,  983,  984,  985,  980,  986,  987,
+      988,  989,  990,  991,  992,  993,  994,  995,  996,  997,
+      998,  999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007,
+     1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017,
+     1018, 1019, 1020, 1021, 1022,  982, 1023, 1024, 1025, 1026,
+     1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036,
+     1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046,
+     1047, 1025, 1048, 1049, 1050, 1051, 1052, 1026, 1053, 1054,
+     1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064,
+     1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074,
+
+     1075, 1076, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085,
+     1086, 1087, 1088, 1089, 1090, 1091, 1092, 1094, 1095, 1096,
+     1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106,
+     1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116,
+     1117, 1089, 1119, 1120, 1121, 1122, 1123, 1124, 1118, 1125,
+     1126, 1127, 1077, 1128, 1129, 1130, 1131, 1132, 1093, 1133,
+     1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143,
+     1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153,
+     1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163,
+     1164, 1165, 1166, 1144, 1167, 1168, 1169, 1170, 1171, 1172,
+
+     1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182,
+     1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192,
+     1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202,
+     1203, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213,
+     1186, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222,
+     1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1233,
+     1234, 1235, 1236, 1232, 1237, 1238, 1239, 1240, 1241, 1242,
+     1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252,
+     1253, 1254, 1227, 1255, 1256, 1257, 1204, 1258, 1259, 1260,
+     1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270,
+
+     1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280,
+     1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290,
+     1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300,
+     1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310,
+     1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320,
+     1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330,
+     1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340,
+     1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350,
+     1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360,
+     1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370,
+
+     1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380,
+     1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390,
+     1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398,   12,   12,
+       12,   12,   12,   36,   36,   36,   36,   36,   79,  293,
+       79,   79,   79,   98,  397,   98,  508,   98,  100,  100,
+      100,  100,  100,  116,  116,  116,  116,  116,  176,  100,
+      176,  176,  176,  200,  200,  200,  814,  813,  812,  811,
+      810,  809,  808,  807,  806,  805,  804,  803,  802,  801,
+      800,  799,  798,  797,  796,  795,  794,  793,  792,  790,
+      789,  788,  787,  786,  785,  784,  783,  782,  779,  778,
+
+      773,  772,  771,  770,  769,  768,  767,  766,  765,  764,
+      763,  762,  761,  760,  759,  758,  757,  756,  755,  754,
+      753,  752,  751,  750,  749,  748,  747,  746,  745,  744,
+      743,  740,  739,  738,  737,  736,  735,  734,  733,  732,
+      731,  730,  729,  728,  727,  726,  725,  724,  723,  722,
+      721,  720,  719,  718,  717,  716,  715,  714,  713,  712,
+      711,  710,  709,  708,  707,  706,  705,  700,  699,  698,
+      697,  696,  695,  694,  693,  690,  689,  688,  687,  686,
+      685,  684,  683,  682,  681,  680,  679,  678,  677,  676,
+      675,  674,  673,  672,  668,  667,  666,  665,  664,  663,
+
+      662,  659,  658,  657,  656,  655,  654,  653,  652,  651,
+      650,  649,  648,  647,  646,  645,  644,  643,  642,  641,
+      640,  639,  638,  637,  636,  635,  634,  633,  632,  631,
+      630,  629,  628,  627,  626,  625,  624,  623,  622,  621,
+      620,  619,  618,  617,  616,  615,  611,  610,  609,  608,
+      607,  606,  605,  604,  603,  602,  601,  600,  599,  598,
+      597,  596,  595,  594,  593,  592,  591,  590,  587,  586,
+      585,  584,  583,  582,  581,  580,  579,  578,  577,  576,
+      575,  574,  573,  572,  571,  570,  569,  568,  567,  566,
+      565,  564,  563,  562,  561,  560,  559,  558,  557,  556,
+
+      555,  554,  553,  552,  551,  550,  549,  548,  547,  546,
+      545,  544,  543,  542,  541,  538,  537,  536,  535,  534,
+      533,  532,  531,  530,  529,  528,  527,  526,  525,  524,
+      523,  522,  521,  520,  516,  515,  514,  513,  512,  511,
+      510,  507,  506,  503,  502,  501,  500,  497,  496,  495,
+      494,  493,  492,  491,  490,  487,  486,  485,  482,  481,
+      480,  479,  478,  477,  474,  473,  470,  469,  468,  467,
+      466,  465,  464,  463,  462,  458,  457,  456,  455,  454,
+      451,  450,  449,  448,  447,  446,  445,  444,  443,  442,
+      441,  436,  435,  434,  433,  432,  431,  430,  429,  428,
+
+      427,  426,  425,  422,  421,  420,  419,  418,  415,  414,
+      413,  412,  411,  408,  407,  405,  404,  399,  396,  393,
+      392,  391,  390,  389,  388,  386,  385,  384,  383,  382,
+      381,  380,  379,  378,  377,  376,  375,  372,  371,  370,
+      369,  368,  367,  366,  365,  364,  363,  362,  361,  360,
+      359,  356,  355,  354,  352,  351,  350,  349,  345,  344,
+      343,  342,  341,  340,  339,  338,  337,  336,  335,  334,
+      333,  332,  331,  330,  329,  328,  327,  326,  325,  324,
+      323,  322,  321,  320,  319,  318,  317,  316,  315,  312,
+      311,  310,  309,  307,  201,  304,  302,  300,  299,  296,
+
+      295,  292,  285,  284,  283,  282,  281,  280,  278,  277,
+      276,  275,  262,  261,  260,  256,  255,  252,  251,  250,
+      249,  248,  246,  245,  244,  243,  240,  239,  238,  237,
+      236,  235,  234,  231,  230,  226,  218,  217,  216,  212,
+      211,  210,  206,  205,  201,  194,  189,  188,  187,  184,
+      183,  175,  161,  140,  133,  106,  105,  104,   43,   99,
+       97,   96,   87,   43, 1399,   11, 1399, 1399, 1399, 1399,
+     1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
+     1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
+     1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
+
+     1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
+     1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
+     1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
+     1399, 1399, 1399, 1399, 1399, 1399, 1399
     } ;
 
-static yyconst flex_int16_t yy_chk[1815] =
+static yyconst flex_int16_t yy_chk[1838] =
     {   0,
-        0,    1,    1,    1,    0,    1,    1,  728,    1,    1,
+        0,    1,    1,    1,    0,    1,    1,    0,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,   21,  251,
         3,    3,    3,   21,    1,    1,    3,    0,    0,    1,
         4,    4,    4,   13,    1,   13,    4,   27,   28,    1,
@@ -1278,136 +1274,138 @@ static yyconst flex_int16_t yy_chk[1815] =
       612,  746,  747,  518,  334,  601,  408,  686,  408,  334,
       409,  409,  409,  614,  686,  749,  750,  409,  409,  409,
       409,  409,  409,  614,  651,  687,  702,  651,  612,  690,
-      570,  751,  687,  748,  752,  690,  579,  748,  753,  754,
-      409,  409,  409,  409,  409,  409,  756,  757,  758,  759,
-      760,  761,  762,  763,  702,  764,  765,  766,  767,  768,
-      769,  770,  771,  772,  773,  774,  775,  776,  777,  778,
-      779,  780,  781,  783,  784,  785,  786,  787,  788,  776,
-      790,  791,  792,  793,  794,  795,  796,  797,  798,  799,
-
-      800,  801,  802,  803,  805,  806,  807,  808,  809,  810,
-      811,  812,  813,  814,  791,  816,  817,  790,  818,  819,
-      820,  822,  823,  824,  819,  825,  826,  827,  828,  829,
-      830,  831,  832,  833,  834,  835,  836,  839,  840,  841,
-      843,  844,  845,  847,  848,  849,  835,  850,  851,  852,
-      853,  854,  855,  856,  857,  858,  859,  860,  861,  863,
-      864,  865,  866,  867,  868,  869,  870,  871,  872,  874,
-      873,  875,  876,  877,  878,  819,  879,  880,  881,  882,
-      883,  885,  886,  887,  888,  889,  890,  891,  892,  893,
-      894,  895,  896,  897,  898,  900,  872,  873,  901,  902,
-
-      903,  904,  905,  901,  906,  907,  908,  909,  910,  911,
-      912,  913,  914,  915,  916,  917,  918,  919,  920,  921,
-      922,  923,  925,  926,  927,  928,  929,  930,  931,  932,
-      933,  934,  936,  939,  940,  941,  942,  943,  944,  945,
-      946,  902,  947,  948,  949,  950,  951,  952,  953,  954,
-      955,  956,  959,  960,  961,  962,  963,  964,  965,  966,
-      967,  968,  969,  970,  971,  972,  975,  949,  977,  979,
-      980,  981,  982,  950,  983,  984,  985,  987,  988,  989,
-      991,  992,  993,  994,  997,  999, 1000, 1001, 1002, 1003,
-     1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013,
-
-     1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023,
-     1024, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1035,
-     1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045,
-     1046, 1047, 1048, 1050, 1051, 1052, 1022, 1053, 1054, 1057,
-     1058, 1059, 1051, 1060, 1061, 1062, 1063, 1010, 1064, 1065,
-     1066, 1067, 1069, 1026, 1070, 1071, 1072, 1073, 1076, 1079,
-     1081, 1082, 1083, 1084, 1085, 1087, 1089, 1090, 1091, 1092,
-     1093, 1094, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103,
-     1104, 1105, 1107, 1109, 1111, 1112, 1113, 1085, 1114, 1116,
-     1117, 1118, 1119, 1120, 1121, 1124, 1125, 1127, 1128, 1129,
-
-     1130, 1131, 1133, 1134, 1135, 1137, 1139, 1140, 1141, 1142,
-     1143, 1144, 1145, 1147, 1149, 1150, 1151, 1152, 1153, 1154,
-     1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164,
-     1165, 1166, 1167, 1139, 1168, 1169, 1170, 1171, 1172, 1173,
-     1174, 1175, 1176, 1178, 1179, 1180, 1181, 1183, 1186, 1188,
-     1189, 1190, 1191, 1192, 1188, 1193, 1194, 1196, 1197, 1200,
-     1201, 1202, 1203, 1205, 1206, 1207, 1208, 1209, 1210, 1211,
-     1212, 1213, 1214, 1180, 1215, 1216, 1217, 1156, 1219, 1220,
-     1222, 1224, 1225, 1226, 1227, 1228, 1230, 1232, 1233, 1234,
-     1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244,
-
-     1246, 1247, 1249, 1251, 1252, 1253, 1254, 1255, 1257, 1258,
-     1259, 1260, 1262, 1264, 1265, 1266, 1267, 1268, 1269, 1270,
-     1271, 1272, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281,
-     1283, 1284, 1285, 1286, 1287, 1289, 1290, 1291, 1292, 1293,
-     1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1303, 1304,
-     1307, 1308, 1309, 1310, 1311, 1312, 1314, 1316, 1317, 1319,
-     1321, 1322, 1324, 1326, 1327, 1328, 1329, 1330, 1331, 1332,
-     1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342,
-     1343, 1344, 1345, 1346, 1347, 1348, 1349, 1351, 1354, 1355,
-     1356, 1357, 1358, 1362, 1363, 1364, 1366, 1367, 1368, 1369,
-
-     1370, 1371, 1372, 1374, 1375, 1378, 1378, 1378, 1378, 1378,
-     1379, 1379, 1379, 1379, 1379, 1380, 1386, 1380, 1380, 1380,
-     1381, 1387, 1381, 1388, 1381, 1382, 1382, 1382, 1382, 1382,
-     1383, 1383, 1383, 1383, 1383, 1384, 1389, 1384, 1384, 1384,
-     1385, 1385, 1385,  727,  726,  725,  724,  723,  721,  720,
-      719,  718,  717,  716,  715,  714,  713,  712,  711,  710,
-      709,  708,  707,  705,  704,  703,  701,  699,  698,  697,
-      696,  695,  694,  693,  692,  689,  688,  685,  684,  683,
-      682,  681,  680,  679,  678,  677,  676,  675,  674,  673,
-      672,  671,  670,  668,  667,  666,  665,  664,  663,  662,
-
-      661,  659,  658,  657,  656,  655,  654,  652,  650,  649,
-      648,  647,  646,  645,  644,  643,  642,  641,  640,  639,
-      638,  637,  636,  635,  634,  633,  632,  631,  630,  629,
-      628,  627,  626,  625,  624,  623,  622,  621,  620,  619,
-      618,  617,  616,  615,  611,  610,  609,  606,  605,  604,
-      603,  602,  599,  598,  597,  596,  595,  594,  593,  592,
-      591,  590,  589,  587,  586,  585,  584,  583,  582,  581,
-      580,  578,  577,  575,  574,  573,  572,  571,  569,  568,
-      567,  565,  564,  562,  561,  560,  559,  558,  557,  556,
-      555,  554,  553,  552,  551,  550,  549,  548,  546,  545,
-
-      544,  543,  542,  541,  540,  538,  537,  536,  535,  534,
-      533,  532,  531,  530,  529,  528,  527,  526,  525,  524,
-      523,  522,  521,  515,  513,  510,  509,  507,  506,  505,
-      503,  499,  498,  497,  496,  495,  494,  493,  492,  491,
-      490,  489,  488,  487,  486,  484,  483,  482,  481,  480,
-      479,  478,  477,  476,  475,  474,  472,  470,  469,  468,
-      467,  466,  465,  464,  463,  462,  461,  460,  459,  457,
-      456,  455,  454,  453,  452,  451,  450,  449,  448,  447,
-      446,  445,  444,  443,  442,  441,  440,  439,  438,  436,
-      435,  434,  432,  431,  430,  429,  428,  427,  425,  424,
-
-      423,  422,  421,  420,  418,  417,  416,  415,  414,  412,
-      411,  406,  405,  403,  402,  401,  400,  399,  396,  393,
-      391,  390,  389,  388,  386,  385,  384,  383,  382,  381,
-      380,  379,  377,  376,  375,  373,  372,  371,  370,  369,
-      368,  366,  365,  363,  362,  361,  360,  359,  358,  357,
-      356,  355,  351,  350,  349,  348,  347,  345,  344,  343,
-      342,  341,  340,  339,  338,  337,  336,  335,  333,  332,
-      331,  330,  329,  328,  327,  326,  325,  324,  323,  322,
-      320,  319,  318,  317,  316,  313,  312,  311,  310,  309,
-      305,  303,  300,  298,  295,  292,  285,  284,  283,  282,
-
-      281,  280,  278,  277,  276,  275,  274,  273,  272,  271,
-      270,  269,  268,  267,  265,  264,  263,  262,  261,  260,
-      259,  258,  257,  256,  255,  254,  253,  252,  250,  249,
-      248,  246,  245,  244,  243,  241,  240,  239,  238,  237,
-      236,  235,  234,  233,  231,  230,  229,  228,  227,  226,
-      225,  224,  223,  222,  221,  220,  219,  218,  217,  216,
-      215,  214,  213,  212,  211,  210,  208,  207,  206,  205,
-      203,  200,  198,  196,  194,  193,  188,  187,  183,  175,
-      174,  173,  172,  171,  170,  168,  167,  166,  165,  162,
-      161,  160,  158,  157,  155,  154,  153,  152,  151,  149,
-
-      148,  147,  146,  144,  143,  142,  141,  140,  139,  138,
-      136,  135,  133,  129,  128,  127,  125,  124,  123,  121,
-      120,  116,  110,  106,  105,  104,   98,   97,   78,   73,
-       67,   64,   50,   49,   48,   43,   41,   39,   38,   24,
-       14,   11, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
-     1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
-     1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
-     1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
-     1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
-     1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
-
-     1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
-     1377, 1377, 1377, 1377
+      570,  751,  687,  728,  752,  690,  579,  753,  728,  754,
+      409,  409,  409,  409,  409,  409,  748,  756,  757,  758,
+      748,  759,  760,  761,  702,  762,  763,  764,  765,  766,
+      767,  768,  769,  770,  771,  772,  773,  774,  775,  776,
+      777,  778,  779,  780,  781,  783,  784,  785,  786,  787,
+      788,  776,  790,  791,  792,  793,  794,  795,  796,  797,
+
+      798,  799,  800,  801,  802,  803,  805,  806,  807,  808,
+      809,  810,  811,  812,  813,  814,  791,  816,  817,  790,
+      818,  819,  820,  821,  823,  824,  825,  820,  826,  827,
+      828,  829,  830,  831,  832,  833,  834,  835,  836,  837,
+      840,  841,  842,  844,  845,  846,  848,  849,  850,  836,
+      851,  852,  853,  854,  855,  856,  857,  858,  859,  860,
+      861,  862,  864,  865,  866,  867,  868,  869,  870,  871,
+      872,  873,  875,  874,  876,  877,  878,  879,  820,  880,
+      881,  882,  883,  884,  886,  887,  888,  889,  890,  891,
+      892,  893,  894,  895,  896,  897,  898,  899,  900,  873,
+
+      874,  902,  903,  904,  905,  906,  907,  903,  908,  909,
+      910,  911,  912,  913,  914,  915,  916,  917,  918,  919,
+      920,  921,  922,  923,  924,  925,  927,  928,  929,  930,
+      931,  932,  933,  934,  935,  936,  938,  941,  942,  943,
+      944,  945,  946,  947,  948,  904,  949,  950,  951,  952,
+      953,  954,  955,  956,  957,  958,  961,  962,  963,  964,
+      965,  966,  967,  968,  969,  970,  971,  972,  973,  974,
+      975,  951,  978,  980,  982,  983,  984,  952,  985,  986,
+      987,  988,  990,  991,  992,  994,  995,  996,  997, 1000,
+     1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011,
+
+     1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021,
+     1022, 1023, 1024, 1025, 1026, 1027, 1029, 1030, 1031, 1032,
+     1033, 1034, 1035, 1036, 1038, 1039, 1040, 1041, 1042, 1043,
+     1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1054,
+     1055, 1025, 1056, 1057, 1058, 1061, 1062, 1063, 1055, 1064,
+     1065, 1066, 1013, 1067, 1068, 1069, 1070, 1071, 1029, 1073,
+     1074, 1075, 1076, 1077, 1080, 1083, 1085, 1086, 1087, 1088,
+     1089, 1091, 1093, 1094, 1095, 1096, 1097, 1098, 1100, 1101,
+     1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1112,
+     1114, 1116, 1117, 1089, 1118, 1119, 1121, 1122, 1123, 1124,
+
+     1125, 1126, 1129, 1130, 1132, 1133, 1134, 1135, 1136, 1138,
+     1139, 1140, 1142, 1144, 1145, 1146, 1147, 1148, 1149, 1150,
+     1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1161,
+     1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171,
+     1144, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180,
+     1181, 1182, 1184, 1185, 1186, 1187, 1189, 1192, 1194, 1195,
+     1196, 1197, 1198, 1194, 1199, 1200, 1201, 1202, 1204, 1205,
+     1208, 1209, 1210, 1211, 1213, 1214, 1215, 1216, 1217, 1218,
+     1219, 1220, 1186, 1221, 1222, 1223, 1162, 1224, 1225, 1227,
+     1228, 1230, 1232, 1233, 1234, 1235, 1236, 1238, 1239, 1240,
+
+     1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251,
+     1252, 1253, 1254, 1256, 1257, 1259, 1261, 1262, 1263, 1264,
+     1265, 1267, 1268, 1269, 1270, 1271, 1272, 1274, 1276, 1277,
+     1278, 1279, 1280, 1281, 1282, 1283, 1284, 1286, 1287, 1288,
+     1289, 1290, 1291, 1292, 1293, 1294, 1297, 1298, 1299, 1300,
+     1301, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311,
+     1312, 1313, 1314, 1315, 1316, 1318, 1319, 1322, 1323, 1324,
+     1325, 1326, 1327, 1329, 1331, 1332, 1334, 1335, 1337, 1338,
+     1340, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350,
+     1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360,
+
+     1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1370, 1373,
+     1374, 1375, 1376, 1377, 1378, 1382, 1383, 1384, 1385, 1387,
+     1388, 1390, 1391, 1392, 1393, 1394, 1396, 1397, 1400, 1400,
+     1400, 1400, 1400, 1401, 1401, 1401, 1401, 1401, 1402, 1408,
+     1402, 1402, 1402, 1403, 1409, 1403, 1410, 1403, 1404, 1404,
+     1404, 1404, 1404, 1405, 1405, 1405, 1405, 1405, 1406, 1411,
+     1406, 1406, 1406, 1407, 1407, 1407,  727,  726,  725,  724,
+      723,  721,  720,  719,  718,  717,  716,  715,  714,  713,
+      712,  711,  710,  709,  708,  707,  705,  704,  703,  701,
+      699,  698,  697,  696,  695,  694,  693,  692,  689,  688,
+
+      685,  684,  683,  682,  681,  680,  679,  678,  677,  676,
+      675,  674,  673,  672,  671,  670,  668,  667,  666,  665,
+      664,  663,  662,  661,  659,  658,  657,  656,  655,  654,
+      652,  650,  649,  648,  647,  646,  645,  644,  643,  642,
+      641,  640,  639,  638,  637,  636,  635,  634,  633,  632,
+      631,  630,  629,  628,  627,  626,  625,  624,  623,  622,
+      621,  620,  619,  618,  617,  616,  615,  611,  610,  609,
+      606,  605,  604,  603,  602,  599,  598,  597,  596,  595,
+      594,  593,  592,  591,  590,  589,  587,  586,  585,  584,
+      583,  582,  581,  580,  578,  577,  575,  574,  573,  572,
+
+      571,  569,  568,  567,  565,  564,  562,  561,  560,  559,
+      558,  557,  556,  555,  554,  553,  552,  551,  550,  549,
+      548,  546,  545,  544,  543,  542,  541,  540,  538,  537,
+      536,  535,  534,  533,  532,  531,  530,  529,  528,  527,
+      526,  525,  524,  523,  522,  521,  515,  513,  510,  509,
+      507,  506,  505,  503,  499,  498,  497,  496,  495,  494,
+      493,  492,  491,  490,  489,  488,  487,  486,  484,  483,
+      482,  481,  480,  479,  478,  477,  476,  475,  474,  472,
+      470,  469,  468,  467,  466,  465,  464,  463,  462,  461,
+      460,  459,  457,  456,  455,  454,  453,  452,  451,  450,
+
+      449,  448,  447,  446,  445,  444,  443,  442,  441,  440,
+      439,  438,  436,  435,  434,  432,  431,  430,  429,  428,
+      427,  425,  424,  423,  422,  421,  420,  418,  417,  416,
+      415,  414,  412,  411,  406,  405,  403,  402,  401,  400,
+      399,  396,  393,  391,  390,  389,  388,  386,  385,  384,
+      383,  382,  381,  380,  379,  377,  376,  375,  373,  372,
+      371,  370,  369,  368,  366,  365,  363,  362,  361,  360,
+      359,  358,  357,  356,  355,  351,  350,  349,  348,  347,
+      345,  344,  343,  342,  341,  340,  339,  338,  337,  336,
+      335,  333,  332,  331,  330,  329,  328,  327,  326,  325,
+
+      324,  323,  322,  320,  319,  318,  317,  316,  313,  312,
+      311,  310,  309,  305,  303,  300,  298,  295,  292,  285,
+      284,  283,  282,  281,  280,  278,  277,  276,  275,  274,
+      273,  272,  271,  270,  269,  268,  267,  265,  264,  263,
+      262,  261,  260,  259,  258,  257,  256,  255,  254,  253,
+      252,  250,  249,  248,  246,  245,  244,  243,  241,  240,
+      239,  238,  237,  236,  235,  234,  233,  231,  230,  229,
+      228,  227,  226,  225,  224,  223,  222,  221,  220,  219,
+      218,  217,  216,  215,  214,  213,  212,  211,  210,  208,
+      207,  206,  205,  203,  200,  198,  196,  194,  193,  188,
+
+      187,  183,  175,  174,  173,  172,  171,  170,  168,  167,
+      166,  165,  162,  161,  160,  158,  157,  155,  154,  153,
+      152,  151,  149,  148,  147,  146,  144,  143,  142,  141,
+      140,  139,  138,  136,  135,  133,  129,  128,  127,  125,
+      124,  123,  121,  120,  116,  110,  106,  105,  104,   98,
+       97,   78,   73,   67,   64,   50,   49,   48,   43,   41,
+       39,   38,   24,   14,   11, 1399, 1399, 1399, 1399, 1399,
+     1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
+     1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
+     1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
+
+     1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
+     1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
+     1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
+     1399, 1399, 1399, 1399, 1399, 1399, 1399
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1416,26 +1414,27 @@ static char *yy_last_accepting_cpos;
 extern int parser6__flex_debug;
 int parser6__flex_debug = 1;
 
-static yyconst flex_int16_t yy_rule_linenum[171] =
+static yyconst flex_int16_t yy_rule_linenum[173] =
     {   0,
       146,  148,  150,  155,  156,  161,  162,  163,  175,  178,
       183,  190,  199,  208,  217,  226,  235,  244,  253,  262,
-      271,  280,  289,  298,  307,  316,  326,  336,  346,  356,
-      366,  375,  385,  395,  405,  415,  424,  433,  442,  451,
-      460,  469,  478,  487,  499,  508,  517,  526,  535,  545,
-      555,  565,  575,  586,  596,  606,  616,  626,  636,  646,
-      656,  666,  676,  687,  698,  709,  720,  729,  739,  748,
-      757,  772,  787,  796,  805,  814,  823,  832,  841,  850,
-      859,  868,  877,  899,  921,  930,  940,  950,  959,  969,
-      979,  988,  997, 1006, 1015, 1025, 1034, 1043, 1052, 1061,
-
-     1070, 1079, 1088, 1097, 1106, 1116, 1125, 1134, 1144, 1156,
-     1169, 1178, 1187, 1196, 1206, 1215, 1226, 1236, 1245, 1255,
-     1265, 1274, 1283, 1292, 1301, 1311, 1320, 1330, 1339, 1348,
+      271,  280,  289,  298,  307,  316,  325,  334,  344,  354,
+      364,  374,  384,  393,  403,  413,  423,  433,  442,  451,
+      460,  469,  478,  487,  496,  505,  517,  526,  535,  544,
+      553,  563,  573,  583,  593,  604,  614,  624,  634,  644,
+      654,  664,  674,  684,  694,  705,  716,  727,  738,  747,
+      757,  766,  775,  790,  805,  814,  823,  832,  841,  850,
+      859,  868,  877,  886,  895,  917,  939,  948,  958,  968,
+      977,  987,  997, 1006, 1015, 1024, 1033, 1043, 1052, 1061,
+
+     1070, 1079, 1088, 1097, 1106, 1115, 1124, 1134, 1143, 1152,
+     1162, 1174, 1187, 1196, 1205, 1214, 1224, 1233, 1244, 1254,
+     1263, 1273, 1283, 1292, 1301, 1310, 1319, 1329, 1338, 1348,
      1357, 1366, 1375, 1384, 1393, 1402, 1411, 1420, 1429, 1438,
      1447, 1456, 1465, 1474, 1483, 1492, 1501, 1510, 1519, 1528,
-     1537, 1546, 1556, 1655, 1660, 1665, 1670, 1671, 1672, 1673,
-     1674, 1675, 1677, 1695, 1708, 1713, 1717, 1719, 1721, 1723
+     1537, 1546, 1555, 1564, 1574, 1673, 1678, 1683, 1688, 1689,
+     1690, 1691, 1692, 1693, 1695, 1713, 1726, 1731, 1735, 1737,
+     1739, 1741
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -1514,7 +1513,7 @@ using namespace isc::dhcp;
    by moving it ahead by parser6_leng bytes. parser6_leng specifies the length of the
    currently matched token. */
 #define YY_USER_ACTION  driver.loc_.columns(parser6_leng);
-#line 1518 "dhcp6_lexer.cc"
+#line 1517 "dhcp6_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -1564,11 +1563,11 @@ void parser6_set_extra (YY_EXTRA_TYPE user_defined  );
 
 FILE *parser6_get_in (void );
 
-void parser6_set_in  (FILE * _in_str  );
+void parser6_set_in  (FILE * in_str  );
 
 FILE *parser6_get_out (void );
 
-void parser6_set_out  (FILE * _out_str  );
+void parser6_set_out  (FILE * out_str  );
 
 yy_size_t parser6_get_leng (void );
 
@@ -1576,7 +1575,7 @@ char *parser6_get_text (void );
 
 int parser6_get_lineno (void );
 
-void parser6_set_lineno (int _line_number  );
+void parser6_set_lineno (int line_number  );
 
 /* %if-bison-bridge */
 /* %endif */
@@ -1595,9 +1594,6 @@ extern int parser6_wrap (void );
 
 /* %not-for-header */
 
-#ifndef YY_NO_UNPUT
-    
-#endif
 /* %ok-for-header */
 
 /* %endif */
@@ -1630,12 +1626,7 @@ static int input (void );
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k */
-#define YY_READ_BUF_SIZE 16384
-#else
 #define YY_READ_BUF_SIZE 8192
-#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -1748,7 +1739,7 @@ extern int parser6_lex (void);
 
 /* Code executed at the end of each rule. */
 #ifndef YY_BREAK
-#define YY_BREAK /*LINTED*/break;
+#define YY_BREAK break;
 #endif
 
 /* %% [6.0] YY_RULE_SETUP definition goes here */
@@ -1761,45 +1752,10 @@ extern int parser6_lex (void);
  */
 YY_DECL
 {
-       yy_state_type yy_current_state;
-       char *yy_cp, *yy_bp;
-       int yy_act;
+       register yy_state_type yy_current_state;
+       register char *yy_cp, *yy_bp;
+       register int yy_act;
     
-       if ( !(yy_init) )
-               {
-               (yy_init) = 1;
-
-#ifdef YY_USER_INIT
-               YY_USER_INIT;
-#endif
-
-               if ( ! (yy_start) )
-                       (yy_start) = 1; /* first start state */
-
-               if ( ! parser6_in )
-/* %if-c-only */
-                       parser6_in = stdin;
-/* %endif */
-/* %if-c++-only */
-/* %endif */
-
-               if ( ! parser6_out )
-/* %if-c-only */
-                       parser6_out = stdout;
-/* %endif */
-/* %if-c++-only */
-/* %endif */
-
-               if ( ! YY_CURRENT_BUFFER ) {
-                       parser6_ensure_buffer_stack ();
-                       YY_CURRENT_BUFFER_LVALUE =
-                               parser6__create_buffer(parser6_in,YY_BUF_SIZE );
-               }
-
-               parser6__load_buffer_state( );
-               }
-
-       {
 /* %% [7.0] user's declarations go here */
 #line 100 "dhcp6_lexer.ll"
 
@@ -1848,9 +1804,43 @@ YY_DECL
     }
 
 
-#line 1852 "dhcp6_lexer.cc"
+#line 1808 "dhcp6_lexer.cc"
+
+       if ( !(yy_init) )
+               {
+               (yy_init) = 1;
+
+#ifdef YY_USER_INIT
+               YY_USER_INIT;
+#endif
+
+               if ( ! (yy_start) )
+                       (yy_start) = 1; /* first start state */
+
+               if ( ! parser6_in )
+/* %if-c-only */
+                       parser6_in = stdin;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+               if ( ! parser6_out )
+/* %if-c-only */
+                       parser6_out = stdout;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+               if ( ! YY_CURRENT_BUFFER ) {
+                       parser6_ensure_buffer_stack ();
+                       YY_CURRENT_BUFFER_LVALUE =
+                               parser6__create_buffer(parser6_in,YY_BUF_SIZE );
+               }
+
+               parser6__load_buffer_state( );
+               }
 
-       while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
+       while ( 1 )             /* loops until end-of-file is reached */
                {
 /* %% [8.0] yymore()-related code goes here */
                yy_cp = (yy_c_buf_p);
@@ -1868,7 +1858,7 @@ YY_DECL
 yy_match:
                do
                        {
-                       YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
+                       register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
                        if ( yy_accept[yy_current_state] )
                                {
                                (yy_last_accepting_state) = yy_current_state;
@@ -1877,13 +1867,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 >= 1378 )
+                               if ( yy_current_state >= 1400 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 1377 );
+               while ( yy_current_state != 1399 );
                yy_cp = (yy_last_accepting_cpos);
                yy_current_state = (yy_last_accepting_state);
 
@@ -1902,13 +1892,13 @@ do_action:      /* This label is used only to access EOF actions. */
                        {
                        if ( yy_act == 0 )
                                fprintf( stderr, "--scanner backing up\n" );
-                       else if ( yy_act < 171 )
+                       else if ( yy_act < 173 )
                                fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
                                         (long)yy_rule_linenum[yy_act], parser6_text );
-                       else if ( yy_act == 171 )
+                       else if ( yy_act == 173 )
                                fprintf( stderr, "--accepting default rule (\"%s\")\n",
                                         parser6_text );
-                       else if ( yy_act == 172 )
+                       else if ( yy_act == 174 )
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
                                fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -2183,6 +2173,30 @@ YY_RULE_SETUP
 case 26:
 YY_RULE_SETUP
 #line 316 "dhcp6_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DHCP_DDNS:
+        return isc::dhcp::Dhcp6Parser::make_HOSTNAME_CHAR_SET(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("hostname-char-set", driver.loc_);
+    }
+}
+       YY_BREAK
+case 27:
+YY_RULE_SETUP
+#line 325 "dhcp6_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DHCP_DDNS:
+        return isc::dhcp::Dhcp6Parser::make_HOSTNAME_CHAR_REPLACEMENT(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("hostname-char-replacement", driver.loc_);
+    }
+}
+       YY_BREAK
+case 28:
+YY_RULE_SETUP
+#line 334 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::NCR_PROTOCOL) {
@@ -2193,9 +2207,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 27:
+case 29:
 YY_RULE_SETUP
-#line 326 "dhcp6_lexer.ll"
+#line 344 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::NCR_PROTOCOL) {
@@ -2206,9 +2220,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 28:
+case 30:
 YY_RULE_SETUP
-#line 336 "dhcp6_lexer.ll"
+#line 354 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::NCR_FORMAT) {
@@ -2219,9 +2233,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 29:
+case 31:
 YY_RULE_SETUP
-#line 346 "dhcp6_lexer.ll"
+#line 364 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
@@ -2232,9 +2246,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 30:
+case 32:
 YY_RULE_SETUP
-#line 356 "dhcp6_lexer.ll"
+#line 374 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
@@ -2245,9 +2259,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 31:
+case 33:
 YY_RULE_SETUP
-#line 366 "dhcp6_lexer.ll"
+#line 384 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME:
@@ -2257,9 +2271,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 32:
+case 34:
 YY_RULE_SETUP
-#line 375 "dhcp6_lexer.ll"
+#line 393 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
@@ -2270,9 +2284,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 33:
+case 35:
 YY_RULE_SETUP
-#line 385 "dhcp6_lexer.ll"
+#line 403 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
@@ -2283,9 +2297,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 34:
+case 36:
 YY_RULE_SETUP
-#line 395 "dhcp6_lexer.ll"
+#line 413 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
@@ -2296,9 +2310,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 35:
+case 37:
 YY_RULE_SETUP
-#line 405 "dhcp6_lexer.ll"
+#line 423 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
@@ -2309,9 +2323,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
-case 36:
+case 38:
 YY_RULE_SETUP
-#line 415 "dhcp6_lexer.ll"
+#line 433 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -2321,9 +2335,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 37:
+case 39:
 YY_RULE_SETUP
-#line 424 "dhcp6_lexer.ll"
+#line 442 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2333,9 +2347,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 38:
+case 40:
 YY_RULE_SETUP
-#line 433 "dhcp6_lexer.ll"
+#line 451 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::INTERFACES_CONFIG:
@@ -2345,9 +2359,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 39:
+case 41:
 YY_RULE_SETUP
-#line 442 "dhcp6_lexer.ll"
+#line 460 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::INTERFACES_CONFIG:
@@ -2357,9 +2371,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 40:
+case 42:
 YY_RULE_SETUP
-#line 451 "dhcp6_lexer.ll"
+#line 469 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2369,9 +2383,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 41:
+case 43:
 YY_RULE_SETUP
-#line 460 "dhcp6_lexer.ll"
+#line 478 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2381,9 +2395,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 42:
+case 44:
 YY_RULE_SETUP
-#line 469 "dhcp6_lexer.ll"
+#line 487 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2393,9 +2407,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 43:
+case 45:
 YY_RULE_SETUP
-#line 478 "dhcp6_lexer.ll"
+#line 496 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
@@ -2405,9 +2419,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 44:
+case 46:
 YY_RULE_SETUP
-#line 487 "dhcp6_lexer.ll"
+#line 505 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2420,9 +2434,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 45:
+case 47:
 YY_RULE_SETUP
-#line 499 "dhcp6_lexer.ll"
+#line 517 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2432,9 +2446,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 46:
+case 48:
 YY_RULE_SETUP
-#line 508 "dhcp6_lexer.ll"
+#line 526 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2444,9 +2458,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 47:
+case 49:
 YY_RULE_SETUP
-#line 517 "dhcp6_lexer.ll"
+#line 535 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2456,9 +2470,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 48:
+case 50:
 YY_RULE_SETUP
-#line 526 "dhcp6_lexer.ll"
+#line 544 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2468,9 +2482,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 49:
+case 51:
 YY_RULE_SETUP
-#line 535 "dhcp6_lexer.ll"
+#line 553 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2481,9 +2495,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 50:
+case 52:
 YY_RULE_SETUP
-#line 545 "dhcp6_lexer.ll"
+#line 563 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2494,9 +2508,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 51:
+case 53:
 YY_RULE_SETUP
-#line 555 "dhcp6_lexer.ll"
+#line 573 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2507,9 +2521,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 52:
+case 54:
 YY_RULE_SETUP
-#line 565 "dhcp6_lexer.ll"
+#line 583 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2520,9 +2534,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 53:
+case 55:
 YY_RULE_SETUP
-#line 575 "dhcp6_lexer.ll"
+#line 593 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2534,9 +2548,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 54:
+case 56:
 YY_RULE_SETUP
-#line 586 "dhcp6_lexer.ll"
+#line 604 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2547,9 +2561,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 55:
+case 57:
 YY_RULE_SETUP
-#line 596 "dhcp6_lexer.ll"
+#line 614 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2560,9 +2574,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 56:
+case 58:
 YY_RULE_SETUP
-#line 606 "dhcp6_lexer.ll"
+#line 624 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2573,9 +2587,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 57:
+case 59:
 YY_RULE_SETUP
-#line 616 "dhcp6_lexer.ll"
+#line 634 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2586,9 +2600,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 58:
+case 60:
 YY_RULE_SETUP
-#line 626 "dhcp6_lexer.ll"
+#line 644 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2599,9 +2613,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 59:
+case 61:
 YY_RULE_SETUP
-#line 636 "dhcp6_lexer.ll"
+#line 654 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2612,9 +2626,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 60:
+case 62:
 YY_RULE_SETUP
-#line 646 "dhcp6_lexer.ll"
+#line 664 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2625,9 +2639,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 61:
+case 63:
 YY_RULE_SETUP
-#line 656 "dhcp6_lexer.ll"
+#line 674 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2638,9 +2652,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 62:
+case 64:
 YY_RULE_SETUP
-#line 666 "dhcp6_lexer.ll"
+#line 684 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2651,9 +2665,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 63:
+case 65:
 YY_RULE_SETUP
-#line 676 "dhcp6_lexer.ll"
+#line 694 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2665,9 +2679,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 64:
+case 66:
 YY_RULE_SETUP
-#line 687 "dhcp6_lexer.ll"
+#line 705 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2679,9 +2693,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 65:
+case 67:
 YY_RULE_SETUP
-#line 698 "dhcp6_lexer.ll"
+#line 716 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2693,9 +2707,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 66:
+case 68:
 YY_RULE_SETUP
-#line 709 "dhcp6_lexer.ll"
+#line 727 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2707,9 +2721,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 67:
+case 69:
 YY_RULE_SETUP
-#line 720 "dhcp6_lexer.ll"
+#line 738 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2719,9 +2733,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 68:
+case 70:
 YY_RULE_SETUP
-#line 729 "dhcp6_lexer.ll"
+#line 747 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2732,9 +2746,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 69:
+case 71:
 YY_RULE_SETUP
-#line 739 "dhcp6_lexer.ll"
+#line 757 "dhcp6_lexer.ll"
 {
     switch (driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2744,9 +2758,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 70:
+case 72:
 YY_RULE_SETUP
-#line 748 "dhcp6_lexer.ll"
+#line 766 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2756,9 +2770,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 71:
+case 73:
 YY_RULE_SETUP
-#line 757 "dhcp6_lexer.ll"
+#line 775 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2774,9 +2788,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 72:
+case 74:
 YY_RULE_SETUP
-#line 772 "dhcp6_lexer.ll"
+#line 790 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2792,9 +2806,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 73:
+case 75:
 YY_RULE_SETUP
-#line 787 "dhcp6_lexer.ll"
+#line 805 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -2804,9 +2818,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 74:
+case 76:
 YY_RULE_SETUP
-#line 796 "dhcp6_lexer.ll"
+#line 814 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -2816,9 +2830,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 75:
+case 77:
 YY_RULE_SETUP
-#line 805 "dhcp6_lexer.ll"
+#line 823 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -2828,9 +2842,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 76:
+case 78:
 YY_RULE_SETUP
-#line 814 "dhcp6_lexer.ll"
+#line 832 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -2840,9 +2854,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 77:
+case 79:
 YY_RULE_SETUP
-#line 823 "dhcp6_lexer.ll"
+#line 841 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -2852,9 +2866,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 78:
+case 80:
 YY_RULE_SETUP
-#line 832 "dhcp6_lexer.ll"
+#line 850 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -2864,9 +2878,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 79:
+case 81:
 YY_RULE_SETUP
-#line 841 "dhcp6_lexer.ll"
+#line 859 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -2876,9 +2890,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 80:
+case 82:
 YY_RULE_SETUP
-#line 850 "dhcp6_lexer.ll"
+#line 868 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -2888,9 +2902,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 81:
+case 83:
 YY_RULE_SETUP
-#line 859 "dhcp6_lexer.ll"
+#line 877 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -2900,9 +2914,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 82:
+case 84:
 YY_RULE_SETUP
-#line 868 "dhcp6_lexer.ll"
+#line 886 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::POOLS:
@@ -2912,9 +2926,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 83:
+case 85:
 YY_RULE_SETUP
-#line 877 "dhcp6_lexer.ll"
+#line 895 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2937,9 +2951,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 84:
+case 86:
 YY_RULE_SETUP
-#line 899 "dhcp6_lexer.ll"
+#line 917 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2962,9 +2976,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 85:
+case 87:
 YY_RULE_SETUP
-#line 921 "dhcp6_lexer.ll"
+#line 939 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -2974,9 +2988,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 86:
+case 88:
 YY_RULE_SETUP
-#line 930 "dhcp6_lexer.ll"
+#line 948 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -2987,9 +3001,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 87:
+case 89:
 YY_RULE_SETUP
-#line 940 "dhcp6_lexer.ll"
+#line 958 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3000,9 +3014,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 88:
+case 90:
 YY_RULE_SETUP
-#line 950 "dhcp6_lexer.ll"
+#line 968 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3012,9 +3026,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 89:
+case 91:
 YY_RULE_SETUP
-#line 959 "dhcp6_lexer.ll"
+#line 977 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3025,9 +3039,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 90:
+case 92:
 YY_RULE_SETUP
-#line 969 "dhcp6_lexer.ll"
+#line 987 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3038,9 +3052,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 91:
+case 93:
 YY_RULE_SETUP
-#line 979 "dhcp6_lexer.ll"
+#line 997 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3050,9 +3064,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 92:
+case 94:
 YY_RULE_SETUP
-#line 988 "dhcp6_lexer.ll"
+#line 1006 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3062,9 +3076,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 93:
+case 95:
 YY_RULE_SETUP
-#line 997 "dhcp6_lexer.ll"
+#line 1015 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3074,9 +3088,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 94:
+case 96:
 YY_RULE_SETUP
-#line 1006 "dhcp6_lexer.ll"
+#line 1024 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3086,9 +3100,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 95:
+case 97:
 YY_RULE_SETUP
-#line 1015 "dhcp6_lexer.ll"
+#line 1033 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3099,9 +3113,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 96:
+case 98:
 YY_RULE_SETUP
-#line 1025 "dhcp6_lexer.ll"
+#line 1043 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3111,9 +3125,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 97:
+case 99:
 YY_RULE_SETUP
-#line 1034 "dhcp6_lexer.ll"
+#line 1052 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3123,9 +3137,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 98:
+case 100:
 YY_RULE_SETUP
-#line 1043 "dhcp6_lexer.ll"
+#line 1061 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3135,9 +3149,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 99:
+case 101:
 YY_RULE_SETUP
-#line 1052 "dhcp6_lexer.ll"
+#line 1070 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -3147,9 +3161,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 100:
+case 102:
 YY_RULE_SETUP
-#line 1061 "dhcp6_lexer.ll"
+#line 1079 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGING:
@@ -3159,9 +3173,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 101:
+case 103:
 YY_RULE_SETUP
-#line 1070 "dhcp6_lexer.ll"
+#line 1088 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -3171,9 +3185,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 102:
+case 104:
 YY_RULE_SETUP
-#line 1079 "dhcp6_lexer.ll"
+#line 1097 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3183,9 +3197,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 103:
+case 105:
 YY_RULE_SETUP
-#line 1088 "dhcp6_lexer.ll"
+#line 1106 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3195,9 +3209,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 104:
+case 106:
 YY_RULE_SETUP
-#line 1097 "dhcp6_lexer.ll"
+#line 1115 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3207,9 +3221,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 105:
+case 107:
 YY_RULE_SETUP
-#line 1106 "dhcp6_lexer.ll"
+#line 1124 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3219,9 +3233,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 106:
+case 108:
 YY_RULE_SETUP
-#line 1116 "dhcp6_lexer.ll"
+#line 1134 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -3231,9 +3245,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 107:
+case 109:
 YY_RULE_SETUP
-#line 1125 "dhcp6_lexer.ll"
+#line 1143 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -3243,9 +3257,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 108:
+case 110:
 YY_RULE_SETUP
-#line 1134 "dhcp6_lexer.ll"
+#line 1152 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3256,9 +3270,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 109:
+case 111:
 YY_RULE_SETUP
-#line 1144 "dhcp6_lexer.ll"
+#line 1162 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3271,9 +3285,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 110:
+case 112:
 YY_RULE_SETUP
-#line 1156 "dhcp6_lexer.ll"
+#line 1174 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3287,9 +3301,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 111:
+case 113:
 YY_RULE_SETUP
-#line 1169 "dhcp6_lexer.ll"
+#line 1187 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CLIENT_CLASSES:
@@ -3299,9 +3313,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 112:
+case 114:
 YY_RULE_SETUP
-#line 1178 "dhcp6_lexer.ll"
+#line 1196 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CLIENT_CLASSES:
@@ -3311,9 +3325,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 113:
+case 115:
 YY_RULE_SETUP
-#line 1187 "dhcp6_lexer.ll"
+#line 1205 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3323,9 +3337,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 114:
+case 116:
 YY_RULE_SETUP
-#line 1196 "dhcp6_lexer.ll"
+#line 1214 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -3336,9 +3350,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 115:
+case 117:
 YY_RULE_SETUP
-#line 1206 "dhcp6_lexer.ll"
+#line 1224 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -3348,9 +3362,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 116:
+case 118:
 YY_RULE_SETUP
-#line 1215 "dhcp6_lexer.ll"
+#line 1233 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::MAC_SOURCES:
@@ -3362,9 +3376,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 117:
+case 119:
 YY_RULE_SETUP
-#line 1226 "dhcp6_lexer.ll"
+#line 1244 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3375,9 +3389,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 118:
+case 120:
 YY_RULE_SETUP
-#line 1236 "dhcp6_lexer.ll"
+#line 1254 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -3387,9 +3401,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 119:
+case 121:
 YY_RULE_SETUP
-#line 1245 "dhcp6_lexer.ll"
+#line 1263 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3400,9 +3414,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 120:
+case 122:
 YY_RULE_SETUP
-#line 1255 "dhcp6_lexer.ll"
+#line 1273 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3413,9 +3427,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 121:
+case 123:
 YY_RULE_SETUP
-#line 1265 "dhcp6_lexer.ll"
+#line 1283 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -3425,9 +3439,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 122:
+case 124:
 YY_RULE_SETUP
-#line 1274 "dhcp6_lexer.ll"
+#line 1292 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3437,9 +3451,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 123:
+case 125:
 YY_RULE_SETUP
-#line 1283 "dhcp6_lexer.ll"
+#line 1301 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3449,9 +3463,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 124:
+case 126:
 YY_RULE_SETUP
-#line 1292 "dhcp6_lexer.ll"
+#line 1310 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3461,9 +3475,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 125:
+case 127:
 YY_RULE_SETUP
-#line 1301 "dhcp6_lexer.ll"
+#line 1319 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3474,9 +3488,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 126:
+case 128:
 YY_RULE_SETUP
-#line 1311 "dhcp6_lexer.ll"
+#line 1329 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RELAY:
@@ -3486,9 +3500,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 127:
+case 129:
 YY_RULE_SETUP
-#line 1320 "dhcp6_lexer.ll"
+#line 1338 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3498,9 +3512,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 128:
+case 130:
 YY_RULE_SETUP
-#line 1330 "dhcp6_lexer.ll"
+#line 1348 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
@@ -3510,9 +3524,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 129:
+case 131:
 YY_RULE_SETUP
-#line 1339 "dhcp6_lexer.ll"
+#line 1357 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
@@ -3522,9 +3536,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 130:
+case 132:
 YY_RULE_SETUP
-#line 1348 "dhcp6_lexer.ll"
+#line 1366 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3534,9 +3548,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 131:
+case 133:
 YY_RULE_SETUP
-#line 1357 "dhcp6_lexer.ll"
+#line 1375 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -3546,9 +3560,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 132:
+case 134:
 YY_RULE_SETUP
-#line 1366 "dhcp6_lexer.ll"
+#line 1384 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -3558,9 +3572,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 133:
+case 135:
 YY_RULE_SETUP
-#line 1375 "dhcp6_lexer.ll"
+#line 1393 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -3570,9 +3584,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 134:
+case 136:
 YY_RULE_SETUP
-#line 1384 "dhcp6_lexer.ll"
+#line 1402 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -3582,9 +3596,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 135:
+case 137:
 YY_RULE_SETUP
-#line 1393 "dhcp6_lexer.ll"
+#line 1411 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -3594,9 +3608,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 136:
+case 138:
 YY_RULE_SETUP
-#line 1402 "dhcp6_lexer.ll"
+#line 1420 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -3606,9 +3620,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 137:
+case 139:
 YY_RULE_SETUP
-#line 1411 "dhcp6_lexer.ll"
+#line 1429 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -3618,9 +3632,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 138:
+case 140:
 YY_RULE_SETUP
-#line 1420 "dhcp6_lexer.ll"
+#line 1438 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3630,9 +3644,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 139:
+case 141:
 YY_RULE_SETUP
-#line 1429 "dhcp6_lexer.ll"
+#line 1447 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3642,9 +3656,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 140:
+case 142:
 YY_RULE_SETUP
-#line 1438 "dhcp6_lexer.ll"
+#line 1456 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3654,9 +3668,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 141:
+case 143:
 YY_RULE_SETUP
-#line 1447 "dhcp6_lexer.ll"
+#line 1465 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3666,9 +3680,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 142:
+case 144:
 YY_RULE_SETUP
-#line 1456 "dhcp6_lexer.ll"
+#line 1474 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3678,9 +3692,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 143:
+case 145:
 YY_RULE_SETUP
-#line 1465 "dhcp6_lexer.ll"
+#line 1483 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3690,9 +3704,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 144:
+case 146:
 YY_RULE_SETUP
-#line 1474 "dhcp6_lexer.ll"
+#line 1492 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3702,9 +3716,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 145:
+case 147:
 YY_RULE_SETUP
-#line 1483 "dhcp6_lexer.ll"
+#line 1501 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3714,9 +3728,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 146:
+case 148:
 YY_RULE_SETUP
-#line 1492 "dhcp6_lexer.ll"
+#line 1510 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3726,9 +3740,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 147:
+case 149:
 YY_RULE_SETUP
-#line 1501 "dhcp6_lexer.ll"
+#line 1519 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONTROL_SOCKET:
@@ -3738,9 +3752,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 148:
+case 150:
 YY_RULE_SETUP
-#line 1510 "dhcp6_lexer.ll"
+#line 1528 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONTROL_SOCKET:
@@ -3750,9 +3764,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 149:
+case 151:
 YY_RULE_SETUP
-#line 1519 "dhcp6_lexer.ll"
+#line 1537 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3762,9 +3776,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 150:
+case 152:
 YY_RULE_SETUP
-#line 1528 "dhcp6_lexer.ll"
+#line 1546 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -3774,9 +3788,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 151:
+case 153:
 YY_RULE_SETUP
-#line 1537 "dhcp6_lexer.ll"
+#line 1555 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -3786,9 +3800,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 152:
+case 154:
 YY_RULE_SETUP
-#line 1546 "dhcp6_lexer.ll"
+#line 1564 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -3798,9 +3812,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 153:
+case 155:
 YY_RULE_SETUP
-#line 1556 "dhcp6_lexer.ll"
+#line 1574 "dhcp6_lexer.ll"
 {
     /* A string has been matched. It contains the actual string and single quotes.
        We need to get those quotes out of the way and just use its content, e.g.
@@ -3900,65 +3914,65 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_STRING(decoded, driver.loc_);
 }
        YY_BREAK
-case 154:
-/* rule 154 can match eol */
+case 156:
+/* rule 156 can match eol */
 YY_RULE_SETUP
-#line 1655 "dhcp6_lexer.ll"
+#line 1673 "dhcp6_lexer.ll"
 {
     /* Bad string with a forbidden control character inside */
     driver.error(driver.loc_, "Invalid control in " + std::string(parser6_text));
 }
        YY_BREAK
-case 155:
-/* rule 155 can match eol */
+case 157:
+/* rule 157 can match eol */
 YY_RULE_SETUP
-#line 1660 "dhcp6_lexer.ll"
+#line 1678 "dhcp6_lexer.ll"
 {
     /* Bad string with a bad escape inside */
     driver.error(driver.loc_, "Bad escape in " + std::string(parser6_text));
 }
        YY_BREAK
-case 156:
+case 158:
 YY_RULE_SETUP
-#line 1665 "dhcp6_lexer.ll"
+#line 1683 "dhcp6_lexer.ll"
 {
     /* Bad string with an open escape at the end */
     driver.error(driver.loc_, "Overflow escape in " + std::string(parser6_text));
 }
        YY_BREAK
-case 157:
+case 159:
 YY_RULE_SETUP
-#line 1670 "dhcp6_lexer.ll"
+#line 1688 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_LSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 158:
+case 160:
 YY_RULE_SETUP
-#line 1671 "dhcp6_lexer.ll"
+#line 1689 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_RSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 159:
+case 161:
 YY_RULE_SETUP
-#line 1672 "dhcp6_lexer.ll"
+#line 1690 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_LCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 160:
+case 162:
 YY_RULE_SETUP
-#line 1673 "dhcp6_lexer.ll"
+#line 1691 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_RCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 161:
+case 163:
 YY_RULE_SETUP
-#line 1674 "dhcp6_lexer.ll"
+#line 1692 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_COMMA(driver.loc_); }
        YY_BREAK
-case 162:
+case 164:
 YY_RULE_SETUP
-#line 1675 "dhcp6_lexer.ll"
+#line 1693 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_COLON(driver.loc_); }
        YY_BREAK
-case 163:
+case 165:
 YY_RULE_SETUP
-#line 1677 "dhcp6_lexer.ll"
+#line 1695 "dhcp6_lexer.ll"
 {
     /* An integer was found. */
     std::string tmp(parser6_text);
@@ -3977,9 +3991,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_INTEGER(integer, driver.loc_);
 }
        YY_BREAK
-case 164:
+case 166:
 YY_RULE_SETUP
-#line 1695 "dhcp6_lexer.ll"
+#line 1713 "dhcp6_lexer.ll"
 {
     /* A floating point was found. */
     std::string tmp(parser6_text);
@@ -3993,43 +4007,43 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_FLOAT(fp, driver.loc_);
 }
        YY_BREAK
-case 165:
+case 167:
 YY_RULE_SETUP
-#line 1708 "dhcp6_lexer.ll"
+#line 1726 "dhcp6_lexer.ll"
 {
     string tmp(parser6_text);
     return isc::dhcp::Dhcp6Parser::make_BOOLEAN(tmp == "true", driver.loc_);
 }
        YY_BREAK
-case 166:
+case 168:
 YY_RULE_SETUP
-#line 1713 "dhcp6_lexer.ll"
+#line 1731 "dhcp6_lexer.ll"
 {
    return isc::dhcp::Dhcp6Parser::make_NULL_TYPE(driver.loc_);
 }
        YY_BREAK
-case 167:
+case 169:
 YY_RULE_SETUP
-#line 1717 "dhcp6_lexer.ll"
+#line 1735 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
        YY_BREAK
-case 168:
+case 170:
 YY_RULE_SETUP
-#line 1719 "dhcp6_lexer.ll"
+#line 1737 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
        YY_BREAK
-case 169:
+case 171:
 YY_RULE_SETUP
-#line 1721 "dhcp6_lexer.ll"
+#line 1739 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
        YY_BREAK
-case 170:
+case 172:
 YY_RULE_SETUP
-#line 1723 "dhcp6_lexer.ll"
+#line 1741 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "Invalid character: " + std::string(parser6_text));
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 1725 "dhcp6_lexer.ll"
+#line 1743 "dhcp6_lexer.ll"
 {
     if (driver.states_.empty()) {
         return isc::dhcp::Dhcp6Parser::make_END(driver.loc_);
@@ -4053,12 +4067,12 @@ case YY_STATE_EOF(INITIAL):
     BEGIN(DIR_EXIT);
 }
        YY_BREAK
-case 171:
+case 173:
 YY_RULE_SETUP
-#line 1748 "dhcp6_lexer.ll"
+#line 1766 "dhcp6_lexer.ll"
 ECHO;
        YY_BREAK
-#line 4062 "dhcp6_lexer.cc"
+#line 4076 "dhcp6_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -4081,11 +4095,7 @@ ECHO;
                         * back-up) that will match for the new input source.
                         */
                        (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-/* %if-c-only */
                        YY_CURRENT_BUFFER_LVALUE->yy_input_file = parser6_in;
-/* %endif */
-/* %if-c++-only */
-/* %endif */
                        YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
                        }
 
@@ -4193,7 +4203,6 @@ ECHO;
                        "fatal flex scanner internal error--no action found" );
        } /* end of action switch */
                } /* end of scanning one token */
-       } /* end of user's declarations */
 } /* end of parser6_lex */
 /* %ok-for-header */
 
@@ -4217,9 +4226,9 @@ static int yy_get_next_buffer (void)
 /* %if-c++-only */
 /* %endif */
 {
-       char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-       char *source = (yytext_ptr);
-       yy_size_t number_to_move, i;
+       register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+       register char *source = (yytext_ptr);
+       register int number_to_move, i;
        int ret_val;
 
        if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
@@ -4248,7 +4257,7 @@ static int yy_get_next_buffer (void)
        /* Try to read more data. */
 
        /* First move last chars to start of buffer. */
-       number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+       number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
 
        for ( i = 0; i < number_to_move; ++i )
                *(dest++) = *(source++);
@@ -4330,9 +4339,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 *) parser6_realloc((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()" );
@@ -4357,8 +4366,8 @@ static int yy_get_next_buffer (void)
 /* %if-c++-only */
 /* %endif */
 {
-       yy_state_type yy_current_state;
-       char *yy_cp;
+       register yy_state_type yy_current_state;
+       register char *yy_cp;
     
 /* %% [15.0] code to get the start state into yy_current_state goes here */
        yy_current_state = (yy_start);
@@ -4366,7 +4375,7 @@ static int yy_get_next_buffer (void)
        for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
                {
 /* %% [16.0] code to find the next state goes here */
-               YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+               register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
                if ( yy_accept[yy_current_state] )
                        {
                        (yy_last_accepting_state) = yy_current_state;
@@ -4375,7 +4384,7 @@ static int yy_get_next_buffer (void)
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 1378 )
+                       if ( yy_current_state >= 1400 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -4395,11 +4404,11 @@ static int yy_get_next_buffer (void)
 /* %if-c++-only */
 /* %endif */
 {
-       int yy_is_jam;
+       register int yy_is_jam;
     /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */
-       char *yy_cp = (yy_c_buf_p);
+       register char *yy_cp = (yy_c_buf_p);
 
-       YY_CHAR yy_c = 1;
+       register YY_CHAR yy_c = 1;
        if ( yy_accept[yy_current_state] )
                {
                (yy_last_accepting_state) = yy_current_state;
@@ -4408,20 +4417,18 @@ 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 >= 1378 )
+               if ( yy_current_state >= 1400 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 1377);
+       yy_is_jam = (yy_current_state == 1399);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
 
-#ifndef YY_NO_UNPUT
 /* %if-c-only */
 
 /* %endif */
-#endif
 
 /* %if-c-only */
 #ifndef YY_NO_INPUT
@@ -4527,9 +4534,6 @@ static int yy_get_next_buffer (void)
        parser6__load_buffer_state( );
 }
 
-/* %if-c++-only */
-/* %endif */
-
 /** Switch to a different input buffer.
  * @param new_buffer The new input buffer.
  * 
@@ -4577,11 +4581,7 @@ static void parser6__load_buffer_state  (void)
 {
        (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
        (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
-/* %if-c-only */
        parser6_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
-/* %endif */
-/* %if-c++-only */
-/* %endif */
        (yy_hold_char) = *(yy_c_buf_p);
 }
 
@@ -4603,7 +4603,7 @@ static void parser6__load_buffer_state  (void)
        if ( ! b )
                YY_FATAL_ERROR( "out of dynamic memory in parser6__create_buffer()" );
 
-       b->yy_buf_size = (yy_size_t)size;
+       b->yy_buf_size = size;
 
        /* yy_ch_buf has to be 2 characters longer than the size given because
         * we need to put in 2 end-of-buffer characters.
@@ -4619,9 +4619,6 @@ static void parser6__load_buffer_state  (void)
        return b;
 }
 
-/* %if-c++-only */
-/* %endif */
-
 /** Destroy the buffer.
  * @param b a buffer created with parser6__create_buffer()
  * 
@@ -4660,11 +4657,7 @@ static void parser6__load_buffer_state  (void)
     
        parser6__flush_buffer(b );
 
-/* %if-c-only */
        b->yy_input_file = file;
-/* %endif */
-/* %if-c++-only */
-/* %endif */
        b->yy_fill_buffer = 1;
 
     /* If b is the current buffer, then parser6__init_buffer was _probably_
@@ -4799,7 +4792,7 @@ static void parser6_ensure_buffer_stack (void)
                 * scanner will even need a stack. We use 2 instead of 1 to avoid an
                 * immediate realloc on the next call.
          */
-               num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
+               num_to_alloc = 1;
                (yy_buffer_stack) = (struct yy_buffer_state**)parser6_alloc
                                                                (num_to_alloc * sizeof(struct yy_buffer_state*)
                                                                );
@@ -4816,7 +4809,7 @@ static void parser6_ensure_buffer_stack (void)
        if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
 
                /* Increase the buffer to prepare for a possible push. */
-               yy_size_t grow_size = 8 /* arbitrary grow size */;
+               int grow_size = 8 /* arbitrary grow size */;
 
                num_to_alloc = (yy_buffer_stack_max) + grow_size;
                (yy_buffer_stack) = (struct yy_buffer_state**)parser6_realloc
@@ -4899,7 +4892,7 @@ YY_BUFFER_STATE parser6__scan_bytes  (yyconst char * yybytes, yy_size_t  _yybyte
        YY_BUFFER_STATE b;
        char *buf;
        yy_size_t n;
-       yy_size_t i;
+       int i;
     
        /* Get memory for full buffer, including space for trailing EOB's. */
        n = _yybytes_len + 2;
@@ -4932,7 +4925,7 @@ YY_BUFFER_STATE parser6__scan_bytes  (yyconst char * yybytes, yy_size_t  _yybyte
 /* %if-c-only */
 static void yy_fatal_error (yyconst char* msg )
 {
-                       (void) fprintf( stderr, "%s\n", msg );
+       (void) fprintf( stderr, "%s\n", msg );
        exit( YY_EXIT_FAILURE );
 }
 /* %endif */
@@ -5008,29 +5001,29 @@ char *parser6_get_text  (void)
 /* %endif */
 
 /** Set the current line number.
- * @param _line_number line number
+ * @param line_number
  * 
  */
-void parser6_set_lineno (int  _line_number )
+void parser6_set_lineno (int  line_number )
 {
     
-    parser6_lineno = _line_number;
+    parser6_lineno = line_number;
 }
 
 /** Set the input stream. This does not discard the current
  * input buffer.
- * @param _in_str A readable stream.
+ * @param in_str A readable stream.
  * 
  * @see parser6__switch_to_buffer
  */
-void parser6_set_in (FILE *  _in_str )
+void parser6_set_in (FILE *  in_str )
 {
-        parser6_in = _in_str ;
+        parser6_in = in_str ;
 }
 
-void parser6_set_out (FILE *  _out_str )
+void parser6_set_out (FILE *  out_str )
 {
-        parser6_out = _out_str ;
+        parser6_out = out_str ;
 }
 
 int parser6_get_debug  (void)
@@ -5038,9 +5031,9 @@ int parser6_get_debug  (void)
         return parser6__flex_debug;
 }
 
-void parser6_set_debug (int  _bdebug )
+void parser6_set_debug (int  bdebug )
 {
-        parser6__flex_debug = _bdebug ;
+        parser6__flex_debug = bdebug ;
 }
 
 /* %endif */
@@ -5113,8 +5106,7 @@ int parser6_lex_destroy  (void)
 #ifndef yytext_ptr
 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
 {
-               
-       int i;
+       register int i;
        for ( i = 0; i < n; ++i )
                s1[i] = s2[i];
 }
@@ -5123,7 +5115,7 @@ static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
 #ifdef YY_NEED_STRLEN
 static int yy_flex_strlen (yyconst char * s )
 {
-       int n;
+       register int n;
        for ( n = 0; s[n]; ++n )
                ;
 
@@ -5133,12 +5125,11 @@ static int yy_flex_strlen (yyconst char * s )
 
 void *parser6_alloc (yy_size_t  size )
 {
-                       return (void *) malloc( size );
+       return (void *) malloc( size );
 }
 
 void *parser6_realloc  (void * ptr, yy_size_t  size )
 {
-               
        /* The cast to (char *) in the following accommodates both
         * implementations that use char* generic pointers, and those
         * that use void* generic pointers.  It works with the latter
@@ -5151,7 +5142,7 @@ void *parser6_realloc  (void * ptr, yy_size_t  size )
 
 void parser6_free (void * ptr )
 {
-                       free( (char *) ptr );   /* see parser6_realloc() for (char *) cast */
+       free( (char *) ptr );   /* see parser6_realloc() for (char *) cast */
 }
 
 /* %if-tables-serialization definitions */
@@ -5161,7 +5152,7 @@ void parser6_free (void * ptr )
 
 /* %ok-for-header */
 
-#line 1748 "dhcp6_lexer.ll"
+#line 1766 "dhcp6_lexer.ll"
 
 
 
index a6194d8ea38a64bef8d4d1c91358bc4f13f2412a..362675aab6c307f438f660f9464e0bf73b8380ee 100644 (file)
@@ -313,6 +313,24 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     }
 }
 
+\"hostname-char-set\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DHCP_DDNS:
+        return isc::dhcp::Dhcp6Parser::make_HOSTNAME_CHAR_SET(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("hostname-char-set", driver.loc_);
+    }
+}
+
+\"hostname-char-replacement\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DHCP_DDNS:
+        return isc::dhcp::Dhcp6Parser::make_HOSTNAME_CHAR_REPLACEMENT(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("hostname-char-replacement", driver.loc_);
+    }
+}
+
 (?i:\"UDP\") {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::NCR_PROTOCOL) {
index cc4ce305f05637b1c425335bedc69ca895d6ff05..9bce0b7ec274aba178ecb3e44aa086eb2cfdfc9f 100644 (file)
@@ -253,29 +253,29 @@ namespace isc { namespace dhcp {
   {
       switch (that.type_get ())
     {
-      case 181: // value
-      case 185: // map_value
-      case 235: // db_type
-      case 318: // hr_mode
-      case 454: // duid_type
-      case 487: // ncr_protocol_value
-      case 495: // replace_client_name_value
+      case 183: // value
+      case 187: // map_value
+      case 237: // db_type
+      case 320: // hr_mode
+      case 456: // duid_type
+      case 489: // ncr_protocol_value
+      case 497: // replace_client_name_value
         value.move< ElementPtr > (that.value);
         break;
 
-      case 164: // "boolean"
+      case 166: // "boolean"
         value.move< bool > (that.value);
         break;
 
-      case 163: // "floating point"
+      case 165: // "floating point"
         value.move< double > (that.value);
         break;
 
-      case 162: // "integer"
+      case 164: // "integer"
         value.move< int64_t > (that.value);
         break;
 
-      case 161: // "constant string"
+      case 163: // "constant string"
         value.move< std::string > (that.value);
         break;
 
@@ -294,29 +294,29 @@ namespace isc { namespace dhcp {
     state = that.state;
       switch (that.type_get ())
     {
-      case 181: // value
-      case 185: // map_value
-      case 235: // db_type
-      case 318: // hr_mode
-      case 454: // duid_type
-      case 487: // ncr_protocol_value
-      case 495: // replace_client_name_value
+      case 183: // value
+      case 187: // map_value
+      case 237: // db_type
+      case 320: // hr_mode
+      case 456: // duid_type
+      case 489: // ncr_protocol_value
+      case 497: // replace_client_name_value
         value.copy< ElementPtr > (that.value);
         break;
 
-      case 164: // "boolean"
+      case 166: // "boolean"
         value.copy< bool > (that.value);
         break;
 
-      case 163: // "floating point"
+      case 165: // "floating point"
         value.copy< double > (that.value);
         break;
 
-      case 162: // "integer"
+      case 164: // "integer"
         value.copy< int64_t > (that.value);
         break;
 
-      case 161: // "constant string"
+      case 163: // "constant string"
         value.copy< std::string > (that.value);
         break;
 
@@ -356,79 +356,79 @@ namespace isc { namespace dhcp {
         << yysym.location << ": ";
     switch (yytype)
     {
-            case 161: // "constant string"
+            case 163: // "constant string"
 
-#line 237 "dhcp6_parser.yy" // lalr1.cc:636
+#line 239 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< std::string > (); }
 #line 364 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 162: // "integer"
+      case 164: // "integer"
 
-#line 237 "dhcp6_parser.yy" // lalr1.cc:636
+#line 239 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< int64_t > (); }
 #line 371 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 163: // "floating point"
+      case 165: // "floating point"
 
-#line 237 "dhcp6_parser.yy" // lalr1.cc:636
+#line 239 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< double > (); }
 #line 378 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 164: // "boolean"
+      case 166: // "boolean"
 
-#line 237 "dhcp6_parser.yy" // lalr1.cc:636
+#line 239 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< bool > (); }
 #line 385 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 181: // value
+      case 183: // value
 
-#line 237 "dhcp6_parser.yy" // lalr1.cc:636
+#line 239 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 392 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 185: // map_value
+      case 187: // map_value
 
-#line 237 "dhcp6_parser.yy" // lalr1.cc:636
+#line 239 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 399 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 235: // db_type
+      case 237: // db_type
 
-#line 237 "dhcp6_parser.yy" // lalr1.cc:636
+#line 239 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 406 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 318: // hr_mode
+      case 320: // hr_mode
 
-#line 237 "dhcp6_parser.yy" // lalr1.cc:636
+#line 239 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 413 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 454: // duid_type
+      case 456: // duid_type
 
-#line 237 "dhcp6_parser.yy" // lalr1.cc:636
+#line 239 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 420 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 487: // ncr_protocol_value
+      case 489: // ncr_protocol_value
 
-#line 237 "dhcp6_parser.yy" // lalr1.cc:636
+#line 239 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 427 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 495: // replace_client_name_value
+      case 497: // replace_client_name_value
 
-#line 237 "dhcp6_parser.yy" // lalr1.cc:636
+#line 239 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 434 "dhcp6_parser.cc" // lalr1.cc:636
         break;
@@ -630,29 +630,29 @@ namespace isc { namespace dhcp {
          when using variants.  */
         switch (yyr1_[yyn])
     {
-      case 181: // value
-      case 185: // map_value
-      case 235: // db_type
-      case 318: // hr_mode
-      case 454: // duid_type
-      case 487: // ncr_protocol_value
-      case 495: // replace_client_name_value
+      case 183: // value
+      case 187: // map_value
+      case 237: // db_type
+      case 320: // hr_mode
+      case 456: // duid_type
+      case 489: // ncr_protocol_value
+      case 497: // replace_client_name_value
         yylhs.value.build< ElementPtr > ();
         break;
 
-      case 164: // "boolean"
+      case 166: // "boolean"
         yylhs.value.build< bool > ();
         break;
 
-      case 163: // "floating point"
+      case 165: // "floating point"
         yylhs.value.build< double > ();
         break;
 
-      case 162: // "integer"
+      case 164: // "integer"
         yylhs.value.build< int64_t > ();
         break;
 
-      case 161: // "constant string"
+      case 163: // "constant string"
         yylhs.value.build< std::string > ();
         break;
 
@@ -674,133 +674,133 @@ namespace isc { namespace dhcp {
           switch (yyn)
             {
   case 2:
-#line 246 "dhcp6_parser.yy" // lalr1.cc:859
+#line 248 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.NO_KEYWORD; }
 #line 680 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 4:
-#line 247 "dhcp6_parser.yy" // lalr1.cc:859
+#line 249 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.CONFIG; }
 #line 686 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 6:
-#line 248 "dhcp6_parser.yy" // lalr1.cc:859
+#line 250 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP6; }
 #line 692 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 8:
-#line 249 "dhcp6_parser.yy" // lalr1.cc:859
+#line 251 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
 #line 698 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 10:
-#line 250 "dhcp6_parser.yy" // lalr1.cc:859
+#line 252 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.SUBNET6; }
 #line 704 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 12:
-#line 251 "dhcp6_parser.yy" // lalr1.cc:859
+#line 253 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.POOLS; }
 #line 710 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 14:
-#line 252 "dhcp6_parser.yy" // lalr1.cc:859
+#line 254 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.PD_POOLS; }
 #line 716 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 16:
-#line 253 "dhcp6_parser.yy" // lalr1.cc:859
+#line 255 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.RESERVATIONS; }
 #line 722 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 18:
-#line 254 "dhcp6_parser.yy" // lalr1.cc:859
+#line 256 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP6; }
 #line 728 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 20:
-#line 255 "dhcp6_parser.yy" // lalr1.cc:859
+#line 257 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DEF; }
 #line 734 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 22:
-#line 256 "dhcp6_parser.yy" // lalr1.cc:859
+#line 258 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DATA; }
 #line 740 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 24:
-#line 257 "dhcp6_parser.yy" // lalr1.cc:859
+#line 259 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
 #line 746 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 26:
-#line 258 "dhcp6_parser.yy" // lalr1.cc:859
+#line 260 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP_DDNS; }
 #line 752 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 28:
-#line 259 "dhcp6_parser.yy" // lalr1.cc:859
+#line 261 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.LOGGING; }
 #line 758 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 30:
-#line 267 "dhcp6_parser.yy" // lalr1.cc:859
+#line 269 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
 #line 764 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 31:
-#line 268 "dhcp6_parser.yy" // lalr1.cc:859
+#line 270 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
 #line 770 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 32:
-#line 269 "dhcp6_parser.yy" // lalr1.cc:859
+#line 271 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
 #line 776 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 33:
-#line 270 "dhcp6_parser.yy" // lalr1.cc:859
+#line 272 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
 #line 782 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 34:
-#line 271 "dhcp6_parser.yy" // lalr1.cc:859
+#line 273 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
 #line 788 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 35:
-#line 272 "dhcp6_parser.yy" // lalr1.cc:859
+#line 274 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 794 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 36:
-#line 273 "dhcp6_parser.yy" // lalr1.cc:859
+#line 275 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 800 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 37:
-#line 276 "dhcp6_parser.yy" // lalr1.cc:859
+#line 278 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
@@ -809,7 +809,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 38:
-#line 281 "dhcp6_parser.yy" // lalr1.cc:859
+#line 283 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -820,7 +820,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 39:
-#line 286 "dhcp6_parser.yy" // lalr1.cc:859
+#line 288 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -830,13 +830,13 @@ namespace isc { namespace dhcp {
     break;
 
   case 40:
-#line 292 "dhcp6_parser.yy" // lalr1.cc:859
+#line 294 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 836 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 43:
-#line 299 "dhcp6_parser.yy" // lalr1.cc:859
+#line 301 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // map containing a single entry
                   ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
@@ -845,7 +845,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 44:
-#line 303 "dhcp6_parser.yy" // lalr1.cc:859
+#line 305 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // map consisting of a shorter map followed by
                   // comma and string:value
@@ -855,7 +855,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 45:
-#line 310 "dhcp6_parser.yy" // lalr1.cc:859
+#line 312 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
@@ -864,7 +864,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 46:
-#line 313 "dhcp6_parser.yy" // lalr1.cc:859
+#line 315 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
 }
@@ -872,7 +872,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 49:
-#line 321 "dhcp6_parser.yy" // lalr1.cc:859
+#line 323 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
@@ -881,7 +881,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 50:
-#line 325 "dhcp6_parser.yy" // lalr1.cc:859
+#line 327 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
@@ -890,7 +890,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 51:
-#line 332 "dhcp6_parser.yy" // lalr1.cc:859
+#line 334 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // List parsing about to start
 }
@@ -898,7 +898,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 52:
-#line 334 "dhcp6_parser.yy" // lalr1.cc:859
+#line 336 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
     //ctx.stack_.pop_back();
@@ -907,7 +907,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 55:
-#line 343 "dhcp6_parser.yy" // lalr1.cc:859
+#line 345 "dhcp6_parser.yy" // lalr1.cc:859
     {
                           ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
@@ -916,7 +916,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 56:
-#line 347 "dhcp6_parser.yy" // lalr1.cc:859
+#line 349 "dhcp6_parser.yy" // lalr1.cc:859
     {
                           ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
@@ -925,7 +925,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 57:
-#line 358 "dhcp6_parser.yy" // lalr1.cc:859
+#line 360 "dhcp6_parser.yy" // lalr1.cc:859
     {
     const std::string& where = ctx.contextName();
     const std::string& keyword = yystack_[1].value.as< std::string > ();
@@ -936,7 +936,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 58:
-#line 368 "dhcp6_parser.yy" // lalr1.cc:859
+#line 370 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -947,7 +947,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 59:
-#line 373 "dhcp6_parser.yy" // lalr1.cc:859
+#line 375 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -960,7 +960,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 68:
-#line 396 "dhcp6_parser.yy" // lalr1.cc:859
+#line 398 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -973,7 +973,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 69:
-#line 403 "dhcp6_parser.yy" // lalr1.cc:859
+#line 405 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // No global parameter is required
     ctx.stack_.pop_back();
@@ -983,7 +983,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 70:
-#line 411 "dhcp6_parser.yy" // lalr1.cc:859
+#line 413 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the Dhcp6 map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -993,7 +993,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 71:
-#line 415 "dhcp6_parser.yy" // lalr1.cc:859
+#line 417 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // No global parameter is required
     // parsing completed
@@ -1002,7 +1002,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 100:
-#line 454 "dhcp6_parser.yy" // lalr1.cc:859
+#line 456 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("preferred-lifetime", prf);
@@ -1011,7 +1011,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 101:
-#line 459 "dhcp6_parser.yy" // lalr1.cc:859
+#line 461 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("valid-lifetime", prf);
@@ -1020,7 +1020,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 102:
-#line 464 "dhcp6_parser.yy" // lalr1.cc:859
+#line 466 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("renew-timer", prf);
@@ -1029,7 +1029,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 103:
-#line 469 "dhcp6_parser.yy" // lalr1.cc:859
+#line 471 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rebind-timer", prf);
@@ -1038,7 +1038,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 104:
-#line 474 "dhcp6_parser.yy" // lalr1.cc:859
+#line 476 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("decline-probation-period", dpp);
@@ -1047,7 +1047,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 105:
-#line 479 "dhcp6_parser.yy" // lalr1.cc:859
+#line 481 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces-config", i);
@@ -1058,7 +1058,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 106:
-#line 484 "dhcp6_parser.yy" // lalr1.cc:859
+#line 486 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // No interfaces config param is required
     ctx.stack_.pop_back();
@@ -1068,7 +1068,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 107:
-#line 490 "dhcp6_parser.yy" // lalr1.cc:859
+#line 492 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the interfaces-config map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1078,7 +1078,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 108:
-#line 494 "dhcp6_parser.yy" // lalr1.cc:859
+#line 496 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // No interfaces config param is required
     // parsing completed
@@ -1087,7 +1087,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 116:
-#line 510 "dhcp6_parser.yy" // lalr1.cc:859
+#line 512 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces", l);
@@ -1098,7 +1098,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 117:
-#line 515 "dhcp6_parser.yy" // lalr1.cc:859
+#line 517 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1107,7 +1107,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 118:
-#line 520 "dhcp6_parser.yy" // lalr1.cc:859
+#line 522 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("re-detect", b);
@@ -1116,7 +1116,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 119:
-#line 526 "dhcp6_parser.yy" // lalr1.cc:859
+#line 528 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lease-database", i);
@@ -1127,7 +1127,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 120:
-#line 531 "dhcp6_parser.yy" // lalr1.cc:859
+#line 533 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
@@ -1138,7 +1138,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 121:
-#line 538 "dhcp6_parser.yy" // lalr1.cc:859
+#line 540 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hosts-database", i);
@@ -1149,7 +1149,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 122:
-#line 543 "dhcp6_parser.yy" // lalr1.cc:859
+#line 545 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
@@ -1160,7 +1160,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 123:
-#line 550 "dhcp6_parser.yy" // lalr1.cc:859
+#line 552 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hosts-databases", l);
@@ -1171,7 +1171,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 124:
-#line 555 "dhcp6_parser.yy" // lalr1.cc:859
+#line 557 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1180,7 +1180,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 129:
-#line 568 "dhcp6_parser.yy" // lalr1.cc:859
+#line 570 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -1190,7 +1190,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 130:
-#line 572 "dhcp6_parser.yy" // lalr1.cc:859
+#line 574 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -1200,7 +1200,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 151:
-#line 602 "dhcp6_parser.yy" // lalr1.cc:859
+#line 604 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.DATABASE_TYPE);
 }
@@ -1208,7 +1208,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 152:
-#line 604 "dhcp6_parser.yy" // lalr1.cc:859
+#line 606 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -1217,31 +1217,31 @@ namespace isc { namespace dhcp {
     break;
 
   case 153:
-#line 609 "dhcp6_parser.yy" // lalr1.cc:859
+#line 611 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
 #line 1223 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 154:
-#line 610 "dhcp6_parser.yy" // lalr1.cc:859
+#line 612 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
 #line 1229 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 155:
-#line 611 "dhcp6_parser.yy" // lalr1.cc:859
+#line 613 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
 #line 1235 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 156:
-#line 612 "dhcp6_parser.yy" // lalr1.cc:859
+#line 614 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); }
 #line 1241 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 157:
-#line 615 "dhcp6_parser.yy" // lalr1.cc:859
+#line 617 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1249,7 +1249,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 158:
-#line 617 "dhcp6_parser.yy" // lalr1.cc:859
+#line 619 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("user", user);
@@ -1259,7 +1259,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 159:
-#line 623 "dhcp6_parser.yy" // lalr1.cc:859
+#line 625 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1267,7 +1267,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 160:
-#line 625 "dhcp6_parser.yy" // lalr1.cc:859
+#line 627 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("password", pwd);
@@ -1277,7 +1277,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 161:
-#line 631 "dhcp6_parser.yy" // lalr1.cc:859
+#line 633 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1285,7 +1285,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 162:
-#line 633 "dhcp6_parser.yy" // lalr1.cc:859
+#line 635 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host", h);
@@ -1295,7 +1295,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 163:
-#line 639 "dhcp6_parser.yy" // lalr1.cc:859
+#line 641 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr p(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("port", p);
@@ -1304,7 +1304,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 164:
-#line 644 "dhcp6_parser.yy" // lalr1.cc:859
+#line 646 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1312,7 +1312,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 165:
-#line 646 "dhcp6_parser.yy" // lalr1.cc:859
+#line 648 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
@@ -1322,7 +1322,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 166:
-#line 652 "dhcp6_parser.yy" // lalr1.cc:859
+#line 654 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("persist", n);
@@ -1331,7 +1331,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 167:
-#line 657 "dhcp6_parser.yy" // lalr1.cc:859
+#line 659 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lfc-interval", n);
@@ -1340,7 +1340,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 168:
-#line 662 "dhcp6_parser.yy" // lalr1.cc:859
+#line 664 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("readonly", n);
@@ -1349,7 +1349,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 169:
-#line 667 "dhcp6_parser.yy" // lalr1.cc:859
+#line 669 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("connect-timeout", n);
@@ -1358,7 +1358,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 170:
-#line 672 "dhcp6_parser.yy" // lalr1.cc:859
+#line 674 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reconnect-wait-time", n);
@@ -1367,7 +1367,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 171:
-#line 677 "dhcp6_parser.yy" // lalr1.cc:859
+#line 679 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("request-timeout", n);
@@ -1376,7 +1376,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 172:
-#line 682 "dhcp6_parser.yy" // lalr1.cc:859
+#line 684 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("tcp-keepalive", n);
@@ -1385,7 +1385,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 173:
-#line 687 "dhcp6_parser.yy" // lalr1.cc:859
+#line 689 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("tcp-nodelay", n);
@@ -1394,7 +1394,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 174:
-#line 692 "dhcp6_parser.yy" // lalr1.cc:859
+#line 694 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1402,7 +1402,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 175:
-#line 694 "dhcp6_parser.yy" // lalr1.cc:859
+#line 696 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr cp(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("contact-points", cp);
@@ -1412,7 +1412,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 176:
-#line 700 "dhcp6_parser.yy" // lalr1.cc:859
+#line 702 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reconnect-tries", n);
@@ -1421,7 +1421,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 177:
-#line 705 "dhcp6_parser.yy" // lalr1.cc:859
+#line 707 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1429,7 +1429,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 178:
-#line 707 "dhcp6_parser.yy" // lalr1.cc:859
+#line 709 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr ks(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("keyspace", ks);
@@ -1439,7 +1439,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 179:
-#line 714 "dhcp6_parser.yy" // lalr1.cc:859
+#line 716 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("mac-sources", l);
@@ -1450,7 +1450,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 180:
-#line 719 "dhcp6_parser.yy" // lalr1.cc:859
+#line 721 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1459,7 +1459,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 185:
-#line 732 "dhcp6_parser.yy" // lalr1.cc:859
+#line 734 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
@@ -1468,7 +1468,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 186:
-#line 737 "dhcp6_parser.yy" // lalr1.cc:859
+#line 739 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr duid(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
@@ -1477,7 +1477,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 187:
-#line 742 "dhcp6_parser.yy" // lalr1.cc:859
+#line 744 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host-reservation-identifiers", l);
@@ -1488,7 +1488,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 188:
-#line 747 "dhcp6_parser.yy" // lalr1.cc:859
+#line 749 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1497,7 +1497,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 194:
-#line 761 "dhcp6_parser.yy" // lalr1.cc:859
+#line 763 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(hwaddr);
@@ -1506,7 +1506,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 195:
-#line 766 "dhcp6_parser.yy" // lalr1.cc:859
+#line 768 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(flex_id);
@@ -1515,7 +1515,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 196:
-#line 773 "dhcp6_parser.yy" // lalr1.cc:859
+#line 775 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("relay-supplied-options", l);
@@ -1526,7 +1526,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 197:
-#line 778 "dhcp6_parser.yy" // lalr1.cc:859
+#line 780 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1535,7 +1535,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 198:
-#line 783 "dhcp6_parser.yy" // lalr1.cc:859
+#line 785 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hooks-libraries", l);
@@ -1546,7 +1546,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 199:
-#line 788 "dhcp6_parser.yy" // lalr1.cc:859
+#line 790 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1555,7 +1555,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 204:
-#line 801 "dhcp6_parser.yy" // lalr1.cc:859
+#line 803 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -1565,7 +1565,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 205:
-#line 805 "dhcp6_parser.yy" // lalr1.cc:859
+#line 807 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -1575,7 +1575,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 206:
-#line 811 "dhcp6_parser.yy" // lalr1.cc:859
+#line 813 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the hooks-libraries list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1585,7 +1585,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 207:
-#line 815 "dhcp6_parser.yy" // lalr1.cc:859
+#line 817 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -1595,7 +1595,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 213:
-#line 830 "dhcp6_parser.yy" // lalr1.cc:859
+#line 832 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1603,7 +1603,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 214:
-#line 832 "dhcp6_parser.yy" // lalr1.cc:859
+#line 834 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("library", lib);
@@ -1613,7 +1613,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 215:
-#line 838 "dhcp6_parser.yy" // lalr1.cc:859
+#line 840 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1621,7 +1621,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 216:
-#line 840 "dhcp6_parser.yy" // lalr1.cc:859
+#line 842 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -1630,7 +1630,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 217:
-#line 846 "dhcp6_parser.yy" // lalr1.cc:859
+#line 848 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("expired-leases-processing", m);
@@ -1641,7 +1641,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 218:
-#line 851 "dhcp6_parser.yy" // lalr1.cc:859
+#line 853 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // No expired lease parameter is required
     ctx.stack_.pop_back();
@@ -1651,7 +1651,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 227:
-#line 869 "dhcp6_parser.yy" // lalr1.cc:859
+#line 871 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reclaim-timer-wait-time", value);
@@ -1660,7 +1660,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 228:
-#line 874 "dhcp6_parser.yy" // lalr1.cc:859
+#line 876 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush-reclaimed-timer-wait-time", value);
@@ -1669,7 +1669,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 229:
-#line 879 "dhcp6_parser.yy" // lalr1.cc:859
+#line 881 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hold-reclaimed-time", value);
@@ -1678,7 +1678,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 230:
-#line 884 "dhcp6_parser.yy" // lalr1.cc:859
+#line 886 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-leases", value);
@@ -1687,7 +1687,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 231:
-#line 889 "dhcp6_parser.yy" // lalr1.cc:859
+#line 891 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-time", value);
@@ -1696,7 +1696,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 232:
-#line 894 "dhcp6_parser.yy" // lalr1.cc:859
+#line 896 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("unwarned-reclaim-cycles", value);
@@ -1705,7 +1705,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 233:
-#line 902 "dhcp6_parser.yy" // lalr1.cc:859
+#line 904 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet6", l);
@@ -1716,7 +1716,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 234:
-#line 907 "dhcp6_parser.yy" // lalr1.cc:859
+#line 909 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1725,7 +1725,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 239:
-#line 927 "dhcp6_parser.yy" // lalr1.cc:859
+#line 929 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -1735,7 +1735,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 240:
-#line 931 "dhcp6_parser.yy" // lalr1.cc:859
+#line 933 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Once we reached this place, the subnet parsing is now complete.
     // If we want to, we can implement default values here.
@@ -1761,7 +1761,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 241:
-#line 953 "dhcp6_parser.yy" // lalr1.cc:859
+#line 955 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the subnet6 list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1771,7 +1771,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 242:
-#line 957 "dhcp6_parser.yy" // lalr1.cc:859
+#line 959 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The subnet subnet6 parameter is required
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -1781,7 +1781,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 265:
-#line 991 "dhcp6_parser.yy" // lalr1.cc:859
+#line 993 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1789,7 +1789,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 266:
-#line 993 "dhcp6_parser.yy" // lalr1.cc:859
+#line 995 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet", subnet);
@@ -1799,7 +1799,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 267:
-#line 999 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1001 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1807,7 +1807,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 268:
-#line 1001 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1003 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface", iface);
@@ -1817,7 +1817,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 269:
-#line 1007 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1009 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1825,7 +1825,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 270:
-#line 1009 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1011 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface-id", iface);
@@ -1835,7 +1835,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 271:
-#line 1015 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1017 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -1843,7 +1843,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 272:
-#line 1017 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1019 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr cls(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-class", cls);
@@ -1853,7 +1853,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 273:
-#line 1023 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1025 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("require-client-classes", c);
@@ -1864,7 +1864,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 274:
-#line 1028 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1030 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1873,7 +1873,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 275:
-#line 1033 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1035 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.RESERVATION_MODE);
 }
@@ -1881,7 +1881,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 276:
-#line 1035 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1037 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -1890,25 +1890,25 @@ namespace isc { namespace dhcp {
     break;
 
   case 277:
-#line 1040 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1042 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
 #line 1896 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 278:
-#line 1041 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1043 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
 #line 1902 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 279:
-#line 1042 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1044 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
 #line 1908 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 280:
-#line 1045 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1047 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("id", id);
@@ -1917,7 +1917,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 281:
-#line 1050 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1052 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rapid-commit", rc);
@@ -1926,7 +1926,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 282:
-#line 1058 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1060 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("shared-networks", l);
@@ -1937,7 +1937,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 283:
-#line 1063 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1065 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1946,7 +1946,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 288:
-#line 1078 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1080 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -1956,7 +1956,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 289:
-#line 1082 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1084 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
@@ -1964,7 +1964,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 309:
-#line 1113 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1115 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-def", l);
@@ -1975,7 +1975,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 310:
-#line 1118 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1120 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1984,7 +1984,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 311:
-#line 1126 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1128 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
@@ -1993,7 +1993,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 312:
-#line 1129 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1131 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
@@ -2001,7 +2001,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 317:
-#line 1145 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1147 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2011,7 +2011,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 318:
-#line 1149 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1151 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2023,7 +2023,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 319:
-#line 1160 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1162 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the option-def list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2033,7 +2033,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 320:
-#line 1164 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1166 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2045,7 +2045,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 336:
-#line 1196 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1198 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("code", code);
@@ -2054,7 +2054,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 338:
-#line 1203 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1205 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2062,7 +2062,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 339:
-#line 1205 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1207 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("type", prf);
@@ -2072,7 +2072,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 340:
-#line 1211 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1213 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2080,7 +2080,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 341:
-#line 1213 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1215 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr rtypes(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("record-types", rtypes);
@@ -2090,7 +2090,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 342:
-#line 1219 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1221 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2098,7 +2098,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 343:
-#line 1221 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1223 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("space", space);
@@ -2108,7 +2108,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 345:
-#line 1229 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1231 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2116,7 +2116,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 346:
-#line 1231 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1233 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("encapsulate", encap);
@@ -2126,7 +2126,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 347:
-#line 1237 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1239 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("array", array);
@@ -2135,7 +2135,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 348:
-#line 1246 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1248 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-data", l);
@@ -2146,7 +2146,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 349:
-#line 1251 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1253 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2155,7 +2155,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 354:
-#line 1270 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1272 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2165,7 +2165,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 355:
-#line 1274 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1276 "dhcp6_parser.yy" // lalr1.cc:859
     {
     /// @todo: the code or name parameters are required.
     ctx.stack_.pop_back();
@@ -2174,7 +2174,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 356:
-#line 1282 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1284 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the option-data list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2184,7 +2184,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 357:
-#line 1286 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1288 "dhcp6_parser.yy" // lalr1.cc:859
     {
     /// @todo: the code or name parameters are required.
     // parsing completed
@@ -2193,7 +2193,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 372:
-#line 1319 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1321 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2201,7 +2201,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 373:
-#line 1321 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1323 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("data", data);
@@ -2211,7 +2211,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 376:
-#line 1331 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1333 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("csv-format", space);
@@ -2220,7 +2220,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 377:
-#line 1336 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1338 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr persist(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-send", persist);
@@ -2229,7 +2229,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 378:
-#line 1344 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1346 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pools", l);
@@ -2240,7 +2240,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 379:
-#line 1349 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1351 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2249,7 +2249,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 384:
-#line 1364 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1366 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2259,7 +2259,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 385:
-#line 1368 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1370 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2269,7 +2269,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 386:
-#line 1374 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1376 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2279,7 +2279,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 387:
-#line 1378 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1380 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2288,7 +2288,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 397:
-#line 1396 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1398 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2296,7 +2296,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 398:
-#line 1398 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1400 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pool", pool);
@@ -2306,7 +2306,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 399:
-#line 1404 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1406 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2314,7 +2314,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 400:
-#line 1406 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1408 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context = yystack_[0].value.as< ElementPtr > ();
@@ -2341,7 +2341,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 401:
-#line 1429 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1431 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2349,7 +2349,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 402:
-#line 1431 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1433 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
@@ -2378,7 +2378,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 403:
-#line 1459 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1461 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pd-pools", l);
@@ -2389,7 +2389,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 404:
-#line 1464 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1466 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2398,7 +2398,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 409:
-#line 1479 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1481 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2408,7 +2408,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 410:
-#line 1483 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1485 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The prefix, prefix len and delegated len parameters are required.
     ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2420,7 +2420,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 411:
-#line 1491 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1493 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the pd-pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2430,7 +2430,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 412:
-#line 1495 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1497 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The prefix, prefix len and delegated len parameters are required.
     ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2442,7 +2442,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 426:
-#line 1520 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1522 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2450,7 +2450,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 427:
-#line 1522 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1524 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefix", prf);
@@ -2460,7 +2460,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 428:
-#line 1528 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1530 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefix-len", prf);
@@ -2469,7 +2469,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 429:
-#line 1533 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1535 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2477,7 +2477,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 430:
-#line 1535 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1537 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("excluded-prefix", prf);
@@ -2487,7 +2487,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 431:
-#line 1541 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1543 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("excluded-prefix-len", prf);
@@ -2496,7 +2496,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 432:
-#line 1546 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1548 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr deleg(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("delegated-len", deleg);
@@ -2505,7 +2505,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 433:
-#line 1554 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1556 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations", l);
@@ -2516,7 +2516,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 434:
-#line 1559 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1561 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2525,7 +2525,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 439:
-#line 1572 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1574 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2535,7 +2535,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 440:
-#line 1576 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1578 "dhcp6_parser.yy" // lalr1.cc:859
     {
     /// @todo: an identifier parameter is required.
     ctx.stack_.pop_back();
@@ -2544,7 +2544,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 441:
-#line 1581 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1583 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2554,7 +2554,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 442:
-#line 1585 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1587 "dhcp6_parser.yy" // lalr1.cc:859
     {
     /// @todo: an identifier parameter is required.
     // parsing completed
@@ -2563,7 +2563,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 458:
-#line 1612 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1614 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-addresses", l);
@@ -2574,7 +2574,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 459:
-#line 1617 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1619 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2583,7 +2583,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 460:
-#line 1622 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1624 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefixes", l);
@@ -2594,7 +2594,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 461:
-#line 1627 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1629 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2603,7 +2603,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 462:
-#line 1632 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1634 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2611,7 +2611,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 463:
-#line 1634 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1636 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("duid", d);
@@ -2621,7 +2621,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 464:
-#line 1640 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1642 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2629,7 +2629,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 465:
-#line 1642 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1644 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hw-address", hw);
@@ -2639,7 +2639,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 466:
-#line 1648 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1650 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2647,7 +2647,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 467:
-#line 1650 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1652 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname", host);
@@ -2657,7 +2657,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 468:
-#line 1656 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1658 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2665,7 +2665,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 469:
-#line 1658 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1660 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flex-id", hw);
@@ -2675,7 +2675,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 470:
-#line 1664 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1666 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", c);
@@ -2686,7 +2686,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 471:
-#line 1669 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1671 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2695,7 +2695,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 472:
-#line 1677 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1679 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("relay", m);
@@ -2706,7 +2706,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 473:
-#line 1682 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1684 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2715,7 +2715,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 476:
-#line 1691 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1693 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2723,7 +2723,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 477:
-#line 1693 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1695 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr addr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", addr);
@@ -2733,7 +2733,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 478:
-#line 1702 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1704 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", l);
@@ -2744,7 +2744,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 479:
-#line 1707 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1709 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2753,7 +2753,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 482:
-#line 1716 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1718 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2763,7 +2763,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 483:
-#line 1720 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1722 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The name client class parameter is required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2773,7 +2773,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 496:
-#line 1745 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1747 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2781,7 +2781,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 497:
-#line 1747 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1749 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("test", test);
@@ -2791,7 +2791,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 498:
-#line 1753 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1755 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("only-if-required", b);
@@ -2800,7 +2800,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 499:
-#line 1761 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1763 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-id", m);
@@ -2811,7 +2811,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 500:
-#line 1766 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1768 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The type parameter is required.
     ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
@@ -2822,7 +2822,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 512:
-#line 1788 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1790 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.DUID_TYPE);
 }
@@ -2830,7 +2830,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 513:
-#line 1790 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1792 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -2839,25 +2839,25 @@ namespace isc { namespace dhcp {
     break;
 
   case 514:
-#line 1795 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1797 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); }
 #line 2845 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 515:
-#line 1796 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1798 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); }
 #line 2851 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 516:
-#line 1797 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1799 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); }
 #line 2857 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 517:
-#line 1800 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1802 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr htype(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("htype", htype);
@@ -2866,7 +2866,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 518:
-#line 1805 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1807 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2874,7 +2874,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 519:
-#line 1807 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1809 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr id(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("identifier", id);
@@ -2884,7 +2884,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 520:
-#line 1813 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1815 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("time", time);
@@ -2893,7 +2893,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 521:
-#line 1818 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1820 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enterprise-id", time);
@@ -2902,7 +2902,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 522:
-#line 1825 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1827 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp4o6-port", time);
@@ -2911,7 +2911,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 523:
-#line 1832 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1834 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("control-socket", m);
@@ -2922,7 +2922,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 524:
-#line 1837 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1839 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2931,7 +2931,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 532:
-#line 1853 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1855 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2939,7 +2939,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 533:
-#line 1855 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1857 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr stype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-type", stype);
@@ -2949,7 +2949,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 534:
-#line 1861 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1863 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2957,7 +2957,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 535:
-#line 1863 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1865 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-name", name);
@@ -2967,7 +2967,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 536:
-#line 1871 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1873 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp-ddns", m);
@@ -2978,7 +2978,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 537:
-#line 1876 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1878 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The enable updates DHCP DDNS parameter is required.
     ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
@@ -2989,7 +2989,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 538:
-#line 1883 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1885 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the dhcp-ddns map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2999,7 +2999,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 539:
-#line 1887 "dhcp6_parser.yy" // lalr1.cc:859
+#line 1889 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The enable updates DHCP DDNS parameter is required.
     ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -3008,8 +3008,8 @@ namespace isc { namespace dhcp {
 #line 3009 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 559:
-#line 1916 "dhcp6_parser.yy" // lalr1.cc:859
+  case 561:
+#line 1920 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-updates", b);
@@ -3017,16 +3017,16 @@ namespace isc { namespace dhcp {
 #line 3018 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 560:
-#line 1921 "dhcp6_parser.yy" // lalr1.cc:859
+  case 562:
+#line 1925 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 3026 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 561:
-#line 1923 "dhcp6_parser.yy" // lalr1.cc:859
+  case 563:
+#line 1927 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("qualifying-suffix", s);
@@ -3035,16 +3035,16 @@ namespace isc { namespace dhcp {
 #line 3036 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 562:
-#line 1929 "dhcp6_parser.yy" // lalr1.cc:859
+  case 564:
+#line 1933 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 3044 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 563:
-#line 1931 "dhcp6_parser.yy" // lalr1.cc:859
+  case 565:
+#line 1935 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-ip", s);
@@ -3053,8 +3053,8 @@ namespace isc { namespace dhcp {
 #line 3054 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 564:
-#line 1937 "dhcp6_parser.yy" // lalr1.cc:859
+  case 566:
+#line 1941 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-port", i);
@@ -3062,16 +3062,16 @@ namespace isc { namespace dhcp {
 #line 3063 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 565:
-#line 1942 "dhcp6_parser.yy" // lalr1.cc:859
+  case 567:
+#line 1946 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 3071 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 566:
-#line 1944 "dhcp6_parser.yy" // lalr1.cc:859
+  case 568:
+#line 1948 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-ip", s);
@@ -3080,8 +3080,8 @@ namespace isc { namespace dhcp {
 #line 3081 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 567:
-#line 1950 "dhcp6_parser.yy" // lalr1.cc:859
+  case 569:
+#line 1954 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-port", i);
@@ -3089,8 +3089,8 @@ namespace isc { namespace dhcp {
 #line 3090 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 568:
-#line 1955 "dhcp6_parser.yy" // lalr1.cc:859
+  case 570:
+#line 1959 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-queue-size", i);
@@ -3098,16 +3098,16 @@ namespace isc { namespace dhcp {
 #line 3099 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 569:
-#line 1960 "dhcp6_parser.yy" // lalr1.cc:859
+  case 571:
+#line 1964 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_PROTOCOL);
 }
 #line 3107 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 570:
-#line 1962 "dhcp6_parser.yy" // lalr1.cc:859
+  case 572:
+#line 1966 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -3115,28 +3115,28 @@ namespace isc { namespace dhcp {
 #line 3116 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 571:
-#line 1968 "dhcp6_parser.yy" // lalr1.cc:859
+  case 573:
+#line 1972 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
 #line 3122 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 572:
-#line 1969 "dhcp6_parser.yy" // lalr1.cc:859
+  case 574:
+#line 1973 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
 #line 3128 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 573:
-#line 1972 "dhcp6_parser.yy" // lalr1.cc:859
+  case 575:
+#line 1976 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_FORMAT);
 }
 #line 3136 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 574:
-#line 1974 "dhcp6_parser.yy" // lalr1.cc:859
+  case 576:
+#line 1978 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ncr-format", json);
@@ -3145,8 +3145,8 @@ namespace isc { namespace dhcp {
 #line 3146 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 575:
-#line 1980 "dhcp6_parser.yy" // lalr1.cc:859
+  case 577:
+#line 1984 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-include-fqdn", b);
@@ -3154,8 +3154,8 @@ namespace isc { namespace dhcp {
 #line 3155 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 576:
-#line 1985 "dhcp6_parser.yy" // lalr1.cc:859
+  case 578:
+#line 1989 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-no-update", b);
@@ -3163,8 +3163,8 @@ namespace isc { namespace dhcp {
 #line 3164 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 577:
-#line 1990 "dhcp6_parser.yy" // lalr1.cc:859
+  case 579:
+#line 1994 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-client-update", b);
@@ -3172,16 +3172,16 @@ namespace isc { namespace dhcp {
 #line 3173 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 578:
-#line 1995 "dhcp6_parser.yy" // lalr1.cc:859
+  case 580:
+#line 1999 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
 }
 #line 3181 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 579:
-#line 1997 "dhcp6_parser.yy" // lalr1.cc:859
+  case 581:
+#line 2001 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -3189,40 +3189,40 @@ namespace isc { namespace dhcp {
 #line 3190 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 580:
-#line 2003 "dhcp6_parser.yy" // lalr1.cc:859
+  case 582:
+#line 2007 "dhcp6_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location)));
       }
 #line 3198 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 581:
-#line 2006 "dhcp6_parser.yy" // lalr1.cc:859
+  case 583:
+#line 2010 "dhcp6_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
       }
 #line 3206 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 582:
-#line 2009 "dhcp6_parser.yy" // lalr1.cc:859
+  case 584:
+#line 2013 "dhcp6_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
       }
 #line 3214 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 583:
-#line 2012 "dhcp6_parser.yy" // lalr1.cc:859
+  case 585:
+#line 2016 "dhcp6_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
       }
 #line 3222 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 584:
-#line 2015 "dhcp6_parser.yy" // lalr1.cc:859
+  case 586:
+#line 2019 "dhcp6_parser.yy" // lalr1.cc:859
     {
       error(yystack_[0].location, "boolean values for the replace-client-name are "
                 "no longer supported");
@@ -3230,16 +3230,16 @@ namespace isc { namespace dhcp {
 #line 3231 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 585:
-#line 2021 "dhcp6_parser.yy" // lalr1.cc:859
+  case 587:
+#line 2025 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 3239 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 586:
-#line 2023 "dhcp6_parser.yy" // lalr1.cc:859
+  case 588:
+#line 2027 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("generated-prefix", s);
@@ -3248,245 +3248,281 @@ namespace isc { namespace dhcp {
 #line 3249 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 587:
-#line 2031 "dhcp6_parser.yy" // lalr1.cc:859
+  case 589:
+#line 2033 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 3257 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 588:
-#line 2033 "dhcp6_parser.yy" // lalr1.cc:859
+  case 590:
+#line 2035 "dhcp6_parser.yy" // lalr1.cc:859
+    {
+    ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("hostname-char-set", s);
+    ctx.leave();
+}
+#line 3267 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 591:
+#line 2041 "dhcp6_parser.yy" // lalr1.cc:859
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 3275 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 592:
+#line 2043 "dhcp6_parser.yy" // lalr1.cc:859
+    {
+    ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("hostname-char-replacement", s);
+    ctx.leave();
+}
+#line 3285 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 593:
+#line 2051 "dhcp6_parser.yy" // lalr1.cc:859
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 3293 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 594:
+#line 2053 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3266 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3302 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 589:
-#line 2038 "dhcp6_parser.yy" // lalr1.cc:859
+  case 595:
+#line 2058 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3274 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3310 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 590:
-#line 2040 "dhcp6_parser.yy" // lalr1.cc:859
+  case 596:
+#line 2060 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3283 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3319 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 591:
-#line 2045 "dhcp6_parser.yy" // lalr1.cc:859
+  case 597:
+#line 2065 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3291 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3327 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 592:
-#line 2047 "dhcp6_parser.yy" // lalr1.cc:859
+  case 598:
+#line 2067 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3300 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3336 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 593:
-#line 2058 "dhcp6_parser.yy" // lalr1.cc:859
+  case 599:
+#line 2078 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("Logging", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.LOGGING);
 }
-#line 3311 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3347 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 594:
-#line 2063 "dhcp6_parser.yy" // lalr1.cc:859
+  case 600:
+#line 2083 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3320 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3356 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 595:
-#line 2068 "dhcp6_parser.yy" // lalr1.cc:859
+  case 601:
+#line 2088 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the Logging map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3330 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3366 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 596:
-#line 2072 "dhcp6_parser.yy" // lalr1.cc:859
+  case 602:
+#line 2092 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 3338 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3374 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 600:
-#line 2088 "dhcp6_parser.yy" // lalr1.cc:859
+  case 606:
+#line 2108 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("loggers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 3349 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3385 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 601:
-#line 2093 "dhcp6_parser.yy" // lalr1.cc:859
+  case 607:
+#line 2113 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3358 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3394 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 604:
-#line 2105 "dhcp6_parser.yy" // lalr1.cc:859
+  case 610:
+#line 2125 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 3368 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3404 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 605:
-#line 2109 "dhcp6_parser.yy" // lalr1.cc:859
+  case 611:
+#line 2129 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 3376 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3412 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 615:
-#line 2126 "dhcp6_parser.yy" // lalr1.cc:859
+  case 621:
+#line 2146 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 3385 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3421 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 616:
-#line 2131 "dhcp6_parser.yy" // lalr1.cc:859
+  case 622:
+#line 2151 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3393 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3429 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 617:
-#line 2133 "dhcp6_parser.yy" // lalr1.cc:859
+  case 623:
+#line 2153 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 3403 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3439 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 618:
-#line 2139 "dhcp6_parser.yy" // lalr1.cc:859
+  case 624:
+#line 2159 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output_options", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 3414 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3450 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 619:
-#line 2144 "dhcp6_parser.yy" // lalr1.cc:859
+  case 625:
+#line 2164 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3423 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3459 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 622:
-#line 2153 "dhcp6_parser.yy" // lalr1.cc:859
+  case 628:
+#line 2173 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3433 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3469 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 623:
-#line 2157 "dhcp6_parser.yy" // lalr1.cc:859
+  case 629:
+#line 2177 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 3441 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3477 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 630:
-#line 2171 "dhcp6_parser.yy" // lalr1.cc:859
+  case 636:
+#line 2191 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3449 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3485 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 631:
-#line 2173 "dhcp6_parser.yy" // lalr1.cc:859
+  case 637:
+#line 2193 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 3459 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3495 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 632:
-#line 2179 "dhcp6_parser.yy" // lalr1.cc:859
+  case 638:
+#line 2199 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush", flush);
 }
-#line 3468 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3504 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 633:
-#line 2184 "dhcp6_parser.yy" // lalr1.cc:859
+  case 639:
+#line 2204 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxsize", maxsize);
 }
-#line 3477 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3513 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 634:
-#line 2189 "dhcp6_parser.yy" // lalr1.cc:859
+  case 640:
+#line 2209 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxver", maxver);
 }
-#line 3486 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3522 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
 
-#line 3490 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3526 "dhcp6_parser.cc" // lalr1.cc:859
             default:
               break;
             }
@@ -3741,116 +3777,117 @@ namespace isc { namespace dhcp {
   }
 
 
-  const short int Dhcp6Parser::yypact_ninf_ = -783;
+  const short int Dhcp6Parser::yypact_ninf_ = -789;
 
   const signed char Dhcp6Parser::yytable_ninf_ = -1;
 
   const short int
   Dhcp6Parser::yypact_[] =
   {
-     435,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,    38,    41,    40,    58,    85,
-      92,   101,   107,   108,   116,   124,   128,   146,   152,   153,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,    41,  -112,
-      17,    63,    27,   214,    67,   227,   403,   144,    65,   186,
-     -41,   454,    35,  -783,   175,   197,   217,   215,   240,  -783,
-    -783,  -783,  -783,  -783,   255,  -783,    33,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,   259,   269,   270,
-     287,   309,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,   310,  -783,  -783,  -783,    68,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,   321,  -783,   138,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-     323,   327,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,   139,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,   147,  -783,  -783,  -783,  -783,  -783,
-     333,  -783,   353,   354,  -783,  -783,  -783,  -783,  -783,  -783,
-     148,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,   236,   262,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,   290,  -783,
-    -783,   365,  -783,  -783,  -783,   367,  -783,  -783,   344,   326,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,   369,   373,  -783,  -783,  -783,  -783,   370,
-     377,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,   219,  -783,  -783,  -783,   378,  -783,  -783,
-     379,  -783,   381,   385,  -783,  -783,   388,   397,   399,  -783,
-    -783,  -783,  -783,  -783,   222,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,   238,  -783,  -783,  -783,    41,    41,  -783,   229,   402,
-     404,   405,   406,   407,  -783,    17,  -783,   409,   411,   412,
-     414,   245,   258,   265,   267,   271,   417,   428,   430,   431,
-     432,   433,   436,   437,   438,   439,   440,   441,   442,   277,
-     446,   449,    63,  -783,   452,   299,    27,  -783,   453,   455,
-     464,   465,   466,   296,   312,   467,   468,   469,   470,   473,
-     214,  -783,   474,    67,  -783,   477,   320,   479,   330,   331,
-     227,  -783,   481,   490,   491,   492,   493,   494,   495,  -783,
-     403,  -783,   496,   500,   343,   502,   503,   504,   347,  -783,
-      65,   505,   349,   350,  -783,   186,   508,   511,   -37,  -783,
-     355,   514,   516,   359,   518,   361,   362,   521,   522,   366,
-     368,   372,   527,   529,   454,  -783,   530,    35,  -783,  -783,
-    -783,   533,   531,   532,    41,    41,    41,  -783,   534,   535,
-     536,   539,  -783,  -783,  -783,  -783,  -783,   540,   541,   544,
-     543,   390,   547,   548,   550,   551,   552,   553,   554,   555,
-    -783,   556,   589,  -783,   592,  -783,  -783,   593,   594,   398,
-     443,   444,  -783,  -783,   293,   592,   445,   595,   596,  -783,
-     447,  -783,   448,  -783,   450,  -783,  -783,  -783,   592,   592,
-     592,   451,   456,   457,   458,  -783,   459,   460,  -783,   461,
-     462,   463,  -783,  -783,   471,  -783,  -783,  -783,   472,    41,
-    -783,  -783,   475,   476,  -783,   478,  -783,  -783,   -45,   410,
-    -783,  -783,  -783,   -73,   480,  -783,   597,  -783,    41,    63,
-      35,  -783,  -783,  -783,    27,   184,   184,   600,   603,   606,
-     607,  -783,  -783,  -783,   609,   -52,    41,    89,   618,   619,
-      70,   132,    32,   454,  -783,  -783,   620,   621,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,   622,   -26,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,   623,  -783,   239,   252,   253,  -783,  -783,  -783,  -783,
-     627,   630,   631,   634,   636,  -783,   638,   639,  -783,   640,
-     641,   642,  -783,   254,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,   261,  -783,   643,   557,  -783,  -783,   644,   598,
-    -783,  -783,   645,   649,  -783,  -783,   647,   651,  -783,  -783,
-     650,   652,  -783,  -783,  -783,    90,  -783,  -783,  -783,   653,
-    -783,  -783,  -783,   118,  -783,  -783,  -783,  -783,   294,  -783,
-    -783,   654,   655,  -783,   657,   658,   659,   660,   661,   662,
-     264,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-     663,   664,   665,  -783,  -783,  -783,  -783,   291,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,   301,
-    -783,  -783,  -783,   304,   486,  -783,   666,   667,  -783,  -783,
-     668,   670,  -783,  -783,   669,   673,  -783,  -783,  -783,   671,
-    -783,  -783,   348,  -783,  -783,  -783,  -783,   674,   676,   677,
-     678,   509,   484,   515,   519,   523,   680,   524,   525,   684,
-     528,   537,   538,   184,  -783,  -783,   184,  -783,   600,   214,
-    -783,   603,    65,  -783,   606,   186,  -783,   607,   386,  -783,
-     609,   -52,  -783,  -783,    89,  -783,    18,   618,  -783,   -41,
-    -783,   619,   542,   545,   546,   549,   558,   559,    70,  -783,
-     685,   687,   562,   564,   565,   132,  -783,   688,   689,    32,
-    -783,  -783,  -783,   690,   691,    67,  -783,   620,   227,  -783,
-     621,   403,  -783,   622,   693,  -783,   256,   623,  -783,   178,
-     568,   570,   577,  -783,  -783,  -783,  -783,  -783,   579,  -783,
-    -783,   580,  -783,  -783,  -783,  -783,   307,  -783,   308,  -783,
-     692,  -783,   695,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,   314,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,   694,  -783,  -783,
-    -783,  -783,  -783,   697,   698,  -783,  -783,  -783,  -783,  -783,
-     318,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,   295,
-     585,  -783,  -783,  -783,  -783,   586,   588,  -783,  -783,   591,
-     325,  -783,   335,  -783,   701,  -783,   599,  -783,   702,  -783,
-    -783,  -783,  -783,  -783,   336,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,   386,  -783,   706,   605,  -783,    18,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,   708,   601,   709,   256,  -783,  -783,   612,
-    -783,  -783,   710,  -783,   613,  -783,  -783,   707,  -783,  -783,
-     356,  -783,    42,   707,  -783,  -783,   712,   713,   714,   345,
-    -783,  -783,  -783,  -783,  -783,  -783,   746,   611,   608,   616,
-      42,  -783,   626,  -783,  -783,  -783,  -783,  -783
+     344,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,    35,    33,    34,    54,    82,
+      95,   102,   140,   142,   148,   161,   168,   170,   181,   194,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,    33,    32,
+      19,    41,    37,   220,   188,    63,    75,   160,    43,   268,
+      -6,   355,    99,  -789,   239,   243,   250,   267,   275,  -789,
+    -789,  -789,  -789,  -789,   277,  -789,    40,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,   315,   325,   331,
+     339,   345,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,   346,  -789,  -789,  -789,    89,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,   349,  -789,    90,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+     352,   356,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,   145,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,   166,  -789,  -789,  -789,  -789,  -789,
+     357,  -789,   362,   369,  -789,  -789,  -789,  -789,  -789,  -789,
+     173,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,   303,   319,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,   363,  -789,
+    -789,   370,  -789,  -789,  -789,   380,  -789,  -789,   378,   330,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,   388,   394,  -789,  -789,  -789,  -789,   391,
+     416,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,   175,  -789,  -789,  -789,   417,  -789,  -789,
+     418,  -789,   419,   420,  -789,  -789,   422,   423,   424,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,   184,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,   225,  -789,  -789,  -789,    33,
+      33,  -789,   271,   433,   434,   435,   436,   437,  -789,    19,
+    -789,   438,   439,   440,   443,   285,   286,   287,   288,   289,
+     450,   451,   453,   454,   455,   456,   457,   458,   459,   460,
+     461,   479,   480,   321,   482,   484,    41,  -789,   485,   341,
+      37,  -789,   504,   508,   509,   510,   511,   353,   350,   515,
+     517,   518,   519,   520,   220,  -789,   521,   188,  -789,   522,
+     364,   523,   365,   368,    63,  -789,   527,   529,   530,   531,
+     532,   536,   538,  -789,    75,  -789,   539,   540,   381,   542,
+     543,   544,   383,  -789,    43,   546,   385,   386,  -789,   268,
+     549,   550,    47,  -789,   389,   552,   553,   396,   555,   397,
+     399,   560,   561,   400,   401,   402,   565,   566,   567,   568,
+     355,  -789,   569,    99,  -789,  -789,  -789,   570,   571,   572,
+      33,    33,    33,  -789,   573,   574,   575,   578,  -789,  -789,
+    -789,  -789,  -789,   579,   580,   581,   582,   425,   585,   586,
+     587,   588,   589,   590,   591,   592,  -789,   593,   594,  -789,
+     597,  -789,  -789,   598,   599,   442,   444,   445,  -789,  -789,
+     307,   597,   446,   601,   603,  -789,   448,  -789,   449,  -789,
+     452,  -789,  -789,  -789,   597,   597,   597,   462,   463,   464,
+     465,  -789,   466,   467,  -789,   468,   469,   470,  -789,  -789,
+     471,  -789,  -789,  -789,   472,    33,  -789,  -789,   473,   474,
+    -789,   475,  -789,  -789,    56,   483,  -789,  -789,  -789,    39,
+     476,   477,   478,  -789,   609,  -789,    33,    41,    99,  -789,
+    -789,  -789,    37,   185,   185,   610,   611,   612,   613,  -789,
+    -789,  -789,   614,   -32,    33,   309,   615,   616,   197,   117,
+       1,   355,  -789,  -789,   617,   635,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,   636,    18,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,   637,  -789,   236,   244,   245,  -789,  -789,  -789,  -789,
+     583,   641,   642,   643,   644,  -789,   645,   646,  -789,   647,
+     648,   649,  -789,   253,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,   259,  -789,   650,   651,  -789,  -789,   652,   654,
+    -789,  -789,   653,   657,  -789,  -789,   655,   659,  -789,  -789,
+     658,   660,  -789,  -789,  -789,    48,  -789,  -789,  -789,   661,
+    -789,  -789,  -789,    59,  -789,  -789,  -789,  -789,    70,  -789,
+    -789,   662,   663,  -789,   665,   666,   667,   668,   669,   670,
+     260,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+     671,   672,   673,  -789,  -789,  -789,  -789,   262,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,   269,
+    -789,  -789,  -789,   296,   492,  -789,   674,   675,  -789,  -789,
+     676,   678,  -789,  -789,   677,   681,  -789,  -789,  -789,   608,
+    -789,  -789,   124,  -789,  -789,  -789,  -789,   682,   683,   684,
+     685,   432,   431,   501,   513,   526,   687,   528,   533,   689,
+     534,   535,   537,   185,  -789,  -789,   185,  -789,   610,   220,
+    -789,   611,    43,  -789,   612,   268,  -789,   613,   367,  -789,
+     614,   -32,  -789,  -789,   309,  -789,    66,   615,  -789,    -6,
+    -789,   616,   541,   545,   547,   548,   551,   554,   197,  -789,
+     690,   691,   556,   557,   558,   117,  -789,   692,   696,     1,
+    -789,  -789,  -789,   679,   698,   188,  -789,   617,    63,  -789,
+     635,    75,  -789,   636,   700,  -789,   228,   637,  -789,   395,
+     562,   563,   564,  -789,  -789,  -789,  -789,  -789,   595,  -789,
+    -789,   596,  -789,  -789,  -789,  -789,   297,  -789,   300,  -789,
+     694,  -789,   699,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,   304,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,   702,  -789,  -789,
+    -789,  -789,  -789,   705,   707,  -789,  -789,  -789,  -789,  -789,
+     317,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,   299,
+     604,  -789,  -789,  -789,  -789,   605,   619,  -789,  -789,   620,
+     318,  -789,   320,  -789,   706,  -789,   621,  -789,   704,  -789,
+    -789,  -789,  -789,  -789,   329,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,   367,  -789,   712,   577,  -789,    66,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,   713,   559,   715,   228,  -789,  -789,   622,
+    -789,  -789,   719,  -789,   625,  -789,  -789,   721,  -789,  -789,
+     130,  -789,    91,   721,  -789,  -789,   726,   727,   730,   333,
+    -789,  -789,  -789,  -789,  -789,  -789,   733,   606,   584,   600,
+      91,  -789,   626,  -789,  -789,  -789,  -789,  -789
   };
 
   const unsigned short int
@@ -3862,10 +3899,10 @@ namespace isc { namespace dhcp {
        1,    45,    38,    34,    33,    30,    31,    32,    37,     3,
       35,    36,    58,     5,    70,     7,   107,     9,   241,    11,
      386,    13,   411,    15,   441,    17,   311,    19,   319,    21,
-     356,    23,   206,    25,   538,    27,   595,    29,    47,    41,
+     356,    23,   206,    25,   538,    27,   601,    29,    47,    41,
        0,     0,     0,     0,     0,     0,   443,     0,   321,   358,
        0,     0,     0,    49,     0,    48,     0,     0,    42,    68,
-     593,   587,   589,   591,     0,    67,     0,    60,    62,    64,
+     599,   593,   595,   597,     0,    67,     0,    60,    62,    64,
       65,    66,    63,   105,   119,   121,   123,     0,     0,     0,
        0,     0,   233,   309,   348,   399,   401,   282,   179,   196,
      187,   478,   198,   217,   499,     0,   523,   536,    99,     0,
@@ -3885,40 +3922,41 @@ namespace isc { namespace dhcp {
      323,   325,   337,   326,   327,   328,   344,   329,   330,   331,
      332,   333,   372,     0,     0,   370,   371,   374,   375,     0,
      359,   360,   362,   363,   364,   365,   366,   367,   368,   369,
-     213,   215,   210,     0,   208,   211,   212,     0,   560,   562,
-       0,   565,     0,     0,   569,   573,     0,     0,     0,   578,
-     585,   558,   556,   557,     0,   540,   542,   543,   544,   545,
-     546,   547,   548,   549,   550,   551,   552,   553,   554,   555,
-     600,     0,   597,   599,    46,     0,     0,    39,     0,     0,
-       0,     0,     0,     0,    57,     0,    59,     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,    71,     0,     0,     0,   108,     0,     0,
+     213,   215,   210,     0,   208,   211,   212,     0,   562,   564,
+       0,   567,     0,     0,   571,   575,     0,     0,     0,   580,
+     587,   589,   591,   560,   558,   559,     0,   540,   542,   543,
+     544,   545,   546,   547,   548,   549,   550,   551,   552,   553,
+     554,   555,   556,   557,   606,     0,   603,   605,    46,     0,
+       0,    39,     0,     0,     0,     0,     0,     0,    57,     0,
+      59,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   242,     0,     0,   387,     0,     0,     0,     0,     0,
-       0,   412,     0,     0,     0,     0,     0,     0,     0,   442,
-       0,   312,     0,     0,     0,     0,     0,     0,     0,   320,
-       0,     0,     0,     0,   357,     0,     0,     0,     0,   207,
+       0,     0,     0,     0,     0,     0,     0,    71,     0,     0,
+       0,   108,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   242,     0,     0,   387,     0,
+       0,     0,     0,     0,     0,   412,     0,     0,     0,     0,
+       0,     0,     0,   442,     0,   312,     0,     0,     0,     0,
+       0,     0,     0,   320,     0,     0,     0,     0,   357,     0,
+       0,     0,     0,   207,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   539,     0,     0,   596,    50,
-      43,     0,     0,     0,     0,     0,     0,    61,     0,     0,
-       0,     0,   100,   101,   102,   103,   104,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     522,     0,     0,    73,     0,   118,   110,     0,     0,     0,
-       0,     0,   280,   281,     0,     0,     0,     0,     0,   244,
-       0,   389,     0,   428,     0,   431,   432,   414,     0,     0,
-       0,     0,     0,     0,     0,   446,     0,     0,   336,     0,
-       0,     0,   347,   324,     0,   376,   377,   361,     0,     0,
-     209,   559,     0,     0,   564,     0,   567,   568,     0,     0,
-     575,   576,   577,     0,     0,   541,     0,   598,     0,     0,
-       0,   588,   590,   592,     0,     0,     0,   125,   235,   313,
-     350,    40,   400,   402,   284,     0,    47,     0,     0,   200,
-       0,     0,     0,     0,    51,   117,   380,   405,   266,   268,
-     270,   277,   278,   279,   276,   274,   272,   435,     0,   398,
-     427,   430,   471,   459,   461,   463,   465,   467,   469,   339,
-     165,   343,   341,   346,   373,   214,   216,   561,   563,   566,
-     571,   572,   570,   574,   580,   581,   582,   583,   584,   579,
-     586,     0,    44,     0,     0,     0,   151,   157,   159,   161,
+       0,   539,     0,     0,   602,    50,    43,     0,     0,     0,
+       0,     0,     0,    61,     0,     0,     0,     0,   100,   101,
+     102,   103,   104,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   522,     0,     0,    73,
+       0,   118,   110,     0,     0,     0,     0,     0,   280,   281,
+       0,     0,     0,     0,     0,   244,     0,   389,     0,   428,
+       0,   431,   432,   414,     0,     0,     0,     0,     0,     0,
+       0,   446,     0,     0,   336,     0,     0,     0,   347,   324,
+       0,   376,   377,   361,     0,     0,   209,   561,     0,     0,
+     566,     0,   569,   570,     0,     0,   577,   578,   579,     0,
+       0,     0,     0,   541,     0,   604,     0,     0,     0,   594,
+     596,   598,     0,     0,     0,   125,   235,   313,   350,    40,
+     400,   402,   284,     0,    47,     0,     0,   200,     0,     0,
+       0,     0,    51,   117,   380,   405,   266,   268,   270,   277,
+     278,   279,   276,   274,   272,   435,     0,   398,   427,   430,
+     471,   459,   461,   463,   465,   467,   469,   339,   165,   343,
+     341,   346,   373,   214,   216,   563,   565,   568,   573,   574,
+     572,   576,   582,   583,   584,   585,   586,   581,   588,   590,
+     592,     0,    44,     0,     0,     0,   151,   157,   159,   161,
        0,     0,     0,     0,     0,   174,     0,     0,   177,     0,
        0,     0,   150,     0,   131,   133,   134,   135,   136,   137,
      138,   139,   140,   141,   142,   145,   146,   147,   148,   143,
@@ -3932,7 +3970,7 @@ namespace isc { namespace dhcp {
      506,   504,   505,   507,   532,   534,   531,   529,   530,     0,
      525,   527,   528,     0,    53,   384,     0,   381,   382,   409,
        0,   406,   407,   439,     0,   436,   437,   476,   475,     0,
-     474,   604,     0,   602,    69,   594,   106,     0,     0,     0,
+     474,   610,     0,   608,    69,   600,   106,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,   120,   122,     0,   124,     0,     0,
      234,     0,   321,   310,     0,   358,   349,     0,     0,   283,
@@ -3940,7 +3978,7 @@ namespace isc { namespace dhcp {
      199,     0,     0,     0,     0,     0,     0,     0,     0,   218,
        0,     0,     0,     0,     0,     0,   500,     0,     0,     0,
      524,   537,    55,     0,    54,     0,   379,     0,     0,   404,
-       0,   443,   434,     0,     0,   473,     0,     0,   601,     0,
+       0,   443,   434,     0,     0,   473,     0,     0,   607,     0,
        0,     0,     0,   163,   166,   167,   168,   169,     0,   176,
      170,     0,   171,   172,   173,   132,     0,   128,     0,   238,
        0,   316,     0,   353,   308,   303,   305,   296,   297,   292,
@@ -3949,58 +3987,59 @@ namespace isc { namespace dhcp {
      491,   492,   493,     0,   485,   486,   488,   489,   490,   481,
        0,   203,   227,   228,   229,   230,   231,   232,   220,     0,
        0,   517,   520,   521,   502,     0,     0,   526,    52,     0,
-       0,   383,     0,   408,     0,   438,     0,   618,     0,   616,
-     614,   608,   612,   613,     0,   606,   610,   611,   609,   603,
+       0,   383,     0,   408,     0,   438,     0,   624,     0,   622,
+     620,   614,   618,   619,     0,   612,   616,   617,   615,   609,
      153,   154,   155,   156,   152,   158,   160,   162,   175,   178,
      130,   240,   318,   355,     0,   289,     0,     0,   483,     0,
      205,   514,   515,   516,   513,   519,   533,   535,    56,   385,
-     410,   440,   477,     0,     0,     0,     0,   605,   291,     0,
-     498,   487,     0,   615,     0,   607,   497,     0,   617,   622,
-       0,   620,     0,     0,   619,   630,     0,     0,     0,     0,
-     624,   626,   627,   628,   629,   621,     0,     0,     0,     0,
-       0,   623,     0,   632,   633,   634,   625,   631
+     410,   440,   477,     0,     0,     0,     0,   611,   291,     0,
+     498,   487,     0,   621,     0,   613,   497,     0,   623,   628,
+       0,   626,     0,     0,   625,   636,     0,     0,     0,     0,
+     630,   632,   633,   634,   635,   627,     0,     0,     0,     0,
+       0,   629,     0,   638,   639,   640,   631,   637
   };
 
   const short int
   Dhcp6Parser::yypgoto_[] =
   {
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,     6,  -783,   187,  -783,
-    -783,  -783,  -783,  -783,  -783,   129,  -783,  -376,  -783,  -783,
-    -783,   -70,  -783,  -783,  -783,   408,  -783,  -783,  -783,  -783,
-     207,   395,   -66,   -56,   -55,   -54,  -783,  -783,  -783,  -783,
-    -783,   203,   419,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,    -9,  -783,  -541,    -3,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,   -34,  -783,
-    -559,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,   -19,  -554,  -783,  -783,
-    -783,  -783,   -20,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,   -23,  -783,  -783,  -783,   -16,   371,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,   -28,  -783,  -783,  -783,  -783,  -783,
-    -783,  -782,  -783,  -783,  -783,     5,  -783,  -783,  -783,     9,
-     415,  -783,  -783,  -778,  -783,  -775,  -783,   -32,  -783,   -21,
-    -783,  -774,  -783,  -783,  -783,  -773,  -783,  -783,  -783,  -783,
-       4,  -783,  -783,  -157,   731,  -783,  -783,  -783,  -783,  -783,
-      15,  -783,  -783,  -783,    19,  -783,   393,  -783,   -65,  -783,
-    -783,  -783,  -783,  -783,   -58,  -783,  -783,  -783,  -783,  -783,
-      12,  -783,  -783,  -783,    23,  -783,  -783,  -783,    20,  -783,
-     391,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,   -15,  -783,  -783,  -783,   -14,   434,  -783,  -783,
-     -44,  -783,    -6,  -783,  -783,  -783,  -783,  -783,   -12,  -783,
-    -783,  -783,   -13,   424,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,   -17,  -783,  -783,  -783,   -11,
-    -783,   421,   246,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,  -772,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,    26,  -783,  -783,  -783,  -133,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,    13,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,     8,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,   266,   400,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,  -783,
-    -783,  -783,  -783,   292,   394,  -783,  -783,  -783,    -4,  -783,
-    -783,  -141,  -783,  -783,  -783,  -783,  -783,  -783,  -155,  -783,
-    -783,  -174,  -783,  -783,  -783,  -783,  -783
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,     6,  -789,   265,  -789,
+    -789,  -789,  -789,  -789,  -789,   177,  -789,  -274,  -789,  -789,
+    -789,   -70,  -789,  -789,  -789,   406,  -789,  -789,  -789,  -789,
+     205,   404,   -55,   -54,   -52,   -47,  -789,  -789,  -789,  -789,
+    -789,   209,   393,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,   -22,  -789,  -547,    -2,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,   -66,  -789,
+    -564,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,   -34,  -559,  -789,  -789,
+    -789,  -789,   -20,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,   -25,  -789,  -789,  -789,   -17,   373,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,   -21,  -789,  -789,  -789,  -789,  -789,
+    -789,  -788,  -789,  -789,  -789,     7,  -789,  -789,  -789,     0,
+     421,  -789,  -789,  -785,  -789,  -784,  -789,   -16,  -789,    -8,
+    -789,  -783,  -789,  -789,  -789,  -781,  -789,  -789,  -789,  -789,
+       3,  -789,  -789,  -164,   734,  -789,  -789,  -789,  -789,  -789,
+      13,  -789,  -789,  -789,    16,  -789,   403,  -789,   -72,  -789,
+    -789,  -789,  -789,  -789,   -65,  -789,  -789,  -789,  -789,  -789,
+     -29,  -789,  -789,  -789,    14,  -789,  -789,  -789,    15,  -789,
+     405,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,   -24,  -789,  -789,  -789,   -19,   427,  -789,  -789,
+     -42,  -789,    -4,  -789,  -789,  -789,  -789,  -789,   -14,  -789,
+    -789,  -789,   -23,   426,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,   -15,  -789,  -789,  -789,   -18,
+    -789,   414,   246,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,  -780,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,    22,  -789,  -789,  -789,  -136,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,    10,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,     9,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,   270,   407,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,  -789,
+    -789,  -789,  -789,  -789,  -789,  -789,  -789,   291,   408,  -789,
+    -789,  -789,   -11,  -789,  -789,  -146,  -789,  -789,  -789,  -789,
+    -789,  -789,  -160,  -789,  -789,  -176,  -789,  -789,  -789,  -789,
+    -789
   };
 
   const short int
@@ -4008,426 +4047,431 @@ namespace isc { namespace dhcp {
   {
       -1,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    83,    39,    40,    69,
-     562,    87,    88,    41,    68,    84,    85,   575,   744,   833,
-     834,   642,    43,    70,    96,    97,    98,   339,    45,    71,
-     129,   130,   131,   132,   133,   134,   135,   136,   347,    47,
-      72,   159,   160,   161,   374,   162,   137,   348,   138,   349,
-     139,   350,   664,   665,   666,   786,   643,   644,   645,   767,
-     954,   646,   768,   647,   769,   648,   770,   649,   650,   413,
-     651,   652,   653,   654,   655,   656,   657,   658,   659,   776,
-     660,   661,   779,   140,   362,   685,   686,   687,   688,   141,
-     364,   693,   694,   695,   696,   142,   363,   143,   366,   701,
-     702,   703,   809,    63,    80,   293,   294,   295,   426,   296,
-     427,   144,   367,   710,   711,   712,   713,   714,   715,   716,
-     717,   145,   356,   668,   669,   670,   789,    49,    73,   182,
-     183,   184,   380,   185,   381,   186,   382,   187,   387,   188,
-     386,   189,   385,   584,   190,   191,   146,   361,   680,   681,
-     682,   798,   887,   888,   147,   357,    57,    77,   672,   673,
-     674,   792,    59,    78,   258,   259,   260,   261,   262,   263,
-     264,   412,   265,   416,   266,   415,   267,   268,   417,   269,
-     148,   358,   676,   677,   678,   795,    61,    79,   279,   280,
-     281,   282,   283,   421,   284,   285,   286,   287,   193,   378,
-     746,   747,   748,   835,    51,    74,   204,   205,   206,   392,
-     149,   359,   150,   360,   196,   379,   750,   751,   752,   838,
-      53,    75,   220,   221,   222,   395,   223,   224,   397,   225,
-     226,   197,   388,   754,   755,   756,   841,    55,    76,   238,
-     239,   240,   241,   403,   242,   404,   243,   405,   244,   406,
-     245,   407,   246,   408,   247,   402,   198,   389,   759,   760,
-     844,   151,   365,   698,   699,   806,   903,   904,   905,   906,
-     907,   966,   908,   152,   368,   727,   728,   729,   820,   974,
-     730,   731,   821,   732,   733,   153,   154,   370,   739,   740,
-     741,   827,   742,   828,   155,   371,    65,    81,   314,   315,
-     316,   317,   431,   318,   432,   319,   320,   434,   321,   322,
-     323,   437,   612,   324,   438,   325,   326,   327,   328,   442,
-     619,   329,   443,    99,   341,   100,   342,   101,   343,   102,
-     340,    67,    82,   331,   332,   333,   446,   762,   763,   846,
-     944,   945,   946,   947,   985,   948,   983,  1000,  1001,  1002,
-    1009,  1010,  1011,  1016,  1012,  1013,  1014
+     570,    87,    88,    41,    68,    84,    85,   583,   754,   843,
+     844,   652,    43,    70,    96,    97,    98,   343,    45,    71,
+     129,   130,   131,   132,   133,   134,   135,   136,   351,    47,
+      72,   159,   160,   161,   378,   162,   137,   352,   138,   353,
+     139,   354,   674,   675,   676,   796,   653,   654,   655,   777,
+     964,   656,   778,   657,   779,   658,   780,   659,   660,   417,
+     661,   662,   663,   664,   665,   666,   667,   668,   669,   786,
+     670,   671,   789,   140,   366,   695,   696,   697,   698,   141,
+     368,   703,   704,   705,   706,   142,   367,   143,   370,   711,
+     712,   713,   819,    63,    80,   293,   294,   295,   430,   296,
+     431,   144,   371,   720,   721,   722,   723,   724,   725,   726,
+     727,   145,   360,   678,   679,   680,   799,    49,    73,   182,
+     183,   184,   384,   185,   385,   186,   386,   187,   391,   188,
+     390,   189,   389,   592,   190,   191,   146,   365,   690,   691,
+     692,   808,   897,   898,   147,   361,    57,    77,   682,   683,
+     684,   802,    59,    78,   258,   259,   260,   261,   262,   263,
+     264,   416,   265,   420,   266,   419,   267,   268,   421,   269,
+     148,   362,   686,   687,   688,   805,    61,    79,   279,   280,
+     281,   282,   283,   425,   284,   285,   286,   287,   193,   382,
+     756,   757,   758,   845,    51,    74,   204,   205,   206,   396,
+     149,   363,   150,   364,   196,   383,   760,   761,   762,   848,
+      53,    75,   220,   221,   222,   399,   223,   224,   401,   225,
+     226,   197,   392,   764,   765,   766,   851,    55,    76,   238,
+     239,   240,   241,   407,   242,   408,   243,   409,   244,   410,
+     245,   411,   246,   412,   247,   406,   198,   393,   769,   770,
+     854,   151,   369,   708,   709,   816,   913,   914,   915,   916,
+     917,   976,   918,   152,   372,   737,   738,   739,   830,   984,
+     740,   741,   831,   742,   743,   153,   154,   374,   749,   750,
+     751,   837,   752,   838,   155,   375,    65,    81,   316,   317,
+     318,   319,   435,   320,   436,   321,   322,   438,   323,   324,
+     325,   441,   620,   326,   442,   327,   328,   329,   330,   446,
+     627,   331,   447,   332,   448,   333,   449,    99,   345,   100,
+     346,   101,   347,   102,   344,    67,    82,   335,   336,   337,
+     452,   772,   773,   856,   954,   955,   956,   957,   995,   958,
+     993,  1010,  1011,  1012,  1019,  1020,  1021,  1026,  1022,  1023,
+    1024
   };
 
   const unsigned short int
   Dhcp6Parser::yytable_[] =
   {
-      95,   128,   158,   177,   200,   214,   234,   178,   256,   275,
-     292,   311,   724,   692,   277,   662,   880,   179,   180,   181,
-     881,   278,    38,   882,   885,   886,   892,    89,   163,   194,
-     207,   218,   236,   683,   270,   288,   345,   312,    30,   156,
-     157,   346,   201,   215,   257,   276,    31,    42,    32,    86,
-      33,   290,   291,   202,   216,   290,   291,   228,   614,   615,
-     616,   617,   114,   250,   757,    44,   164,   195,   208,   219,
-     237,   372,   271,   289,   103,   313,   373,   104,   105,   106,
-     115,   116,   249,   610,   611,   192,   203,   217,   235,   115,
-     116,   618,    46,   801,   115,   116,   802,   896,   897,    48,
-     107,   108,   109,   110,   111,   112,   113,   114,    50,   684,
-     250,   114,   251,   252,    52,    54,   253,   254,   255,   585,
-      94,   804,   199,    56,   805,   115,   116,   115,   116,   115,
-     116,    58,   592,   593,   594,    60,   117,   118,   119,   120,
-     121,   376,   390,   734,   735,   173,   377,   391,   174,   718,
-     393,   400,    90,    62,   122,   394,   401,   123,   631,    64,
-      66,    91,    92,    93,   124,   704,   705,   706,   707,   708,
-     709,   330,   125,   126,   683,   690,   127,   691,    94,    94,
-    1005,   334,   880,  1006,  1007,  1008,   881,   113,    94,   882,
-     885,   886,   892,    94,   115,   116,   950,   951,   952,   953,
-     335,   626,    34,    35,    36,    37,   627,   628,   629,   630,
-     631,   632,   633,   634,   635,   636,   637,   638,   639,   640,
-     641,   336,   428,   337,    94,   444,    94,   429,    94,   250,
-     445,   250,   272,   251,   252,   273,   274,   719,   720,   721,
-     722,   447,   372,   338,   409,   866,   448,   764,   115,   116,
-     692,   107,   108,   109,   110,   447,   376,   783,   114,   344,
-     765,   766,   784,   351,   783,   410,   724,   818,   165,   785,
-     166,   114,   819,   352,   353,    95,   115,   116,   167,   168,
-     169,   170,   171,   172,   209,   210,   211,   212,   213,   115,
-     116,   354,   173,    94,   825,   174,   175,   807,   411,   826,
-     808,   250,   128,   176,   829,   173,   158,   444,   174,   830,
-     783,   390,   831,   355,   369,   960,   961,   964,   115,   116,
-     177,   428,   965,   200,   178,   375,   970,   383,   393,   420,
-     214,   384,   163,   979,   179,   180,   181,   396,   400,   986,
-     234,   449,   450,   980,   987,    94,   194,    94,  1020,   207,
-     256,   847,   419,  1021,   848,   275,   218,   398,   399,  1003,
-     277,   201,  1004,   581,   582,   583,   236,   278,   215,   414,
-     164,   418,   202,   422,   311,    94,   270,   423,   424,   216,
-     425,   288,   430,   433,   195,   435,   257,   208,    94,   436,
-     451,   276,   439,   937,   219,   938,   939,   971,   972,   973,
-     312,   440,   192,   441,   237,   203,   452,   462,   453,   454,
-     455,   456,   217,   458,   271,   459,   460,    94,   461,   289,
-     463,   467,   235,   107,   108,   109,   110,   464,   112,   465,
-     114,   250,   468,   466,   469,   470,   471,   472,   313,   480,
-     473,   474,   475,   476,   477,   478,   479,   114,   115,   116,
-     481,   168,   169,   482,   171,   172,   484,   487,   492,   488,
-     551,   552,   553,   485,   173,   115,   116,   174,   489,   490,
-     491,   494,   495,   496,   497,   176,   493,   498,   500,   128,
-     227,   502,   503,   504,   158,   508,   228,   229,   230,   231,
-     232,   233,   505,   506,   509,   510,   511,   512,   513,   514,
-     516,   723,   736,   311,   517,   518,   519,   520,   521,   524,
-     163,   522,   528,   525,   526,   529,   115,   116,   532,   531,
-     533,   534,   535,   536,   537,   538,   539,   725,   737,   312,
-     540,   543,   541,   544,   546,   606,   542,   548,   549,   550,
-     613,   554,   555,   556,   557,   558,   559,    94,   164,   560,
-      32,   563,   564,   565,   622,   566,   567,   568,   569,   578,
-     788,   570,   571,   572,    94,   726,   738,   313,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,   573,   574,   576,   577,
-     587,   791,   621,   588,   579,   580,   586,   663,   589,   590,
-     667,   591,   595,   671,   675,    94,   679,   596,   597,   598,
-     599,   600,   601,   602,   603,   697,   700,   745,   749,   753,
-     761,   771,   604,   605,   772,   773,   607,   608,   774,   609,
-     775,   620,   777,   778,   780,   781,   782,   832,   854,   787,
-     790,   793,   794,   796,   797,   800,   799,   561,   811,   803,
-     810,   812,   813,   814,   815,   816,   817,   822,   823,   824,
-     837,   853,   836,   840,   839,   842,   843,   855,   849,   845,
-     850,   851,   852,   856,   858,   857,   859,   860,   861,   919,
-     862,   920,   925,   926,   929,   689,   928,   936,   967,   863,
-     962,   969,   864,   963,   912,   968,   984,   913,   914,   981,
-     989,   915,   992,   994,   999,   997,  1017,  1018,  1019,   177,
-     916,   917,   256,   178,   921,   275,   922,   923,   874,   955,
-     277,   956,   875,   179,   180,   181,   898,   278,   957,   292,
-     958,   959,   876,   877,   878,   194,   975,   976,   270,   977,
-    1022,   288,   978,   457,   890,   723,   623,   625,   257,   736,
-     982,   276,   901,   993,   879,   200,   883,   483,   214,   990,
-    1024,   234,   899,   996,   998,  1023,   940,   884,  1025,   867,
-     865,   725,   894,   195,   895,   737,   271,  1027,   911,   289,
-     918,   207,   891,   910,   218,   486,   869,   236,   868,   530,
-     902,   192,   942,   201,   893,   499,   215,   988,   248,   871,
-     889,   870,   941,   523,   202,   872,   527,   216,   900,   726,
-     873,   930,   931,   738,   507,   932,   935,   501,   933,   208,
-     934,   515,   219,   909,   758,   237,   991,   927,   924,   743,
-     943,   547,   624,   949,   545,   995,  1026,   203,  1015,     0,
-     217,     0,     0,   235,     0,     0,     0,     0,     0,     0,
+      95,   128,   158,   177,   200,   214,   234,   277,   256,   275,
+     292,   313,   257,   276,   278,   734,   702,   672,   178,   179,
+     890,   180,    38,   891,   892,   895,   181,   896,   902,    89,
+     163,   194,   207,   218,   236,    30,   270,   288,    31,   314,
+      32,    42,    33,   349,   192,   203,   217,   235,   350,   156,
+     157,   811,   103,   693,   812,   104,   105,   106,   201,   215,
+     249,    44,   814,   115,   116,   815,   202,   216,   164,   195,
+     208,   219,   237,   817,   271,   289,   818,   315,   107,   108,
+     109,   110,   111,   112,   113,   114,   290,   291,   250,    46,
+     251,   252,   376,   380,   253,   254,   255,   377,   381,   115,
+     116,   228,    48,   115,   116,   115,   116,   114,   767,    50,
+     114,   250,   744,   745,   117,   118,   119,   120,   121,   114,
+     209,   210,   211,   212,   213,   115,   116,   857,   115,   116,
+     858,   694,   122,  1013,   728,   123,  1014,   115,   116,   290,
+     291,   173,   124,   641,   174,   906,   907,    52,   394,    54,
+     125,   126,   227,   395,   127,    56,    90,    94,   228,   229,
+     230,   231,   232,   233,    94,    91,    92,    93,    58,   397,
+     622,   623,   624,   625,   398,    60,   404,    62,   432,   115,
+     116,   405,    94,   433,   618,   619,   890,   450,    64,   891,
+     892,   895,   451,   896,   902,    86,    34,    35,    36,    37,
+      94,    66,   636,   113,    94,   626,    94,   637,   638,   639,
+     640,   641,   642,   643,   644,   645,   646,   647,   648,   649,
+     650,   651,   729,   730,   731,   732,    94,   593,   453,    94,
+     250,  1015,   114,   454,  1016,  1017,  1018,   334,    94,   376,
+     600,   601,   602,   199,   774,   338,   339,   453,   380,   876,
+     115,   116,   775,   776,   340,   702,   793,   107,   108,   109,
+     110,   794,   793,   828,   114,   835,   173,   795,   829,   174,
+     836,   734,   839,   250,   165,   341,   166,   840,   342,    95,
+      94,   348,   115,   116,   167,   168,   169,   170,   171,   172,
+     115,   116,   714,   715,   716,   717,   718,   719,   173,   450,
+     793,   174,   175,   394,   841,   970,   128,   974,   971,   176,
+     158,   413,   975,   250,   272,   251,   252,   273,   274,   355,
+     432,   397,   414,   404,   177,   980,   989,   200,   990,   356,
+     115,   116,   996,   424,   214,   357,  1030,   997,   163,   178,
+     179,  1031,   180,   358,   234,   455,   456,   181,    94,   359,
+     373,    94,   194,   379,   256,   207,   387,   277,   257,   275,
+     388,   400,   218,   276,   278,   192,   402,   947,   203,   948,
+     949,   415,   236,   403,   418,   217,   164,   589,   590,   591,
+     313,   201,   270,    94,   422,   235,   423,   288,   215,   202,
+     195,    94,   426,   208,   693,   700,   216,   701,   427,   428,
+     219,   981,   982,   983,   107,   108,   109,   110,   314,   112,
+     237,   114,   250,   960,   961,   962,   963,   115,   116,   429,
+     271,   434,   437,   439,   440,   289,   443,   444,   445,   115,
+     116,    94,   168,   169,   457,   171,   172,   458,   459,   460,
+     461,   462,   464,   465,   466,   173,   315,   467,   174,   468,
+     469,   470,   471,   472,   473,   474,   176,   475,   476,   477,
+     478,   479,   480,   481,   482,   483,   559,   560,   561,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   484,   485,   486,   487,   128,   488,   490,
+     311,   312,   158,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,   491,   493,   733,
+     746,   313,   494,   495,   496,   497,   499,   498,    94,   500,
+     163,   501,   502,   503,   504,   506,   508,   510,   509,   511,
+      94,   514,   512,   515,   516,   517,   518,   735,   747,   314,
+     519,   614,   520,   522,   523,   524,   525,   526,   527,   528,
+     530,   531,   532,   534,   535,   537,   538,   539,   164,   541,
+     540,   542,   632,   543,   544,   545,   546,   547,   548,   549,
+     550,   551,   552,   554,   556,   736,   748,   315,   557,   558,
+     562,   563,   564,   565,   566,   567,   568,   781,   571,    32,
+     572,   573,   574,   575,   576,   577,   863,   864,   578,   579,
+     580,   581,   582,   584,   585,   586,   595,   587,   588,   594,
+     596,   597,   598,   621,   631,   599,   855,   673,   677,   681,
+     685,   689,   707,   710,   755,   603,   604,   605,   606,   607,
+     608,   609,   610,   611,   612,   613,   615,   616,   617,   628,
+     629,   630,   759,   763,   771,   782,   783,   784,   785,   787,
+     788,   790,   791,   792,   798,   842,   797,   801,   800,   803,
+     804,   806,   807,   810,   809,   865,   821,   813,   820,   822,
+     823,   824,   825,   826,   827,   832,   833,   834,   847,   866,
+     846,   850,   849,   852,   853,   938,   859,   860,   861,   862,
+     867,   868,   869,   871,   929,   930,   935,   870,   872,   873,
+     936,   939,   972,   874,   946,   922,   977,   973,   994,   923,
+     979,   924,   925,   978,   991,   926,   999,  1002,   927,  1004,
+     931,   932,   933,  1003,  1007,   965,   966,   967,  1009,   177,
+    1027,  1028,   256,   277,  1029,   275,   257,  1032,   884,   276,
+     278,   569,   889,  1000,   178,   179,   908,   180,  1034,   292,
+     909,   699,   181,   885,   886,   463,   887,   194,   968,   969,
+     270,   888,   633,   288,  1035,   733,   900,   985,   986,   746,
+     192,   635,  1033,   492,   911,   200,   877,   904,   214,   899,
+     489,   234,   987,   988,   992,  1006,   950,   910,  1008,  1037,
+     951,   875,   893,   735,   905,   195,   921,   747,   271,   878,
+     894,   289,   920,   207,   901,   536,   218,   928,   879,   236,
+     998,   248,   912,   903,   952,   505,   203,   881,   880,   217,
+     882,   883,   235,   941,   507,   942,   940,   529,   521,   201,
+     513,   736,   215,   944,   533,   748,   943,   202,   945,   919,
+     216,   208,   768,  1001,   219,   934,   959,   237,   937,   634,
+    1005,   753,   953,  1025,  1036,     0,     0,   553,     0,     0,
+       0,   555,     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,     0,     0,     0,   884,     0,     0,     0,   889,   908,
+       0,     0,     0,   909,     0,     0,     0,     0,     0,   885,
+     886,     0,   887,     0,     0,     0,   950,   888,     0,     0,
+     951,     0,   900,     0,     0,     0,     0,   911,     0,     0,
+       0,     0,     0,     0,     0,   899,     0,     0,     0,     0,
+     910,     0,     0,     0,   952,     0,     0,     0,   893,     0,
+       0,     0,     0,     0,     0,     0,   894,     0,     0,     0,
+     901,     0,     0,     0,     0,   912,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   874,     0,     0,     0,   875,   898,
-       0,     0,     0,     0,     0,     0,     0,     0,   876,   877,
-     878,     0,     0,     0,     0,     0,   940,     0,     0,     0,
-     890,     0,     0,     0,     0,   901,     0,     0,     0,     0,
-     879,     0,   883,     0,     0,   899,     0,     0,     0,     0,
-       0,     0,   942,   884,     0,     0,     0,     0,     0,     0,
-       0,     0,   941,     0,     0,     0,     0,     0,   891,     0,
-       0,     0,     0,   902,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   889,     0,     0,     0,
-     943,   900
+       0,     0,   953
   };
 
   const short int
   Dhcp6Parser::yycheck_[] =
   {
-      70,    71,    72,    73,    74,    75,    76,    73,    78,    79,
-      80,    81,   571,   567,    79,   556,   798,    73,    73,    73,
-     798,    79,    16,   798,   798,   798,   798,    10,    72,    73,
-      74,    75,    76,    85,    78,    79,     3,    81,     0,    12,
-      13,     8,    74,    75,    78,    79,     5,     7,     7,   161,
-       9,    92,    93,    74,    75,    92,    93,    83,   131,   132,
-     133,   134,    44,    45,    90,     7,    72,    73,    74,    75,
-      76,     3,    78,    79,    11,    81,     8,    14,    15,    16,
-      62,    63,    17,   128,   129,    73,    74,    75,    76,    62,
-      63,   164,     7,     3,    62,    63,     6,    79,    80,     7,
-      37,    38,    39,    40,    41,    42,    43,    44,     7,   161,
-      45,    44,    47,    48,     7,     7,    51,    52,    53,   495,
-     161,     3,    55,     7,     6,    62,    63,    62,    63,    62,
-      63,     7,   508,   509,   510,     7,    73,    74,    75,    76,
-      77,     3,     3,   111,   112,    78,     8,     8,    81,    17,
-       3,     3,   135,     7,    91,     8,     8,    94,    26,     7,
-       7,   144,   145,   146,   101,    95,    96,    97,    98,    99,
-     100,   136,   109,   110,    85,    86,   113,    88,   161,   161,
-     138,     6,   964,   141,   142,   143,   964,    43,   161,   964,
-     964,   964,   964,   161,    62,    63,    18,    19,    20,    21,
-       3,    17,   161,   162,   163,   164,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,     4,     3,     8,   161,     3,   161,     8,   161,    45,
-       8,    45,    46,    47,    48,    49,    50,   105,   106,   107,
-     108,     3,     3,     3,     8,   786,     8,     8,    62,    63,
-     804,    37,    38,    39,    40,     3,     3,     3,    44,     4,
-       8,     8,     8,     4,     3,     3,   825,     3,    54,     8,
-      56,    44,     8,     4,     4,   345,    62,    63,    64,    65,
-      66,    67,    68,    69,    57,    58,    59,    60,    61,    62,
-      63,     4,    78,   161,     3,    81,    82,     3,     8,     8,
-       6,    45,   372,    89,     3,    78,   376,     3,    81,     8,
-       3,     3,     8,     4,     4,     8,     8,     3,    62,    63,
-     390,     3,     8,   393,   390,     4,     8,     4,     3,     3,
-     400,     4,   376,     8,   390,   390,   390,     4,     3,     3,
-     410,   335,   336,     8,     8,   161,   390,   161,     3,   393,
-     420,     3,     8,     8,     6,   425,   400,     4,     4,     3,
-     425,   393,     6,    70,    71,    72,   410,   425,   400,     4,
-     376,     4,   393,     4,   444,   161,   420,     4,     8,   400,
-       3,   425,     4,     4,   390,     4,   420,   393,   161,     4,
-     161,   425,     4,   137,   400,   139,   140,   102,   103,   104,
-     444,     4,   390,     4,   410,   393,     4,   162,     4,     4,
-       4,     4,   400,     4,   420,     4,     4,   161,     4,   425,
-     162,     4,   410,    37,    38,    39,    40,   162,    42,   162,
-      44,    45,     4,   162,     4,     4,     4,     4,   444,   162,
-       4,     4,     4,     4,     4,     4,     4,    44,    62,    63,
-       4,    65,    66,     4,    68,    69,     4,     4,   162,     4,
-     454,   455,   456,   164,    78,    62,    63,    81,     4,     4,
-       4,     4,     4,     4,     4,    89,   164,     4,     4,   549,
-      77,     4,   162,     4,   554,     4,    83,    84,    85,    86,
-      87,    88,   162,   162,     4,     4,     4,     4,     4,     4,
-       4,   571,   572,   573,     4,   162,     4,     4,     4,     4,
-     554,   164,     4,   164,   164,     4,    62,    63,     4,   164,
-       4,   162,     4,   162,   162,     4,     4,   571,   572,   573,
-     164,     4,   164,     4,     4,   529,   164,     4,     7,     7,
-     130,     7,     7,     7,     5,     5,     5,   161,   554,     5,
-       7,   161,     5,     5,   548,     5,     5,     5,     5,   161,
-       3,     7,     7,     7,   161,   571,   572,   573,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,     7,     5,     5,     5,
-       5,     3,     5,     7,   161,   161,   161,     7,   161,   161,
-       7,   161,   161,     7,     7,   161,     7,   161,   161,   161,
-     161,   161,   161,   161,   161,     7,     7,     7,     7,     7,
-       7,     4,   161,   161,     4,     4,   161,   161,     4,   161,
-       4,   161,     4,     4,     4,     4,     4,   161,   164,     6,
-       6,     6,     3,     6,     3,     3,     6,   470,     3,     6,
-       6,     4,     4,     4,     4,     4,     4,     4,     4,     4,
-       3,   162,     6,     3,     6,     6,     3,   162,     4,     8,
-       4,     4,     4,   164,     4,   162,   162,   162,     4,     4,
-     162,     4,     4,     4,     3,   566,     6,     4,     4,   162,
-       8,     3,   164,     8,   162,     8,     4,   162,   162,     8,
-       4,   162,     4,     4,     7,     5,     4,     4,     4,   789,
-     162,   162,   792,   789,   162,   795,   162,   162,   798,   161,
-     795,   161,   798,   789,   789,   789,   806,   795,   161,   809,
-     161,   161,   798,   798,   798,   789,   161,   161,   792,   161,
-       4,   795,   161,   345,   798,   825,   549,   554,   792,   829,
-     161,   795,   806,   162,   798,   835,   798,   372,   838,   164,
-     162,   841,   806,   161,   161,   164,   846,   798,   162,   788,
-     783,   825,   801,   789,   804,   829,   792,   161,   811,   795,
-     818,   835,   798,   809,   838,   376,   791,   841,   789,   428,
-     806,   789,   846,   835,   800,   390,   838,   964,    77,   794,
-     798,   792,   846,   420,   835,   795,   425,   838,   806,   825,
-     797,   835,   837,   829,   400,   838,   843,   393,   840,   835,
-     841,   410,   838,   807,   588,   841,   969,   829,   825,   573,
-     846,   447,   550,   847,   444,   986,  1020,   835,  1003,    -1,
-     838,    -1,    -1,   841,    -1,    -1,    -1,    -1,    -1,    -1,
+      70,    71,    72,    73,    74,    75,    76,    79,    78,    79,
+      80,    81,    78,    79,    79,   579,   575,   564,    73,    73,
+     808,    73,    16,   808,   808,   808,    73,   808,   808,    10,
+      72,    73,    74,    75,    76,     0,    78,    79,     5,    81,
+       7,     7,     9,     3,    73,    74,    75,    76,     8,    12,
+      13,     3,    11,    85,     6,    14,    15,    16,    74,    75,
+      17,     7,     3,    62,    63,     6,    74,    75,    72,    73,
+      74,    75,    76,     3,    78,    79,     6,    81,    37,    38,
+      39,    40,    41,    42,    43,    44,    92,    93,    45,     7,
+      47,    48,     3,     3,    51,    52,    53,     8,     8,    62,
+      63,    83,     7,    62,    63,    62,    63,    44,    90,     7,
+      44,    45,   111,   112,    73,    74,    75,    76,    77,    44,
+      57,    58,    59,    60,    61,    62,    63,     3,    62,    63,
+       6,   163,    91,     3,    17,    94,     6,    62,    63,    92,
+      93,    78,   101,    26,    81,    79,    80,     7,     3,     7,
+     109,   110,    77,     8,   113,     7,   137,   163,    83,    84,
+      85,    86,    87,    88,   163,   146,   147,   148,     7,     3,
+     131,   132,   133,   134,     8,     7,     3,     7,     3,    62,
+      63,     8,   163,     8,   128,   129,   974,     3,     7,   974,
+     974,   974,     8,   974,   974,   163,   163,   164,   165,   166,
+     163,     7,    17,    43,   163,   166,   163,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,   105,   106,   107,   108,   163,   501,     3,   163,
+      45,   140,    44,     8,   143,   144,   145,   138,   163,     3,
+     514,   515,   516,    55,     8,     6,     3,     3,     3,   796,
+      62,    63,     8,     8,     4,   814,     3,    37,    38,    39,
+      40,     8,     3,     3,    44,     3,    78,     8,     8,    81,
+       8,   835,     3,    45,    54,     8,    56,     8,     3,   349,
+     163,     4,    62,    63,    64,    65,    66,    67,    68,    69,
+      62,    63,    95,    96,    97,    98,    99,   100,    78,     3,
+       3,    81,    82,     3,     8,     8,   376,     3,     8,    89,
+     380,     8,     8,    45,    46,    47,    48,    49,    50,     4,
+       3,     3,     3,     3,   394,     8,     8,   397,     8,     4,
+      62,    63,     3,     3,   404,     4,     3,     8,   380,   394,
+     394,     8,   394,     4,   414,   339,   340,   394,   163,     4,
+       4,   163,   394,     4,   424,   397,     4,   429,   424,   429,
+       4,     4,   404,   429,   429,   394,     4,   139,   397,   141,
+     142,     8,   414,     4,     4,   404,   380,    70,    71,    72,
+     450,   397,   424,   163,     4,   414,     8,   429,   404,   397,
+     394,   163,     4,   397,    85,    86,   404,    88,     4,     8,
+     404,   102,   103,   104,    37,    38,    39,    40,   450,    42,
+     414,    44,    45,    18,    19,    20,    21,    62,    63,     3,
+     424,     4,     4,     4,     4,   429,     4,     4,     4,    62,
+      63,   163,    65,    66,   163,    68,    69,     4,     4,     4,
+       4,     4,     4,     4,     4,    78,   450,     4,    81,   164,
+     164,   164,   164,   164,     4,     4,    89,     4,     4,     4,
+       4,     4,     4,     4,     4,     4,   460,   461,   462,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,     4,     4,   164,     4,   557,     4,     4,
+     135,   136,   562,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   166,     4,   579,
+     580,   581,     4,     4,     4,     4,   166,   164,   163,     4,
+     562,     4,     4,     4,     4,     4,     4,     4,   164,   164,
+     163,     4,   164,     4,     4,     4,     4,   579,   580,   581,
+       4,   535,     4,     4,     4,   164,     4,     4,     4,   166,
+       4,   166,   166,     4,     4,   166,     4,     4,   562,     4,
+     164,   164,   556,   164,     4,     4,   166,   166,   166,     4,
+       4,     4,     4,     4,     4,   579,   580,   581,     7,     7,
+       7,     7,     7,     5,     5,     5,     5,     4,   163,     7,
+       5,     5,     5,     5,     5,     5,   164,   166,     7,     7,
+       7,     7,     5,     5,     5,   163,     5,   163,   163,   163,
+       7,   163,   163,   130,     5,   163,     8,     7,     7,     7,
+       7,     7,     7,     7,     7,   163,   163,   163,   163,   163,
+     163,   163,   163,   163,   163,   163,   163,   163,   163,   163,
+     163,   163,     7,     7,     7,     4,     4,     4,     4,     4,
+       4,     4,     4,     4,     3,   163,     6,     3,     6,     6,
+       3,     6,     3,     3,     6,   164,     3,     6,     6,     4,
+       4,     4,     4,     4,     4,     4,     4,     4,     3,   166,
+       6,     3,     6,     6,     3,     6,     4,     4,     4,     4,
+     164,     4,   164,     4,     4,     4,     4,   164,   164,   164,
+       4,     3,     8,   166,     4,   164,     4,     8,     4,   164,
+       3,   164,   164,     8,     8,   164,     4,     4,   164,     4,
+     164,   164,   164,   164,     5,   163,   163,   163,     7,   799,
+       4,     4,   802,   805,     4,   805,   802,     4,   808,   805,
+     805,   476,   808,   166,   799,   799,   816,   799,   164,   819,
+     816,   574,   799,   808,   808,   349,   808,   799,   163,   163,
+     802,   808,   557,   805,   164,   835,   808,   163,   163,   839,
+     799,   562,   166,   380,   816,   845,   798,   811,   848,   808,
+     376,   851,   163,   163,   163,   163,   856,   816,   163,   163,
+     856,   793,   808,   835,   814,   799,   821,   839,   802,   799,
+     808,   805,   819,   845,   808,   432,   848,   828,   801,   851,
+     974,    77,   816,   810,   856,   394,   845,   804,   802,   848,
+     805,   807,   851,   847,   397,   848,   845,   424,   414,   845,
+     404,   835,   848,   851,   429,   839,   850,   845,   853,   817,
+     848,   845,   596,   979,   848,   835,   857,   851,   839,   558,
+     996,   581,   856,  1013,  1030,    -1,    -1,   450,    -1,    -1,
+      -1,   453,    -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,    -1,    -1,    -1,   974,    -1,    -1,    -1,   974,   979,
+      -1,    -1,    -1,   979,    -1,    -1,    -1,    -1,    -1,   974,
+     974,    -1,   974,    -1,    -1,    -1,   996,   974,    -1,    -1,
+     996,    -1,   974,    -1,    -1,    -1,    -1,   979,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   974,    -1,    -1,    -1,    -1,
+     979,    -1,    -1,    -1,   996,    -1,    -1,    -1,   974,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   974,    -1,    -1,    -1,
+     974,    -1,    -1,    -1,    -1,   979,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   964,    -1,    -1,    -1,   964,   969,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   964,   964,
-     964,    -1,    -1,    -1,    -1,    -1,   986,    -1,    -1,    -1,
-     964,    -1,    -1,    -1,    -1,   969,    -1,    -1,    -1,    -1,
-     964,    -1,   964,    -1,    -1,   969,    -1,    -1,    -1,    -1,
-      -1,    -1,   986,   964,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   986,    -1,    -1,    -1,    -1,    -1,   964,    -1,
-      -1,    -1,    -1,   969,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   964,    -1,    -1,    -1,
-     986,   969
+      -1,    -1,   996
   };
 
   const unsigned short int
   Dhcp6Parser::yystos_[] =
   {
-       0,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-       0,     5,     7,     9,   161,   162,   163,   164,   181,   182,
-     183,   188,     7,   197,     7,   203,     7,   214,     7,   302,
-       7,   379,     7,   395,     7,   412,     7,   331,     7,   337,
-       7,   361,     7,   278,     7,   471,     7,   506,   189,   184,
-     198,   204,   215,   303,   380,   396,   413,   332,   338,   362,
-     279,   472,   507,   181,   190,   191,   161,   186,   187,    10,
-     135,   144,   145,   146,   161,   196,   199,   200,   201,   498,
-     500,   502,   504,    11,    14,    15,    16,    37,    38,    39,
+       0,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+       0,     5,     7,     9,   163,   164,   165,   166,   183,   184,
+     185,   190,     7,   199,     7,   205,     7,   216,     7,   304,
+       7,   381,     7,   397,     7,   414,     7,   333,     7,   339,
+       7,   363,     7,   280,     7,   473,     7,   512,   191,   186,
+     200,   206,   217,   305,   382,   398,   415,   334,   340,   364,
+     281,   474,   513,   183,   192,   193,   163,   188,   189,    10,
+     137,   146,   147,   148,   163,   198,   201,   202,   203,   504,
+     506,   508,   510,    11,    14,    15,    16,    37,    38,    39,
       40,    41,    42,    43,    44,    62,    63,    73,    74,    75,
-      76,    77,    91,    94,   101,   109,   110,   113,   196,   205,
-     206,   207,   208,   209,   210,   211,   212,   221,   223,   225,
-     258,   264,   270,   272,   286,   296,   321,   329,   355,   385,
-     387,   436,   448,   460,   461,   469,    12,    13,   196,   216,
-     217,   218,   220,   385,   387,    54,    56,    64,    65,    66,
-      67,    68,    69,    78,    81,    82,    89,   196,   207,   208,
-     209,   210,   304,   305,   306,   308,   310,   312,   314,   316,
-     319,   320,   355,   373,   385,   387,   389,   406,   431,    55,
-     196,   312,   314,   355,   381,   382,   383,   385,   387,    57,
-      58,    59,    60,    61,   196,   312,   314,   355,   385,   387,
-     397,   398,   399,   401,   402,   404,   405,    77,    83,    84,
-      85,    86,    87,    88,   196,   355,   385,   387,   414,   415,
-     416,   417,   419,   421,   423,   425,   427,   429,   329,    17,
-      45,    47,    48,    51,    52,    53,   196,   243,   339,   340,
-     341,   342,   343,   344,   345,   347,   349,   351,   352,   354,
-     385,   387,    46,    49,    50,   196,   243,   343,   349,   363,
-     364,   365,   366,   367,   369,   370,   371,   372,   385,   387,
-      92,    93,   196,   280,   281,   282,   284,   114,   115,   116,
+      76,    77,    91,    94,   101,   109,   110,   113,   198,   207,
+     208,   209,   210,   211,   212,   213,   214,   223,   225,   227,
+     260,   266,   272,   274,   288,   298,   323,   331,   357,   387,
+     389,   438,   450,   462,   463,   471,    12,    13,   198,   218,
+     219,   220,   222,   387,   389,    54,    56,    64,    65,    66,
+      67,    68,    69,    78,    81,    82,    89,   198,   209,   210,
+     211,   212,   306,   307,   308,   310,   312,   314,   316,   318,
+     321,   322,   357,   375,   387,   389,   391,   408,   433,    55,
+     198,   314,   316,   357,   383,   384,   385,   387,   389,    57,
+      58,    59,    60,    61,   198,   314,   316,   357,   387,   389,
+     399,   400,   401,   403,   404,   406,   407,    77,    83,    84,
+      85,    86,    87,    88,   198,   357,   387,   389,   416,   417,
+     418,   419,   421,   423,   425,   427,   429,   431,   331,    17,
+      45,    47,    48,    51,    52,    53,   198,   245,   341,   342,
+     343,   344,   345,   346,   347,   349,   351,   353,   354,   356,
+     387,   389,    46,    49,    50,   198,   245,   345,   351,   365,
+     366,   367,   368,   369,   371,   372,   373,   374,   387,   389,
+      92,    93,   198,   282,   283,   284,   286,   114,   115,   116,
      117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   196,   385,   387,   473,   474,   475,   476,   478,   480,
-     481,   483,   484,   485,   488,   490,   491,   492,   493,   496,
-     136,   508,   509,   510,     6,     3,     4,     8,     3,   202,
-     505,   499,   501,   503,     4,     3,     8,   213,   222,   224,
-     226,     4,     4,     4,     4,     4,   297,   330,   356,   386,
-     388,   322,   259,   271,   265,   437,   273,   287,   449,     4,
-     462,   470,     3,     8,   219,     4,     3,     8,   374,   390,
-     307,   309,   311,     4,     4,   317,   315,   313,   407,   432,
-       3,     8,   384,     3,     8,   400,     4,   403,     4,     4,
-       3,     8,   430,   418,   420,   422,   424,   426,   428,     8,
-       3,     8,   346,   244,     4,   350,   348,   353,     4,     8,
-       3,   368,     4,     4,     8,     3,   283,   285,     3,     8,
-       4,   477,   479,     4,   482,     4,     4,   486,   489,     4,
-       4,     4,   494,   497,     3,     8,   511,     3,     8,   181,
-     181,   161,     4,     4,     4,     4,     4,   200,     4,     4,
-       4,     4,   162,   162,   162,   162,   162,     4,     4,     4,
-       4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
-     162,     4,     4,   206,     4,   164,   217,     4,     4,     4,
-       4,     4,   162,   164,     4,     4,     4,     4,     4,   305,
-       4,   382,     4,   162,     4,   162,   162,   398,     4,     4,
-       4,     4,     4,     4,     4,   416,     4,     4,   162,     4,
-       4,     4,   164,   341,     4,   164,   164,   365,     4,     4,
-     281,   164,     4,     4,   162,     4,   162,   162,     4,     4,
-     164,   164,   164,     4,     4,   474,     4,   509,     4,     7,
-       7,   181,   181,   181,     7,     7,     7,     5,     5,     5,
-       5,   183,   185,   161,     5,     5,     5,     5,     5,     5,
-       7,     7,     7,     7,     5,   192,     5,     5,   161,   161,
-     161,    70,    71,    72,   318,   192,   161,     5,     7,   161,
-     161,   161,   192,   192,   192,   161,   161,   161,   161,   161,
-     161,   161,   161,   161,   161,   161,   181,   161,   161,   161,
-     128,   129,   487,   130,   131,   132,   133,   134,   164,   495,
-     161,     5,   181,   205,   508,   216,    17,    22,    23,    24,
+     127,   135,   136,   198,   387,   389,   475,   476,   477,   478,
+     480,   482,   483,   485,   486,   487,   490,   492,   493,   494,
+     495,   498,   500,   502,   138,   514,   515,   516,     6,     3,
+       4,     8,     3,   204,   511,   505,   507,   509,     4,     3,
+       8,   215,   224,   226,   228,     4,     4,     4,     4,     4,
+     299,   332,   358,   388,   390,   324,   261,   273,   267,   439,
+     275,   289,   451,     4,   464,   472,     3,     8,   221,     4,
+       3,     8,   376,   392,   309,   311,   313,     4,     4,   319,
+     317,   315,   409,   434,     3,     8,   386,     3,     8,   402,
+       4,   405,     4,     4,     3,     8,   432,   420,   422,   424,
+     426,   428,   430,     8,     3,     8,   348,   246,     4,   352,
+     350,   355,     4,     8,     3,   370,     4,     4,     8,     3,
+     285,   287,     3,     8,     4,   479,   481,     4,   484,     4,
+       4,   488,   491,     4,     4,     4,   496,   499,   501,   503,
+       3,     8,   517,     3,     8,   183,   183,   163,     4,     4,
+       4,     4,     4,   202,     4,     4,     4,     4,   164,   164,
+     164,   164,   164,     4,     4,     4,     4,     4,     4,     4,
+       4,     4,     4,     4,     4,     4,   164,     4,     4,   208,
+       4,   166,   219,     4,     4,     4,     4,     4,   164,   166,
+       4,     4,     4,     4,     4,   307,     4,   384,     4,   164,
+       4,   164,   164,   400,     4,     4,     4,     4,     4,     4,
+       4,   418,     4,     4,   164,     4,     4,     4,   166,   343,
+       4,   166,   166,   367,     4,     4,   283,   166,     4,     4,
+     164,     4,   164,   164,     4,     4,   166,   166,   166,     4,
+       4,     4,     4,   476,     4,   515,     4,     7,     7,   183,
+     183,   183,     7,     7,     7,     5,     5,     5,     5,   185,
+     187,   163,     5,     5,     5,     5,     5,     5,     7,     7,
+       7,     7,     5,   194,     5,     5,   163,   163,   163,    70,
+      71,    72,   320,   194,   163,     5,     7,   163,   163,   163,
+     194,   194,   194,   163,   163,   163,   163,   163,   163,   163,
+     163,   163,   163,   163,   183,   163,   163,   163,   128,   129,
+     489,   130,   131,   132,   133,   134,   166,   497,   163,   163,
+     163,     5,   183,   207,   514,   218,    17,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,   196,   231,   232,   233,   236,   238,   240,   242,
-     243,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-     255,   256,   231,     7,   227,   228,   229,     7,   298,   299,
-     300,     7,   333,   334,   335,     7,   357,   358,   359,     7,
-     323,   324,   325,    85,   161,   260,   261,   262,   263,   190,
-      86,    88,   262,   266,   267,   268,   269,     7,   438,   439,
-       7,   274,   275,   276,    95,    96,    97,    98,    99,   100,
-     288,   289,   290,   291,   292,   293,   294,   295,    17,   105,
-     106,   107,   108,   196,   245,   385,   387,   450,   451,   452,
-     455,   456,   458,   459,   111,   112,   196,   385,   387,   463,
-     464,   465,   467,   473,   193,     7,   375,   376,   377,     7,
-     391,   392,   393,     7,   408,   409,   410,    90,   417,   433,
-     434,     7,   512,   513,     8,     8,     8,   234,   237,   239,
-     241,     4,     4,     4,     4,     4,   254,     4,     4,   257,
-       4,     4,     4,     3,     8,     8,   230,     6,     3,   301,
-       6,     3,   336,     6,     3,   360,     6,     3,   326,     6,
-       3,     3,     6,     6,     3,     6,   440,     3,     6,   277,
+      35,    36,   198,   233,   234,   235,   238,   240,   242,   244,
+     245,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     257,   258,   233,     7,   229,   230,   231,     7,   300,   301,
+     302,     7,   335,   336,   337,     7,   359,   360,   361,     7,
+     325,   326,   327,    85,   163,   262,   263,   264,   265,   192,
+      86,    88,   264,   268,   269,   270,   271,     7,   440,   441,
+       7,   276,   277,   278,    95,    96,    97,    98,    99,   100,
+     290,   291,   292,   293,   294,   295,   296,   297,    17,   105,
+     106,   107,   108,   198,   247,   387,   389,   452,   453,   454,
+     457,   458,   460,   461,   111,   112,   198,   387,   389,   465,
+     466,   467,   469,   475,   195,     7,   377,   378,   379,     7,
+     393,   394,   395,     7,   410,   411,   412,    90,   419,   435,
+     436,     7,   518,   519,     8,     8,     8,   236,   239,   241,
+     243,     4,     4,     4,     4,     4,   256,     4,     4,   259,
+       4,     4,     4,     3,     8,     8,   232,     6,     3,   303,
+       6,     3,   338,     6,     3,   362,     6,     3,   328,     6,
+       3,     3,     6,     6,     3,     6,   442,     3,     6,   279,
        6,     3,     4,     4,     4,     4,     4,     4,     3,     8,
-     453,   457,     4,     4,     4,     3,     8,   466,   468,     3,
-       8,     8,   161,   194,   195,   378,     6,     3,   394,     6,
-       3,   411,     6,     3,   435,     8,   514,     3,     6,     4,
-       4,     4,     4,   162,   164,   162,   164,   162,     4,   162,
-     162,     4,   162,   162,   164,   232,   231,   229,   304,   300,
-     339,   335,   363,   359,   196,   207,   208,   209,   210,   243,
-     296,   308,   310,   312,   314,   316,   320,   327,   328,   355,
-     385,   387,   431,   325,   261,   267,    79,    80,   196,   243,
-     355,   385,   387,   441,   442,   443,   444,   445,   447,   439,
-     280,   276,   162,   162,   162,   162,   162,   162,   289,     4,
-       4,   162,   162,   162,   451,     4,     4,   464,     6,     3,
-     381,   377,   397,   393,   414,   410,     4,   137,   139,   140,
-     196,   243,   385,   387,   515,   516,   517,   518,   520,   513,
-      18,    19,    20,    21,   235,   161,   161,   161,   161,   161,
-       8,     8,     8,     8,     3,     8,   446,     4,     8,     3,
-       8,   102,   103,   104,   454,   161,   161,   161,   161,     8,
-       8,     8,   161,   521,     4,   519,     3,     8,   328,     4,
-     164,   443,     4,   162,     4,   516,   161,     5,   161,     7,
-     522,   523,   524,     3,     6,   138,   141,   142,   143,   525,
-     526,   527,   529,   530,   531,   523,   528,     4,     4,     4,
-       3,     8,     4,   164,   162,   162,   526,   161
+     455,   459,     4,     4,     4,     3,     8,   468,   470,     3,
+       8,     8,   163,   196,   197,   380,     6,     3,   396,     6,
+       3,   413,     6,     3,   437,     8,   520,     3,     6,     4,
+       4,     4,     4,   164,   166,   164,   166,   164,     4,   164,
+     164,     4,   164,   164,   166,   234,   233,   231,   306,   302,
+     341,   337,   365,   361,   198,   209,   210,   211,   212,   245,
+     298,   310,   312,   314,   316,   318,   322,   329,   330,   357,
+     387,   389,   433,   327,   263,   269,    79,    80,   198,   245,
+     357,   387,   389,   443,   444,   445,   446,   447,   449,   441,
+     282,   278,   164,   164,   164,   164,   164,   164,   291,     4,
+       4,   164,   164,   164,   453,     4,     4,   466,     6,     3,
+     383,   379,   399,   395,   416,   412,     4,   139,   141,   142,
+     198,   245,   387,   389,   521,   522,   523,   524,   526,   519,
+      18,    19,    20,    21,   237,   163,   163,   163,   163,   163,
+       8,     8,     8,     8,     3,     8,   448,     4,     8,     3,
+       8,   102,   103,   104,   456,   163,   163,   163,   163,     8,
+       8,     8,   163,   527,     4,   525,     3,     8,   330,     4,
+     166,   445,     4,   164,     4,   522,   163,     5,   163,     7,
+     528,   529,   530,     3,     6,   140,   143,   144,   145,   531,
+     532,   533,   535,   536,   537,   529,   534,     4,     4,     4,
+       3,     8,     4,   166,   164,   164,   532,   163
   };
 
   const unsigned short int
   Dhcp6Parser::yyr1_[] =
   {
-       0,   165,   167,   166,   168,   166,   169,   166,   170,   166,
-     171,   166,   172,   166,   173,   166,   174,   166,   175,   166,
-     176,   166,   177,   166,   178,   166,   179,   166,   180,   166,
-     181,   181,   181,   181,   181,   181,   181,   182,   184,   183,
-     185,   186,   186,   187,   187,   189,   188,   190,   190,   191,
-     191,   193,   192,   194,   194,   195,   195,   196,   198,   197,
-     199,   199,   200,   200,   200,   200,   200,   200,   202,   201,
-     204,   203,   205,   205,   206,   206,   206,   206,   206,   206,
-     206,   206,   206,   206,   206,   206,   206,   206,   206,   206,
-     206,   206,   206,   206,   206,   206,   206,   206,   206,   206,
-     207,   208,   209,   210,   211,   213,   212,   215,   214,   216,
-     216,   217,   217,   217,   217,   217,   219,   218,   220,   222,
-     221,   224,   223,   226,   225,   227,   227,   228,   228,   230,
-     229,   231,   231,   232,   232,   232,   232,   232,   232,   232,
-     232,   232,   232,   232,   232,   232,   232,   232,   232,   232,
-     232,   234,   233,   235,   235,   235,   235,   237,   236,   239,
-     238,   241,   240,   242,   244,   243,   245,   246,   247,   248,
-     249,   250,   251,   252,   254,   253,   255,   257,   256,   259,
-     258,   260,   260,   261,   261,   262,   263,   265,   264,   266,
-     266,   267,   267,   267,   268,   269,   271,   270,   273,   272,
-     274,   274,   275,   275,   277,   276,   279,   278,   280,   280,
-     280,   281,   281,   283,   282,   285,   284,   287,   286,   288,
-     288,   289,   289,   289,   289,   289,   289,   290,   291,   292,
-     293,   294,   295,   297,   296,   298,   298,   299,   299,   301,
-     300,   303,   302,   304,   304,   305,   305,   305,   305,   305,
-     305,   305,   305,   305,   305,   305,   305,   305,   305,   305,
-     305,   305,   305,   305,   305,   307,   306,   309,   308,   311,
-     310,   313,   312,   315,   314,   317,   316,   318,   318,   318,
-     319,   320,   322,   321,   323,   323,   324,   324,   326,   325,
-     327,   327,   328,   328,   328,   328,   328,   328,   328,   328,
-     328,   328,   328,   328,   328,   328,   328,   328,   328,   330,
-     329,   332,   331,   333,   333,   334,   334,   336,   335,   338,
-     337,   339,   339,   340,   340,   341,   341,   341,   341,   341,
-     341,   341,   341,   341,   341,   342,   343,   344,   346,   345,
-     348,   347,   350,   349,   351,   353,   352,   354,   356,   355,
-     357,   357,   358,   358,   360,   359,   362,   361,   363,   363,
-     364,   364,   365,   365,   365,   365,   365,   365,   365,   365,
-     365,   366,   368,   367,   369,   370,   371,   372,   374,   373,
-     375,   375,   376,   376,   378,   377,   380,   379,   381,   381,
-     382,   382,   382,   382,   382,   382,   382,   384,   383,   386,
-     385,   388,   387,   390,   389,   391,   391,   392,   392,   394,
-     393,   396,   395,   397,   397,   398,   398,   398,   398,   398,
-     398,   398,   398,   398,   398,   398,   400,   399,   401,   403,
-     402,   404,   405,   407,   406,   408,   408,   409,   409,   411,
-     410,   413,   412,   414,   414,   415,   415,   416,   416,   416,
-     416,   416,   416,   416,   416,   416,   416,   416,   418,   417,
-     420,   419,   422,   421,   424,   423,   426,   425,   428,   427,
-     430,   429,   432,   431,   433,   433,   435,   434,   437,   436,
-     438,   438,   440,   439,   441,   441,   442,   442,   443,   443,
-     443,   443,   443,   443,   443,   444,   446,   445,   447,   449,
-     448,   450,   450,   451,   451,   451,   451,   451,   451,   451,
-     451,   451,   453,   452,   454,   454,   454,   455,   457,   456,
-     458,   459,   460,   462,   461,   463,   463,   464,   464,   464,
-     464,   464,   466,   465,   468,   467,   470,   469,   472,   471,
-     473,   473,   474,   474,   474,   474,   474,   474,   474,   474,
-     474,   474,   474,   474,   474,   474,   474,   474,   474,   475,
-     477,   476,   479,   478,   480,   482,   481,   483,   484,   486,
-     485,   487,   487,   489,   488,   490,   491,   492,   494,   493,
-     495,   495,   495,   495,   495,   497,   496,   499,   498,   501,
-     500,   503,   502,   505,   504,   507,   506,   508,   508,   509,
-     511,   510,   512,   512,   514,   513,   515,   515,   516,   516,
-     516,   516,   516,   516,   516,   517,   519,   518,   521,   520,
-     522,   522,   524,   523,   525,   525,   526,   526,   526,   526,
-     528,   527,   529,   530,   531
+       0,   167,   169,   168,   170,   168,   171,   168,   172,   168,
+     173,   168,   174,   168,   175,   168,   176,   168,   177,   168,
+     178,   168,   179,   168,   180,   168,   181,   168,   182,   168,
+     183,   183,   183,   183,   183,   183,   183,   184,   186,   185,
+     187,   188,   188,   189,   189,   191,   190,   192,   192,   193,
+     193,   195,   194,   196,   196,   197,   197,   198,   200,   199,
+     201,   201,   202,   202,   202,   202,   202,   202,   204,   203,
+     206,   205,   207,   207,   208,   208,   208,   208,   208,   208,
+     208,   208,   208,   208,   208,   208,   208,   208,   208,   208,
+     208,   208,   208,   208,   208,   208,   208,   208,   208,   208,
+     209,   210,   211,   212,   213,   215,   214,   217,   216,   218,
+     218,   219,   219,   219,   219,   219,   221,   220,   222,   224,
+     223,   226,   225,   228,   227,   229,   229,   230,   230,   232,
+     231,   233,   233,   234,   234,   234,   234,   234,   234,   234,
+     234,   234,   234,   234,   234,   234,   234,   234,   234,   234,
+     234,   236,   235,   237,   237,   237,   237,   239,   238,   241,
+     240,   243,   242,   244,   246,   245,   247,   248,   249,   250,
+     251,   252,   253,   254,   256,   255,   257,   259,   258,   261,
+     260,   262,   262,   263,   263,   264,   265,   267,   266,   268,
+     268,   269,   269,   269,   270,   271,   273,   272,   275,   274,
+     276,   276,   277,   277,   279,   278,   281,   280,   282,   282,
+     282,   283,   283,   285,   284,   287,   286,   289,   288,   290,
+     290,   291,   291,   291,   291,   291,   291,   292,   293,   294,
+     295,   296,   297,   299,   298,   300,   300,   301,   301,   303,
+     302,   305,   304,   306,   306,   307,   307,   307,   307,   307,
+     307,   307,   307,   307,   307,   307,   307,   307,   307,   307,
+     307,   307,   307,   307,   307,   309,   308,   311,   310,   313,
+     312,   315,   314,   317,   316,   319,   318,   320,   320,   320,
+     321,   322,   324,   323,   325,   325,   326,   326,   328,   327,
+     329,   329,   330,   330,   330,   330,   330,   330,   330,   330,
+     330,   330,   330,   330,   330,   330,   330,   330,   330,   332,
+     331,   334,   333,   335,   335,   336,   336,   338,   337,   340,
+     339,   341,   341,   342,   342,   343,   343,   343,   343,   343,
+     343,   343,   343,   343,   343,   344,   345,   346,   348,   347,
+     350,   349,   352,   351,   353,   355,   354,   356,   358,   357,
+     359,   359,   360,   360,   362,   361,   364,   363,   365,   365,
+     366,   366,   367,   367,   367,   367,   367,   367,   367,   367,
+     367,   368,   370,   369,   371,   372,   373,   374,   376,   375,
+     377,   377,   378,   378,   380,   379,   382,   381,   383,   383,
+     384,   384,   384,   384,   384,   384,   384,   386,   385,   388,
+     387,   390,   389,   392,   391,   393,   393,   394,   394,   396,
+     395,   398,   397,   399,   399,   400,   400,   400,   400,   400,
+     400,   400,   400,   400,   400,   400,   402,   401,   403,   405,
+     404,   406,   407,   409,   408,   410,   410,   411,   411,   413,
+     412,   415,   414,   416,   416,   417,   417,   418,   418,   418,
+     418,   418,   418,   418,   418,   418,   418,   418,   420,   419,
+     422,   421,   424,   423,   426,   425,   428,   427,   430,   429,
+     432,   431,   434,   433,   435,   435,   437,   436,   439,   438,
+     440,   440,   442,   441,   443,   443,   444,   444,   445,   445,
+     445,   445,   445,   445,   445,   446,   448,   447,   449,   451,
+     450,   452,   452,   453,   453,   453,   453,   453,   453,   453,
+     453,   453,   455,   454,   456,   456,   456,   457,   459,   458,
+     460,   461,   462,   464,   463,   465,   465,   466,   466,   466,
+     466,   466,   468,   467,   470,   469,   472,   471,   474,   473,
+     475,   475,   476,   476,   476,   476,   476,   476,   476,   476,
+     476,   476,   476,   476,   476,   476,   476,   476,   476,   476,
+     476,   477,   479,   478,   481,   480,   482,   484,   483,   485,
+     486,   488,   487,   489,   489,   491,   490,   492,   493,   494,
+     496,   495,   497,   497,   497,   497,   497,   499,   498,   501,
+     500,   503,   502,   505,   504,   507,   506,   509,   508,   511,
+     510,   513,   512,   514,   514,   515,   517,   516,   518,   518,
+     520,   519,   521,   521,   522,   522,   522,   522,   522,   522,
+     522,   523,   525,   524,   527,   526,   528,   528,   530,   529,
+     531,   531,   532,   532,   532,   532,   534,   533,   535,   536,
+     537
   };
 
   const unsigned char
@@ -4488,15 +4532,16 @@ namespace isc { namespace dhcp {
        3,     3,     3,     0,     6,     1,     3,     1,     1,     1,
        1,     1,     0,     4,     0,     4,     0,     6,     0,     4,
        1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
-       0,     4,     0,     4,     3,     0,     4,     3,     3,     0,
-       4,     1,     1,     0,     4,     3,     3,     3,     0,     4,
-       1,     1,     1,     1,     1,     0,     4,     0,     4,     0,
-       4,     0,     4,     0,     6,     0,     4,     1,     3,     1,
-       0,     6,     1,     3,     0,     4,     1,     3,     1,     1,
-       1,     1,     1,     1,     1,     3,     0,     4,     0,     6,
-       1,     3,     0,     4,     1,     3,     1,     1,     1,     1,
-       0,     4,     3,     3,     3
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     3,     0,     4,     0,     4,     3,     0,     4,     3,
+       3,     0,     4,     1,     1,     0,     4,     3,     3,     3,
+       0,     4,     1,     1,     1,     1,     1,     0,     4,     0,
+       4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
+       6,     0,     4,     1,     3,     1,     0,     6,     1,     3,
+       0,     4,     1,     3,     1,     1,     1,     1,     1,     1,
+       1,     3,     0,     4,     0,     6,     1,     3,     0,     4,
+       1,     3,     1,     1,     1,     1,     0,     4,     3,     3,
+       3
   };
 
 
@@ -4545,7 +4590,8 @@ namespace isc { namespace dhcp {
   "\"override-no-update\"", "\"override-client-update\"",
   "\"replace-client-name\"", "\"generated-prefix\"", "\"UDP\"", "\"TCP\"",
   "\"JSON\"", "\"when-present\"", "\"never\"", "\"always\"",
-  "\"when-not-present\"", "\"Logging\"", "\"loggers\"",
+  "\"when-not-present\"", "\"hostname-char-set\"",
+  "\"hostname-char-replacement\"", "\"Logging\"", "\"loggers\"",
   "\"output_options\"", "\"output\"", "\"debuglevel\"", "\"severity\"",
   "\"flush\"", "\"maxsize\"", "\"maxver\"", "\"Dhcp4\"", "\"DhcpDdns\"",
   "\"Control-agent\"", "TOPLEVEL_JSON", "TOPLEVEL_DHCP6", "SUB_DHCP6",
@@ -4632,84 +4678,86 @@ namespace isc { namespace dhcp {
   "$@104", "ncr_protocol_value", "ncr_format", "$@105",
   "always_include_fqdn", "override_no_update", "override_client_update",
   "replace_client_name", "$@106", "replace_client_name_value",
-  "generated_prefix", "$@107", "dhcp4_json_object", "$@108",
-  "dhcpddns_json_object", "$@109", "control_agent_json_object", "$@110",
-  "logging_object", "$@111", "sub_logging", "$@112", "logging_params",
-  "logging_param", "loggers", "$@113", "loggers_entries", "logger_entry",
-  "$@114", "logger_params", "logger_param", "debuglevel", "severity",
-  "$@115", "output_options_list", "$@116", "output_options_list_content",
-  "output_entry", "$@117", "output_params_list", "output_params", "output",
-  "$@118", "flush", "maxsize", "maxver", YY_NULLPTR
+  "generated_prefix", "$@107", "hostname_char_set", "$@108",
+  "hostname_char_replacement", "$@109", "dhcp4_json_object", "$@110",
+  "dhcpddns_json_object", "$@111", "control_agent_json_object", "$@112",
+  "logging_object", "$@113", "sub_logging", "$@114", "logging_params",
+  "logging_param", "loggers", "$@115", "loggers_entries", "logger_entry",
+  "$@116", "logger_params", "logger_param", "debuglevel", "severity",
+  "$@117", "output_options_list", "$@118", "output_options_list_content",
+  "output_entry", "$@119", "output_params_list", "output_params", "output",
+  "$@120", "flush", "maxsize", "maxver", YY_NULLPTR
   };
 
 #if PARSER6_DEBUG
   const unsigned short int
   Dhcp6Parser::yyrline_[] =
   {
-       0,   246,   246,   246,   247,   247,   248,   248,   249,   249,
-     250,   250,   251,   251,   252,   252,   253,   253,   254,   254,
-     255,   255,   256,   256,   257,   257,   258,   258,   259,   259,
-     267,   268,   269,   270,   271,   272,   273,   276,   281,   281,
-     292,   295,   296,   299,   303,   310,   310,   317,   318,   321,
-     325,   332,   332,   339,   340,   343,   347,   358,   368,   368,
-     383,   384,   388,   389,   390,   391,   392,   393,   396,   396,
-     411,   411,   420,   421,   426,   427,   428,   429,   430,   431,
-     432,   433,   434,   435,   436,   437,   438,   439,   440,   441,
-     442,   443,   444,   445,   446,   447,   448,   449,   450,   451,
-     454,   459,   464,   469,   474,   479,   479,   490,   490,   499,
-     500,   503,   504,   505,   506,   507,   510,   510,   520,   526,
-     526,   538,   538,   550,   550,   560,   561,   564,   565,   568,
-     568,   578,   579,   582,   583,   584,   585,   586,   587,   588,
-     589,   590,   591,   592,   593,   594,   595,   596,   597,   598,
-     599,   602,   602,   609,   610,   611,   612,   615,   615,   623,
-     623,   631,   631,   639,   644,   644,   652,   657,   662,   667,
-     672,   677,   682,   687,   692,   692,   700,   705,   705,   714,
-     714,   724,   725,   728,   729,   732,   737,   742,   742,   752,
-     753,   756,   757,   758,   761,   766,   773,   773,   783,   783,
-     793,   794,   797,   798,   801,   801,   811,   811,   821,   822,
-     823,   826,   827,   830,   830,   838,   838,   846,   846,   857,
-     858,   861,   862,   863,   864,   865,   866,   869,   874,   879,
-     884,   889,   894,   902,   902,   915,   916,   919,   920,   927,
-     927,   953,   953,   964,   965,   969,   970,   971,   972,   973,
-     974,   975,   976,   977,   978,   979,   980,   981,   982,   983,
-     984,   985,   986,   987,   988,   991,   991,   999,   999,  1007,
-    1007,  1015,  1015,  1023,  1023,  1033,  1033,  1040,  1041,  1042,
-    1045,  1050,  1058,  1058,  1069,  1070,  1074,  1075,  1078,  1078,
-    1086,  1087,  1090,  1091,  1092,  1093,  1094,  1095,  1096,  1097,
-    1098,  1099,  1100,  1101,  1102,  1103,  1104,  1105,  1106,  1113,
-    1113,  1126,  1126,  1135,  1136,  1139,  1140,  1145,  1145,  1160,
-    1160,  1174,  1175,  1178,  1179,  1182,  1183,  1184,  1185,  1186,
-    1187,  1188,  1189,  1190,  1191,  1194,  1196,  1201,  1203,  1203,
-    1211,  1211,  1219,  1219,  1227,  1229,  1229,  1237,  1246,  1246,
-    1258,  1259,  1264,  1265,  1270,  1270,  1282,  1282,  1294,  1295,
-    1300,  1301,  1306,  1307,  1308,  1309,  1310,  1311,  1312,  1313,
-    1314,  1317,  1319,  1319,  1327,  1329,  1331,  1336,  1344,  1344,
-    1356,  1357,  1360,  1361,  1364,  1364,  1374,  1374,  1383,  1384,
-    1387,  1388,  1389,  1390,  1391,  1392,  1393,  1396,  1396,  1404,
-    1404,  1429,  1429,  1459,  1459,  1471,  1472,  1475,  1476,  1479,
-    1479,  1491,  1491,  1503,  1504,  1507,  1508,  1509,  1510,  1511,
-    1512,  1513,  1514,  1515,  1516,  1517,  1520,  1520,  1528,  1533,
-    1533,  1541,  1546,  1554,  1554,  1564,  1565,  1568,  1569,  1572,
-    1572,  1581,  1581,  1590,  1591,  1594,  1595,  1599,  1600,  1601,
-    1602,  1603,  1604,  1605,  1606,  1607,  1608,  1609,  1612,  1612,
-    1622,  1622,  1632,  1632,  1640,  1640,  1648,  1648,  1656,  1656,
-    1664,  1664,  1677,  1677,  1687,  1688,  1691,  1691,  1702,  1702,
-    1712,  1713,  1716,  1716,  1726,  1727,  1730,  1731,  1734,  1735,
-    1736,  1737,  1738,  1739,  1740,  1743,  1745,  1745,  1753,  1761,
-    1761,  1773,  1774,  1777,  1778,  1779,  1780,  1781,  1782,  1783,
-    1784,  1785,  1788,  1788,  1795,  1796,  1797,  1800,  1805,  1805,
-    1813,  1818,  1825,  1832,  1832,  1842,  1843,  1846,  1847,  1848,
-    1849,  1850,  1853,  1853,  1861,  1861,  1871,  1871,  1883,  1883,
-    1893,  1894,  1897,  1898,  1899,  1900,  1901,  1902,  1903,  1904,
-    1905,  1906,  1907,  1908,  1909,  1910,  1911,  1912,  1913,  1916,
-    1921,  1921,  1929,  1929,  1937,  1942,  1942,  1950,  1955,  1960,
-    1960,  1968,  1969,  1972,  1972,  1980,  1985,  1990,  1995,  1995,
-    2003,  2006,  2009,  2012,  2015,  2021,  2021,  2031,  2031,  2038,
-    2038,  2045,  2045,  2058,  2058,  2068,  2068,  2079,  2080,  2084,
-    2088,  2088,  2100,  2101,  2105,  2105,  2113,  2114,  2117,  2118,
-    2119,  2120,  2121,  2122,  2123,  2126,  2131,  2131,  2139,  2139,
-    2149,  2150,  2153,  2153,  2161,  2162,  2165,  2166,  2167,  2168,
-    2171,  2171,  2179,  2184,  2189
+       0,   248,   248,   248,   249,   249,   250,   250,   251,   251,
+     252,   252,   253,   253,   254,   254,   255,   255,   256,   256,
+     257,   257,   258,   258,   259,   259,   260,   260,   261,   261,
+     269,   270,   271,   272,   273,   274,   275,   278,   283,   283,
+     294,   297,   298,   301,   305,   312,   312,   319,   320,   323,
+     327,   334,   334,   341,   342,   345,   349,   360,   370,   370,
+     385,   386,   390,   391,   392,   393,   394,   395,   398,   398,
+     413,   413,   422,   423,   428,   429,   430,   431,   432,   433,
+     434,   435,   436,   437,   438,   439,   440,   441,   442,   443,
+     444,   445,   446,   447,   448,   449,   450,   451,   452,   453,
+     456,   461,   466,   471,   476,   481,   481,   492,   492,   501,
+     502,   505,   506,   507,   508,   509,   512,   512,   522,   528,
+     528,   540,   540,   552,   552,   562,   563,   566,   567,   570,
+     570,   580,   581,   584,   585,   586,   587,   588,   589,   590,
+     591,   592,   593,   594,   595,   596,   597,   598,   599,   600,
+     601,   604,   604,   611,   612,   613,   614,   617,   617,   625,
+     625,   633,   633,   641,   646,   646,   654,   659,   664,   669,
+     674,   679,   684,   689,   694,   694,   702,   707,   707,   716,
+     716,   726,   727,   730,   731,   734,   739,   744,   744,   754,
+     755,   758,   759,   760,   763,   768,   775,   775,   785,   785,
+     795,   796,   799,   800,   803,   803,   813,   813,   823,   824,
+     825,   828,   829,   832,   832,   840,   840,   848,   848,   859,
+     860,   863,   864,   865,   866,   867,   868,   871,   876,   881,
+     886,   891,   896,   904,   904,   917,   918,   921,   922,   929,
+     929,   955,   955,   966,   967,   971,   972,   973,   974,   975,
+     976,   977,   978,   979,   980,   981,   982,   983,   984,   985,
+     986,   987,   988,   989,   990,   993,   993,  1001,  1001,  1009,
+    1009,  1017,  1017,  1025,  1025,  1035,  1035,  1042,  1043,  1044,
+    1047,  1052,  1060,  1060,  1071,  1072,  1076,  1077,  1080,  1080,
+    1088,  1089,  1092,  1093,  1094,  1095,  1096,  1097,  1098,  1099,
+    1100,  1101,  1102,  1103,  1104,  1105,  1106,  1107,  1108,  1115,
+    1115,  1128,  1128,  1137,  1138,  1141,  1142,  1147,  1147,  1162,
+    1162,  1176,  1177,  1180,  1181,  1184,  1185,  1186,  1187,  1188,
+    1189,  1190,  1191,  1192,  1193,  1196,  1198,  1203,  1205,  1205,
+    1213,  1213,  1221,  1221,  1229,  1231,  1231,  1239,  1248,  1248,
+    1260,  1261,  1266,  1267,  1272,  1272,  1284,  1284,  1296,  1297,
+    1302,  1303,  1308,  1309,  1310,  1311,  1312,  1313,  1314,  1315,
+    1316,  1319,  1321,  1321,  1329,  1331,  1333,  1338,  1346,  1346,
+    1358,  1359,  1362,  1363,  1366,  1366,  1376,  1376,  1385,  1386,
+    1389,  1390,  1391,  1392,  1393,  1394,  1395,  1398,  1398,  1406,
+    1406,  1431,  1431,  1461,  1461,  1473,  1474,  1477,  1478,  1481,
+    1481,  1493,  1493,  1505,  1506,  1509,  1510,  1511,  1512,  1513,
+    1514,  1515,  1516,  1517,  1518,  1519,  1522,  1522,  1530,  1535,
+    1535,  1543,  1548,  1556,  1556,  1566,  1567,  1570,  1571,  1574,
+    1574,  1583,  1583,  1592,  1593,  1596,  1597,  1601,  1602,  1603,
+    1604,  1605,  1606,  1607,  1608,  1609,  1610,  1611,  1614,  1614,
+    1624,  1624,  1634,  1634,  1642,  1642,  1650,  1650,  1658,  1658,
+    1666,  1666,  1679,  1679,  1689,  1690,  1693,  1693,  1704,  1704,
+    1714,  1715,  1718,  1718,  1728,  1729,  1732,  1733,  1736,  1737,
+    1738,  1739,  1740,  1741,  1742,  1745,  1747,  1747,  1755,  1763,
+    1763,  1775,  1776,  1779,  1780,  1781,  1782,  1783,  1784,  1785,
+    1786,  1787,  1790,  1790,  1797,  1798,  1799,  1802,  1807,  1807,
+    1815,  1820,  1827,  1834,  1834,  1844,  1845,  1848,  1849,  1850,
+    1851,  1852,  1855,  1855,  1863,  1863,  1873,  1873,  1885,  1885,
+    1895,  1896,  1899,  1900,  1901,  1902,  1903,  1904,  1905,  1906,
+    1907,  1908,  1909,  1910,  1911,  1912,  1913,  1914,  1915,  1916,
+    1917,  1920,  1925,  1925,  1933,  1933,  1941,  1946,  1946,  1954,
+    1959,  1964,  1964,  1972,  1973,  1976,  1976,  1984,  1989,  1994,
+    1999,  1999,  2007,  2010,  2013,  2016,  2019,  2025,  2025,  2033,
+    2033,  2041,  2041,  2051,  2051,  2058,  2058,  2065,  2065,  2078,
+    2078,  2088,  2088,  2099,  2100,  2104,  2108,  2108,  2120,  2121,
+    2125,  2125,  2133,  2134,  2137,  2138,  2139,  2140,  2141,  2142,
+    2143,  2146,  2151,  2151,  2159,  2159,  2169,  2170,  2173,  2173,
+    2181,  2182,  2185,  2186,  2187,  2188,  2191,  2191,  2199,  2204,
+    2209
   };
 
   // Print the state stack on the debug stream.
@@ -4744,8 +4792,8 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp6_parser.yy" // lalr1.cc:1167
 } } // isc::dhcp
-#line 4748 "dhcp6_parser.cc" // lalr1.cc:1167
-#line 2194 "dhcp6_parser.yy" // lalr1.cc:1168
+#line 4796 "dhcp6_parser.cc" // lalr1.cc:1167
+#line 2214 "dhcp6_parser.yy" // lalr1.cc:1168
 
 
 void
index 9d54ba18e6f5af02aafb92404cdb59958fe95cb2..2c65f9ccade904adc0ffd5b431533cb9f093db82 100644 (file)
@@ -479,36 +479,38 @@ namespace isc { namespace dhcp {
         TOKEN_NEVER = 387,
         TOKEN_ALWAYS = 388,
         TOKEN_WHEN_NOT_PRESENT = 389,
-        TOKEN_LOGGING = 390,
-        TOKEN_LOGGERS = 391,
-        TOKEN_OUTPUT_OPTIONS = 392,
-        TOKEN_OUTPUT = 393,
-        TOKEN_DEBUGLEVEL = 394,
-        TOKEN_SEVERITY = 395,
-        TOKEN_FLUSH = 396,
-        TOKEN_MAXSIZE = 397,
-        TOKEN_MAXVER = 398,
-        TOKEN_DHCP4 = 399,
-        TOKEN_DHCPDDNS = 400,
-        TOKEN_CONTROL_AGENT = 401,
-        TOKEN_TOPLEVEL_JSON = 402,
-        TOKEN_TOPLEVEL_DHCP6 = 403,
-        TOKEN_SUB_DHCP6 = 404,
-        TOKEN_SUB_INTERFACES6 = 405,
-        TOKEN_SUB_SUBNET6 = 406,
-        TOKEN_SUB_POOL6 = 407,
-        TOKEN_SUB_PD_POOL = 408,
-        TOKEN_SUB_RESERVATION = 409,
-        TOKEN_SUB_OPTION_DEFS = 410,
-        TOKEN_SUB_OPTION_DEF = 411,
-        TOKEN_SUB_OPTION_DATA = 412,
-        TOKEN_SUB_HOOKS_LIBRARY = 413,
-        TOKEN_SUB_DHCP_DDNS = 414,
-        TOKEN_SUB_LOGGING = 415,
-        TOKEN_STRING = 416,
-        TOKEN_INTEGER = 417,
-        TOKEN_FLOAT = 418,
-        TOKEN_BOOLEAN = 419
+        TOKEN_HOSTNAME_CHAR_SET = 390,
+        TOKEN_HOSTNAME_CHAR_REPLACEMENT = 391,
+        TOKEN_LOGGING = 392,
+        TOKEN_LOGGERS = 393,
+        TOKEN_OUTPUT_OPTIONS = 394,
+        TOKEN_OUTPUT = 395,
+        TOKEN_DEBUGLEVEL = 396,
+        TOKEN_SEVERITY = 397,
+        TOKEN_FLUSH = 398,
+        TOKEN_MAXSIZE = 399,
+        TOKEN_MAXVER = 400,
+        TOKEN_DHCP4 = 401,
+        TOKEN_DHCPDDNS = 402,
+        TOKEN_CONTROL_AGENT = 403,
+        TOKEN_TOPLEVEL_JSON = 404,
+        TOKEN_TOPLEVEL_DHCP6 = 405,
+        TOKEN_SUB_DHCP6 = 406,
+        TOKEN_SUB_INTERFACES6 = 407,
+        TOKEN_SUB_SUBNET6 = 408,
+        TOKEN_SUB_POOL6 = 409,
+        TOKEN_SUB_PD_POOL = 410,
+        TOKEN_SUB_RESERVATION = 411,
+        TOKEN_SUB_OPTION_DEFS = 412,
+        TOKEN_SUB_OPTION_DEF = 413,
+        TOKEN_SUB_OPTION_DATA = 414,
+        TOKEN_SUB_HOOKS_LIBRARY = 415,
+        TOKEN_SUB_DHCP_DDNS = 416,
+        TOKEN_SUB_LOGGING = 417,
+        TOKEN_STRING = 418,
+        TOKEN_INTEGER = 419,
+        TOKEN_FLOAT = 420,
+        TOKEN_BOOLEAN = 421
       };
     };
 
@@ -1155,6 +1157,14 @@ namespace isc { namespace dhcp {
     symbol_type
     make_WHEN_NOT_PRESENT (const location_type& l);
 
+    static inline
+    symbol_type
+    make_HOSTNAME_CHAR_SET (const location_type& l);
+
+    static inline
+    symbol_type
+    make_HOSTNAME_CHAR_REPLACEMENT (const location_type& l);
+
     static inline
     symbol_type
     make_LOGGING (const location_type& l);
@@ -1480,12 +1490,12 @@ namespace isc { namespace dhcp {
     enum
     {
       yyeof_ = 0,
-      yylast_ = 981,     ///< Last index in yytable_.
-      yynnts_ = 367,  ///< Number of nonterminal symbols.
+      yylast_ = 992,     ///< Last index in yytable_.
+      yynnts_ = 371,  ///< Number of nonterminal symbols.
       yyfinal_ = 30, ///< Termination state number.
       yyterror_ = 1,
       yyerrcode_ = 256,
-      yyntokens_ = 165  ///< Number of tokens.
+      yyntokens_ = 167  ///< Number of tokens.
     };
 
 
@@ -1543,9 +1553,10 @@ namespace isc { namespace dhcp {
      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
      135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
      145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166
     };
-    const unsigned int user_token_number_max_ = 419;
+    const unsigned int user_token_number_max_ = 421;
     const token_number_type undef_token_ = 2;
 
     if (static_cast<int>(t) <= yyeof_)
@@ -1578,29 +1589,29 @@ namespace isc { namespace dhcp {
   {
       switch (other.type_get ())
     {
-      case 181: // value
-      case 185: // map_value
-      case 235: // db_type
-      case 318: // hr_mode
-      case 454: // duid_type
-      case 487: // ncr_protocol_value
-      case 495: // replace_client_name_value
+      case 183: // value
+      case 187: // map_value
+      case 237: // db_type
+      case 320: // hr_mode
+      case 456: // duid_type
+      case 489: // ncr_protocol_value
+      case 497: // replace_client_name_value
         value.copy< ElementPtr > (other.value);
         break;
 
-      case 164: // "boolean"
+      case 166: // "boolean"
         value.copy< bool > (other.value);
         break;
 
-      case 163: // "floating point"
+      case 165: // "floating point"
         value.copy< double > (other.value);
         break;
 
-      case 162: // "integer"
+      case 164: // "integer"
         value.copy< int64_t > (other.value);
         break;
 
-      case 161: // "constant string"
+      case 163: // "constant string"
         value.copy< std::string > (other.value);
         break;
 
@@ -1621,29 +1632,29 @@ namespace isc { namespace dhcp {
     (void) v;
       switch (this->type_get ())
     {
-      case 181: // value
-      case 185: // map_value
-      case 235: // db_type
-      case 318: // hr_mode
-      case 454: // duid_type
-      case 487: // ncr_protocol_value
-      case 495: // replace_client_name_value
+      case 183: // value
+      case 187: // map_value
+      case 237: // db_type
+      case 320: // hr_mode
+      case 456: // duid_type
+      case 489: // ncr_protocol_value
+      case 497: // replace_client_name_value
         value.copy< ElementPtr > (v);
         break;
 
-      case 164: // "boolean"
+      case 166: // "boolean"
         value.copy< bool > (v);
         break;
 
-      case 163: // "floating point"
+      case 165: // "floating point"
         value.copy< double > (v);
         break;
 
-      case 162: // "integer"
+      case 164: // "integer"
         value.copy< int64_t > (v);
         break;
 
-      case 161: // "constant string"
+      case 163: // "constant string"
         value.copy< std::string > (v);
         break;
 
@@ -1723,29 +1734,29 @@ namespace isc { namespace dhcp {
     // Type destructor.
     switch (yytype)
     {
-      case 181: // value
-      case 185: // map_value
-      case 235: // db_type
-      case 318: // hr_mode
-      case 454: // duid_type
-      case 487: // ncr_protocol_value
-      case 495: // replace_client_name_value
+      case 183: // value
+      case 187: // map_value
+      case 237: // db_type
+      case 320: // hr_mode
+      case 456: // duid_type
+      case 489: // ncr_protocol_value
+      case 497: // replace_client_name_value
         value.template destroy< ElementPtr > ();
         break;
 
-      case 164: // "boolean"
+      case 166: // "boolean"
         value.template destroy< bool > ();
         break;
 
-      case 163: // "floating point"
+      case 165: // "floating point"
         value.template destroy< double > ();
         break;
 
-      case 162: // "integer"
+      case 164: // "integer"
         value.template destroy< int64_t > ();
         break;
 
-      case 161: // "constant string"
+      case 163: // "constant string"
         value.template destroy< std::string > ();
         break;
 
@@ -1772,29 +1783,29 @@ namespace isc { namespace dhcp {
     super_type::move(s);
       switch (this->type_get ())
     {
-      case 181: // value
-      case 185: // map_value
-      case 235: // db_type
-      case 318: // hr_mode
-      case 454: // duid_type
-      case 487: // ncr_protocol_value
-      case 495: // replace_client_name_value
+      case 183: // value
+      case 187: // map_value
+      case 237: // db_type
+      case 320: // hr_mode
+      case 456: // duid_type
+      case 489: // ncr_protocol_value
+      case 497: // replace_client_name_value
         value.move< ElementPtr > (s.value);
         break;
 
-      case 164: // "boolean"
+      case 166: // "boolean"
         value.move< bool > (s.value);
         break;
 
-      case 163: // "floating point"
+      case 165: // "floating point"
         value.move< double > (s.value);
         break;
 
-      case 162: // "integer"
+      case 164: // "integer"
         value.move< int64_t > (s.value);
         break;
 
-      case 161: // "constant string"
+      case 163: // "constant string"
         value.move< std::string > (s.value);
         break;
 
@@ -1869,7 +1880,7 @@ namespace isc { namespace dhcp {
      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
      395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
      405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
-     415,   416,   417,   418,   419
+     415,   416,   417,   418,   419,   420,   421
     };
     return static_cast<token_type> (yytoken_number_[type]);
   }
@@ -2672,6 +2683,18 @@ namespace isc { namespace dhcp {
     return symbol_type (token::TOKEN_WHEN_NOT_PRESENT, l);
   }
 
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_HOSTNAME_CHAR_SET (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_HOSTNAME_CHAR_SET, l);
+  }
+
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_HOSTNAME_CHAR_REPLACEMENT (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_HOSTNAME_CHAR_REPLACEMENT, l);
+  }
+
   Dhcp6Parser::symbol_type
   Dhcp6Parser::make_LOGGING (const location_type& l)
   {
@@ -2855,7 +2878,7 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp6_parser.yy" // lalr1.cc:377
 } } // isc::dhcp
-#line 2859 "dhcp6_parser.h" // lalr1.cc:377
+#line 2882 "dhcp6_parser.h" // lalr1.cc:377
 
 
 
index 32febb744a4fe80e4535066a5d716b5b28487ee3..9c8d487be10399065bbf31cdf49198680db6d6e0 100644 (file)
@@ -188,6 +188,8 @@ using namespace std;
   NEVER "never"
   ALWAYS "always"
   WHEN_NOT_PRESENT "when-not-present"
+  HOSTNAME_CHAR_SET "hostname-char-set"
+  HOSTNAME_CHAR_REPLACEMENT "hostname-char-replacement"
 
   LOGGING "Logging"
   LOGGERS "loggers"
@@ -1908,6 +1910,8 @@ dhcp_ddns_param: enable_updates
                | override_client_update
                | replace_client_name
                | generated_prefix
+               | hostname_char_set
+               | hostname_char_replacement
                | user_context
                | comment
                | unknown_map_entry
@@ -2026,6 +2030,22 @@ generated_prefix: GENERATED_PREFIX {
     ctx.leave();
 };
 
+hostname_char_set: HOSTNAME_CHAR_SET {
+    ctx.enter(ctx.NO_KEYWORD);
+} COLON STRING {
+    ElementPtr s(new StringElement($4, ctx.loc2pos(@4)));
+    ctx.stack_.back()->set("hostname-char-set", s);
+    ctx.leave();
+};
+
+hostname_char_replacement: HOSTNAME_CHAR_REPLACEMENT {
+    ctx.enter(ctx.NO_KEYWORD);
+} COLON STRING {
+    ElementPtr s(new StringElement($4, ctx.loc2pos(@4)));
+    ctx.stack_.back()->set("hostname-char-replacement", s);
+    ctx.leave();
+};
+
 // JSON entries for Dhcp4 and DhcpDdns
 
 dhcp4_json_object: DHCP4 {
index 70b6cdee04780a0022efc04902340a06fb7d18f1..5abbff697d3d8badd877cfc1b7f4847b6d2ccb29 100644 (file)
@@ -4555,7 +4555,9 @@ TEST_F(Dhcp6ParserTest, d2ClientConfig) {
         "     \"override-client-update\" : true, "
         "     \"replace-client-name\" : \"when-present\", "
         "     \"generated-prefix\" : \"test.prefix\", "
-        "     \"qualifying-suffix\" : \"test.suffix.\" },"
+        "     \"qualifying-suffix\" : \"test.suffix.\", "
+        "     \"hostname-char-set\" : \"[^A-Za-z0-9_-]\", "
+        "     \"hostname-char-replacement\" : \"x\" }, "
         "\"valid-lifetime\": 4000 }";
 
     // Convert the JSON string to configuration elements.
@@ -4592,6 +4594,8 @@ TEST_F(Dhcp6ParserTest, d2ClientConfig) {
     EXPECT_EQ(D2ClientConfig::RCM_WHEN_PRESENT, d2_client_config->getReplaceClientNameMode());
     EXPECT_EQ("test.prefix", d2_client_config->getGeneratedPrefix());
     EXPECT_EQ("test.suffix.", d2_client_config->getQualifyingSuffix());
+    EXPECT_EQ("[^A-Za-z0-9_-]", d2_client_config->getHostnameCharSet());
+    EXPECT_EQ("x", d2_client_config->getHostnameCharReplacement());
 }
 
 // This test checks the ability of the server to handle a configuration
index 9188a5a36cc4a954839b709b6051457c4389d446..17b8da438af8f6bbd2ffc848955e7e860531f6c1 100644 (file)
@@ -129,7 +129,7 @@ public:
                                   ((mask & REPLACE_CLIENT_NAME) ?
                                    D2ClientConfig::RCM_WHEN_PRESENT
                                    : D2ClientConfig::RCM_NEVER),
-                                  "myhost", "example.com")));
+                                  "myhost", "example.com", "", "")));
         ASSERT_NO_THROW(CfgMgr::instance().setD2ClientConfig(cfg));
         ASSERT_NO_THROW(srv_->startD2());
     }
index 82f56b05648d718e9bd631d6ae316a8706d0d1ba..7705b56cd08e38c5eb6ff878775db89b7c23c449 100644 (file)
@@ -1739,6 +1739,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -1795,6 +1797,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -1874,6 +1878,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -2019,6 +2025,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -2164,6 +2172,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -2309,6 +2319,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -2388,6 +2400,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -2468,6 +2482,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -2548,6 +2564,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -2657,6 +2675,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -2736,6 +2756,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -2816,6 +2838,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -2898,6 +2922,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -2995,6 +3021,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3075,6 +3103,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3137,6 +3167,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3199,6 +3231,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3270,6 +3304,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3332,6 +3368,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3394,6 +3432,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3490,6 +3530,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3586,6 +3628,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3692,6 +3736,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3784,6 +3830,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -3916,6 +3964,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -4035,6 +4085,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -4167,6 +4219,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -4261,6 +4315,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -4359,6 +4415,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -4415,6 +4473,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -4471,6 +4531,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -4550,6 +4612,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -4629,6 +4693,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -4777,6 +4843,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -4871,6 +4939,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -4973,6 +5043,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": true,\n"
 "            \"enable-updates\": true,\n"
 "            \"generated-prefix\": \"test.prefix\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 2048,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -5052,6 +5124,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -5250,6 +5324,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -5352,6 +5428,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -5408,6 +5486,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -5464,6 +5544,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -5609,6 +5691,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -5665,6 +5749,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -5717,6 +5803,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -5769,6 +5857,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -5821,6 +5911,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -5887,6 +5979,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -5966,6 +6060,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -6045,6 +6141,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -6125,6 +6223,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -6210,6 +6310,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -6295,6 +6397,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -6376,6 +6480,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -6458,6 +6564,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -6545,6 +6653,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -6642,6 +6752,8 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"always-include-fqdn\": false,\n"
 "            \"enable-updates\": false,\n"
 "            \"generated-prefix\": \"myhost\",\n"
+"            \"hostname-char-replacement\": \"\",\n"
+"            \"hostname-char-set\": \"\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
index f1ecc3341df41ac99f411b10552442b58cb4c8df..903b50f6189757cd5433d95b7e8112001936b055 100644 (file)
@@ -207,25 +207,25 @@ D2ClientConfig::toText() const {
 
     stream << "enable_updates: " << (enable_updates_ ? "yes" : "no");
     if (enable_updates_) {
-        stream << ", server_ip: " << server_ip_.toText()
-               << ", server_port: " << server_port_
-               << ", sender_ip: " << sender_ip_.toText()
-               << ", sender_port: " << sender_port_
-               << ", max_queue_size: " << max_queue_size_
-               << ", ncr_protocol: " << ncrProtocolToString(ncr_protocol_)
-               << ", ncr_format: " << ncrFormatToString(ncr_format_)
-               << ", always_include_fqdn: " << (always_include_fqdn_ ?
+        stream << ", server-ip: " << server_ip_.toText()
+               << ", server-port: " << server_port_
+               << ", sender-ip: " << sender_ip_.toText()
+               << ", sender-port: " << sender_port_
+               << ", max-queue-size: " << max_queue_size_
+               << ", ncr-protocol: " << ncrProtocolToString(ncr_protocol_)
+               << ", ncr-format: " << ncrFormatToString(ncr_format_)
+               << ", always-include-fqdn: " << (always_include_fqdn_ ?
                                                 "yes" : "no")
-               << ", override_no_update: " << (override_no_update_ ?
+               << ", override-no-update: " << (override_no_update_ ?
                                                "yes" : "no")
-               << ", override_client_update: " << (override_client_update_ ?
+               << ", override-client-update: " << (override_client_update_ ?
                                                    "yes" : "no")
-               << ", replace_client_name: "
+               << ", replace-client-name: "
                << replaceClientNameModeToString(replace_client_name_mode_)
-               << ", generated_prefix: [" << generated_prefix_ << "]"
-               << ", qualifying_suffix: [" << qualifying_suffix_ << "]"
-               << ", hostname_char_set: [" << hostname_char_set_ << "]"
-               << ", hostname_char_replacement: [" << hostname_char_replacement_ << "]";
+               << ", generated-prefix: [" << generated_prefix_ << "]"
+               << ", qualifying-suffix: [" << qualifying_suffix_ << "]"
+               << ", hostname-char-set: [" << hostname_char_set_ << "]"
+               << ", hostname-char-replacement: [" << hostname_char_replacement_ << "]";
     }
 
     return (stream.str());