]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
Add "nonvolatile" ntp.conf directive to control how often the
authorDave Hart <hart@ntp.org>
Mon, 22 Nov 2010 03:17:40 +0000 (03:17 +0000)
committerDave Hart <hart@ntp.org>
Mon, 22 Nov 2010 03:17:40 +0000 (03:17 +0000)
  driftfile is written.

bk: 4ce9e0d489zfCn-HLAD1xW1o0rEvkg

ChangeLog
include/ntp.h
ntpd/complete.conf
ntpd/ntp_config.c
ntpd/ntp_parser.c
ntpd/ntp_parser.y
ntpd/ntp_scanner.c

index 01f99267771bc177b5e0ff6da079b56f06b9b438..392afce1cbb03390f72ef34ff399554468fc66d7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -9,6 +9,8 @@
 * Add ntp-keygen -l/--lifetime to control certificate expiry.
 * JJY driver improvements for Tristate JJY01/02, including changes
   to its clockstats format.
+* Add "nonvolatile" ntp.conf directive to control how often the
+  driftfile is written.
 (4.2.7p83) 2010/11/17 Released by Harlan Stenn <stenn@ntp.org>
 * [Bug 1727] ntp-keygen PLEN, ILEN undeclared --without-crypto.
 * Remove top-level libopts, use sntp/libopts.
index 59416110cb1b2b6437db35272c7bccfb91547b03..d4c56b626210f1588950d9f1b46681415d8f277e 100644 (file)
@@ -705,7 +705,6 @@ struct pkt {
 #define        PROTO_BEACON            25
 #define        PROTO_ORPHAN            26
 #define        PROTO_ORPHWAIT          27
-#define        PROTO_NONVOLATILE       28
 
 /*
  * Configuration items for the loop filter
index 677bb1ce3680cc8ec3e637066e808b785ef9997d..6d85d6c0ff3f49ac44e7fa2411df3f7b943b7951 100644 (file)
@@ -1,6 +1,7 @@
 saveconfigdir "/etc/ntp/conf"
-driftfile "/etc/ntp.drift"
+driftfile "/etc/ntp.drift" 1e-7
 logfile "/var/log/ntp.log"
+nonvolatile 1e-7
 logconfig =all -allinfo -allevents -allstatistics -allstatus +allall -clockinfo -clockevents -clockstatistics -clockstatus +clockall -syncinfo -syncevents -syncstatistics -syncstatus +syncall -sysinfo -sysevents -sysstatistics -sysstatus +sysall
 statsdir "/etc/ntp/stats"
 statistics loopstats peerstats
@@ -21,7 +22,7 @@ controlkey 12
 requestkey 12
 enable auth ntp monitor
 disable bclient calibrate kernel
-tos beacon 3600 ceiling 16 cohort 0 floor 1 maxclock 10 maxdist 1.5 minclock 3 mindist 0.001 minsane 1 nonvolatile 1.1 orphan 16 orphanwait 300
+tos beacon 3600 ceiling 16 cohort 0 floor 1 maxclock 10 maxdist 1.5 minclock 3 mindist 0.001 minsane 1 orphan 16 orphanwait 300
 tinker allan 1500 dispersion 15 freq 0 huffpuff 7200 panic 1000 step 0.128 stepout 900
 broadcastclient
 server 127.127.1.0 mode 64 prefer true
index ad8a2f02b8a372ea04044064dc28ea4633d5f058..ad88f8fb356a66bcf6f2c14e4f4922c3e37ab768 100644 (file)
@@ -37,6 +37,7 @@
 #include "ntp_refclock.h"
 #include "ntp_filegen.h"
 #include "ntp_stdlib.h"
+#include "lib_strbuf.h"
 #include "ntp_assert.h"
 #include "ntpd-opts.h"
 #include "ntp_random.h"
@@ -336,6 +337,7 @@ enum gnn_type {
 };
 
 void ntpd_set_tod_using(const char *);
+static char * normal_dtoa(double);
 static unsigned long get_pfxmatch(char **s, struct masks *m);
 static unsigned long get_match(char *s, struct masks *m);
 static unsigned long get_logmask(char *s);
@@ -512,41 +514,37 @@ dump_config_tree(
        /* For options I didn't find documentation I'll just output its name and the cor. value */
        atrv = HEAD_PFIFO(ptree->vars);
        for ( ; atrv != NULL; atrv = atrv->link) {
-               switch (atrv->attr) {
+               switch (atrv->type) {
 #ifdef DEBUG
                default:
                        fprintf(df, "\n# dump error:\n"
-                               "# unknown vars token %s\n",
+                               "# unknown vars type %d (%s) for %s\n",
+                               atrv->type, token_name(atrv->type),
                                token_name(atrv->attr));
                        break;
 #endif
-               /* doubles */
-               case T_Broadcastdelay:
-               case T_Tick:
-               case T_WanderThreshold:
-                       fprintf(df, "%s %g\n",
-                               keyword(atrv->attr),
-                               atrv->value.d);
+               case T_Double:
+                       fprintf(df, "%s %s\n", keyword(atrv->attr),
+                               normal_dtoa(atrv->value.d));
                        break;
                        
-               /* ints */
-#ifdef AUTOKEY
-               case T_Automax:
-#endif
-                       fprintf(df, "%s %d\n",
-                               keyword(atrv->attr),
+               case T_Integer:
+                       fprintf(df, "%s %d\n", keyword(atrv->attr),
                                atrv->value.i);
                        break;
 
-               /* strings */
-               case T_Driftfile:
-               case T_Leapfile:
-               case T_Logfile:
-               case T_Pidfile:
-               case T_Saveconfigdir:
-                       fprintf(df, "%s \"%s\"\n",
-                               keyword(atrv->attr),
+               case T_String:
+                       fprintf(df, "%s \"%s\"", keyword(atrv->attr),
                                atrv->value.s);
+                       if (T_Driftfile == atrv->attr &&
+                           atrv->link != NULL &&
+                           T_WanderThreshold == atrv->link->attr) {
+                               atrv = atrv->link;
+                               fprintf(df, " %s\n",
+                                       normal_dtoa(atrv->value.d));
+                       } else {
+                               fprintf(df, "\n");
+                       }
                        break;
                }
        }
@@ -687,9 +685,9 @@ dump_config_tree(
                                break;
 
                        case T_Double:
-                               fprintf(df, " %s %g", 
+                               fprintf(df, " %s %s", 
                                        keyword(atrv->attr),
-                                       atrv->value.d);
+                                       normal_dtoa(atrv->value.d));
                                break;
                        }
                }
@@ -701,8 +699,8 @@ dump_config_tree(
                fprintf(df, "tinker");
                for ( ; atrv != NULL; atrv = atrv->link) {
                        NTP_INSIST(T_Double == atrv->type);
-                       fprintf(df, " %s %g", keyword(atrv->attr),
-                               atrv->value.d);
+                       fprintf(df, " %s %s", keyword(atrv->attr),
+                               normal_dtoa(atrv->value.d));
                }
                fprintf(df, "\n");
        }
@@ -792,9 +790,9 @@ dump_config_tree(
                                        break;
 #endif
                                case T_Double:
-                                       fprintf(df, " %s %g",
+                                       fprintf(df, " %s %s",
                                                keyword(atrv->attr),
-                                               atrv->value.d);
+                                               normal_dtoa(atrv->value.d));
                                        break;
 
                                case T_Integer:
@@ -1961,10 +1959,6 @@ config_tos(
                case T_Beacon:
                        item = PROTO_BEACON;
                        break;
-
-               case T_Nonvolatile:
-                       item = PROTO_NONVOLATILE;
-                       break;
                }
                proto_config(item, 0, tos->value.d, NULL);
        }
@@ -3356,7 +3350,8 @@ config_vars(
                                stats_config(STATS_FREQ_FILE, curr_var->value.s);
                        break;
 
-               case T_WanderThreshold:
+               case T_WanderThreshold:         /* FALLTHROUGH */
+               case T_Nonvolatile:
                        wander_threshold = curr_var->value.d;
                        break;
 
@@ -4375,6 +4370,40 @@ ntpd_set_tod_using(
 }
 
 
+static char *
+normal_dtoa(
+       double d
+       )
+{
+       char *  buf;
+       char *  pch_e;
+       char *  pch_nz;
+
+       LIB_GETBUF(buf);
+       snprintf(buf, LIB_BUFLENGTH, "%g", d);
+
+       /* use lowercase 'e', strip any leading zeroes in exponent */
+       pch_e = strchr(buf, 'e');
+       if (NULL == pch_e) {
+               pch_e = strchr(buf, 'E');
+               if (NULL == pch_e)
+                       return buf;
+               *pch_e = 'e';
+       }
+       pch_e++;
+       if ('-' == *pch_e)
+               pch_e++;
+       pch_nz = pch_e;
+       while ('0' == *pch_nz)
+               pch_nz++;
+       if (pch_nz == pch_e)
+               return buf;
+       strncpy(pch_e, pch_nz, LIB_BUFLENGTH - (pch_e - buf));
+
+       return buf;
+}
+
+
 /* FUNCTIONS COPIED FROM THE OLDER ntp_config.c
  * --------------------------------------------
  */
index c411cdcc7e941321520f51eba4cc95aafc56f057..b15a4d834f2e3ba6eb863893e9a0c47394b17388 100644 (file)
@@ -732,7 +732,7 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  181
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   574
+#define YYLAST   584
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  180
@@ -812,18 +812,18 @@ static const yytype_uint16 yyprhs[] =
      133,   136,   139,   142,   145,   148,   149,   152,   155,   158,
      160,   162,   164,   166,   168,   171,   174,   176,   179,   182,
      185,   187,   189,   191,   193,   195,   197,   199,   201,   203,
-     205,   207,   210,   213,   217,   220,   222,   224,   226,   228,
-     230,   232,   234,   236,   238,   239,   242,   245,   248,   250,
+     205,   208,   211,   215,   218,   220,   222,   224,   226,   228,
+     230,   232,   234,   236,   237,   240,   243,   246,   248,   250,
      252,   254,   256,   258,   260,   262,   264,   266,   268,   270,
-     272,   274,   277,   280,   284,   290,   294,   299,   304,   308,
-     309,   312,   314,   316,   318,   320,   322,   324,   326,   328,
-     330,   332,   334,   336,   338,   340,   343,   345,   348,   350,
-     352,   354,   357,   359,   362,   364,   366,   368,   370,   372,
-     374,   376,   378,   382,   385,   387,   390,   393,   396,   399,
-     401,   403,   405,   407,   409,   411,   414,   417,   420,   422,
-     424,   426,   428,   430,   432,   434,   436,   438,   441,   444,
-     446,   449,   451,   453,   455,   457,   459,   461,   463,   465,
-     468,   471,   474,   478,   480,   483,   486,   489,   492,   496,
+     272,   275,   278,   282,   288,   292,   297,   302,   306,   307,
+     310,   312,   314,   316,   318,   320,   322,   324,   326,   328,
+     330,   332,   334,   336,   338,   341,   343,   346,   348,   350,
+     352,   355,   357,   360,   362,   364,   366,   368,   370,   372,
+     374,   376,   380,   383,   385,   388,   391,   394,   397,   399,
+     401,   403,   405,   407,   409,   412,   415,   418,   420,   422,
+     424,   426,   428,   430,   432,   434,   436,   439,   442,   444,
+     447,   449,   451,   453,   455,   457,   459,   461,   463,   466,
+     469,   472,   476,   478,   481,   484,   487,   490,   494,   497,
      499,   501,   503,   505,   507,   509,   511,   513,   515,   518,
      519,   524,   526,   527,   528,   531,   534,   537,   540,   542,
      544,   548,   552,   554,   556,   558,   560,   562,   564,   566,
@@ -856,36 +856,36 @@ static const yytype_int16 yyrhs[] =
       -1,   203,   204,    -1,   204,    -1,   205,    56,    -1,   206,
      259,    -1,    19,   258,    -1,    17,    -1,    43,    -1,   111,
       -1,   112,    -1,    91,    -1,    11,    -1,    88,    -1,    83,
-      -1,    86,    -1,    81,    -1,   101,    -1,   136,   208,    -1,
-     138,   142,    -1,    37,   209,   210,    -1,   208,   209,    -1,
-     209,    -1,    18,    -1,    22,    -1,    75,    -1,   115,    -1,
-     127,    -1,   143,    -1,   147,    -1,   123,    -1,    -1,   210,
-     211,    -1,    36,   142,    -1,   154,   214,    -1,   212,    -1,
-     213,    -1,    71,    -1,    98,    -1,    33,    -1,    26,    -1,
-     100,    -1,   117,    -1,    23,    -1,   159,    -1,    94,    -1,
-     162,    -1,     3,    -1,    27,   218,    -1,    95,   221,    -1,
-     130,   186,   216,    -1,   130,   187,    79,   187,   216,    -1,
-     130,    24,   216,    -1,   130,    60,    24,   216,    -1,   130,
-      62,    24,   216,    -1,   130,   135,   216,    -1,    -1,   216,
-     217,    -1,    42,    -1,    50,    -1,    67,    -1,    68,    -1,
-      70,    -1,    76,    -1,    99,    -1,   102,    -1,   103,    -1,
-     105,    -1,   106,    -1,   107,    -1,   109,    -1,   157,    -1,
-     218,   219,    -1,   219,    -1,   220,    56,    -1,     9,    -1,
-      89,    -1,    93,    -1,   221,   222,    -1,   222,    -1,   223,
-      56,    -1,    51,    -1,    52,    -1,    53,    -1,    54,    -1,
-      80,    -1,    82,    -1,    84,    -1,    87,    -1,    45,   186,
-     225,    -1,   225,   226,    -1,   226,    -1,   227,   259,    -1,
-     228,   258,    -1,   141,    56,    -1,   128,   142,    -1,   145,
-      -1,   146,    -1,    38,    -1,    39,    -1,    40,    -1,    41,
-      -1,    33,   230,    -1,    26,   230,    -1,   230,   231,    -1,
-     231,    -1,   232,    -1,   137,    -1,     6,    -1,    10,    -1,
-      16,    -1,    63,    -1,    93,    -1,   108,    -1,   148,   234,
-      -1,   234,   235,    -1,   235,    -1,   236,   259,    -1,     5,
-      -1,    28,    -1,    44,    -1,    47,    -1,   113,    -1,   139,
-      -1,   140,    -1,   248,    -1,   238,   259,    -1,   239,   142,
-      -1,   240,   142,    -1,    55,   142,   183,    -1,    34,    -1,
-      30,   241,    -1,    73,   246,    -1,   116,   256,    -1,   134,
-     242,    -1,   150,   187,   244,    -1,   153,   252,    -1,    14,
+      -1,    86,    -1,    81,    -1,   136,   208,    -1,   138,   142,
+      -1,    37,   209,   210,    -1,   208,   209,    -1,   209,    -1,
+      18,    -1,    22,    -1,    75,    -1,   115,    -1,   127,    -1,
+     143,    -1,   147,    -1,   123,    -1,    -1,   210,   211,    -1,
+      36,   142,    -1,   154,   214,    -1,   212,    -1,   213,    -1,
+      71,    -1,    98,    -1,    33,    -1,    26,    -1,   100,    -1,
+     117,    -1,    23,    -1,   159,    -1,    94,    -1,   162,    -1,
+       3,    -1,    27,   218,    -1,    95,   221,    -1,   130,   186,
+     216,    -1,   130,   187,    79,   187,   216,    -1,   130,    24,
+     216,    -1,   130,    60,    24,   216,    -1,   130,    62,    24,
+     216,    -1,   130,   135,   216,    -1,    -1,   216,   217,    -1,
+      42,    -1,    50,    -1,    67,    -1,    68,    -1,    70,    -1,
+      76,    -1,    99,    -1,   102,    -1,   103,    -1,   105,    -1,
+     106,    -1,   107,    -1,   109,    -1,   157,    -1,   218,   219,
+      -1,   219,    -1,   220,    56,    -1,     9,    -1,    89,    -1,
+      93,    -1,   221,   222,    -1,   222,    -1,   223,    56,    -1,
+      51,    -1,    52,    -1,    53,    -1,    54,    -1,    80,    -1,
+      82,    -1,    84,    -1,    87,    -1,    45,   186,   225,    -1,
+     225,   226,    -1,   226,    -1,   227,   259,    -1,   228,   258,
+      -1,   141,    56,    -1,   128,   142,    -1,   145,    -1,   146,
+      -1,    38,    -1,    39,    -1,    40,    -1,    41,    -1,    33,
+     230,    -1,    26,   230,    -1,   230,   231,    -1,   231,    -1,
+     232,    -1,   137,    -1,     6,    -1,    10,    -1,    16,    -1,
+      63,    -1,    93,    -1,   108,    -1,   148,   234,    -1,   234,
+     235,    -1,   235,    -1,   236,   259,    -1,     5,    -1,    28,
+      -1,    44,    -1,    47,    -1,   113,    -1,   139,    -1,   140,
+      -1,   248,    -1,   238,   259,    -1,   239,   142,    -1,   240,
+     142,    -1,    55,   142,   183,    -1,    34,    -1,    30,   241,
+      -1,    73,   246,    -1,   116,   256,    -1,   134,   242,    -1,
+     150,   187,   244,    -1,   153,   252,    -1,    14,    -1,   101,
       -1,   144,    -1,    69,    -1,   118,    -1,   125,    -1,    74,
       -1,   132,    -1,   142,    -1,   142,    29,    -1,    -1,   142,
      175,   142,   243,    -1,    24,    -1,    -1,    -1,   244,   245,
@@ -919,18 +919,18 @@ static const yytype_uint16 yyrline[] =
      512,   514,   516,   518,   520,   526,   527,   535,   537,   549,
      550,   551,   552,   553,   562,   567,   572,   580,   582,   584,
      589,   590,   591,   592,   593,   594,   598,   599,   600,   601,
-     602,   611,   613,   622,   632,   637,   645,   646,   647,   648,
-     649,   650,   651,   652,   657,   658,   666,   676,   685,   700,
-     705,   706,   710,   711,   715,   716,   717,   718,   719,   720,
-     721,   730,   734,   738,   746,   754,   762,   777,   792,   805,
-     806,   814,   815,   816,   817,   818,   819,   820,   821,   822,
-     823,   824,   825,   826,   827,   831,   836,   844,   849,   850,
-     851,   855,   860,   868,   873,   874,   875,   876,   877,   878,
-     879,   880,   888,   898,   903,   911,   913,   915,   917,   922,
-     923,   927,   928,   929,   930,   938,   940,   945,   950,   958,
-     960,   972,   973,   974,   975,   976,   977,   985,   990,   995,
-    1003,  1008,  1009,  1010,  1011,  1012,  1013,  1014,  1023,  1024,
-    1031,  1038,  1054,  1073,  1078,  1080,  1082,  1084,  1086,  1093,
+     610,   612,   621,   631,   636,   644,   645,   646,   647,   648,
+     649,   650,   651,   656,   657,   665,   675,   684,   699,   704,
+     705,   709,   710,   714,   715,   716,   717,   718,   719,   720,
+     729,   733,   737,   745,   753,   761,   776,   791,   804,   805,
+     813,   814,   815,   816,   817,   818,   819,   820,   821,   822,
+     823,   824,   825,   826,   830,   835,   843,   848,   849,   850,
+     854,   859,   867,   872,   873,   874,   875,   876,   877,   878,
+     879,   887,   897,   902,   910,   912,   914,   916,   921,   922,
+     926,   927,   928,   929,   937,   939,   944,   949,   957,   959,
+     971,   972,   973,   974,   975,   976,   984,   989,   994,  1002,
+    1007,  1008,  1009,  1010,  1011,  1012,  1013,  1022,  1023,  1030,
+    1037,  1053,  1072,  1077,  1079,  1081,  1083,  1085,  1092,  1097,
     1098,  1099,  1103,  1104,  1105,  1109,  1110,  1114,  1121,  1131,
     1140,  1145,  1147,  1152,  1153,  1161,  1163,  1171,  1176,  1184,
     1209,  1216,  1226,  1227,  1231,  1232,  1233,  1234,  1238,  1239,
@@ -1049,18 +1049,18 @@ static const yytype_uint16 yyr1[] =
      198,   198,   198,   198,   198,   199,   199,   200,   200,   201,
      201,   201,   201,   201,   202,   203,   203,   204,   204,   204,
      205,   205,   205,   205,   205,   205,   206,   206,   206,   206,
-     206,   207,   207,   207,   208,   208,   209,   209,   209,   209,
-     209,   209,   209,   209,   210,   210,   211,   211,   211,   211,
-     212,   212,   213,   213,   214,   214,   214,   214,   214,   214,
-     214,   215,   215,   215,   215,   215,   215,   215,   215,   216,
-     216,   217,   217,   217,   217,   217,   217,   217,   217,   217,
-     217,   217,   217,   217,   217,   218,   218,   219,   220,   220,
-     220,   221,   221,   222,   223,   223,   223,   223,   223,   223,
-     223,   223,   224,   225,   225,   226,   226,   226,   226,   227,
-     227,   228,   228,   228,   228,   229,   229,   230,   230,   231,
-     231,   232,   232,   232,   232,   232,   232,   233,   234,   234,
-     235,   236,   236,   236,   236,   236,   236,   236,   237,   237,
-     237,   237,   237,   237,   237,   237,   237,   237,   237,   237,
+     207,   207,   207,   208,   208,   209,   209,   209,   209,   209,
+     209,   209,   209,   210,   210,   211,   211,   211,   211,   212,
+     212,   213,   213,   214,   214,   214,   214,   214,   214,   214,
+     215,   215,   215,   215,   215,   215,   215,   215,   216,   216,
+     217,   217,   217,   217,   217,   217,   217,   217,   217,   217,
+     217,   217,   217,   217,   218,   218,   219,   220,   220,   220,
+     221,   221,   222,   223,   223,   223,   223,   223,   223,   223,
+     223,   224,   225,   225,   226,   226,   226,   226,   227,   227,
+     228,   228,   228,   228,   229,   229,   230,   230,   231,   231,
+     232,   232,   232,   232,   232,   232,   233,   234,   234,   235,
+     236,   236,   236,   236,   236,   236,   236,   237,   237,   237,
+     237,   237,   237,   237,   237,   237,   237,   237,   237,   238,
      238,   238,   239,   239,   239,   240,   240,   241,   241,   241,
      242,   243,   243,   244,   244,   245,   245,   246,   246,   247,
      248,   248,   249,   249,   250,   250,   250,   250,   251,   251,
@@ -1082,18 +1082,18 @@ static const yytype_uint8 yyr2[] =
        2,     2,     2,     2,     2,     0,     2,     2,     2,     1,
        1,     1,     1,     1,     2,     2,     1,     2,     2,     2,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     2,     2,     3,     2,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     0,     2,     2,     2,     1,     1,
+       2,     2,     3,     2,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     0,     2,     2,     2,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     2,     2,     3,     5,     3,     4,     4,     3,     0,
-       2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     2,     1,     2,     1,     1,
-       1,     2,     1,     2,     1,     1,     1,     1,     1,     1,
-       1,     1,     3,     2,     1,     2,     2,     2,     2,     1,
-       1,     1,     1,     1,     1,     2,     2,     2,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     2,     2,     1,
-       2,     1,     1,     1,     1,     1,     1,     1,     1,     2,
-       2,     2,     3,     1,     2,     2,     2,     2,     3,     2,
+       2,     2,     3,     5,     3,     4,     4,     3,     0,     2,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     2,     1,     2,     1,     1,     1,
+       2,     1,     2,     1,     1,     1,     1,     1,     1,     1,
+       1,     3,     2,     1,     2,     2,     2,     2,     1,     1,
+       1,     1,     1,     1,     2,     2,     2,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     2,     2,     1,     2,
+       1,     1,     1,     1,     1,     1,     1,     1,     2,     2,
+       2,     3,     1,     2,     2,     2,     2,     3,     2,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     2,     0,
        4,     1,     0,     0,     2,     2,     2,     2,     1,     1,
        3,     3,     1,     1,     1,     1,     1,     1,     1,     1,
@@ -1108,40 +1108,40 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,     0,     0,    23,    53,   210,     0,    65,     0,     0,
-     219,     0,   203,     0,     0,     0,   232,     0,     0,   212,
-       0,   215,    24,     0,     0,     0,   233,     0,    22,     0,
-     213,    21,   214,     0,     0,     0,   216,    20,     0,     0,
-       0,   211,     0,     0,     0,     0,     0,    51,    52,   258,
-       0,     2,     0,     7,     0,     8,     0,     9,    10,    13,
-      11,    12,    14,    15,    16,    17,     0,     0,     0,   198,
-       0,    18,     0,     5,    56,    57,    58,   181,   182,   183,
-     184,   185,   186,   180,   176,   178,   179,   148,   149,   150,
-     121,   146,     0,   217,   204,   175,    96,    97,    98,    99,
-     103,   100,   101,   102,   104,    28,    29,    27,     0,    25,
-       0,     6,    59,    60,   229,   205,   228,   251,    54,   154,
-     155,   156,   157,   158,   159,   160,   161,   122,   152,     0,
-      55,    64,   249,   206,    61,   129,    28,    29,   129,   129,
-      25,    62,     0,   207,    91,    95,    92,   191,   192,   193,
-     194,   195,   196,   197,   187,   189,     0,    85,    80,     0,
-      81,    89,    87,    88,    86,    84,    90,    82,    83,    74,
+       0,     0,     0,    23,    53,   209,     0,    65,     0,     0,
+     219,     0,   202,     0,     0,     0,   232,     0,     0,   212,
+       0,   215,    24,     0,     0,     0,   233,   210,     0,    22,
+       0,   213,    21,   214,     0,     0,     0,   216,    20,     0,
+       0,     0,   211,     0,     0,     0,     0,     0,    51,    52,
+     258,     0,     2,     0,     7,     0,     8,     0,     9,    10,
+      13,    11,    12,    14,    15,    16,    17,     0,     0,     0,
+     197,     0,    18,     0,     5,    56,    57,    58,   180,   181,
+     182,   183,   184,   185,   179,   175,   177,   178,   147,   148,
+     149,   120,   145,     0,   217,   203,   174,    95,    96,    97,
+      98,   102,    99,   100,   101,   103,    28,    29,    27,     0,
+      25,     0,     6,    59,    60,   229,   204,   228,   251,    54,
+     153,   154,   155,   156,   157,   158,   159,   160,   121,   151,
+       0,    55,    64,   249,   205,    61,   128,    28,    29,   128,
+     128,    25,    62,     0,   206,    90,    94,    91,   190,   191,
+     192,   193,   194,   195,   196,   186,   188,     0,    85,    80,
+       0,    81,    89,    87,    88,    86,    84,    82,    83,    74,
       76,     0,     0,   223,   245,     0,    63,   244,   246,   242,
-     209,     1,     0,     4,    30,    50,   256,   255,   199,   200,
-     201,   240,   239,   238,     0,     0,    73,    69,    70,    71,
-      72,     0,    66,     0,   177,   145,   147,   218,    93,   171,
-     172,   173,   174,     0,     0,   169,   170,   162,   164,     0,
-       0,    26,   202,   227,   250,   151,   153,   248,   125,   129,
-     129,   128,   123,     0,     0,    94,   188,   190,   254,   252,
-     253,    79,    75,    77,    78,   208,     0,   243,   241,     3,
+     208,     1,     0,     4,    30,    50,   256,   255,   198,   199,
+     200,   240,   239,   238,     0,     0,    73,    69,    70,    71,
+      72,     0,    66,     0,   176,   144,   146,   218,    92,   170,
+     171,   172,   173,     0,     0,   168,   169,   161,   163,     0,
+       0,    26,   201,   227,   250,   150,   152,   248,   124,   128,
+     128,   127,   122,     0,     0,    93,   187,   189,   254,   252,
+     253,    79,    75,    77,    78,   207,     0,   243,   241,     3,
       19,   234,   235,   236,   231,   237,   230,   262,   263,     0,
-       0,     0,    68,    67,   113,   112,     0,   110,   111,     0,
-     105,   108,   109,   168,   167,   163,   165,   166,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   130,   126,   127,   129,   222,     0,     0,   224,
+       0,     0,    68,    67,   112,   111,     0,   109,   110,     0,
+     104,   107,   108,   167,   166,   162,   164,   165,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   129,   125,   126,   128,   222,     0,     0,   224,
        0,    35,    36,    37,    44,    46,    45,    48,    38,    39,
       40,    41,    47,    49,    42,    31,    32,    34,    33,     0,
-       0,     0,     0,   265,     0,   260,     0,   106,   120,   116,
-     118,   114,   115,   117,   119,   107,   124,   221,   220,   226,
+       0,     0,     0,   265,     0,   260,     0,   105,   119,   115,
+     117,   113,   114,   116,   118,   106,   123,   221,   220,   226,
      225,     0,    43,     0,   259,   257,   264,     0,   261,   247,
      268,     0,     0,     0,     0,     0,   270,     0,     0,   266,
      269,   267,     0,     0,   275,   276,   277,   278,   279,     0,
@@ -1151,76 +1151,76 @@ static const yytype_uint16 yydefact[] =
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    50,    51,    52,    53,    54,   117,   109,   110,   250,
-     315,   316,   317,   318,   319,    55,    56,    57,    58,    76,
-     202,   203,    59,   169,   170,   171,   172,    60,   144,   104,
-     208,   270,   271,   272,   335,    61,   228,   292,    90,    91,
-      92,   127,   128,   129,    62,   217,   218,   219,   220,    63,
-      84,    85,    86,    64,   154,   155,   156,    65,    66,    67,
-      68,    94,   143,   338,   245,   299,   115,   116,    69,    70,
-     256,   194,   180,   176,   177,   178,   133,   118,   241,   188,
-      71,    72,   259,   260,   261,   322,   323,   352,   324,   355,
+      -1,    51,    52,    53,    54,    55,   118,   110,   111,   250,
+     315,   316,   317,   318,   319,    56,    57,    58,    59,    77,
+     202,   203,    60,   169,   170,   171,   172,    61,   145,   105,
+     208,   270,   271,   272,   335,    62,   228,   292,    91,    92,
+      93,   128,   129,   130,    63,   217,   218,   219,   220,    64,
+      85,    86,    87,    65,   155,   156,   157,    66,    67,    68,
+      69,    95,   144,   338,   245,   299,   116,   117,    70,    71,
+     256,   194,   180,   176,   177,   178,   134,   119,   241,   188,
+      72,    73,   259,   260,   261,   322,   323,   352,   324,   355,
      356,   369,   370,   371
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -155
+#define YYPACT_NINF -156
 static const yytype_int16 yypact[] =
 {
-      11,  -147,   -22,  -155,  -155,  -155,   -10,  -155,   118,    -2,
-     -95,   118,  -155,   104,   -52,   -93,  -155,   -90,   -89,  -155,
-     -88,  -155,  -155,   -52,   215,   -52,  -155,   -84,  -155,   -83,
-    -155,  -155,  -155,     8,    38,    14,  -155,  -155,   -75,   104,
-     -68,  -155,    58,   452,   -67,   -53,    22,  -155,  -155,  -155,
-      79,   175,   -82,  -155,   -52,  -155,   -52,  -155,  -155,  -155,
-    -155,  -155,  -155,  -155,  -155,  -155,    -1,   -61,   -59,  -155,
-     -15,  -155,   -79,  -155,  -155,  -155,   157,  -155,  -155,  -155,
-    -155,  -155,  -155,  -155,   118,  -155,  -155,  -155,  -155,  -155,
-      -2,  -155,    54,    82,  -155,   118,  -155,  -155,  -155,  -155,
-    -155,  -155,  -155,  -155,  -155,  -155,  -155,  -155,   218,  -155,
-     -28,   324,  -155,  -155,  -155,   -88,  -155,  -155,   -52,  -155,
-    -155,  -155,  -155,  -155,  -155,  -155,  -155,   215,  -155,    59,
-     -52,  -155,  -155,   -25,  -155,  -155,    94,    95,  -155,  -155,
-      53,  -155,   -42,  -155,   104,  -155,  -155,  -155,  -155,  -155,
-    -155,  -155,  -155,  -155,    58,  -155,    -1,  -155,  -155,   -20,
-    -155,  -155,  -155,  -155,  -155,  -155,  -155,  -155,  -155,   452,
-    -155,    81,    -1,  -155,  -155,    83,   -53,  -155,  -155,  -155,
-      92,  -155,   -29,  -155,  -155,  -155,  -155,  -155,  -155,  -155,
-    -155,  -155,  -155,  -155,    10,  -137,  -155,  -155,  -155,  -155,
-    -155,    98,  -155,    -4,  -155,  -155,  -155,  -155,   120,  -155,
-    -155,  -155,  -155,     9,   101,  -155,  -155,   218,  -155,    -1,
-     -20,  -155,  -155,  -155,  -155,  -155,  -155,  -155,   417,  -155,
-    -155,   417,   417,   -67,    16,  -155,  -155,  -155,  -155,  -155,
-    -155,  -155,  -155,  -155,  -155,   -48,   136,  -155,  -155,  -155,
-     360,  -155,  -155,  -155,  -155,  -155,  -155,  -155,  -155,  -106,
-       5,     2,  -155,  -155,  -155,  -155,    32,  -155,  -155,     3,
-    -155,  -155,  -155,  -155,  -155,  -155,  -155,  -155,  -155,  -155,
-    -155,  -155,  -155,  -155,  -155,  -155,  -155,  -155,  -155,  -155,
-    -155,  -155,  -155,   417,   417,  -155,   126,   -67,   128,  -155,
-     129,  -155,  -155,  -155,  -155,  -155,  -155,  -155,  -155,  -155,
-    -155,  -155,  -155,  -155,  -155,  -155,  -155,  -155,  -155,   130,
-      15,    28,  -128,  -155,    29,  -155,    -1,  -155,  -155,  -155,
-    -155,  -155,  -155,  -155,  -155,  -155,   417,  -155,  -155,  -155,
-    -155,    17,  -155,   -52,  -155,  -155,  -155,    25,  -155,  -155,
-    -155,    35,    55,    -1,    47,  -136,  -155,    61,    -1,  -155,
-    -155,  -155,    45,    43,  -155,  -155,  -155,  -155,  -155,   -78,
-      64,    60,  -155,    65,  -155,    -1,  -155,  -155
+       2,  -151,   -23,  -156,  -156,  -156,    -8,  -156,    76,    11,
+     -92,    76,  -156,    89,   -36,   -84,  -156,   -79,   -72,  -156,
+     -61,  -156,  -156,   -36,   322,   -36,  -156,  -156,   -59,  -156,
+     -57,  -156,  -156,  -156,    32,   -16,    33,  -156,  -156,   -48,
+      89,   -47,  -156,    49,   428,   -41,   -52,    34,  -156,  -156,
+    -156,    84,   188,   -73,  -156,   -36,  -156,   -36,  -156,  -156,
+    -156,  -156,  -156,  -156,  -156,  -156,  -156,     5,   -32,   -29,
+    -156,     6,  -156,   -76,  -156,  -156,  -156,   148,  -156,  -156,
+    -156,  -156,  -156,  -156,  -156,    76,  -156,  -156,  -156,  -156,
+    -156,    11,  -156,    59,    94,  -156,    76,  -156,  -156,  -156,
+    -156,  -156,  -156,  -156,  -156,  -156,  -156,  -156,  -156,   141,
+    -156,   -13,   334,  -156,  -156,  -156,   -61,  -156,  -156,   -36,
+    -156,  -156,  -156,  -156,  -156,  -156,  -156,  -156,   322,  -156,
+      81,   -36,  -156,  -156,    -1,  -156,  -156,   118,   120,  -156,
+    -156,    68,  -156,   -27,  -156,    89,  -156,  -156,  -156,  -156,
+    -156,  -156,  -156,  -156,  -156,    49,  -156,     5,  -156,  -156,
+     -26,  -156,  -156,  -156,  -156,  -156,  -156,  -156,  -156,   428,
+    -156,    93,     5,  -156,  -156,    97,   -52,  -156,  -156,  -156,
+     100,  -156,    -5,  -156,  -156,  -156,  -156,  -156,  -156,  -156,
+    -156,  -156,  -156,  -156,     1,  -101,  -156,  -156,  -156,  -156,
+    -156,   104,  -156,    21,  -156,  -156,  -156,  -156,    16,  -156,
+    -156,  -156,  -156,    23,   112,  -156,  -156,   141,  -156,     5,
+     -26,  -156,  -156,  -156,  -156,  -156,  -156,  -156,   427,  -156,
+    -156,   427,   427,   -41,    30,  -156,  -156,  -156,  -156,  -156,
+    -156,  -156,  -156,  -156,  -156,   -51,   143,  -156,  -156,  -156,
+     266,  -156,  -156,  -156,  -156,  -156,  -156,  -156,  -156,   -93,
+      12,     3,  -156,  -156,  -156,  -156,    35,  -156,  -156,    28,
+    -156,  -156,  -156,  -156,  -156,  -156,  -156,  -156,  -156,  -156,
+    -156,  -156,  -156,  -156,  -156,  -156,  -156,  -156,  -156,  -156,
+    -156,  -156,  -156,   427,   427,  -156,   159,   -41,   129,  -156,
+     130,  -156,  -156,  -156,  -156,  -156,  -156,  -156,  -156,  -156,
+    -156,  -156,  -156,  -156,  -156,  -156,  -156,  -156,  -156,   135,
+      17,    29,  -126,  -156,    27,  -156,     5,  -156,  -156,  -156,
+    -156,  -156,  -156,  -156,  -156,  -156,   427,  -156,  -156,  -156,
+    -156,    18,  -156,   -36,  -156,  -156,  -156,    38,  -156,  -156,
+    -156,    36,    41,     5,    42,  -124,  -156,    43,     5,  -156,
+    -156,  -156,    45,    67,  -156,  -156,  -156,  -156,  -156,    56,
+      55,    69,  -156,    60,  -156,     5,  -156,  -156
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -155,  -155,  -155,   -38,  -155,  -155,   -14,   -33,  -155,  -155,
-    -155,  -155,  -155,  -155,  -155,  -155,  -155,  -155,  -155,  -155,
-    -155,  -155,  -155,  -155,    67,  -155,  -155,  -155,  -155,   -35,
-    -155,  -155,  -155,  -155,  -155,  -155,  -117,  -155,  -155,   143,
-    -155,  -155,   107,  -155,  -155,  -155,    20,  -155,  -155,  -155,
-     227,   -45,  -155,  -155,  -155,    85,  -155,  -155,  -155,  -155,
-    -155,  -155,  -155,  -155,  -155,  -155,  -155,   127,  -155,  -155,
-    -155,  -155,  -155,  -155,    69,  -155,  -155,   221,    23,  -154,
-    -155,  -155,  -155,    -9,  -155,  -155,   -62,  -155,  -155,  -155,
-    -101,  -155,  -108,  -155
+    -156,  -156,  -156,   -40,  -156,  -156,   -14,   -34,  -156,  -156,
+    -156,  -156,  -156,  -156,  -156,  -156,  -156,  -156,  -156,  -156,
+    -156,  -156,  -156,  -156,    62,  -156,  -156,  -156,  -156,   -15,
+    -156,  -156,  -156,  -156,  -156,  -156,  -121,  -156,  -156,   151,
+    -156,  -156,   106,  -156,  -156,  -156,    31,  -156,  -156,  -156,
+     235,   -58,  -156,  -156,  -156,    92,  -156,  -156,  -156,  -156,
+    -156,  -156,  -156,  -156,  -156,  -156,  -156,   133,  -156,  -156,
+    -156,  -156,  -156,  -156,    74,  -156,  -156,   226,    39,  -155,
+    -156,  -156,  -156,    -7,  -156,  -156,   -67,  -156,  -156,  -156,
+     -99,  -156,  -111,  -156
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -1230,125 +1230,127 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -7
 static const yytype_int16 yytable[] =
 {
-     108,   140,   237,   174,   145,   320,   328,    87,   105,   297,
-     106,   173,     1,   182,   251,   238,   191,    73,   244,     2,
-     139,   231,   232,     3,     4,     5,   329,   320,   186,   257,
-     258,     6,     7,   354,    74,   192,   239,     8,     9,   204,
-     184,    10,   185,   359,    11,    12,    75,    93,    13,   111,
-     204,   345,   112,   113,   114,   187,    14,   193,   131,   132,
-     257,   258,   135,   147,   134,   276,    15,   142,    16,   252,
-     141,   253,   298,   222,   146,   107,    17,    18,   179,   181,
-      19,   189,   183,   190,    20,    21,   148,    88,    22,    23,
-     107,    89,   364,   365,   366,   367,   368,   330,   136,   195,
-     137,   372,   149,   331,   224,   150,    24,    25,    26,   235,
-     206,   207,   293,   294,   221,   226,   224,   227,   229,   230,
-     332,    27,    96,   175,    77,    28,    97,    29,    78,    30,
-      31,   240,   233,   234,    79,   249,    32,   243,   263,   246,
-      33,    34,    35,    36,    37,    38,   264,    39,   248,    40,
-     337,   273,   254,   265,   262,    41,   266,   274,   296,    42,
-      43,    44,   333,    45,    46,   334,    47,    48,   300,   325,
-     255,   151,   348,   138,   327,    -6,    49,   326,   336,    98,
-     107,    80,   196,     2,   340,   341,   342,     3,     4,     5,
-     343,   267,   344,   351,   349,     6,     7,   152,   153,   357,
-     295,     8,     9,   197,   362,    10,   198,   347,    11,    12,
-     353,    81,    13,   364,   365,   366,   367,   368,   268,    99,
-      14,   377,   358,   363,   354,   361,    82,   100,   374,   376,
-      15,   101,    16,   205,   225,   375,   242,   275,    95,   236,
-      17,    18,   223,   277,    19,   247,   130,   102,    20,    21,
-     321,   103,    22,    23,   360,    83,   209,   210,   211,   212,
-     346,   373,     0,     0,   339,     0,   119,   120,   121,   122,
-      24,    25,    26,     0,   269,     0,     0,     0,     0,     0,
-       0,   199,     0,   200,     0,    27,     0,     0,   201,    28,
-       0,    29,     0,    30,    31,   123,     0,   124,     0,   125,
-      32,     0,   126,     0,    33,    34,    35,    36,    37,    38,
-       0,    39,     0,    40,     0,     0,     0,     0,     0,    41,
-       0,     0,     0,    42,    43,    44,     0,    45,    46,   350,
-      47,    48,     2,     0,     0,     0,     3,     4,     5,    -6,
-      49,     0,     0,     0,     6,     7,   213,     0,     0,     0,
-       8,     9,     0,     0,    10,     0,     0,    11,    12,   214,
-       0,    13,     0,   215,   216,     0,     0,   301,     0,    14,
-       0,     0,     0,     0,     0,   302,     0,     0,     0,    15,
+     109,   141,   237,     1,   174,   251,   297,   320,   136,   238,
+       2,   173,   182,    74,     3,     4,     5,   244,   231,   232,
+      88,   140,     6,     7,   106,   146,   107,   204,     8,     9,
+     239,   328,    10,    75,   186,    11,    12,   191,   204,    13,
+     320,   184,   264,   185,   137,   354,   138,    14,    76,   265,
+      94,   329,   266,   345,   148,   359,   192,    15,   112,    16,
+     252,   187,   253,   113,   276,   257,   258,    17,    18,   298,
+     114,    19,   222,   257,   258,    20,    21,   149,   193,    22,
+      23,   115,    78,   132,   181,   133,    79,   267,   135,   142,
+     179,   183,    80,   150,   143,   147,   151,    24,    25,    26,
+      89,   108,   195,    27,    90,   224,   108,    97,   293,   294,
+     189,    98,    28,   190,   268,   206,    29,   224,    30,   139,
+      31,    32,   330,   207,   175,   240,   108,    33,   331,   221,
+     235,    34,    35,    36,    37,    38,    39,   226,    40,    81,
+      41,   227,   229,   254,   230,   332,    42,   233,   234,   243,
+      43,    44,    45,   246,    46,    47,   248,    48,    49,   249,
+     262,   255,   152,   263,    99,   273,    -6,    50,   274,    82,
+     269,   348,   296,   196,   336,   300,   325,   327,   326,   209,
+     210,   211,   212,   337,    83,   340,   341,   333,   153,   154,
+     334,   342,   343,   344,   197,   349,     2,   198,   357,   295,
+       3,     4,     5,   362,   100,   347,   351,   361,     6,     7,
+     354,   353,   101,    84,     8,     9,   102,   358,    10,   374,
+     377,    11,    12,   363,   376,    13,   364,   365,   366,   367,
+     368,   242,   103,    14,   225,   372,   104,   364,   365,   366,
+     367,   368,   205,    15,   375,    16,    96,   236,   275,   223,
+     247,   131,   321,    17,    18,   346,   360,    19,   373,   277,
+       0,    20,    21,   339,     0,    22,    23,     0,     0,   213,
+       0,     0,   199,   301,   200,     0,     0,     0,     0,   201,
+       0,   302,   214,    24,    25,    26,   215,   216,     0,    27,
+       0,     0,     0,     0,     0,     0,     0,     0,    28,     0,
+       0,     0,    29,     0,    30,     0,    31,    32,     0,     0,
+       0,     0,     0,    33,   303,     0,     0,    34,    35,    36,
+      37,    38,    39,     0,    40,     0,    41,     0,     0,   350,
+     304,     0,    42,     0,     0,     0,    43,    44,    45,     0,
+      46,    47,     2,    48,    49,     0,     3,     4,     5,     0,
+       0,   305,    -6,    50,     6,     7,   306,     0,   307,     0,
+       8,     9,     0,     0,    10,     0,     0,    11,    12,     0,
+     308,    13,     0,   120,   121,   122,   123,     0,     0,    14,
+       0,     0,     0,     0,     0,     0,     0,   309,   310,    15,
        0,    16,     0,     0,     0,     0,     0,     0,     0,    17,
-      18,     0,     0,    19,     0,     0,     0,    20,    21,     0,
-       0,    22,    23,     0,     0,     0,     0,     0,   303,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    24,
-      25,    26,     0,     0,   304,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    27,     0,     0,     0,    28,     0,
-      29,     0,    30,    31,     0,   305,     0,     0,     0,    32,
-     306,     0,   307,    33,    34,    35,    36,    37,    38,   278,
-      39,     0,    40,   157,   308,     0,     0,   279,    41,   158,
-       0,   159,    42,    43,    44,     0,    45,    46,     0,    47,
-      48,   309,   310,     0,   280,   281,     0,   282,     0,    49,
-       0,     0,     0,   283,     0,   160,     0,     0,     0,     0,
+      18,     0,   124,    19,   125,     0,   126,    20,    21,   127,
+       0,    22,    23,     0,     0,     0,     0,   311,     0,   312,
+       0,     0,     0,   313,     0,     0,     0,   314,     0,    24,
+      25,    26,     0,     0,     0,    27,     0,     0,     0,   158,
+       0,     0,     0,     0,    28,   159,     0,   160,    29,     0,
+      30,     0,    31,    32,     0,     0,     0,     0,     0,    33,
+       0,     0,     0,    34,    35,    36,    37,    38,    39,   278,
+      40,   161,    41,     0,     0,     0,     0,   279,    42,     0,
+       0,     0,    43,    44,    45,     0,    46,    47,     0,    48,
+      49,     0,     0,     0,   280,   281,     0,   282,     0,    50,
+       0,     0,     0,   283,     0,     0,     0,     0,     0,   162,
+       0,   163,     0,     0,   164,     0,   165,     0,     0,   166,
+       0,     0,     0,     0,     0,     0,   284,     0,     0,   285,
+     286,     0,   287,   288,   289,     0,   290,     0,     0,   167,
+     168,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   311,     0,   312,     0,     0,   284,   313,     0,   285,
-     286,   314,   287,   288,   289,     0,   290,     0,     0,     0,
-       0,     0,     0,   161,     0,   162,     0,     0,   163,     0,
-     164,     0,     0,   165,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   166,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   167,   168,     0,     0,     0,     0,     0,
        0,     0,     0,     0,   291
 };
 
 static const yytype_int16 yycheck[] =
 {
-      14,    34,   156,    56,    39,   133,     3,     9,    60,    57,
-      62,    44,     1,    51,     4,    35,    31,   164,   172,     8,
-      34,   138,   139,    12,    13,    14,    23,   133,    29,   166,
-     167,    20,    21,   169,    56,    50,    56,    26,    27,    84,
-      54,    30,    56,   179,    33,    34,    56,   142,    37,   142,
-      95,   179,   142,   142,   142,    56,    45,    72,   142,   142,
-     166,   167,    24,     5,    56,   219,    55,   142,    57,    59,
-      56,    61,   120,   111,   142,   142,    65,    66,    56,     0,
-      69,   142,   164,   142,    73,    74,    28,    89,    77,    78,
-     142,    93,   170,   171,   172,   173,   174,    94,    60,   178,
-      62,   179,    44,   100,   118,    47,    95,    96,    97,   144,
-      56,    29,   229,   230,   142,    56,   130,   142,    24,    24,
-     117,   110,    18,   176,     6,   114,    22,   116,    10,   118,
-     119,   151,    79,   175,    16,   164,   125,    56,   142,    56,
-     129,   130,   131,   132,   133,   134,    26,   136,    56,   138,
-      24,   142,   142,    33,    56,   144,    36,    56,   142,   148,
-     149,   150,   159,   152,   153,   162,   155,   156,    32,   164,
-     160,   113,   326,   135,   142,   164,   165,   175,   295,    75,
-     142,    63,    25,     8,    56,    56,    56,    12,    13,    14,
-     175,    71,   164,   168,   177,    20,    21,   139,   140,   353,
-     233,    26,    27,    46,   358,    30,    49,   178,    33,    34,
-     175,    93,    37,   170,   171,   172,   173,   174,    98,   115,
-      45,   375,   175,   178,   169,   164,   108,   123,   164,   164,
-      55,   127,    57,    90,   127,   175,   169,   217,    11,   154,
-      65,    66,   115,   220,    69,   176,    25,   143,    73,    74,
-     259,   147,    77,    78,   355,   137,    38,    39,    40,    41,
-     322,   369,    -1,    -1,   297,    -1,    51,    52,    53,    54,
-      95,    96,    97,    -1,   154,    -1,    -1,    -1,    -1,    -1,
-      -1,   124,    -1,   126,    -1,   110,    -1,    -1,   131,   114,
-      -1,   116,    -1,   118,   119,    80,    -1,    82,    -1,    84,
-     125,    -1,    87,    -1,   129,   130,   131,   132,   133,   134,
-      -1,   136,    -1,   138,    -1,    -1,    -1,    -1,    -1,   144,
-      -1,    -1,    -1,   148,   149,   150,    -1,   152,   153,   343,
-     155,   156,     8,    -1,    -1,    -1,    12,    13,    14,   164,
-     165,    -1,    -1,    -1,    20,    21,   128,    -1,    -1,    -1,
-      26,    27,    -1,    -1,    30,    -1,    -1,    33,    34,   141,
-      -1,    37,    -1,   145,   146,    -1,    -1,     7,    -1,    45,
-      -1,    -1,    -1,    -1,    -1,    15,    -1,    -1,    -1,    55,
+      14,    35,   157,     1,    56,     4,    57,   133,    24,    35,
+       8,    45,    52,   164,    12,    13,    14,   172,   139,   140,
+       9,    35,    20,    21,    60,    40,    62,    85,    26,    27,
+      56,     3,    30,    56,    29,    33,    34,    31,    96,    37,
+     133,    55,    26,    57,    60,   169,    62,    45,    56,    33,
+     142,    23,    36,   179,     5,   179,    50,    55,   142,    57,
+      59,    56,    61,   142,   219,   166,   167,    65,    66,   120,
+     142,    69,   112,   166,   167,    73,    74,    28,    72,    77,
+      78,   142,     6,   142,     0,   142,    10,    71,    56,    56,
+      56,   164,    16,    44,   142,   142,    47,    95,    96,    97,
+      89,   142,   178,   101,    93,   119,   142,    18,   229,   230,
+     142,    22,   110,   142,    98,    56,   114,   131,   116,   135,
+     118,   119,    94,    29,   176,   151,   142,   125,   100,   142,
+     145,   129,   130,   131,   132,   133,   134,    56,   136,    63,
+     138,   142,    24,   142,    24,   117,   144,    79,   175,    56,
+     148,   149,   150,    56,   152,   153,    56,   155,   156,   164,
+      56,   160,   113,   142,    75,   142,   164,   165,    56,    93,
+     154,   326,   142,    25,   295,    32,   164,   142,   175,    38,
+      39,    40,    41,    24,   108,    56,    56,   159,   139,   140,
+     162,    56,   175,   164,    46,   177,     8,    49,   353,   233,
+      12,    13,    14,   358,   115,   178,   168,   164,    20,    21,
+     169,   175,   123,   137,    26,    27,   127,   175,    30,   164,
+     375,    33,    34,   178,   164,    37,   170,   171,   172,   173,
+     174,   169,   143,    45,   128,   179,   147,   170,   171,   172,
+     173,   174,    91,    55,   175,    57,    11,   155,   217,   116,
+     176,    25,   259,    65,    66,   322,   355,    69,   369,   220,
+      -1,    73,    74,   297,    -1,    77,    78,    -1,    -1,   128,
+      -1,    -1,   124,     7,   126,    -1,    -1,    -1,    -1,   131,
+      -1,    15,   141,    95,    96,    97,   145,   146,    -1,   101,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,
+      -1,    -1,   114,    -1,   116,    -1,   118,   119,    -1,    -1,
+      -1,    -1,    -1,   125,    48,    -1,    -1,   129,   130,   131,
+     132,   133,   134,    -1,   136,    -1,   138,    -1,    -1,   343,
+      64,    -1,   144,    -1,    -1,    -1,   148,   149,   150,    -1,
+     152,   153,     8,   155,   156,    -1,    12,    13,    14,    -1,
+      -1,    85,   164,   165,    20,    21,    90,    -1,    92,    -1,
+      26,    27,    -1,    -1,    30,    -1,    -1,    33,    34,    -1,
+     104,    37,    -1,    51,    52,    53,    54,    -1,    -1,    45,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   121,   122,    55,
       -1,    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    65,
-      66,    -1,    -1,    69,    -1,    -1,    -1,    73,    74,    -1,
-      -1,    77,    78,    -1,    -1,    -1,    -1,    -1,    48,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,
-      96,    97,    -1,    -1,    64,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,   114,    -1,
-     116,    -1,   118,   119,    -1,    85,    -1,    -1,    -1,   125,
-      90,    -1,    92,   129,   130,   131,   132,   133,   134,    42,
-     136,    -1,   138,    11,   104,    -1,    -1,    50,   144,    17,
-      -1,    19,   148,   149,   150,    -1,   152,   153,    -1,   155,
-     156,   121,   122,    -1,    67,    68,    -1,    70,    -1,   165,
-      -1,    -1,    -1,    76,    -1,    43,    -1,    -1,    -1,    -1,
+      66,    -1,    80,    69,    82,    -1,    84,    73,    74,    87,
+      -1,    77,    78,    -1,    -1,    -1,    -1,   151,    -1,   153,
+      -1,    -1,    -1,   157,    -1,    -1,    -1,   161,    -1,    95,
+      96,    97,    -1,    -1,    -1,   101,    -1,    -1,    -1,    11,
+      -1,    -1,    -1,    -1,   110,    17,    -1,    19,   114,    -1,
+     116,    -1,   118,   119,    -1,    -1,    -1,    -1,    -1,   125,
+      -1,    -1,    -1,   129,   130,   131,   132,   133,   134,    42,
+     136,    43,   138,    -1,    -1,    -1,    -1,    50,   144,    -1,
+      -1,    -1,   148,   149,   150,    -1,   152,   153,    -1,   155,
+     156,    -1,    -1,    -1,    67,    68,    -1,    70,    -1,   165,
+      -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,    81,
+      -1,    83,    -1,    -1,    86,    -1,    88,    -1,    -1,    91,
+      -1,    -1,    -1,    -1,    -1,    -1,    99,    -1,    -1,   102,
+     103,    -1,   105,   106,   107,    -1,   109,    -1,    -1,   111,
+     112,    -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,   151,    -1,   153,    -1,    -1,    99,   157,    -1,   102,
-     103,   161,   105,   106,   107,    -1,   109,    -1,    -1,    -1,
-      -1,    -1,    -1,    81,    -1,    83,    -1,    -1,    86,    -1,
-      88,    -1,    -1,    91,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   101,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   111,   112,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   157
 };
 
@@ -1358,21 +1360,21 @@ static const yytype_uint16 yystos[] =
 {
        0,     1,     8,    12,    13,    14,    20,    21,    26,    27,
       30,    33,    34,    37,    45,    55,    57,    65,    66,    69,
-      73,    74,    77,    78,    95,    96,    97,   110,   114,   116,
-     118,   119,   125,   129,   130,   131,   132,   133,   134,   136,
-     138,   144,   148,   149,   150,   152,   153,   155,   156,   165,
-     181,   182,   183,   184,   185,   195,   196,   197,   198,   202,
-     207,   215,   224,   229,   233,   237,   238,   239,   240,   248,
-     249,   260,   261,   164,    56,    56,   199,     6,    10,    16,
-      63,    93,   108,   137,   230,   231,   232,     9,    89,    93,
-     218,   219,   220,   142,   241,   230,    18,    22,    75,   115,
-     123,   127,   143,   147,   209,    60,    62,   142,   186,   187,
-     188,   142,   142,   142,   142,   246,   247,   186,   257,    51,
-      52,    53,    54,    80,    82,    84,    87,   221,   222,   223,
-     257,   142,   142,   256,    56,    24,    60,    62,   135,   186,
-     187,    56,   142,   242,   208,   209,   142,     5,    28,    44,
-      47,   113,   139,   140,   234,   235,   236,    11,    17,    19,
-      43,    81,    83,    86,    88,    91,   101,   111,   112,   203,
+      73,    74,    77,    78,    95,    96,    97,   101,   110,   114,
+     116,   118,   119,   125,   129,   130,   131,   132,   133,   134,
+     136,   138,   144,   148,   149,   150,   152,   153,   155,   156,
+     165,   181,   182,   183,   184,   185,   195,   196,   197,   198,
+     202,   207,   215,   224,   229,   233,   237,   238,   239,   240,
+     248,   249,   260,   261,   164,    56,    56,   199,     6,    10,
+      16,    63,    93,   108,   137,   230,   231,   232,     9,    89,
+      93,   218,   219,   220,   142,   241,   230,    18,    22,    75,
+     115,   123,   127,   143,   147,   209,    60,    62,   142,   186,
+     187,   188,   142,   142,   142,   142,   246,   247,   186,   257,
+      51,    52,    53,    54,    80,    82,    84,    87,   221,   222,
+     223,   257,   142,   142,   256,    56,    24,    60,    62,   135,
+     186,   187,    56,   142,   242,   208,   209,   142,     5,    28,
+      44,    47,   113,   139,   140,   234,   235,   236,    11,    17,
+      19,    43,    81,    83,    86,    88,    91,   111,   112,   203,
      204,   205,   206,   187,    56,   176,   253,   254,   255,    56,
      252,     0,   183,   164,   186,   186,    29,    56,   259,   142,
      142,    31,    50,    72,   251,   178,    25,    46,    49,   124,
@@ -2492,17 +2494,17 @@ yyreduce:
     { (yyval.Attr_val) = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer)); }
     break;
 
-  case 91:
+  case 90:
 
 /* Line 1464 of yacc.c  */
-#line 612 "ntp_parser.y"
+#line 611 "ntp_parser.y"
     { CONCAT_G_FIFOS(cfgt.stats_list, (yyvsp[(2) - (2)].Int_fifo)); }
     break;
 
-  case 92:
+  case 91:
 
 /* Line 1464 of yacc.c  */
-#line 614 "ntp_parser.y"
+#line 613 "ntp_parser.y"
     {
                        if (input_from_file) {
                                cfgt.stats_dir = (yyvsp[(2) - (2)].String);
@@ -2513,10 +2515,10 @@ yyreduce:
                }
     break;
 
-  case 93:
+  case 92:
 
 /* Line 1464 of yacc.c  */
-#line 623 "ntp_parser.y"
+#line 622 "ntp_parser.y"
     {
                        filegen_node *fgn;
                        
@@ -2525,47 +2527,47 @@ yyreduce:
                }
     break;
 
-  case 94:
+  case 93:
 
 /* Line 1464 of yacc.c  */
-#line 633 "ntp_parser.y"
+#line 632 "ntp_parser.y"
     {
                        (yyval.Int_fifo) = (yyvsp[(1) - (2)].Int_fifo);
                        APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[(2) - (2)].Integer)));
                }
     break;
 
-  case 95:
+  case 94:
 
 /* Line 1464 of yacc.c  */
-#line 638 "ntp_parser.y"
+#line 637 "ntp_parser.y"
     {
                        (yyval.Int_fifo) = NULL;
                        APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[(1) - (1)].Integer)));
                }
     break;
 
-  case 104:
+  case 103:
 
 /* Line 1464 of yacc.c  */
-#line 657 "ntp_parser.y"
+#line 656 "ntp_parser.y"
     { (yyval.Attr_val_fifo) = NULL; }
     break;
 
-  case 105:
+  case 104:
 
 /* Line 1464 of yacc.c  */
-#line 659 "ntp_parser.y"
+#line 658 "ntp_parser.y"
     {
                        (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
                }
     break;
 
-  case 106:
+  case 105:
 
 /* Line 1464 of yacc.c  */
-#line 667 "ntp_parser.y"
+#line 666 "ntp_parser.y"
     {
                        if (input_from_file) {
                                (yyval.Attr_val) = create_attr_sval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].String));
@@ -2577,10 +2579,10 @@ yyreduce:
                }
     break;
 
-  case 107:
+  case 106:
 
 /* Line 1464 of yacc.c  */
-#line 677 "ntp_parser.y"
+#line 676 "ntp_parser.y"
     {
                        if (input_from_file) {
                                (yyval.Attr_val) = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer));
@@ -2591,10 +2593,10 @@ yyreduce:
                }
     break;
 
-  case 108:
+  case 107:
 
 /* Line 1464 of yacc.c  */
-#line 686 "ntp_parser.y"
+#line 685 "ntp_parser.y"
     {
                        const char *err;
                        
@@ -2611,35 +2613,35 @@ yyreduce:
                }
     break;
 
-  case 109:
+  case 108:
 
 /* Line 1464 of yacc.c  */
-#line 701 "ntp_parser.y"
+#line 700 "ntp_parser.y"
     { (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[(1) - (1)].Integer)); }
     break;
 
-  case 121:
+  case 120:
 
 /* Line 1464 of yacc.c  */
-#line 731 "ntp_parser.y"
+#line 730 "ntp_parser.y"
     {
                        CONCAT_G_FIFOS(cfgt.discard_opts, (yyvsp[(2) - (2)].Attr_val_fifo));
                }
     break;
 
-  case 122:
+  case 121:
 
 /* Line 1464 of yacc.c  */
-#line 735 "ntp_parser.y"
+#line 734 "ntp_parser.y"
     {
                        CONCAT_G_FIFOS(cfgt.mru_opts, (yyvsp[(2) - (2)].Attr_val_fifo));
                }
     break;
 
-  case 123:
+  case 122:
 
 /* Line 1464 of yacc.c  */
-#line 739 "ntp_parser.y"
+#line 738 "ntp_parser.y"
     {
                        restrict_node *rn;
 
@@ -2649,10 +2651,10 @@ yyreduce:
                }
     break;
 
-  case 124:
+  case 123:
 
 /* Line 1464 of yacc.c  */
-#line 747 "ntp_parser.y"
+#line 746 "ntp_parser.y"
     {
                        restrict_node *rn;
 
@@ -2662,10 +2664,10 @@ yyreduce:
                }
     break;
 
-  case 125:
+  case 124:
 
 /* Line 1464 of yacc.c  */
-#line 755 "ntp_parser.y"
+#line 754 "ntp_parser.y"
     {
                        restrict_node *rn;
 
@@ -2675,10 +2677,10 @@ yyreduce:
                }
     break;
 
-  case 126:
+  case 125:
 
 /* Line 1464 of yacc.c  */
-#line 763 "ntp_parser.y"
+#line 762 "ntp_parser.y"
     {
                        restrict_node *rn;
 
@@ -2695,10 +2697,10 @@ yyreduce:
                }
     break;
 
-  case 127:
+  case 126:
 
 /* Line 1464 of yacc.c  */
-#line 778 "ntp_parser.y"
+#line 777 "ntp_parser.y"
     {
                        restrict_node *rn;
                        
@@ -2715,10 +2717,10 @@ yyreduce:
                }
     break;
 
-  case 128:
+  case 127:
 
 /* Line 1464 of yacc.c  */
-#line 793 "ntp_parser.y"
+#line 792 "ntp_parser.y"
     {
                        restrict_node * rn;
 
@@ -2729,81 +2731,81 @@ yyreduce:
                }
     break;
 
-  case 129:
+  case 128:
 
 /* Line 1464 of yacc.c  */
-#line 805 "ntp_parser.y"
+#line 804 "ntp_parser.y"
     { (yyval.Int_fifo) = NULL; }
     break;
 
-  case 130:
+  case 129:
 
 /* Line 1464 of yacc.c  */
-#line 807 "ntp_parser.y"
+#line 806 "ntp_parser.y"
     {
                        (yyval.Int_fifo) = (yyvsp[(1) - (2)].Int_fifo);
                        APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[(2) - (2)].Integer)));
                }
     break;
 
-  case 145:
+  case 144:
 
 /* Line 1464 of yacc.c  */
-#line 832 "ntp_parser.y"
+#line 831 "ntp_parser.y"
     {
                        (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
                }
     break;
 
-  case 146:
+  case 145:
 
 /* Line 1464 of yacc.c  */
-#line 837 "ntp_parser.y"
+#line 836 "ntp_parser.y"
     {
                        (yyval.Attr_val_fifo) = NULL;
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val));
                }
     break;
 
-  case 147:
+  case 146:
 
 /* Line 1464 of yacc.c  */
-#line 845 "ntp_parser.y"
+#line 844 "ntp_parser.y"
     { (yyval.Attr_val) = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer)); }
     break;
 
-  case 151:
+  case 150:
 
 /* Line 1464 of yacc.c  */
-#line 856 "ntp_parser.y"
+#line 855 "ntp_parser.y"
     {
                        (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
                }
     break;
 
-  case 152:
+  case 151:
 
 /* Line 1464 of yacc.c  */
-#line 861 "ntp_parser.y"
+#line 860 "ntp_parser.y"
     {
                        (yyval.Attr_val_fifo) = NULL;
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val));
                }
     break;
 
-  case 153:
+  case 152:
 
 /* Line 1464 of yacc.c  */
-#line 869 "ntp_parser.y"
+#line 868 "ntp_parser.y"
     { (yyval.Attr_val) = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer)); }
     break;
 
-  case 162:
+  case 161:
 
 /* Line 1464 of yacc.c  */
-#line 889 "ntp_parser.y"
+#line 888 "ntp_parser.y"
     {
                        addr_opts_node *aon;
                        
@@ -2812,99 +2814,99 @@ yyreduce:
                }
     break;
 
-  case 163:
+  case 162:
 
 /* Line 1464 of yacc.c  */
-#line 899 "ntp_parser.y"
+#line 898 "ntp_parser.y"
     {
                        (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
                }
     break;
 
-  case 164:
+  case 163:
 
 /* Line 1464 of yacc.c  */
-#line 904 "ntp_parser.y"
+#line 903 "ntp_parser.y"
     {
                        (yyval.Attr_val_fifo) = NULL;
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val));
                }
     break;
 
-  case 165:
+  case 164:
 
 /* Line 1464 of yacc.c  */
-#line 912 "ntp_parser.y"
+#line 911 "ntp_parser.y"
     { (yyval.Attr_val) = create_attr_dval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Double)); }
     break;
 
-  case 166:
+  case 165:
 
 /* Line 1464 of yacc.c  */
-#line 914 "ntp_parser.y"
+#line 913 "ntp_parser.y"
     { (yyval.Attr_val) = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer)); }
     break;
 
-  case 167:
+  case 166:
 
 /* Line 1464 of yacc.c  */
-#line 916 "ntp_parser.y"
+#line 915 "ntp_parser.y"
     { (yyval.Attr_val) = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer)); }
     break;
 
-  case 168:
+  case 167:
 
 /* Line 1464 of yacc.c  */
-#line 918 "ntp_parser.y"
+#line 917 "ntp_parser.y"
     { (yyval.Attr_val) = create_attr_sval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].String)); }
     break;
 
-  case 175:
+  case 174:
 
 /* Line 1464 of yacc.c  */
-#line 939 "ntp_parser.y"
+#line 938 "ntp_parser.y"
     { CONCAT_G_FIFOS(cfgt.enable_opts, (yyvsp[(2) - (2)].Attr_val_fifo)); }
     break;
 
-  case 176:
+  case 175:
 
 /* Line 1464 of yacc.c  */
-#line 941 "ntp_parser.y"
+#line 940 "ntp_parser.y"
     { CONCAT_G_FIFOS(cfgt.disable_opts, (yyvsp[(2) - (2)].Attr_val_fifo)); }
     break;
 
-  case 177:
+  case 176:
 
 /* Line 1464 of yacc.c  */
-#line 946 "ntp_parser.y"
+#line 945 "ntp_parser.y"
     {
                        (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
                }
     break;
 
-  case 178:
+  case 177:
 
 /* Line 1464 of yacc.c  */
-#line 951 "ntp_parser.y"
+#line 950 "ntp_parser.y"
     {
                        (yyval.Attr_val_fifo) = NULL;
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val));
                }
     break;
 
-  case 179:
+  case 178:
 
 /* Line 1464 of yacc.c  */
-#line 959 "ntp_parser.y"
+#line 958 "ntp_parser.y"
     { (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[(1) - (1)].Integer)); }
     break;
 
-  case 180:
+  case 179:
 
 /* Line 1464 of yacc.c  */
-#line 961 "ntp_parser.y"
+#line 960 "ntp_parser.y"
     { 
                        if (input_from_file) {
                                (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[(1) - (1)].Integer));
@@ -2915,44 +2917,44 @@ yyreduce:
                }
     break;
 
-  case 187:
+  case 186:
 
 /* Line 1464 of yacc.c  */
-#line 986 "ntp_parser.y"
+#line 985 "ntp_parser.y"
     { CONCAT_G_FIFOS(cfgt.tinker, (yyvsp[(2) - (2)].Attr_val_fifo)); }
     break;
 
-  case 188:
+  case 187:
 
 /* Line 1464 of yacc.c  */
-#line 991 "ntp_parser.y"
+#line 990 "ntp_parser.y"
     {
                        (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
                }
     break;
 
-  case 189:
+  case 188:
 
 /* Line 1464 of yacc.c  */
-#line 996 "ntp_parser.y"
+#line 995 "ntp_parser.y"
     {
                        (yyval.Attr_val_fifo) = NULL;
                        APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val));
                }
     break;
 
-  case 190:
+  case 189:
 
 /* Line 1464 of yacc.c  */
-#line 1004 "ntp_parser.y"
+#line 1003 "ntp_parser.y"
     { (yyval.Attr_val) = create_attr_dval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Double)); }
     break;
 
-  case 199:
+  case 198:
 
 /* Line 1464 of yacc.c  */
-#line 1025 "ntp_parser.y"
+#line 1024 "ntp_parser.y"
     {
                        attr_val *av;
                        
@@ -2961,10 +2963,10 @@ yyreduce:
                }
     break;
 
-  case 200:
+  case 199:
 
 /* Line 1464 of yacc.c  */
-#line 1032 "ntp_parser.y"
+#line 1031 "ntp_parser.y"
     {
                        attr_val *av;
                        
@@ -2973,10 +2975,10 @@ yyreduce:
                }
     break;
 
-  case 201:
+  case 200:
 
 /* Line 1464 of yacc.c  */
-#line 1039 "ntp_parser.y"
+#line 1038 "ntp_parser.y"
     {
                        char error_text[64];
                        attr_val *av;
@@ -2994,10 +2996,10 @@ yyreduce:
                }
     break;
 
-  case 202:
+  case 201:
 
 /* Line 1464 of yacc.c  */
-#line 1055 "ntp_parser.y"
+#line 1054 "ntp_parser.y"
     {
                        if (!input_from_file) {
                                yyerror("remote includefile ignored");
@@ -3018,48 +3020,48 @@ yyreduce:
                }
     break;
 
-  case 203:
+  case 202:
 
 /* Line 1464 of yacc.c  */
-#line 1074 "ntp_parser.y"
+#line 1073 "ntp_parser.y"
     {
                        while (curr_include_level != -1)
                                FCLOSE(fp[curr_include_level--]);
                }
     break;
 
-  case 204:
+  case 203:
 
 /* Line 1464 of yacc.c  */
-#line 1079 "ntp_parser.y"
+#line 1078 "ntp_parser.y"
     { /* see drift_parm below for actions */ }
     break;
 
-  case 205:
+  case 204:
 
 /* Line 1464 of yacc.c  */
-#line 1081 "ntp_parser.y"
+#line 1080 "ntp_parser.y"
     { CONCAT_G_FIFOS(cfgt.logconfig, (yyvsp[(2) - (2)].Attr_val_fifo)); }
     break;
 
-  case 206:
+  case 205:
 
 /* Line 1464 of yacc.c  */
-#line 1083 "ntp_parser.y"
+#line 1082 "ntp_parser.y"
     { CONCAT_G_FIFOS(cfgt.phone, (yyvsp[(2) - (2)].String_fifo)); }
     break;
 
-  case 207:
+  case 206:
 
 /* Line 1464 of yacc.c  */
-#line 1085 "ntp_parser.y"
+#line 1084 "ntp_parser.y"
     { APPEND_G_FIFO(cfgt.setvar, (yyvsp[(2) - (2)].Set_var)); }
     break;
 
-  case 208:
+  case 207:
 
 /* Line 1464 of yacc.c  */
-#line 1087 "ntp_parser.y"
+#line 1086 "ntp_parser.y"
     {
                        addr_opts_node *aon;
                        
@@ -3068,10 +3070,10 @@ yyreduce:
                }
     break;
 
-  case 209:
+  case 208:
 
 /* Line 1464 of yacc.c  */
-#line 1094 "ntp_parser.y"
+#line 1093 "ntp_parser.y"
     { CONCAT_G_FIFOS(cfgt.ttl, (yyvsp[(2) - (2)].Attr_val_fifo)); }
     break;
 
@@ -3508,7 +3510,7 @@ yyreduce:
 
 
 /* Line 1464 of yacc.c  */
-#line 3512 "ntp_parser.c"
+#line 3514 "ntp_parser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
index 497607d503404b0118a4cfa402d55ee39f379b9f..997ebf26d5b6be124e966dc5440591dc8468285f 100644 (file)
@@ -599,7 +599,6 @@ tos_option_dbl_keyword
        |       T_Maxdist
        |       T_Minclock
        |       T_Maxclock
-       |       T_Nonvolatile
        ;
 
 
@@ -1096,6 +1095,7 @@ miscellaneous_command
 
 misc_cmd_dbl_keyword
        :       T_Broadcastdelay
+       |       T_Nonvolatile
        |       T_Tick
        ;
 
index ec077401b66b4594c48ac7557157798cae9a5571..28b72d3d7081ff8ee31972c8a323b66eeafdbed0 100644 (file)
@@ -317,15 +317,13 @@ is_double(
        for (; lexeme[i] && isdigit(lexeme[i]); i++)
                num_digits++;
 
-       /* Check for the required decimal point */
-       if ('.' == lexeme[i])
+       /* Check for the optional decimal point */
+       if ('.' == lexeme[i]) {
                i++;
-       else
-               return 0;
-
-       /* Check for any digits after the decimal point */
-       for (; lexeme[i] && isdigit(lexeme[i]); i++)
-               num_digits++;
+               /* Check for any digits after the decimal point */
+               for (; lexeme[i] && isdigit(lexeme[i]); i++)
+                       num_digits++;
+       }
 
        /*
         * The number of digits in both the decimal part and the